@@ -1024,25 +1024,28 @@ async function handleWikisearch(request) {
10241024 api ,
10251025 api . replace ( 'https://wiki.archlinux.org/api.php' , 'https://iso.acreetionos.org:8448/wikiapi.php' )
10261026 ] ;
1027- let lastErr = 'no attempt' ;
1027+ const attempts = [ ] ;
10281028 for ( const upstreamUrl of upstreams ) {
1029+ let lastErr = '' ;
10291030 try {
10301031 const upstream = await fetch ( upstreamUrl , {
10311032 headers : { 'User-Agent' : CHROME_UA , 'Accept' : 'application/json' } ,
10321033 signal : AbortSignal . timeout ( 10000 )
10331034 } ) ;
1034- if ( ! upstream . ok ) { lastErr = 'HTTP ' + upstream . status ; continue ; }
1035- const data = await upstream . json ( ) ;
1035+ if ( ! upstream . ok ) { lastErr += ' [HTTP ' + upstream . status + ']' ; continue ; }
1036+ const ct = ( upstream . headers . get ( 'content-type' ) || '' ) . slice ( 0 , 40 ) ;
1037+ const data = await upstream . json ( ) . catch ( e => { throw new Error ( 'parse(' + ct + '): ' + e . message ) ; } ) ;
10361038 const out = jsonResponse ( data , {
10371039 headers : { 'Cache-Control' : 'public, max-age=3600' }
10381040 } , request ) ;
10391041 await cache . put ( cacheKey , out . clone ( ) ) ;
10401042 return out ;
10411043 } catch ( err ) {
1042- lastErr = String ( err && err . message || err ) . slice ( 0 , 120 ) ;
1044+ lastErr = String ( err && err . message || err ) . slice ( 0 , 160 ) ;
10431045 }
1046+ attempts . push ( { url : upstreamUrl . slice ( 8 , 40 ) , result : lastErr || 'ok' } ) ;
10441047 }
1045- return jsonResponse ( { error : 'Wiki upstream unreachable' , detail : lastErr } , { status : 502 } , request ) ;
1048+ return jsonResponse ( { error : 'Wiki upstream unreachable' , attempts } , { status : 502 } , request ) ;
10461049}
10471050
10481051async function handleChangelog ( env ) {
0 commit comments