api/utils: retry getting redirecting url with fetch() if request() fails

This commit is contained in:
jj 2025-04-02 12:29:18 +00:00
parent a6240d0192
commit f5df78ffec
No known key found for this signature in database

View File

@ -2,16 +2,25 @@ import { request } from 'undici';
const redirectStatuses = new Set([301, 302, 303, 307, 308]);
export async function getRedirectingURL(url, dispatcher, headers) {
const location = await request(url, {
const params = {
dispatcher,
method: 'HEAD',
headers: headers
}).then(r => {
headers,
redirect: 'manual'
};
let location = await request(url, params).then(r => {
if (redirectStatuses.has(r.statusCode) && r.headers['location']) {
return r.headers['location'];
}
}).catch(() => null);
location ??= await fetch(url, params).then(r => {
if (redirectStatuses.has(r.status) && r.headers.has('location')) {
return r.headers.get('location');
}
}).catch(() => null);
return location;
}