manifest
Version:
Self-hosted Manifest LLM router with embedded server, SQLite database, and dashboard
95 lines • 3.91 kB
JavaScript
"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