import * as http from 'http'; import { Product } from './interfaces/ISettings'; import verifyProductName from './verifyProductName'; export default function getFileContents(product: Product, from: number, to: number): Promise { return new Promise((resolve, reject) => { if (!verifyProductName(product)) { return reject(`"${product}" is not a valid product.`); } //TODO: also verify from and to //Generate URL const path = `/patch/${product}/${product}_${from}to${to}.solidpkg`; const request = http.request({ family: 4, host: 'cdn-patch.swtor.com', path, }, (response) => { if (response.statusCode !== 200) { return reject(`Expected status code 200 but received ${response.statusCode}`); } const headerLength = Number(response.headers['content-length']); const chunkList: Buffer[] = []; let totalLength = 0; response.on('data', (chunk: Buffer) => { chunkList.push(chunk); totalLength += chunk.length; }); response.on('end', () => { if (totalLength !== headerLength) { return reject(`Expected length ${headerLength} but received ${totalLength}`); } const fileContents = Buffer.concat(chunkList, totalLength); resolve(fileContents); }); }); request.on('error', (e) => { reject(e); }); request.end(); }); }