electron-info
Version:
Get useful data about Electron releases.
39 lines (38 loc) • 1.47 kB
JavaScript
import logdown from 'logdown';
import fs from 'node:fs/promises';
import { inspect } from 'node:util';
export class HTTPService {
constructor(options) {
this.options = options;
this.logger = logdown('electron-info/HTTPService', {
logger: console,
markdown: false,
});
if (this.options.debug) {
this.logger.state.isEnabled = true;
}
this.logger.log('Initialized', this.options);
}
async downloadReleasesFile(downloadUrl, targetFile) {
this.logger.log('Downloading releases file:', { downloadUrl, targetFile });
// eslint-disable-next-line no-useless-assignment
let releases = [];
try {
const response = await fetch(downloadUrl, { signal: AbortSignal.timeout(this.options.timeout) });
if (!response.ok) {
throw new Error(response.statusText);
}
releases = (await response.json());
}
catch (error) {
throw new Error(`Request failed: "${error.message}"`, { cause: error });
}
// eslint-disable-next-line no-magic-numbers
this.logger.info('Received data from server:', inspect(releases).toString().slice(0, 40), '...');
if (!Array.isArray(releases)) {
throw new Error('Invalid data received from server');
}
await fs.writeFile(targetFile, JSON.stringify(releases));
return releases;
}
}