Skip to main content
Glama
npm-version-checker.js4.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkNpmVersion = checkNpmVersion; exports.compareVersions = compareVersions; exports.clearVersionCheckCache = clearVersionCheckCache; exports.formatVersionMessage = formatVersionMessage; const logger_1 = require("./logger"); let versionCheckCache = null; let lastCheckTime = 0; const CACHE_TTL_MS = 1 * 60 * 60 * 1000; async function checkNpmVersion(forceRefresh = false) { const now = Date.now(); if (!forceRefresh && versionCheckCache && (now - lastCheckTime) < CACHE_TTL_MS) { logger_1.logger.debug('Returning cached npm version check result'); return versionCheckCache; } const packageJson = require('../../package.json'); const currentVersion = packageJson.version; try { const response = await fetch('https://registry.npmjs.org/n8n-mcp/latest', { headers: { 'Accept': 'application/json', }, signal: AbortSignal.timeout(5000) }); if (!response.ok) { logger_1.logger.warn('Failed to fetch npm version info', { status: response.status, statusText: response.statusText }); const result = { currentVersion, latestVersion: null, isOutdated: false, updateAvailable: false, error: `npm registry returned ${response.status}`, checkedAt: new Date() }; versionCheckCache = result; lastCheckTime = now; return result; } let data; try { data = await response.json(); } catch (error) { throw new Error('Failed to parse npm registry response as JSON'); } if (!data || typeof data !== 'object' || !('version' in data)) { throw new Error('Invalid response format from npm registry'); } const registryData = data; const latestVersion = registryData.version; if (!latestVersion || !/^\d+\.\d+\.\d+/.test(latestVersion)) { throw new Error(`Invalid version format from npm registry: ${latestVersion}`); } const isOutdated = compareVersions(currentVersion, latestVersion) < 0; const result = { currentVersion, latestVersion, isOutdated, updateAvailable: isOutdated, error: null, checkedAt: new Date(), updateCommand: isOutdated ? `npm install -g n8n-mcp@${latestVersion}` : undefined }; versionCheckCache = result; lastCheckTime = now; logger_1.logger.debug('npm version check completed', { current: currentVersion, latest: latestVersion, outdated: isOutdated }); return result; } catch (error) { logger_1.logger.warn('Error checking npm version', { error: error instanceof Error ? error.message : String(error) }); const result = { currentVersion, latestVersion: null, isOutdated: false, updateAvailable: false, error: error instanceof Error ? error.message : 'Unknown error', checkedAt: new Date() }; versionCheckCache = result; lastCheckTime = now; return result; } } function compareVersions(v1, v2) { const clean1 = v1.replace(/^v/, ''); const clean2 = v2.replace(/^v/, ''); const parts1 = clean1.split('.').map(n => parseInt(n, 10) || 0); const parts2 = clean2.split('.').map(n => parseInt(n, 10) || 0); for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) { const p1 = parts1[i] || 0; const p2 = parts2[i] || 0; if (p1 < p2) return -1; if (p1 > p2) return 1; } return 0; } function clearVersionCheckCache() { versionCheckCache = null; lastCheckTime = 0; } function formatVersionMessage(result) { if (result.error) { return `Version check failed: ${result.error}. Current version: ${result.currentVersion}`; } if (!result.latestVersion) { return `Current version: ${result.currentVersion} (latest version unknown)`; } if (result.isOutdated) { return `⚠️ Update available! Current: ${result.currentVersion} → Latest: ${result.latestVersion}`; } return `✓ You're up to date! Current version: ${result.currentVersion}`; } //# sourceMappingURL=npm-version-checker.js.map

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/czlonkowski/n8n-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server