in generate-attribution/generate-attribution-file.js [209:254]
async function getPackageRepo(package) {
let finalDoc = '';
let url = `https://${package}?go-get=1`
const options = await generateAuthorizationHeader()
options.timeout = 15 * 1000
return cacheHttp(url, async (bail, num) => {
try {
// Github doesnt seem to return the go-import for sub packages, only request for root packages
if (package.startsWith('github.com') && package.split("/").length > 3) {
return parseRepoURL(`https://${package}`);
}
const res = await get(url, options);
res.on('data', d => {
finalDoc += d;
});
await res.end;
if (res.statusCode === 429) {
throw new Error("Rate limited");
}
if (res.statusCode === 404) {
console.log('NOTICE: request to get package url return invalid response', res.statusCode, url);
return `https://${package}`;
}
if (res.statusCode !== 200) {
throw new Error("invalid response", res.statusCode);
}
const htmlDoc = HTMLParser.parse(finalDoc);
const metaTag = htmlDoc.querySelector('head meta[name=go-import]')
if (metaTag) {
return parseRepoURL(metaTag.getAttribute('content'));
}
else {
return `https://${package}`;
}
} catch (err) {
// if the domain is not resolved, only retry 3 times
if (err.code === 'ENOTFOUND' && num > 2) {
return bail(err);
}
throw err
}
});
}