mcp-wordpress 2.6.4 → 2.7.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 (332) hide show
  1. package/README.md +1 -1
  2. package/dist/cache/CacheInvalidation.d.ts +25 -6
  3. package/dist/cache/CacheInvalidation.d.ts.map +1 -1
  4. package/dist/cache/CacheInvalidation.js +168 -16
  5. package/dist/cache/CacheInvalidation.js.map +1 -1
  6. package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
  7. package/dist/cache/HttpCacheWrapper.js +3 -4
  8. package/dist/cache/HttpCacheWrapper.js.map +1 -1
  9. package/dist/cache/SEOCacheManager.d.ts +150 -0
  10. package/dist/cache/SEOCacheManager.d.ts.map +1 -0
  11. package/dist/cache/SEOCacheManager.js +275 -0
  12. package/dist/cache/SEOCacheManager.js.map +1 -0
  13. package/dist/client/SEOWordPressClient.d.ts +164 -0
  14. package/dist/client/SEOWordPressClient.d.ts.map +1 -0
  15. package/dist/client/SEOWordPressClient.js +674 -0
  16. package/dist/client/SEOWordPressClient.js.map +1 -0
  17. package/dist/client/api.d.ts.map +1 -1
  18. package/dist/client/api.js +50 -20
  19. package/dist/client/api.js.map +1 -1
  20. package/dist/client/auth.js +19 -19
  21. package/dist/client/auth.js.map +1 -1
  22. package/dist/client/index.d.ts +11 -0
  23. package/dist/client/index.d.ts.map +1 -0
  24. package/dist/client/index.js +14 -0
  25. package/dist/client/index.js.map +1 -0
  26. package/dist/client/managers/AuthManager.d.ts +39 -0
  27. package/dist/client/managers/AuthManager.d.ts.map +1 -0
  28. package/dist/client/managers/AuthManager.js +142 -0
  29. package/dist/client/managers/AuthManager.js.map +1 -0
  30. package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
  31. package/dist/client/managers/AuthenticationManager.js +10 -9
  32. package/dist/client/managers/AuthenticationManager.js.map +1 -1
  33. package/dist/client/managers/BaseManager.d.ts.map +1 -1
  34. package/dist/client/managers/BaseManager.js +12 -0
  35. package/dist/client/managers/BaseManager.js.map +1 -1
  36. package/dist/client/managers/ComposedAuthenticationManager.d.ts +94 -0
  37. package/dist/client/managers/ComposedAuthenticationManager.d.ts.map +1 -0
  38. package/dist/client/managers/ComposedAuthenticationManager.js +340 -0
  39. package/dist/client/managers/ComposedAuthenticationManager.js.map +1 -0
  40. package/dist/client/managers/ComposedManagerFactory.d.ts +104 -0
  41. package/dist/client/managers/ComposedManagerFactory.d.ts.map +1 -0
  42. package/dist/client/managers/ComposedManagerFactory.js +180 -0
  43. package/dist/client/managers/ComposedManagerFactory.js.map +1 -0
  44. package/dist/client/managers/ComposedRequestManager.d.ts +82 -0
  45. package/dist/client/managers/ComposedRequestManager.d.ts.map +1 -0
  46. package/dist/client/managers/ComposedRequestManager.js +260 -0
  47. package/dist/client/managers/ComposedRequestManager.js.map +1 -0
  48. package/dist/client/managers/JWTAuthImplementation.d.ts +86 -0
  49. package/dist/client/managers/JWTAuthImplementation.d.ts.map +1 -0
  50. package/dist/client/managers/JWTAuthImplementation.js +240 -0
  51. package/dist/client/managers/JWTAuthImplementation.js.map +1 -0
  52. package/dist/client/managers/ManagersIndex.d.ts +6 -0
  53. package/dist/client/managers/ManagersIndex.d.ts.map +1 -0
  54. package/dist/client/managers/ManagersIndex.js +6 -0
  55. package/dist/client/managers/ManagersIndex.js.map +1 -0
  56. package/dist/client/managers/RequestManager.d.ts.map +1 -1
  57. package/dist/client/managers/RequestManager.js +5 -3
  58. package/dist/client/managers/RequestManager.js.map +1 -1
  59. package/dist/client/managers/composed/MigrationAdapter.d.ts +80 -0
  60. package/dist/client/managers/composed/MigrationAdapter.d.ts.map +1 -0
  61. package/dist/client/managers/composed/MigrationAdapter.js +214 -0
  62. package/dist/client/managers/composed/MigrationAdapter.js.map +1 -0
  63. package/dist/client/managers/composed/index.d.ts +23 -0
  64. package/dist/client/managers/composed/index.d.ts.map +1 -0
  65. package/dist/client/managers/composed/index.js +26 -0
  66. package/dist/client/managers/composed/index.js.map +1 -0
  67. package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts +27 -0
  68. package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts.map +1 -0
  69. package/dist/client/managers/implementations/ConfigurationProviderImpl.js +41 -0
  70. package/dist/client/managers/implementations/ConfigurationProviderImpl.js.map +1 -0
  71. package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts +31 -0
  72. package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts.map +1 -0
  73. package/dist/client/managers/implementations/ErrorHandlerImpl.js +73 -0
  74. package/dist/client/managers/implementations/ErrorHandlerImpl.js.map +1 -0
  75. package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts +47 -0
  76. package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts.map +1 -0
  77. package/dist/client/managers/implementations/ParameterValidatorImpl.js +141 -0
  78. package/dist/client/managers/implementations/ParameterValidatorImpl.js.map +1 -0
  79. package/dist/client/managers/interfaces/ManagerInterfaces.d.ts +147 -0
  80. package/dist/client/managers/interfaces/ManagerInterfaces.d.ts.map +1 -0
  81. package/dist/client/managers/interfaces/ManagerInterfaces.js +6 -0
  82. package/dist/client/managers/interfaces/ManagerInterfaces.js.map +1 -0
  83. package/dist/config/Config.d.ts +30 -0
  84. package/dist/config/Config.d.ts.map +1 -1
  85. package/dist/config/Config.js +30 -0
  86. package/dist/config/Config.js.map +1 -1
  87. package/dist/config/ConfigurationSchema.d.ts +75 -198
  88. package/dist/config/ConfigurationSchema.d.ts.map +1 -1
  89. package/dist/config/ConfigurationSchema.js +17 -17
  90. package/dist/config/ConfigurationSchema.js.map +1 -1
  91. package/dist/config/ServerConfiguration.d.ts +2 -2
  92. package/dist/config/ServerConfiguration.d.ts.map +1 -1
  93. package/dist/config/ServerConfiguration.js +15 -13
  94. package/dist/config/ServerConfiguration.js.map +1 -1
  95. package/dist/config/index.d.ts +8 -0
  96. package/dist/config/index.d.ts.map +1 -0
  97. package/dist/config/index.js +11 -0
  98. package/dist/config/index.js.map +1 -0
  99. package/dist/docs/DocumentationGenerator.js +2 -2
  100. package/dist/docs/DocumentationGenerator.js.map +1 -1
  101. package/dist/dxt-entry.js +3 -3
  102. package/dist/dxt-entry.js.map +1 -1
  103. package/dist/index.d.ts +1 -0
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +38 -37
  106. package/dist/index.js.map +1 -1
  107. package/dist/performance/MetricsCollector.d.ts.map +1 -1
  108. package/dist/performance/MetricsCollector.js +5 -4
  109. package/dist/performance/MetricsCollector.js.map +1 -1
  110. package/dist/security/AISecurityScanner.js +7 -7
  111. package/dist/security/AISecurityScanner.js.map +1 -1
  112. package/dist/security/AutomatedRemediation.d.ts.map +1 -1
  113. package/dist/security/AutomatedRemediation.js +11 -11
  114. package/dist/security/AutomatedRemediation.js.map +1 -1
  115. package/dist/security/InputValidator.d.ts +50 -126
  116. package/dist/security/InputValidator.d.ts.map +1 -1
  117. package/dist/security/InputValidator.js +9 -9
  118. package/dist/security/InputValidator.js.map +1 -1
  119. package/dist/security/SecurityCIPipeline.d.ts +47 -5
  120. package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
  121. package/dist/security/SecurityCIPipeline.js +390 -49
  122. package/dist/security/SecurityCIPipeline.js.map +1 -1
  123. package/dist/security/SecurityConfigManager.js +10 -10
  124. package/dist/security/SecurityConfigManager.js.map +1 -1
  125. package/dist/security/SecurityMonitoring.js +4 -4
  126. package/dist/security/SecurityMonitoring.js.map +1 -1
  127. package/dist/security/SecurityReviewer.d.ts.map +1 -1
  128. package/dist/security/SecurityReviewer.js +13 -6
  129. package/dist/security/SecurityReviewer.js.map +1 -1
  130. package/dist/security/index.js +3 -3
  131. package/dist/security/index.js.map +1 -1
  132. package/dist/server/ConnectionTester.js +5 -5
  133. package/dist/server/ConnectionTester.js.map +1 -1
  134. package/dist/server/ToolRegistry.d.ts +2 -2
  135. package/dist/server/ToolRegistry.d.ts.map +1 -1
  136. package/dist/server/ToolRegistry.js +7 -6
  137. package/dist/server/ToolRegistry.js.map +1 -1
  138. package/dist/server/index.d.ts +7 -0
  139. package/dist/server/index.d.ts.map +1 -0
  140. package/dist/server/index.js +9 -0
  141. package/dist/server/index.js.map +1 -0
  142. package/dist/tools/BaseToolManager.d.ts.map +1 -1
  143. package/dist/tools/BaseToolManager.js +11 -11
  144. package/dist/tools/BaseToolManager.js.map +1 -1
  145. package/dist/tools/auth.d.ts.map +1 -1
  146. package/dist/tools/auth.js +7 -7
  147. package/dist/tools/auth.js.map +1 -1
  148. package/dist/tools/comments.d.ts.map +1 -1
  149. package/dist/tools/comments.js +14 -14
  150. package/dist/tools/comments.js.map +1 -1
  151. package/dist/tools/index.d.ts +1 -0
  152. package/dist/tools/index.d.ts.map +1 -1
  153. package/dist/tools/index.js +1 -0
  154. package/dist/tools/index.js.map +1 -1
  155. package/dist/tools/media.d.ts.map +1 -1
  156. package/dist/tools/media.js +14 -11
  157. package/dist/tools/media.js.map +1 -1
  158. package/dist/tools/pages.d.ts.map +1 -1
  159. package/dist/tools/pages.js +12 -12
  160. package/dist/tools/pages.js.map +1 -1
  161. package/dist/tools/performance.d.ts.map +1 -1
  162. package/dist/tools/performance.js +13 -11
  163. package/dist/tools/performance.js.map +1 -1
  164. package/dist/tools/posts/PostHandlers.d.ts.map +1 -1
  165. package/dist/tools/posts/PostHandlers.js +16 -16
  166. package/dist/tools/posts/PostHandlers.js.map +1 -1
  167. package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -1
  168. package/dist/tools/posts/index.d.ts.map +1 -1
  169. package/dist/tools/seo/BulkOperations.d.ts +113 -0
  170. package/dist/tools/seo/BulkOperations.d.ts.map +1 -0
  171. package/dist/tools/seo/BulkOperations.js +398 -0
  172. package/dist/tools/seo/BulkOperations.js.map +1 -0
  173. package/dist/tools/seo/SEOHandlers.d.ts +55 -0
  174. package/dist/tools/seo/SEOHandlers.d.ts.map +1 -0
  175. package/dist/tools/seo/SEOHandlers.js +255 -0
  176. package/dist/tools/seo/SEOHandlers.js.map +1 -0
  177. package/dist/tools/seo/SEOToolDefinitions.d.ts +59 -0
  178. package/dist/tools/seo/SEOToolDefinitions.d.ts.map +1 -0
  179. package/dist/tools/seo/SEOToolDefinitions.js +385 -0
  180. package/dist/tools/seo/SEOToolDefinitions.js.map +1 -0
  181. package/dist/tools/seo/SEOTools.d.ts +203 -0
  182. package/dist/tools/seo/SEOTools.d.ts.map +1 -0
  183. package/dist/tools/seo/SEOTools.js +708 -0
  184. package/dist/tools/seo/SEOTools.js.map +1 -0
  185. package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts +94 -0
  186. package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts.map +1 -0
  187. package/dist/tools/seo/analyzers/ContentAnalyzer.js +402 -0
  188. package/dist/tools/seo/analyzers/ContentAnalyzer.js.map +1 -0
  189. package/dist/tools/seo/auditors/SiteAuditor.d.ts +121 -0
  190. package/dist/tools/seo/auditors/SiteAuditor.d.ts.map +1 -0
  191. package/dist/tools/seo/auditors/SiteAuditor.js +600 -0
  192. package/dist/tools/seo/auditors/SiteAuditor.js.map +1 -0
  193. package/dist/tools/seo/generators/MetaGenerator.d.ts +128 -0
  194. package/dist/tools/seo/generators/MetaGenerator.d.ts.map +1 -0
  195. package/dist/tools/seo/generators/MetaGenerator.js +547 -0
  196. package/dist/tools/seo/generators/MetaGenerator.js.map +1 -0
  197. package/dist/tools/seo/generators/SchemaGenerator.d.ts +204 -0
  198. package/dist/tools/seo/generators/SchemaGenerator.d.ts.map +1 -0
  199. package/dist/tools/seo/generators/SchemaGenerator.js +670 -0
  200. package/dist/tools/seo/generators/SchemaGenerator.js.map +1 -0
  201. package/dist/tools/seo/index.d.ts +17 -0
  202. package/dist/tools/seo/index.d.ts.map +1 -0
  203. package/dist/tools/seo/index.js +18 -0
  204. package/dist/tools/seo/index.js.map +1 -0
  205. package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts +186 -0
  206. package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts.map +1 -0
  207. package/dist/tools/seo/optimizers/InternalLinkingSuggester.js +683 -0
  208. package/dist/tools/seo/optimizers/InternalLinkingSuggester.js.map +1 -0
  209. package/dist/tools/site.d.ts.map +1 -1
  210. package/dist/tools/site.js +12 -12
  211. package/dist/tools/site.js.map +1 -1
  212. package/dist/tools/taxonomies.d.ts.map +1 -1
  213. package/dist/tools/taxonomies.js +20 -20
  214. package/dist/tools/taxonomies.js.map +1 -1
  215. package/dist/tools/users.d.ts.map +1 -1
  216. package/dist/tools/users.js +12 -12
  217. package/dist/tools/users.js.map +1 -1
  218. package/dist/types/client.d.ts +8 -6
  219. package/dist/types/client.d.ts.map +1 -1
  220. package/dist/types/client.js.map +1 -1
  221. package/dist/types/seo.d.ts +473 -0
  222. package/dist/types/seo.d.ts.map +1 -0
  223. package/dist/types/seo.js +94 -0
  224. package/dist/types/seo.js.map +1 -0
  225. package/dist/utils/enhancedError.js +1 -1
  226. package/dist/utils/enhancedError.js.map +1 -1
  227. package/dist/utils/error.d.ts.map +1 -1
  228. package/dist/utils/error.js +0 -1
  229. package/dist/utils/error.js.map +1 -1
  230. package/dist/utils/index.d.ts +12 -0
  231. package/dist/utils/index.d.ts.map +1 -0
  232. package/dist/utils/index.js +18 -0
  233. package/dist/utils/index.js.map +1 -0
  234. package/dist/utils/logger.js +3 -3
  235. package/dist/utils/logger.js.map +1 -1
  236. package/dist/utils/toolWrapper.d.ts +2 -2
  237. package/dist/utils/toolWrapper.js +8 -8
  238. package/dist/utils/toolWrapper.js.map +1 -1
  239. package/dist/utils/validation/core.d.ts.map +1 -1
  240. package/dist/utils/validation/core.js.map +1 -1
  241. package/dist/utils/validation/index.d.ts.map +1 -1
  242. package/dist/utils/validation/index.js.map +1 -1
  243. package/dist/utils/validation/network.js +3 -3
  244. package/dist/utils/validation/network.js.map +1 -1
  245. package/dist/utils/validation/rateLimit.js.map +1 -1
  246. package/dist/utils/validation/security.js.map +1 -1
  247. package/dist/utils/validation/wordpress.js.map +1 -1
  248. package/dist/utils/version.d.ts +144 -0
  249. package/dist/utils/version.d.ts.map +1 -0
  250. package/dist/utils/version.js +318 -0
  251. package/dist/utils/version.js.map +1 -0
  252. package/package.json +21 -55
  253. package/src/cache/CacheInvalidation.ts +183 -20
  254. package/src/cache/HttpCacheWrapper.ts +8 -5
  255. package/src/cache/SEOCacheManager.ts +330 -0
  256. package/src/cache/__tests__/CacheInvalidation.test.ts +6 -11
  257. package/src/cache/__tests__/CachedWordPressClient.test.ts +37 -62
  258. package/src/client/SEOWordPressClient.ts +876 -0
  259. package/src/client/api.ts +50 -21
  260. package/src/client/auth.ts +19 -19
  261. package/src/client/index.ts +16 -0
  262. package/src/client/managers/AuthManager.ts +175 -0
  263. package/src/client/managers/AuthenticationManager.ts +16 -14
  264. package/src/client/managers/BaseManager.ts +24 -5
  265. package/src/client/managers/ComposedAuthenticationManager.ts +409 -0
  266. package/src/client/managers/ComposedManagerFactory.ts +231 -0
  267. package/src/client/managers/ComposedRequestManager.ts +336 -0
  268. package/src/client/managers/JWTAuthImplementation.ts +326 -0
  269. package/src/client/managers/ManagersIndex.ts +6 -0
  270. package/src/client/managers/RequestManager.ts +9 -7
  271. package/src/client/managers/composed/MigrationAdapter.ts +263 -0
  272. package/src/client/managers/composed/index.ts +47 -0
  273. package/src/client/managers/implementations/ConfigurationProviderImpl.ts +52 -0
  274. package/src/client/managers/implementations/ErrorHandlerImpl.ts +102 -0
  275. package/src/client/managers/implementations/ParameterValidatorImpl.ts +221 -0
  276. package/src/client/managers/interfaces/ManagerInterfaces.ts +171 -0
  277. package/src/config/Config.ts +63 -0
  278. package/src/config/ConfigurationSchema.ts +17 -17
  279. package/src/config/ServerConfiguration.ts +18 -16
  280. package/src/config/index.ts +13 -0
  281. package/src/docs/DocumentationGenerator.ts +2 -2
  282. package/src/dxt-entry.ts +3 -3
  283. package/src/index.ts +43 -43
  284. package/src/performance/MetricsCollector.ts +15 -11
  285. package/src/security/AISecurityScanner.ts +7 -7
  286. package/src/security/AutomatedRemediation.ts +13 -11
  287. package/src/security/InputValidator.ts +10 -9
  288. package/src/security/SecurityCIPipeline.ts +494 -56
  289. package/src/security/SecurityConfigManager.ts +10 -10
  290. package/src/security/SecurityMonitoring.ts +5 -5
  291. package/src/security/SecurityReviewer.ts +13 -6
  292. package/src/security/index.ts +3 -3
  293. package/src/server/ConnectionTester.ts +5 -5
  294. package/src/server/ToolRegistry.ts +9 -8
  295. package/src/server/index.ts +10 -0
  296. package/src/tools/BaseToolManager.ts +55 -83
  297. package/src/tools/auth.ts +21 -12
  298. package/src/tools/comments.ts +23 -19
  299. package/src/tools/index.ts +1 -0
  300. package/src/tools/media.ts +23 -20
  301. package/src/tools/pages.ts +20 -13
  302. package/src/tools/performance.ts +101 -32
  303. package/src/tools/posts/PostHandlers.ts +23 -23
  304. package/src/tools/posts/PostToolDefinitions.ts +1 -1
  305. package/src/tools/posts/index.ts +2 -2
  306. package/src/tools/seo/BulkOperations.ts +557 -0
  307. package/src/tools/seo/SEOHandlers.ts +296 -0
  308. package/src/tools/seo/SEOToolDefinitions.ts +402 -0
  309. package/src/tools/seo/SEOTools.ts +871 -0
  310. package/src/tools/seo/analyzers/ContentAnalyzer.ts +493 -0
  311. package/src/tools/seo/auditors/SiteAuditor.ts +787 -0
  312. package/src/tools/seo/generators/MetaGenerator.ts +694 -0
  313. package/src/tools/seo/generators/SchemaGenerator.ts +955 -0
  314. package/src/tools/seo/index.ts +47 -0
  315. package/src/tools/seo/optimizers/InternalLinkingSuggester.ts +934 -0
  316. package/src/tools/site.ts +27 -26
  317. package/src/tools/taxonomies.ts +29 -25
  318. package/src/tools/users.ts +20 -13
  319. package/src/types/client.ts +8 -6
  320. package/src/types/seo.ts +546 -0
  321. package/src/utils/enhancedError.ts +1 -1
  322. package/src/utils/error.ts +1 -2
  323. package/src/utils/index.ts +23 -0
  324. package/src/utils/logger.ts +3 -3
  325. package/src/utils/toolWrapper.ts +10 -10
  326. package/src/utils/validation/core.ts +2 -2
  327. package/src/utils/validation/index.ts +2 -2
  328. package/src/utils/validation/network.ts +5 -5
  329. package/src/utils/validation/rateLimit.ts +1 -1
  330. package/src/utils/validation/security.ts +1 -1
  331. package/src/utils/validation/wordpress.ts +1 -1
  332. package/src/utils/version.ts +402 -0
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Bulk SEO Operations
3
+ *
4
+ * This module provides batch processing capabilities for SEO operations,
5
+ * including metadata updates, content analysis, and schema generation.
6
+ * It supports chunked processing, progress tracking, retry logic, and dry-run mode.
7
+ *
8
+ * @since 2.7.0
9
+ */
10
+ import { WordPressClient } from "../../client/api.js";
11
+ import { SEOCacheManager } from "../../cache/SEOCacheManager.js";
12
+ import { SEOToolParams, BulkOperationResult, SEOAnalysisResult } from "../../types/seo.js";
13
+ /**
14
+ * Configuration for bulk operations
15
+ */
16
+ interface BulkOperationConfig {
17
+ /** Number of items per batch */
18
+ batchSize: number;
19
+ /** Maximum number of retry attempts */
20
+ maxRetries: number;
21
+ /** Initial delay for exponential backoff (ms) */
22
+ retryDelayMs: number;
23
+ /** Maximum delay for exponential backoff (ms) */
24
+ maxRetryDelayMs: number;
25
+ /** Timeout per operation (ms) */
26
+ operationTimeoutMs: number;
27
+ /** Enable progress callbacks */
28
+ enableProgress: boolean;
29
+ }
30
+ /**
31
+ * Progress information for bulk operations
32
+ */
33
+ interface BulkProgress {
34
+ /** Total items to process */
35
+ total: number;
36
+ /** Items processed so far */
37
+ processed: number;
38
+ /** Items successfully completed */
39
+ completed: number;
40
+ /** Items that failed */
41
+ failed: number;
42
+ /** Items that were skipped */
43
+ skipped: number;
44
+ /** Current batch being processed */
45
+ currentBatch: number;
46
+ /** Total number of batches */
47
+ totalBatches: number;
48
+ /** Estimated completion time */
49
+ eta?: Date;
50
+ /** Average processing time per item (ms) */
51
+ avgProcessingTime: number;
52
+ }
53
+ /**
54
+ * Type for progress callback function
55
+ */
56
+ type ProgressCallback = (progress: BulkProgress) => void;
57
+ /**
58
+ * Bulk SEO Operations Manager
59
+ */
60
+ export declare class BulkOperations {
61
+ private client;
62
+ private logger;
63
+ private config;
64
+ private metaGenerator;
65
+ private contentAnalyzer;
66
+ private cacheManager;
67
+ constructor(client: WordPressClient, cacheManager?: SEOCacheManager, config?: Partial<BulkOperationConfig>);
68
+ /**
69
+ * Bulk update metadata for multiple posts
70
+ */
71
+ bulkUpdateMetadata(params: SEOToolParams, progressCallback?: ProgressCallback): Promise<BulkOperationResult>;
72
+ /**
73
+ * Bulk analyze content for multiple posts
74
+ */
75
+ bulkAnalyzeContent(params: SEOToolParams, progressCallback?: ProgressCallback): Promise<{
76
+ results: SEOAnalysisResult[];
77
+ summary: BulkOperationResult;
78
+ }>;
79
+ /**
80
+ * Process metadata update for a single post
81
+ */
82
+ private processMetadataUpdate;
83
+ /**
84
+ * Process content analysis for a single post
85
+ */
86
+ private processContentAnalysis;
87
+ /**
88
+ * Retry operation with exponential backoff
89
+ */
90
+ private retryOperation;
91
+ /**
92
+ * Check if an error is retryable
93
+ */
94
+ private isRetryableError;
95
+ /**
96
+ * Create batches from an array of items
97
+ */
98
+ private createBatches;
99
+ /**
100
+ * Promise-based delay utility
101
+ */
102
+ private delay;
103
+ /**
104
+ * Get current configuration
105
+ */
106
+ getConfig(): BulkOperationConfig;
107
+ /**
108
+ * Update configuration
109
+ */
110
+ updateConfig(config: Partial<BulkOperationConfig>): void;
111
+ }
112
+ export {};
113
+ //# sourceMappingURL=BulkOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkOperations.d.ts","sourceRoot":"","sources":["../../../src/tools/seo/BulkOperations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGvF;;GAEG;AACH,UAAU,mBAAmB;IAC3B,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IAEnB,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IAErB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IAExB,iCAAiC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,gCAAgC;IAChC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAElB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAEhB,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IAErB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IAErB,gCAAgC;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IAEX,4CAA4C;IAC5C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAmBD;;GAEG;AACH,KAAK,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAEzD;;GAEG;AACH,qBAAa,cAAc;IAQvB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAA8B;gBAGxC,MAAM,EAAE,eAAe,EAC/B,YAAY,CAAC,EAAE,eAAe,EAC9B,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAkBvC;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0HlH;;OAEG;IACG,kBAAkB,CACtB,MAAM,EAAE,aAAa,EACrB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC;QAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAAC,OAAO,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAuG1E;;OAEG;YACW,qBAAqB;IA4CnC;;OAEG;YACW,sBAAsB;IAkCpC;;OAEG;YACW,cAAc;IAqC5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,SAAS,IAAI,mBAAmB;IAIhC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;CAIzD"}
@@ -0,0 +1,398 @@
1
+ /**
2
+ * Bulk SEO Operations
3
+ *
4
+ * This module provides batch processing capabilities for SEO operations,
5
+ * including metadata updates, content analysis, and schema generation.
6
+ * It supports chunked processing, progress tracking, retry logic, and dry-run mode.
7
+ *
8
+ * @since 2.7.0
9
+ */
10
+ import { MetaGenerator } from "./generators/MetaGenerator.js";
11
+ import { ContentAnalyzer } from "./analyzers/ContentAnalyzer.js";
12
+ import { LoggerFactory } from "../../utils/logger.js";
13
+ /**
14
+ * Bulk SEO Operations Manager
15
+ */
16
+ export class BulkOperations {
17
+ client;
18
+ logger = LoggerFactory.tool("bulk_operations");
19
+ config;
20
+ metaGenerator;
21
+ contentAnalyzer;
22
+ cacheManager;
23
+ constructor(client, cacheManager, config) {
24
+ this.client = client;
25
+ this.cacheManager = cacheManager;
26
+ this.metaGenerator = new MetaGenerator();
27
+ this.contentAnalyzer = new ContentAnalyzer();
28
+ // Default configuration
29
+ this.config = {
30
+ batchSize: 10,
31
+ maxRetries: 3,
32
+ retryDelayMs: 1000,
33
+ maxRetryDelayMs: 30000,
34
+ operationTimeoutMs: 60000,
35
+ enableProgress: true,
36
+ ...config,
37
+ };
38
+ }
39
+ /**
40
+ * Bulk update metadata for multiple posts
41
+ */
42
+ async bulkUpdateMetadata(params, progressCallback) {
43
+ const startTime = Date.now();
44
+ this.logger.info("Starting bulk metadata update", {
45
+ postIds: params.postIds?.length,
46
+ dryRun: params.dryRun,
47
+ batchSize: this.config.batchSize,
48
+ });
49
+ if (!params.postIds?.length) {
50
+ throw new Error("No post IDs provided for bulk operation");
51
+ }
52
+ const progress = {
53
+ total: params.postIds.length,
54
+ processed: 0,
55
+ completed: 0,
56
+ failed: 0,
57
+ skipped: 0,
58
+ currentBatch: 0,
59
+ totalBatches: Math.ceil(params.postIds.length / this.config.batchSize),
60
+ avgProcessingTime: 0,
61
+ };
62
+ const errors = [];
63
+ const batches = this.createBatches(params.postIds, this.config.batchSize);
64
+ // Process each batch
65
+ for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) {
66
+ const batch = batches[batchIndex];
67
+ progress.currentBatch = batchIndex + 1;
68
+ this.logger.debug(`Processing batch ${progress.currentBatch}/${progress.totalBatches}`, {
69
+ batchSize: batch.length,
70
+ postIds: batch,
71
+ });
72
+ // Process batch items
73
+ await Promise.all(batch.map(async (postId) => {
74
+ const itemStartTime = Date.now();
75
+ try {
76
+ await this.processMetadataUpdate(postId, params);
77
+ progress.completed++;
78
+ // Update average processing time
79
+ const processingTime = Date.now() - itemStartTime;
80
+ progress.avgProcessingTime =
81
+ (progress.avgProcessingTime * progress.processed + processingTime) / (progress.processed + 1);
82
+ }
83
+ catch (_error) {
84
+ const bulkError = {
85
+ postId,
86
+ error: _error instanceof Error ? _error.message : String(_error),
87
+ attempts: 1,
88
+ retryable: this.isRetryableError(_error),
89
+ };
90
+ // Attempt retries
91
+ if (bulkError.retryable) {
92
+ const retryResult = await this.retryOperation(() => this.processMetadataUpdate(postId, params), bulkError);
93
+ if (retryResult.success) {
94
+ progress.completed++;
95
+ }
96
+ else {
97
+ progress.failed++;
98
+ errors.push(retryResult.error);
99
+ }
100
+ }
101
+ else {
102
+ progress.failed++;
103
+ errors.push(bulkError);
104
+ }
105
+ }
106
+ progress.processed++;
107
+ }));
108
+ // Calculate ETA
109
+ if (progress.avgProcessingTime > 0 && progress.processed < progress.total) {
110
+ const remainingItems = progress.total - progress.processed;
111
+ const etaMs = remainingItems * progress.avgProcessingTime;
112
+ progress.eta = new Date(Date.now() + etaMs);
113
+ }
114
+ else if (progress.processed > 0 && progress.processed < progress.total) {
115
+ // Fallback ETA calculation even with minimal processing time
116
+ const remainingItems = progress.total - progress.processed;
117
+ const averageTime = progress.avgProcessingTime || 100; // Fallback to 100ms
118
+ const etaMs = remainingItems * averageTime;
119
+ progress.eta = new Date(Date.now() + etaMs);
120
+ }
121
+ // Call progress callback
122
+ if (progressCallback && this.config.enableProgress) {
123
+ progressCallback(progress);
124
+ }
125
+ // Small delay between batches to avoid overwhelming the server
126
+ if (batchIndex < batches.length - 1) {
127
+ await this.delay(100);
128
+ }
129
+ }
130
+ const result = {
131
+ total: params.postIds.length,
132
+ success: progress.completed,
133
+ failed: progress.failed,
134
+ skipped: progress.skipped,
135
+ errors: errors.map((e) => ({ postId: e.postId, error: e.error })),
136
+ processingTime: Date.now() - startTime,
137
+ dryRun: params.dryRun || false,
138
+ };
139
+ this.logger.info("Bulk metadata update completed", {
140
+ ...result,
141
+ successRate: ((result.success / result.total) * 100).toFixed(1) + "%",
142
+ });
143
+ return result;
144
+ }
145
+ /**
146
+ * Bulk analyze content for multiple posts
147
+ */
148
+ async bulkAnalyzeContent(params, progressCallback) {
149
+ const startTime = Date.now();
150
+ this.logger.info("Starting bulk content analysis", {
151
+ postIds: params.postIds?.length,
152
+ analysisType: params.analysisType,
153
+ batchSize: this.config.batchSize,
154
+ });
155
+ if (!params.postIds?.length) {
156
+ throw new Error("No post IDs provided for bulk analysis");
157
+ }
158
+ const results = [];
159
+ const progress = {
160
+ total: params.postIds.length,
161
+ processed: 0,
162
+ completed: 0,
163
+ failed: 0,
164
+ skipped: 0,
165
+ currentBatch: 0,
166
+ totalBatches: Math.ceil(params.postIds.length / this.config.batchSize),
167
+ avgProcessingTime: 0,
168
+ };
169
+ const errors = [];
170
+ const batches = this.createBatches(params.postIds, this.config.batchSize);
171
+ // Process each batch
172
+ for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) {
173
+ const batch = batches[batchIndex];
174
+ progress.currentBatch = batchIndex + 1;
175
+ // Process batch items
176
+ await Promise.all(batch.map(async (postId) => {
177
+ const itemStartTime = Date.now();
178
+ try {
179
+ const analysisResult = await this.processContentAnalysis(postId, params);
180
+ results.push(analysisResult);
181
+ progress.completed++;
182
+ // Update average processing time
183
+ const processingTime = Date.now() - itemStartTime;
184
+ progress.avgProcessingTime =
185
+ (progress.avgProcessingTime * progress.processed + processingTime) / (progress.processed + 1);
186
+ }
187
+ catch (_error) {
188
+ const bulkError = {
189
+ postId,
190
+ error: _error instanceof Error ? _error.message : String(_error),
191
+ attempts: 1,
192
+ retryable: this.isRetryableError(_error),
193
+ };
194
+ // Attempt retries for analysis
195
+ if (bulkError.retryable) {
196
+ const retryResult = await this.retryOperation(() => this.processContentAnalysis(postId, params), bulkError);
197
+ if (retryResult.success) {
198
+ results.push(retryResult.result);
199
+ progress.completed++;
200
+ }
201
+ else {
202
+ progress.failed++;
203
+ errors.push(retryResult.error);
204
+ }
205
+ }
206
+ else {
207
+ progress.failed++;
208
+ errors.push(bulkError);
209
+ }
210
+ }
211
+ progress.processed++;
212
+ }));
213
+ // Call progress callback
214
+ if (progressCallback && this.config.enableProgress) {
215
+ progressCallback(progress);
216
+ }
217
+ }
218
+ const summary = {
219
+ total: params.postIds.length,
220
+ success: progress.completed,
221
+ failed: progress.failed,
222
+ skipped: progress.skipped,
223
+ errors: errors.map((e) => ({ postId: e.postId, error: e.error })),
224
+ processingTime: Date.now() - startTime,
225
+ dryRun: false,
226
+ };
227
+ this.logger.info("Bulk content analysis completed", {
228
+ ...summary,
229
+ resultsCount: results.length,
230
+ avgScore: results.length > 0 ? (results.reduce((sum, r) => sum + r.score, 0) / results.length).toFixed(1) : 0,
231
+ });
232
+ return { results, summary };
233
+ }
234
+ /**
235
+ * Process metadata update for a single post
236
+ */
237
+ async processMetadataUpdate(postId, params) {
238
+ // Check cache first
239
+ const cacheKey = `bulk-meta-${postId}`;
240
+ if (this.cacheManager && !params.force) {
241
+ const cached = this.cacheManager.get(cacheKey);
242
+ if (cached) {
243
+ this.logger.debug("Using cached metadata", { postId });
244
+ return;
245
+ }
246
+ }
247
+ // Fetch post data
248
+ const post = await this.client.getPost(postId);
249
+ if (!post) {
250
+ throw new Error(`Post ${postId} not found`);
251
+ }
252
+ // Generate metadata
253
+ const metadataParams = {
254
+ postId,
255
+ ...(params.focusKeywords && { focusKeywords: params.focusKeywords }),
256
+ ...(params.site && { site: params.site }),
257
+ };
258
+ const metadata = await this.metaGenerator.generateMetadata(post, metadataParams);
259
+ if (!params.dryRun) {
260
+ // Apply updates to WordPress (this would need actual WordPress API calls)
261
+ // For now, we just simulate the update
262
+ this.logger.debug("Applying metadata updates", {
263
+ postId,
264
+ titleLength: metadata.title.length,
265
+ descriptionLength: metadata.description.length,
266
+ });
267
+ // In a real implementation, you would call:
268
+ // await this.client.updatePost(postId, { meta: metadata });
269
+ }
270
+ // Cache the result
271
+ if (this.cacheManager) {
272
+ this.cacheManager.set(cacheKey, metadata, 3600); // 1 hour
273
+ }
274
+ }
275
+ /**
276
+ * Process content analysis for a single post
277
+ */
278
+ async processContentAnalysis(postId, params) {
279
+ // Check cache first
280
+ const cacheKey = `bulk-analysis-${postId}-${params.analysisType || "full"}`;
281
+ if (this.cacheManager && !params.force) {
282
+ const cached = this.cacheManager.get(cacheKey);
283
+ if (cached) {
284
+ this.logger.debug("Using cached analysis", { postId });
285
+ return cached;
286
+ }
287
+ }
288
+ // Fetch post data
289
+ const post = await this.client.getPost(postId);
290
+ if (!post) {
291
+ throw new Error(`Post ${postId} not found`);
292
+ }
293
+ // Analyze content
294
+ const analysisParams = {
295
+ postId,
296
+ analysisType: params.analysisType || "full",
297
+ ...(params.site && { site: params.site }),
298
+ ...(params.focusKeywords && { focusKeywords: params.focusKeywords }),
299
+ };
300
+ const analysisResult = await this.contentAnalyzer.analyzePost(post, analysisParams);
301
+ // Cache the result
302
+ if (this.cacheManager) {
303
+ this.cacheManager.set(cacheKey, analysisResult, 21600); // 6 hours
304
+ }
305
+ return analysisResult;
306
+ }
307
+ /**
308
+ * Retry operation with exponential backoff
309
+ */
310
+ async retryOperation(operation, error) {
311
+ let delay = this.config.retryDelayMs;
312
+ for (let attempt = 2; attempt <= this.config.maxRetries + 1; attempt++) {
313
+ await this.delay(delay);
314
+ try {
315
+ const result = await operation();
316
+ this.logger.debug("Retry successful", {
317
+ postId: error.postId,
318
+ attempt,
319
+ delay,
320
+ });
321
+ return { success: true, result, error };
322
+ }
323
+ catch (retryError) {
324
+ error.attempts = attempt;
325
+ error.error = retryError instanceof Error ? retryError.message : String(retryError);
326
+ // Exponential backoff
327
+ delay = Math.min(delay * 2, this.config.maxRetryDelayMs);
328
+ this.logger.debug("Retry failed", {
329
+ postId: error.postId,
330
+ attempt,
331
+ error: error.error,
332
+ nextDelay: delay,
333
+ });
334
+ }
335
+ }
336
+ return { success: false, error };
337
+ }
338
+ /**
339
+ * Check if an error is retryable
340
+ */
341
+ isRetryableError(error) {
342
+ if (!error)
343
+ return false;
344
+ const errorMessage = error instanceof Error ? error.message : String(error);
345
+ // Network errors are retryable
346
+ if (errorMessage.includes("ECONNREFUSED") ||
347
+ errorMessage.includes("timeout") ||
348
+ errorMessage.includes("503") ||
349
+ errorMessage.includes("502") ||
350
+ errorMessage.includes("504")) {
351
+ return true;
352
+ }
353
+ // Authentication errors are not retryable
354
+ if (errorMessage.includes("401") || errorMessage.includes("403")) {
355
+ return false;
356
+ }
357
+ // Not found errors are not retryable
358
+ if (errorMessage.includes("404")) {
359
+ return false;
360
+ }
361
+ // Rate limiting is retryable
362
+ if (errorMessage.includes("429")) {
363
+ return true;
364
+ }
365
+ // Default to non-retryable for safety
366
+ return false;
367
+ }
368
+ /**
369
+ * Create batches from an array of items
370
+ */
371
+ createBatches(items, batchSize) {
372
+ const batches = [];
373
+ for (let i = 0; i < items.length; i += batchSize) {
374
+ batches.push(items.slice(i, i + batchSize));
375
+ }
376
+ return batches;
377
+ }
378
+ /**
379
+ * Promise-based delay utility
380
+ */
381
+ delay(ms) {
382
+ return new Promise((resolve) => setTimeout(resolve, ms));
383
+ }
384
+ /**
385
+ * Get current configuration
386
+ */
387
+ getConfig() {
388
+ return { ...this.config };
389
+ }
390
+ /**
391
+ * Update configuration
392
+ */
393
+ updateConfig(config) {
394
+ this.config = { ...this.config, ...config };
395
+ this.logger.debug("Configuration updated", { config: this.config });
396
+ }
397
+ }
398
+ //# sourceMappingURL=BulkOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkOperations.js","sourceRoot":"","sources":["../../../src/tools/seo/BulkOperations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAiFlD;;GAEG;AACH,MAAM,OAAO,cAAc;IAQf;IAPF,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/C,MAAM,CAAsB;IAC5B,aAAa,CAAgB;IAC7B,eAAe,CAAkB;IACjC,YAAY,CAA8B;IAElD,YACU,MAAuB,EAC/B,YAA8B,EAC9B,MAAqC;QAF7B,WAAM,GAAN,MAAM,CAAiB;QAI/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE7C,wBAAwB;QACxB,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,IAAI;YACpB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,MAAqB,EAAE,gBAAmC;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;YAChD,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAiB;YAC7B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC5B,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACtE,iBAAiB,EAAE,CAAC;SACrB,CAAC;QAEF,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE1E,qBAAqB;QACrB,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,QAAQ,CAAC,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;YAEvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE;gBACtF,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,sBAAsB;YACtB,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEjC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACjD,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAErB,iCAAiC;oBACjC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;oBAClD,QAAQ,CAAC,iBAAiB;wBACxB,CAAC,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAClG,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,MAAM,SAAS,GAAuB;wBACpC,MAAM;wBACN,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAChE,QAAQ,EAAE,CAAC;wBACX,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;qBACzC,CAAC;oBAEF,kBAAkB;oBAClB,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;wBACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAC3C,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,EAChD,SAAS,CACV,CAAC;wBAEF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;4BACxB,QAAQ,CAAC,SAAS,EAAE,CAAC;wBACvB,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,MAAM,EAAE,CAAC;4BAClB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBACjC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,MAAM,EAAE,CAAC;wBAClB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC,CAAC,CACH,CAAC;YAEF,gBAAgB;YAChB,IAAI,QAAQ,CAAC,iBAAiB,GAAG,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC1E,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;gBAC3D,MAAM,KAAK,GAAG,cAAc,GAAG,QAAQ,CAAC,iBAAiB,CAAC;gBAC1D,QAAQ,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACzE,6DAA6D;gBAC7D,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC;gBAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,iBAAiB,IAAI,GAAG,CAAC,CAAC,oBAAoB;gBAC3E,MAAM,KAAK,GAAG,cAAc,GAAG,WAAW,CAAC;gBAC3C,QAAQ,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;YAC9C,CAAC;YAED,yBAAyB;YACzB,IAAI,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACnD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;YAED,+DAA+D;YAC/D,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAwB;YAClC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC5B,OAAO,EAAE,QAAQ,CAAC,SAAS;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACjE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACtC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;SAC/B,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;YACjD,GAAG,MAAM;YACT,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;SACtE,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,MAAqB,EACrB,gBAAmC;QAEnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;YACjD,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAiB;YAC7B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC5B,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACtE,iBAAiB,EAAE,CAAC;SACrB,CAAC;QAEF,MAAM,MAAM,GAAyB,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE1E,qBAAqB;QACrB,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,QAAQ,CAAC,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;YAEvC,sBAAsB;YACtB,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACzB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEjC,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC7B,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAErB,iCAAiC;oBACjC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;oBAClD,QAAQ,CAAC,iBAAiB;wBACxB,CAAC,QAAQ,CAAC,iBAAiB,GAAG,QAAQ,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAClG,CAAC;gBAAC,OAAO,MAAM,EAAE,CAAC;oBAChB,MAAM,SAAS,GAAuB;wBACpC,MAAM;wBACN,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;wBAChE,QAAQ,EAAE,CAAC;wBACX,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;qBACzC,CAAC;oBAEF,+BAA+B;oBAC/B,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;wBACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAC3C,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,EACjD,SAAS,CACV,CAAC;wBAEF,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;4BACxB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC;4BAClC,QAAQ,CAAC,SAAS,EAAE,CAAC;wBACvB,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,MAAM,EAAE,CAAC;4BAClB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBACjC,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,MAAM,EAAE,CAAC;wBAClB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,CAAC,CAAC,CACH,CAAC;YAEF,yBAAyB;YACzB,IAAI,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACnD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAwB;YACnC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;YAC5B,OAAO,EAAE,QAAQ,CAAC,SAAS;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACjE,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YACtC,MAAM,EAAE,KAAK;SACd,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;YAClD,GAAG,OAAO;YACV,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9G,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,MAAqB;QACvE,oBAAoB;QACpB,MAAM,QAAQ,GAAG,aAAa,MAAM,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,YAAY,CAAC,CAAC;QAC9C,CAAC;QAED,oBAAoB;QACpB,MAAM,cAAc,GAAG;YACrB,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;YACpE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;SAC1C,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAEjF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,0EAA0E;YAC1E,uCAAuC;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE;gBAC7C,MAAM;gBACN,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;gBAClC,iBAAiB,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM;aAC/C,CAAC,CAAC;YAEH,4CAA4C;YAC5C,4DAA4D;QAC9D,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAAC,MAAc,EAAE,MAAqB;QACxE,oBAAoB;QACpB,MAAM,QAAQ,GAAG,iBAAiB,MAAM,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,EAAE,CAAC;QAC5E,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvD,OAAO,MAA2B,CAAC;YACrC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,YAAY,CAAC,CAAC;QAC9C,CAAC;QAED,kBAAkB;QAClB,MAAM,cAAc,GAAG;YACrB,MAAM;YACN,YAAY,EAAE,MAAM,CAAC,YAAY,IAAK,MAAgB;YACtD,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;SACrE,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,IAAqB,EAAE,cAAc,CAAC,CAAC;QAErG,mBAAmB;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU;QACpE,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,SAA2B,EAC3B,KAAyB;QAEzB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAErC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YACvE,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAExB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;oBACpC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO;oBACP,KAAK;iBACN,CAAC,CAAC;gBAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC1C,CAAC;YAAC,OAAO,UAAU,EAAE,CAAC;gBACpB,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;gBACzB,KAAK,CAAC,KAAK,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAEpF,sBAAsB;gBACtB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBAEzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE;oBAChC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO;oBACP,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAc;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5E,+BAA+B;QAC/B,IACE,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;YACrC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;YAChC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5B,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5B,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,qCAAqC;QACrC,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6BAA6B;QAC7B,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sCAAsC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,aAAa,CAAI,KAAU,EAAE,SAAiB;QACpD,MAAM,OAAO,GAAU,EAAE,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAoC;QAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * SEO Tool Handlers
3
+ *
4
+ * Implements the handler functions for all SEO-related MCP tools.
5
+ * These handlers bridge the gap between MCP protocol requests and
6
+ * the SEO toolkit implementation.
7
+ *
8
+ * @since 2.7.0
9
+ */
10
+ import { WordPressClient } from "../../client/api.js";
11
+ /**
12
+ * Handle content analysis request
13
+ */
14
+ export declare function handleAnalyzeContent(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
15
+ /**
16
+ * Handle metadata generation request
17
+ */
18
+ export declare function handleGenerateMetadata(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
19
+ /**
20
+ * Handle bulk metadata update request
21
+ */
22
+ export declare function handleBulkUpdateMetadata(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
23
+ /**
24
+ * Handle schema generation request
25
+ */
26
+ export declare function handleGenerateSchema(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
27
+ /**
28
+ * Handle schema validation request
29
+ */
30
+ export declare function handleValidateSchema(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
31
+ /**
32
+ * Handle internal linking suggestions request
33
+ */
34
+ export declare function handleSuggestInternalLinks(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
35
+ /**
36
+ * Handle site audit request
37
+ */
38
+ export declare function handlePerformSiteAudit(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
39
+ /**
40
+ * Handle SERP tracking request
41
+ */
42
+ export declare function handleTrackSERPPositions(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
43
+ /**
44
+ * Handle keyword research request
45
+ */
46
+ export declare function handleKeywordResearch(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
47
+ /**
48
+ * Handle SEO integration test request
49
+ */
50
+ export declare function handleTestSEOIntegration(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
51
+ /**
52
+ * Handle get live SEO data request
53
+ */
54
+ export declare function handleGetLiveSEOData(client: WordPressClient, args: Record<string, unknown>): Promise<unknown>;
55
+ //# sourceMappingURL=SEOHandlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SEOHandlers.d.ts","sourceRoot":"","sources":["../../../src/tools/seo/SEOHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAkBlD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBnH;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BrH;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiBlB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnH;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnH;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBrH;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpH;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBnH"}