get-asset.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const { Octokit } = require('@octokit/rest');
  2. const got = require('got');
  3. const octokit = new Octokit({
  4. userAgent: 'electron-asset-fetcher',
  5. auth: process.env.ELECTRON_GITHUB_TOKEN
  6. });
  7. async function getAssetContents (repo, assetId) {
  8. const requestOptions = octokit.repos.getReleaseAsset.endpoint({
  9. owner: 'electron',
  10. repo,
  11. asset_id: assetId,
  12. headers: {
  13. Accept: 'application/octet-stream'
  14. }
  15. });
  16. const { url, headers } = requestOptions;
  17. headers.authorization = `token ${process.env.ELECTRON_GITHUB_TOKEN}`;
  18. const response = await got(url, {
  19. followRedirect: false,
  20. method: 'HEAD',
  21. headers
  22. });
  23. if (!response.headers.location) {
  24. console.error(response.headers, `${response.body}`.slice(0, 300));
  25. throw new Error(`cannot find asset[${assetId}], asset download did not redirect`);
  26. }
  27. const fileResponse = await got(response.headers.location);
  28. if (fileResponse.statusCode !== 200) {
  29. console.error(fileResponse.headers, `${fileResponse.body}`.slice(0, 300));
  30. throw new Error(`cannot download asset[${assetId}] from ${response.headers.location}, got status: ${fileResponse.status}`);
  31. }
  32. return fileResponse.body;
  33. }
  34. module.exports = {
  35. getAssetContents
  36. };