get-release npm module
Consider using a hashmap of provider -&gt; process. This will enable you to register new providers with relative ease.
async function githubRelease({user, repo, part = &quot;&quot;}) {
  let json = (await (await fetch(`https://api.github.com/repos/${user}/${repo}/releases/latest`)).json())
  if (json.message === &quot;Not Found&quot;) throw &quot;Invalid repository&quot;
  if (!(&quot;assets&quot; in json)) throw &quot;Rate limit exceeded&quot;
  let browser_download_urls = json.assets.map(asset =&gt; asset.browser_download_url)
  return browser_download_urls.filter(url =&gt; url.includes(part))
}

It will then be mapped inside the getRelease function as follows:
module.exports.getRelease = async ({provider, user, repo, part = &quot;&quot;}) =&gt; {
    if !(providerMethods[normalise(provider)]) {
        throw &quot;Invalid provider&quot;
    }
    return providerMethods[normalise(provider)](user, repo, part)
}

where providerMethods would be:
let providerMethods = {
    normalise(&quot;github&quot;): githubReleases
}

This will enable users of your module to register new (or private) registry providers. They can add a new provider to the providerMethods object (gitlab etc) and don't have to wait for you to update the library first for supporting any extra providers (you can add providers if popular).
The await (await fetch()).json() can be extracted to another function. Although, I'd prefer using the promise.then(r =&gt; r.json()).catch() chain over multiple awaits, it is entirely dependent on your comfort with the language.