mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-02-06 05:23:08 +00:00
refactor: implement high-value code quality improvements
Implemented three high-value fixes identified in code review:
1. NPM Registry Response Validation (npm-version-checker.ts)
- Added NpmRegistryResponse TypeScript interface
- Added JSON parsing validation with try-catch error handling
- Added response structure validation (checking required fields)
- Added semver format validation with regex pattern
- Prevents crashes from malformed npm registry responses
2. TypeScript Type Safety (handlers-n8n-manager.ts)
- Added 5 comprehensive TypeScript interfaces:
* HealthCheckResponseData
* CloudPlatformGuide
* WorkflowValidationResponse
* DiagnosticResponseData
- Replaced 'any' types with proper interfaces in 6 locations
- Imported ExpressionFormatIssue from expression-format-validator
- Improved compile-time type checking and IDE support
3. Cache Hit Rate Calculation (handlers-n8n-manager.ts)
- Improved division-by-zero protection
- Changed condition from 'size > 0' to explicit operation count check
- More robust against edge cases in cache metrics
All changes verified with:
- TypeScript compilation (0 errors)
- Integration tests (195/195 passed)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,15 @@
|
||||
|
||||
import { logger } from './logger';
|
||||
|
||||
/**
|
||||
* NPM Registry Response structure
|
||||
* Based on npm registry JSON format for package metadata
|
||||
*/
|
||||
interface NpmRegistryResponse {
|
||||
version: string;
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export interface VersionCheckResult {
|
||||
currentVersion: string;
|
||||
latestVersion: string | null;
|
||||
@@ -71,8 +80,26 @@ export async function checkNpmVersion(forceRefresh: boolean = false): Promise<Ve
|
||||
return result;
|
||||
}
|
||||
|
||||
const data: any = await response.json();
|
||||
const latestVersion = data.version as string;
|
||||
// Parse and validate JSON response
|
||||
let data: unknown;
|
||||
try {
|
||||
data = await response.json();
|
||||
} catch (error) {
|
||||
throw new Error('Failed to parse npm registry response as JSON');
|
||||
}
|
||||
|
||||
// Validate response structure
|
||||
if (!data || typeof data !== 'object' || !('version' in data)) {
|
||||
throw new Error('Invalid response format from npm registry');
|
||||
}
|
||||
|
||||
const registryData = data as NpmRegistryResponse;
|
||||
const latestVersion = registryData.version;
|
||||
|
||||
// Validate version format (semver: x.y.z or x.y.z-prerelease)
|
||||
if (!latestVersion || !/^\d+\.\d+\.\d+/.test(latestVersion)) {
|
||||
throw new Error(`Invalid version format from npm registry: ${latestVersion}`);
|
||||
}
|
||||
|
||||
// Compare versions
|
||||
const isOutdated = compareVersions(currentVersion, latestVersion) < 0;
|
||||
|
||||
Reference in New Issue
Block a user