11import express from "express" ;
2+ import internalRemoteVersion from "../internal/remote-version.js" ;
23import { debug , express as logger } from "../logger.js" ;
3- import pjson from "../package.json" with { type : "json" } ;
4- import https from "node:https" ;
5- import { ProxyAgent } from "proxy-agent" ;
64
75const router = express . Router ( {
86 caseSensitive : true ,
@@ -24,78 +22,19 @@ router
2422 *
2523 * Check for available updates
2624 */
27- . get ( async ( req , res , next ) => {
25+ . get ( async ( req , res , _next ) => {
2826 try {
29- const agent = new ProxyAgent ( ) ;
30- const url = "https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest" ;
31-
32- const data = await new Promise ( ( resolve , reject ) => {
33- https
34- . get ( url , { agent } , ( response ) => {
35- if ( response . statusCode !== 200 ) {
36- reject ( new Error ( `GitHub API returned ${ response . statusCode } ` ) ) ;
37- return ;
38- }
39-
40- response . setEncoding ( "utf8" ) ;
41- let raw_data = "" ;
42-
43- response . on ( "data" , ( chunk ) => {
44- raw_data += chunk ;
45- } ) ;
46-
47- response . on ( "end" , ( ) => {
48- try {
49- resolve ( JSON . parse ( raw_data ) ) ;
50- } catch ( err ) {
51- reject ( err ) ;
52- }
53- } ) ;
54- } )
55- . on ( "error" , ( err ) => {
56- reject ( err ) ;
57- } ) ;
58- } ) ;
59-
60- const latestVersion = data . tag_name ;
61-
62- const version = pjson . version . split ( "-" ) . shift ( ) . split ( "." ) ;
63- const currentVersion = `v${ version [ 0 ] } .${ version [ 1 ] } .${ version [ 2 ] } ` ;
64-
65- res . status ( 200 ) . send ( {
66- current : currentVersion ,
67- latest : latestVersion ,
68- updateAvailable : compareVersions ( currentVersion , latestVersion ) ,
69- } ) ;
27+ const data = await internalRemoteVersion . get ( ) ;
28+ res . status ( 200 ) . send ( data ) ;
7029 } catch ( error ) {
7130 debug ( logger , `${ req . method . toUpperCase ( ) } ${ req . path } : ${ error } ` ) ;
31+ // Send 200 even though there's an error to avoid triggering update checks repeatedly
7232 res . status ( 200 ) . send ( {
7333 current : null ,
7434 latest : null ,
75- updateAvailable : false ,
35+ update_available : false ,
7636 } ) ;
7737 }
7838 } ) ;
7939
80- /**
81- * Compare two version strings
82- *
83- */
84- function compareVersions ( current , latest ) {
85- const cleanCurrent = current . replace ( / ^ v / , "" ) ;
86- const cleanLatest = latest . replace ( / ^ v / , "" ) ;
87-
88- const currentParts = cleanCurrent . split ( "." ) . map ( Number ) ;
89- const latestParts = cleanLatest . split ( "." ) . map ( Number ) ;
90-
91- for ( let i = 0 ; i < Math . max ( currentParts . length , latestParts . length ) ; i ++ ) {
92- const curr = currentParts [ i ] || 0 ;
93- const lat = latestParts [ i ] || 0 ;
94-
95- if ( lat > curr ) return true ;
96- if ( lat < curr ) return false ;
97- }
98- return false ;
99- }
100-
10140export default router ;
0 commit comments