interface VersionPlan {
currentVersion: string;
recommendations: Array<{
type: 'upgrade' | 'downgrade' | 'maintain';
reason: string;
}>;
metadata: {
timestamp: number;
};
}
class VersionPlanner {
private readonly targetVersion = '1.9.0';
private readonly minCompatibleVersion = '1.8.0';
async planVersion(): Promise<VersionPlan> {
const version = await connection.getVersion();
const currentVersion = version['solana-core'];
const recommendations: Array<{
type: 'upgrade' | 'downgrade' | 'maintain';
reason: string;
}> = [];
// Check for version compatibility
if (!this.checkCompatibility(currentVersion)) {
recommendations.push({
type: 'upgrade',
reason: `Current version (${currentVersion}) is not compatible with minimum version (${this.minCompatibleVersion})`
});
}
// Check for target version
if (this.compareVersions(currentVersion, this.targetVersion) < 0) {
recommendations.push({
type: 'upgrade',
reason: `Current version (${currentVersion}) is below target version (${this.targetVersion})`
});
}
return {
currentVersion,
recommendations,
metadata: {
timestamp: Date.now()
}
};
}
private checkCompatibility(currentVersion: string): boolean {
const [currentMajor, currentMinor] = currentVersion.split('.').map(Number);
const [minMajor, minMinor] = this.minCompatibleVersion.split('.').map(Number);
return currentMajor > minMajor ||
(currentMajor === minMajor && currentMinor >= minMinor);
}
private compareVersions(v1: string, v2: string): number {
const [major1, minor1, patch1] = v1.split('.').map(Number);
const [major2, minor2, patch2] = v2.split('.').map(Number);
if (major1 !== major2) return major1 - major2;
if (minor1 !== minor2) return minor1 - minor2;
return patch1 - patch2;
}
}