UNPKG

manifest

Version:

Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard

95 lines 3.91 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var VersionCheckService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.VersionCheckService = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); let VersionCheckService = class VersionCheckService { static { VersionCheckService_1 = this; } config; logger = new common_1.Logger(VersionCheckService_1.name); cachedLatest = null; cacheExpiry = 0; static CACHE_TTL_MS = 24 * 60 * 60 * 1000; static FETCH_TIMEOUT_MS = 5000; static VERSION_RE = /^\d+\.\d+\.\d+$/; constructor(config) { this.config = config; } async onModuleInit() { if (!this.isEnabled()) return; this.fetchLatestVersion().catch(() => { }); } getCurrentVersion() { return this.config.get('MANIFEST_PACKAGE_VERSION', '0.0.0'); } getUpdateInfo() { if (!this.cachedLatest) return {}; const current = this.getCurrentVersion(); if (!this.isNewer(this.cachedLatest, current)) return {}; return { latestVersion: this.cachedLatest, updateAvailable: true }; } isNewer(latest, current) { const [lMaj, lMin, lPat] = latest.split('.').map(Number); const [cMaj, cMin, cPat] = current.split('.').map(Number); if (lMaj !== cMaj) return lMaj > cMaj; if (lMin !== cMin) return lMin > cMin; return lPat > cPat; } async fetchLatestVersion() { if (this.cachedLatest && Date.now() < this.cacheExpiry) { return this.cachedLatest; } try { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), VersionCheckService_1.FETCH_TIMEOUT_MS); const res = await fetch('https://registry.npmjs.org/manifest/latest', { signal: controller.signal, }); clearTimeout(timer); if (!res.ok) return null; const data = (await res.json()); const version = data?.version; if (!version || !VersionCheckService_1.VERSION_RE.test(version)) { return null; } this.cachedLatest = version; this.cacheExpiry = Date.now() + VersionCheckService_1.CACHE_TTL_MS; this.logger.log(`Latest manifest version: ${version}`); return version; } catch { this.logger.debug('Failed to check for updates'); return null; } } isEnabled() { if (this.config.get('MANIFEST_MODE') !== 'local') return false; const opt = this.config.get('MANIFEST_UPDATE_CHECK_OPTOUT'); if (opt === '1' || opt === 'true') return false; return true; } }; exports.VersionCheckService = VersionCheckService; exports.VersionCheckService = VersionCheckService = VersionCheckService_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [config_1.ConfigService]) ], VersionCheckService); //# sourceMappingURL=version-check.service.js.map