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.
- package/README.md +1 -1
- package/dist/cache/CacheInvalidation.d.ts +25 -6
- package/dist/cache/CacheInvalidation.d.ts.map +1 -1
- package/dist/cache/CacheInvalidation.js +168 -16
- package/dist/cache/CacheInvalidation.js.map +1 -1
- package/dist/cache/HttpCacheWrapper.d.ts.map +1 -1
- package/dist/cache/HttpCacheWrapper.js +3 -4
- package/dist/cache/HttpCacheWrapper.js.map +1 -1
- package/dist/cache/SEOCacheManager.d.ts +150 -0
- package/dist/cache/SEOCacheManager.d.ts.map +1 -0
- package/dist/cache/SEOCacheManager.js +275 -0
- package/dist/cache/SEOCacheManager.js.map +1 -0
- package/dist/client/SEOWordPressClient.d.ts +164 -0
- package/dist/client/SEOWordPressClient.d.ts.map +1 -0
- package/dist/client/SEOWordPressClient.js +674 -0
- package/dist/client/SEOWordPressClient.js.map +1 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +50 -20
- package/dist/client/api.js.map +1 -1
- package/dist/client/auth.js +19 -19
- package/dist/client/auth.js.map +1 -1
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +14 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/managers/AuthManager.d.ts +39 -0
- package/dist/client/managers/AuthManager.d.ts.map +1 -0
- package/dist/client/managers/AuthManager.js +142 -0
- package/dist/client/managers/AuthManager.js.map +1 -0
- package/dist/client/managers/AuthenticationManager.d.ts.map +1 -1
- package/dist/client/managers/AuthenticationManager.js +10 -9
- package/dist/client/managers/AuthenticationManager.js.map +1 -1
- package/dist/client/managers/BaseManager.d.ts.map +1 -1
- package/dist/client/managers/BaseManager.js +12 -0
- package/dist/client/managers/BaseManager.js.map +1 -1
- package/dist/client/managers/ComposedAuthenticationManager.d.ts +94 -0
- package/dist/client/managers/ComposedAuthenticationManager.d.ts.map +1 -0
- package/dist/client/managers/ComposedAuthenticationManager.js +340 -0
- package/dist/client/managers/ComposedAuthenticationManager.js.map +1 -0
- package/dist/client/managers/ComposedManagerFactory.d.ts +104 -0
- package/dist/client/managers/ComposedManagerFactory.d.ts.map +1 -0
- package/dist/client/managers/ComposedManagerFactory.js +180 -0
- package/dist/client/managers/ComposedManagerFactory.js.map +1 -0
- package/dist/client/managers/ComposedRequestManager.d.ts +82 -0
- package/dist/client/managers/ComposedRequestManager.d.ts.map +1 -0
- package/dist/client/managers/ComposedRequestManager.js +260 -0
- package/dist/client/managers/ComposedRequestManager.js.map +1 -0
- package/dist/client/managers/JWTAuthImplementation.d.ts +86 -0
- package/dist/client/managers/JWTAuthImplementation.d.ts.map +1 -0
- package/dist/client/managers/JWTAuthImplementation.js +240 -0
- package/dist/client/managers/JWTAuthImplementation.js.map +1 -0
- package/dist/client/managers/ManagersIndex.d.ts +6 -0
- package/dist/client/managers/ManagersIndex.d.ts.map +1 -0
- package/dist/client/managers/ManagersIndex.js +6 -0
- package/dist/client/managers/ManagersIndex.js.map +1 -0
- package/dist/client/managers/RequestManager.d.ts.map +1 -1
- package/dist/client/managers/RequestManager.js +5 -3
- package/dist/client/managers/RequestManager.js.map +1 -1
- package/dist/client/managers/composed/MigrationAdapter.d.ts +80 -0
- package/dist/client/managers/composed/MigrationAdapter.d.ts.map +1 -0
- package/dist/client/managers/composed/MigrationAdapter.js +214 -0
- package/dist/client/managers/composed/MigrationAdapter.js.map +1 -0
- package/dist/client/managers/composed/index.d.ts +23 -0
- package/dist/client/managers/composed/index.d.ts.map +1 -0
- package/dist/client/managers/composed/index.js +26 -0
- package/dist/client/managers/composed/index.js.map +1 -0
- package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts +27 -0
- package/dist/client/managers/implementations/ConfigurationProviderImpl.d.ts.map +1 -0
- package/dist/client/managers/implementations/ConfigurationProviderImpl.js +41 -0
- package/dist/client/managers/implementations/ConfigurationProviderImpl.js.map +1 -0
- package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts +31 -0
- package/dist/client/managers/implementations/ErrorHandlerImpl.d.ts.map +1 -0
- package/dist/client/managers/implementations/ErrorHandlerImpl.js +73 -0
- package/dist/client/managers/implementations/ErrorHandlerImpl.js.map +1 -0
- package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts +47 -0
- package/dist/client/managers/implementations/ParameterValidatorImpl.d.ts.map +1 -0
- package/dist/client/managers/implementations/ParameterValidatorImpl.js +141 -0
- package/dist/client/managers/implementations/ParameterValidatorImpl.js.map +1 -0
- package/dist/client/managers/interfaces/ManagerInterfaces.d.ts +147 -0
- package/dist/client/managers/interfaces/ManagerInterfaces.d.ts.map +1 -0
- package/dist/client/managers/interfaces/ManagerInterfaces.js +6 -0
- package/dist/client/managers/interfaces/ManagerInterfaces.js.map +1 -0
- package/dist/config/Config.d.ts +30 -0
- package/dist/config/Config.d.ts.map +1 -1
- package/dist/config/Config.js +30 -0
- package/dist/config/Config.js.map +1 -1
- package/dist/config/ConfigurationSchema.d.ts +75 -198
- package/dist/config/ConfigurationSchema.d.ts.map +1 -1
- package/dist/config/ConfigurationSchema.js +17 -17
- package/dist/config/ConfigurationSchema.js.map +1 -1
- package/dist/config/ServerConfiguration.d.ts +2 -2
- package/dist/config/ServerConfiguration.d.ts.map +1 -1
- package/dist/config/ServerConfiguration.js +15 -13
- package/dist/config/ServerConfiguration.js.map +1 -1
- package/dist/config/index.d.ts +8 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -0
- package/dist/docs/DocumentationGenerator.js +2 -2
- package/dist/docs/DocumentationGenerator.js.map +1 -1
- package/dist/dxt-entry.js +3 -3
- package/dist/dxt-entry.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -37
- package/dist/index.js.map +1 -1
- package/dist/performance/MetricsCollector.d.ts.map +1 -1
- package/dist/performance/MetricsCollector.js +5 -4
- package/dist/performance/MetricsCollector.js.map +1 -1
- package/dist/security/AISecurityScanner.js +7 -7
- package/dist/security/AISecurityScanner.js.map +1 -1
- package/dist/security/AutomatedRemediation.d.ts.map +1 -1
- package/dist/security/AutomatedRemediation.js +11 -11
- package/dist/security/AutomatedRemediation.js.map +1 -1
- package/dist/security/InputValidator.d.ts +50 -126
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +9 -9
- package/dist/security/InputValidator.js.map +1 -1
- package/dist/security/SecurityCIPipeline.d.ts +47 -5
- package/dist/security/SecurityCIPipeline.d.ts.map +1 -1
- package/dist/security/SecurityCIPipeline.js +390 -49
- package/dist/security/SecurityCIPipeline.js.map +1 -1
- package/dist/security/SecurityConfigManager.js +10 -10
- package/dist/security/SecurityConfigManager.js.map +1 -1
- package/dist/security/SecurityMonitoring.js +4 -4
- package/dist/security/SecurityMonitoring.js.map +1 -1
- package/dist/security/SecurityReviewer.d.ts.map +1 -1
- package/dist/security/SecurityReviewer.js +13 -6
- package/dist/security/SecurityReviewer.js.map +1 -1
- package/dist/security/index.js +3 -3
- package/dist/security/index.js.map +1 -1
- package/dist/server/ConnectionTester.js +5 -5
- package/dist/server/ConnectionTester.js.map +1 -1
- package/dist/server/ToolRegistry.d.ts +2 -2
- package/dist/server/ToolRegistry.d.ts.map +1 -1
- package/dist/server/ToolRegistry.js +7 -6
- package/dist/server/ToolRegistry.js.map +1 -1
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +9 -0
- package/dist/server/index.js.map +1 -0
- package/dist/tools/BaseToolManager.d.ts.map +1 -1
- package/dist/tools/BaseToolManager.js +11 -11
- package/dist/tools/BaseToolManager.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +7 -7
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js +14 -14
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js +14 -11
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/pages.d.ts.map +1 -1
- package/dist/tools/pages.js +12 -12
- package/dist/tools/pages.js.map +1 -1
- package/dist/tools/performance.d.ts.map +1 -1
- package/dist/tools/performance.js +13 -11
- package/dist/tools/performance.js.map +1 -1
- package/dist/tools/posts/PostHandlers.d.ts.map +1 -1
- package/dist/tools/posts/PostHandlers.js +16 -16
- package/dist/tools/posts/PostHandlers.js.map +1 -1
- package/dist/tools/posts/PostToolDefinitions.d.ts.map +1 -1
- package/dist/tools/posts/index.d.ts.map +1 -1
- package/dist/tools/seo/BulkOperations.d.ts +113 -0
- package/dist/tools/seo/BulkOperations.d.ts.map +1 -0
- package/dist/tools/seo/BulkOperations.js +398 -0
- package/dist/tools/seo/BulkOperations.js.map +1 -0
- package/dist/tools/seo/SEOHandlers.d.ts +55 -0
- package/dist/tools/seo/SEOHandlers.d.ts.map +1 -0
- package/dist/tools/seo/SEOHandlers.js +255 -0
- package/dist/tools/seo/SEOHandlers.js.map +1 -0
- package/dist/tools/seo/SEOToolDefinitions.d.ts +59 -0
- package/dist/tools/seo/SEOToolDefinitions.d.ts.map +1 -0
- package/dist/tools/seo/SEOToolDefinitions.js +385 -0
- package/dist/tools/seo/SEOToolDefinitions.js.map +1 -0
- package/dist/tools/seo/SEOTools.d.ts +203 -0
- package/dist/tools/seo/SEOTools.d.ts.map +1 -0
- package/dist/tools/seo/SEOTools.js +708 -0
- package/dist/tools/seo/SEOTools.js.map +1 -0
- package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts +94 -0
- package/dist/tools/seo/analyzers/ContentAnalyzer.d.ts.map +1 -0
- package/dist/tools/seo/analyzers/ContentAnalyzer.js +402 -0
- package/dist/tools/seo/analyzers/ContentAnalyzer.js.map +1 -0
- package/dist/tools/seo/auditors/SiteAuditor.d.ts +121 -0
- package/dist/tools/seo/auditors/SiteAuditor.d.ts.map +1 -0
- package/dist/tools/seo/auditors/SiteAuditor.js +600 -0
- package/dist/tools/seo/auditors/SiteAuditor.js.map +1 -0
- package/dist/tools/seo/generators/MetaGenerator.d.ts +128 -0
- package/dist/tools/seo/generators/MetaGenerator.d.ts.map +1 -0
- package/dist/tools/seo/generators/MetaGenerator.js +547 -0
- package/dist/tools/seo/generators/MetaGenerator.js.map +1 -0
- package/dist/tools/seo/generators/SchemaGenerator.d.ts +204 -0
- package/dist/tools/seo/generators/SchemaGenerator.d.ts.map +1 -0
- package/dist/tools/seo/generators/SchemaGenerator.js +670 -0
- package/dist/tools/seo/generators/SchemaGenerator.js.map +1 -0
- package/dist/tools/seo/index.d.ts +17 -0
- package/dist/tools/seo/index.d.ts.map +1 -0
- package/dist/tools/seo/index.js +18 -0
- package/dist/tools/seo/index.js.map +1 -0
- package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts +186 -0
- package/dist/tools/seo/optimizers/InternalLinkingSuggester.d.ts.map +1 -0
- package/dist/tools/seo/optimizers/InternalLinkingSuggester.js +683 -0
- package/dist/tools/seo/optimizers/InternalLinkingSuggester.js.map +1 -0
- package/dist/tools/site.d.ts.map +1 -1
- package/dist/tools/site.js +12 -12
- package/dist/tools/site.js.map +1 -1
- package/dist/tools/taxonomies.d.ts.map +1 -1
- package/dist/tools/taxonomies.js +20 -20
- package/dist/tools/taxonomies.js.map +1 -1
- package/dist/tools/users.d.ts.map +1 -1
- package/dist/tools/users.js +12 -12
- package/dist/tools/users.js.map +1 -1
- package/dist/types/client.d.ts +8 -6
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/client.js.map +1 -1
- package/dist/types/seo.d.ts +473 -0
- package/dist/types/seo.d.ts.map +1 -0
- package/dist/types/seo.js +94 -0
- package/dist/types/seo.js.map +1 -0
- package/dist/utils/enhancedError.js +1 -1
- package/dist/utils/enhancedError.js.map +1 -1
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/utils/error.js +0 -1
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.js +3 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/toolWrapper.d.ts +2 -2
- package/dist/utils/toolWrapper.js +8 -8
- package/dist/utils/toolWrapper.js.map +1 -1
- package/dist/utils/validation/core.d.ts.map +1 -1
- package/dist/utils/validation/core.js.map +1 -1
- package/dist/utils/validation/index.d.ts.map +1 -1
- package/dist/utils/validation/index.js.map +1 -1
- package/dist/utils/validation/network.js +3 -3
- package/dist/utils/validation/network.js.map +1 -1
- package/dist/utils/validation/rateLimit.js.map +1 -1
- package/dist/utils/validation/security.js.map +1 -1
- package/dist/utils/validation/wordpress.js.map +1 -1
- package/dist/utils/version.d.ts +144 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +318 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +21 -55
- package/src/cache/CacheInvalidation.ts +183 -20
- package/src/cache/HttpCacheWrapper.ts +8 -5
- package/src/cache/SEOCacheManager.ts +330 -0
- package/src/cache/__tests__/CacheInvalidation.test.ts +6 -11
- package/src/cache/__tests__/CachedWordPressClient.test.ts +37 -62
- package/src/client/SEOWordPressClient.ts +876 -0
- package/src/client/api.ts +50 -21
- package/src/client/auth.ts +19 -19
- package/src/client/index.ts +16 -0
- package/src/client/managers/AuthManager.ts +175 -0
- package/src/client/managers/AuthenticationManager.ts +16 -14
- package/src/client/managers/BaseManager.ts +24 -5
- package/src/client/managers/ComposedAuthenticationManager.ts +409 -0
- package/src/client/managers/ComposedManagerFactory.ts +231 -0
- package/src/client/managers/ComposedRequestManager.ts +336 -0
- package/src/client/managers/JWTAuthImplementation.ts +326 -0
- package/src/client/managers/ManagersIndex.ts +6 -0
- package/src/client/managers/RequestManager.ts +9 -7
- package/src/client/managers/composed/MigrationAdapter.ts +263 -0
- package/src/client/managers/composed/index.ts +47 -0
- package/src/client/managers/implementations/ConfigurationProviderImpl.ts +52 -0
- package/src/client/managers/implementations/ErrorHandlerImpl.ts +102 -0
- package/src/client/managers/implementations/ParameterValidatorImpl.ts +221 -0
- package/src/client/managers/interfaces/ManagerInterfaces.ts +171 -0
- package/src/config/Config.ts +63 -0
- package/src/config/ConfigurationSchema.ts +17 -17
- package/src/config/ServerConfiguration.ts +18 -16
- package/src/config/index.ts +13 -0
- package/src/docs/DocumentationGenerator.ts +2 -2
- package/src/dxt-entry.ts +3 -3
- package/src/index.ts +43 -43
- package/src/performance/MetricsCollector.ts +15 -11
- package/src/security/AISecurityScanner.ts +7 -7
- package/src/security/AutomatedRemediation.ts +13 -11
- package/src/security/InputValidator.ts +10 -9
- package/src/security/SecurityCIPipeline.ts +494 -56
- package/src/security/SecurityConfigManager.ts +10 -10
- package/src/security/SecurityMonitoring.ts +5 -5
- package/src/security/SecurityReviewer.ts +13 -6
- package/src/security/index.ts +3 -3
- package/src/server/ConnectionTester.ts +5 -5
- package/src/server/ToolRegistry.ts +9 -8
- package/src/server/index.ts +10 -0
- package/src/tools/BaseToolManager.ts +55 -83
- package/src/tools/auth.ts +21 -12
- package/src/tools/comments.ts +23 -19
- package/src/tools/index.ts +1 -0
- package/src/tools/media.ts +23 -20
- package/src/tools/pages.ts +20 -13
- package/src/tools/performance.ts +101 -32
- package/src/tools/posts/PostHandlers.ts +23 -23
- package/src/tools/posts/PostToolDefinitions.ts +1 -1
- package/src/tools/posts/index.ts +2 -2
- package/src/tools/seo/BulkOperations.ts +557 -0
- package/src/tools/seo/SEOHandlers.ts +296 -0
- package/src/tools/seo/SEOToolDefinitions.ts +402 -0
- package/src/tools/seo/SEOTools.ts +871 -0
- package/src/tools/seo/analyzers/ContentAnalyzer.ts +493 -0
- package/src/tools/seo/auditors/SiteAuditor.ts +787 -0
- package/src/tools/seo/generators/MetaGenerator.ts +694 -0
- package/src/tools/seo/generators/SchemaGenerator.ts +955 -0
- package/src/tools/seo/index.ts +47 -0
- package/src/tools/seo/optimizers/InternalLinkingSuggester.ts +934 -0
- package/src/tools/site.ts +27 -26
- package/src/tools/taxonomies.ts +29 -25
- package/src/tools/users.ts +20 -13
- package/src/types/client.ts +8 -6
- package/src/types/seo.ts +546 -0
- package/src/utils/enhancedError.ts +1 -1
- package/src/utils/error.ts +1 -2
- package/src/utils/index.ts +23 -0
- package/src/utils/logger.ts +3 -3
- package/src/utils/toolWrapper.ts +10 -10
- package/src/utils/validation/core.ts +2 -2
- package/src/utils/validation/index.ts +2 -2
- package/src/utils/validation/network.ts +5 -5
- package/src/utils/validation/rateLimit.ts +1 -1
- package/src/utils/validation/security.ts +1 -1
- package/src/utils/validation/wordpress.ts +1 -1
- package/src/utils/version.ts +402 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* pagination, search queries, and status validation.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { WordPressAPIError } from "
|
|
8
|
+
import { WordPressAPIError } from "@/types/client.js";
|
|
9
9
|
import { validateId } from "./core.js";
|
|
10
10
|
import { validateString, validateArray } from "./core.js";
|
|
11
11
|
import { sanitizeHtml } from "./security.js";
|
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version Management Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides centralized version management following best practices:
|
|
5
|
+
* - Single source of truth (package.json)
|
|
6
|
+
* - Semantic versioning support
|
|
7
|
+
* - Build metadata integration
|
|
8
|
+
* - Version comparison utilities
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { readFile } from "fs/promises";
|
|
12
|
+
import { join } from "path";
|
|
13
|
+
import { fileURLToPath } from "url";
|
|
14
|
+
import { dirname } from "path";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Version information interface
|
|
18
|
+
*/
|
|
19
|
+
export interface VersionInfo {
|
|
20
|
+
/** Full version string (e.g., "2.7.0") */
|
|
21
|
+
version: string;
|
|
22
|
+
/** Major version number */
|
|
23
|
+
major: number;
|
|
24
|
+
/** Minor version number */
|
|
25
|
+
minor: number;
|
|
26
|
+
/** Patch version number */
|
|
27
|
+
patch: number;
|
|
28
|
+
/** Pre-release identifier (e.g., "beta.1") */
|
|
29
|
+
prerelease?: string;
|
|
30
|
+
/** Build metadata (e.g., git commit hash) */
|
|
31
|
+
build?: string;
|
|
32
|
+
/** Human-readable version string with metadata */
|
|
33
|
+
full: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Package.json structure for version reading
|
|
38
|
+
*/
|
|
39
|
+
interface PackageJson {
|
|
40
|
+
name: string;
|
|
41
|
+
version: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Version Manager Class
|
|
47
|
+
* Singleton pattern for consistent version management
|
|
48
|
+
*/
|
|
49
|
+
export class VersionManager {
|
|
50
|
+
private static instance: VersionManager;
|
|
51
|
+
private versionInfo: VersionInfo | null = null;
|
|
52
|
+
private packageJson: PackageJson | null = null;
|
|
53
|
+
private isInitialized: boolean = false;
|
|
54
|
+
|
|
55
|
+
private constructor() {}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get singleton instance
|
|
59
|
+
*/
|
|
60
|
+
static getInstance(): VersionManager {
|
|
61
|
+
if (!VersionManager.instance) {
|
|
62
|
+
VersionManager.instance = new VersionManager();
|
|
63
|
+
}
|
|
64
|
+
return VersionManager.instance;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Initialize version manager with async file loading
|
|
69
|
+
* Call this early in application startup for optimal performance
|
|
70
|
+
*/
|
|
71
|
+
async initialize(): Promise<void> {
|
|
72
|
+
if (this.isInitialized) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
try {
|
|
77
|
+
this.packageJson = await this.loadPackageJson();
|
|
78
|
+
this.versionInfo = this.loadVersionFromPackage(this.packageJson);
|
|
79
|
+
this.isInitialized = true;
|
|
80
|
+
} catch (_error) {
|
|
81
|
+
// Fall back to sync loading if async fails
|
|
82
|
+
this.packageJson = await this.loadPackageJson(); // This will use fallback
|
|
83
|
+
this.versionInfo = this.loadVersionFromPackage(this.packageJson);
|
|
84
|
+
this.isInitialized = true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Get version information
|
|
90
|
+
* Uses cached version if available, loads synchronously with fallback if needed
|
|
91
|
+
*/
|
|
92
|
+
getVersion(): VersionInfo {
|
|
93
|
+
if (!this.versionInfo) {
|
|
94
|
+
// If not initialized, load synchronously with fallback
|
|
95
|
+
this.versionInfo = this.loadVersionSync();
|
|
96
|
+
}
|
|
97
|
+
return this.versionInfo;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Get package information
|
|
102
|
+
* Uses cached package if available, loads synchronously with fallback if needed
|
|
103
|
+
*/
|
|
104
|
+
getPackageInfo(): PackageJson {
|
|
105
|
+
if (!this.packageJson) {
|
|
106
|
+
// Return fallback package info if not loaded
|
|
107
|
+
this.packageJson = {
|
|
108
|
+
name: "mcp-wordpress",
|
|
109
|
+
version: "2.7.0", // Fallback version
|
|
110
|
+
description: "MCP WordPress Server",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
return this.packageJson;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Load version synchronously (with fallback)
|
|
118
|
+
* @deprecated Use initialize() followed by getVersion() for better performance
|
|
119
|
+
*/
|
|
120
|
+
private loadVersionSync(): VersionInfo {
|
|
121
|
+
const pkg = this.getPackageInfo(); // Uses fallback if needed
|
|
122
|
+
return this.loadVersionFromPackage(pkg);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Load version from package data
|
|
127
|
+
*/
|
|
128
|
+
private loadVersionFromPackage(pkg: PackageJson): VersionInfo {
|
|
129
|
+
const parsed = this.parseSemanticVersion(pkg.version);
|
|
130
|
+
|
|
131
|
+
// Add build metadata if available
|
|
132
|
+
const buildMetadata = this.getBuildMetadata();
|
|
133
|
+
|
|
134
|
+
const result: VersionInfo = {
|
|
135
|
+
...parsed,
|
|
136
|
+
full: this.formatFullVersion(parsed, buildMetadata),
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
if (buildMetadata !== undefined) {
|
|
140
|
+
result.build = buildMetadata;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Load package.json
|
|
148
|
+
*/
|
|
149
|
+
private async loadPackageJson(): Promise<PackageJson> {
|
|
150
|
+
try {
|
|
151
|
+
// Get the project root directory
|
|
152
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
153
|
+
const __dirname = dirname(__filename);
|
|
154
|
+
const projectRoot = join(__dirname, "..", "..");
|
|
155
|
+
const packagePath = join(projectRoot, "package.json");
|
|
156
|
+
|
|
157
|
+
const packageContent = await readFile(packagePath, "utf-8");
|
|
158
|
+
return JSON.parse(packageContent) as PackageJson;
|
|
159
|
+
} catch (_error) {
|
|
160
|
+
// Fallback for runtime environments where package.json might not be available
|
|
161
|
+
// Note: Using fallback version - should match package.json
|
|
162
|
+
return {
|
|
163
|
+
name: "mcp-wordpress",
|
|
164
|
+
version: "2.7.0", // Fallback version - should match package.json
|
|
165
|
+
description: "MCP WordPress Server",
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Parse semantic version string
|
|
172
|
+
* Supports format: major.minor.patch[-prerelease][+build]
|
|
173
|
+
*/
|
|
174
|
+
private parseSemanticVersion(version: string): Omit<VersionInfo, "build" | "full"> {
|
|
175
|
+
// Regular expression for semantic versioning
|
|
176
|
+
const semverRegex = /^(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?(?:\+([a-zA-Z0-9.-]+))?$/;
|
|
177
|
+
const match = version.match(semverRegex);
|
|
178
|
+
|
|
179
|
+
if (!match) {
|
|
180
|
+
// Fallback for non-standard versions
|
|
181
|
+
return {
|
|
182
|
+
version,
|
|
183
|
+
major: 0,
|
|
184
|
+
minor: 0,
|
|
185
|
+
patch: 0,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const result: Omit<VersionInfo, "build" | "full"> = {
|
|
190
|
+
version: `${match[1]}.${match[2]}.${match[3]}`,
|
|
191
|
+
major: parseInt(match[1], 10),
|
|
192
|
+
minor: parseInt(match[2], 10),
|
|
193
|
+
patch: parseInt(match[3], 10),
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
if (match[4]) {
|
|
197
|
+
result.prerelease = match[4];
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Get build metadata (git commit hash, timestamp, etc.)
|
|
205
|
+
*/
|
|
206
|
+
private getBuildMetadata(): string | undefined {
|
|
207
|
+
// In production, this could be injected during build process
|
|
208
|
+
// For now, we'll use environment variables if available
|
|
209
|
+
if (process.env.BUILD_NUMBER) {
|
|
210
|
+
return process.env.BUILD_NUMBER;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (process.env.GIT_COMMIT) {
|
|
214
|
+
return process.env.GIT_COMMIT.substring(0, 7); // Short hash
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// For development, optionally include timestamp
|
|
218
|
+
if (process.env.NODE_ENV === "development") {
|
|
219
|
+
return `dev.${Date.now()}`;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Format full version string with metadata
|
|
227
|
+
*/
|
|
228
|
+
private formatFullVersion(version: Omit<VersionInfo, "build" | "full">, build?: string): string {
|
|
229
|
+
let full = version.version;
|
|
230
|
+
|
|
231
|
+
if (version.prerelease) {
|
|
232
|
+
full += `-${version.prerelease}`;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (build) {
|
|
236
|
+
full += `+${build}`;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return full;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Compare two version strings
|
|
244
|
+
* Returns: -1 if v1 < v2, 0 if v1 = v2, 1 if v1 > v2
|
|
245
|
+
*/
|
|
246
|
+
compareVersions(v1: string, v2: string): number {
|
|
247
|
+
const version1 = this.parseSemanticVersion(v1);
|
|
248
|
+
const version2 = this.parseSemanticVersion(v2);
|
|
249
|
+
|
|
250
|
+
// Compare major
|
|
251
|
+
if (version1.major !== version2.major) {
|
|
252
|
+
return version1.major > version2.major ? 1 : -1;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Compare minor
|
|
256
|
+
if (version1.minor !== version2.minor) {
|
|
257
|
+
return version1.minor > version2.minor ? 1 : -1;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Compare patch
|
|
261
|
+
if (version1.patch !== version2.patch) {
|
|
262
|
+
return version1.patch > version2.patch ? 1 : -1;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Compare prerelease (absence of prerelease is greater than presence)
|
|
266
|
+
if (version1.prerelease && !version2.prerelease) return -1;
|
|
267
|
+
if (!version1.prerelease && version2.prerelease) return 1;
|
|
268
|
+
if (version1.prerelease && version2.prerelease) {
|
|
269
|
+
return version1.prerelease.localeCompare(version2.prerelease);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return 0;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Check if version satisfies a requirement
|
|
277
|
+
*/
|
|
278
|
+
satisfiesVersion(version: string, requirement: string): boolean {
|
|
279
|
+
// Simple implementation - can be extended with full semver range support
|
|
280
|
+
if (requirement === "*") return true;
|
|
281
|
+
|
|
282
|
+
if (requirement.startsWith("^")) {
|
|
283
|
+
// Caret range: compatible with version
|
|
284
|
+
const reqVersion = this.parseSemanticVersion(requirement.substring(1));
|
|
285
|
+
const curVersion = this.parseSemanticVersion(version);
|
|
286
|
+
|
|
287
|
+
return (
|
|
288
|
+
curVersion.major === reqVersion.major &&
|
|
289
|
+
(curVersion.minor > reqVersion.minor ||
|
|
290
|
+
(curVersion.minor === reqVersion.minor && curVersion.patch >= reqVersion.patch))
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (requirement.startsWith("~")) {
|
|
295
|
+
// Tilde range: patch-level changes
|
|
296
|
+
const reqVersion = this.parseSemanticVersion(requirement.substring(1));
|
|
297
|
+
const curVersion = this.parseSemanticVersion(version);
|
|
298
|
+
|
|
299
|
+
return (
|
|
300
|
+
curVersion.major === reqVersion.major &&
|
|
301
|
+
curVersion.minor === reqVersion.minor &&
|
|
302
|
+
curVersion.patch >= reqVersion.patch
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// Exact match
|
|
307
|
+
return this.compareVersions(version, requirement) === 0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Get user agent string for HTTP requests
|
|
312
|
+
*/
|
|
313
|
+
getUserAgent(): string {
|
|
314
|
+
const info = this.getVersion();
|
|
315
|
+
const pkg = this.getPackageInfo();
|
|
316
|
+
return `${pkg.name}/${info.full}`;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Get version for display/logging
|
|
321
|
+
*/
|
|
322
|
+
getDisplayVersion(): string {
|
|
323
|
+
const info = this.getVersion();
|
|
324
|
+
const pkg = this.getPackageInfo();
|
|
325
|
+
|
|
326
|
+
if (process.env.NODE_ENV === "development") {
|
|
327
|
+
return `${pkg.name} v${info.full} (development)`;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
return `${pkg.name} v${info.version}`;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Check if running in development mode
|
|
335
|
+
*/
|
|
336
|
+
isDevelopment(): boolean {
|
|
337
|
+
return process.env.NODE_ENV === "development";
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Check if running a prerelease version
|
|
342
|
+
*/
|
|
343
|
+
isPrerelease(): boolean {
|
|
344
|
+
const info = this.getVersion();
|
|
345
|
+
return !!info.prerelease;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Get version badge URL for documentation
|
|
350
|
+
*/
|
|
351
|
+
getVersionBadgeUrl(): string {
|
|
352
|
+
const info = this.getVersion();
|
|
353
|
+
const color = info.prerelease ? "orange" : "blue";
|
|
354
|
+
return `https://img.shields.io/badge/version-${info.version}-${color}`;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Singleton instance export for convenience
|
|
360
|
+
*/
|
|
361
|
+
export const versionManager = VersionManager.getInstance();
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Quick access functions
|
|
365
|
+
*/
|
|
366
|
+
export function getVersion(): string {
|
|
367
|
+
return versionManager.getVersion().version;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
export function getFullVersion(): string {
|
|
371
|
+
return versionManager.getVersion().full;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
export function getUserAgent(): string {
|
|
375
|
+
return versionManager.getUserAgent();
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
export function getDisplayVersion(): string {
|
|
379
|
+
return versionManager.getDisplayVersion();
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Semantic version comparison
|
|
384
|
+
*/
|
|
385
|
+
export function isVersionGreaterThan(v1: string, v2: string): boolean {
|
|
386
|
+
return versionManager.compareVersions(v1, v2) > 0;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export function isVersionLessThan(v1: string, v2: string): boolean {
|
|
390
|
+
return versionManager.compareVersions(v1, v2) < 0;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
export function isVersionEqual(v1: string, v2: string): boolean {
|
|
394
|
+
return versionManager.compareVersions(v1, v2) === 0;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Version requirement checking
|
|
399
|
+
*/
|
|
400
|
+
export function satisfiesVersion(version: string, requirement: string): boolean {
|
|
401
|
+
return versionManager.satisfiesVersion(version, requirement);
|
|
402
|
+
}
|