1 import { createWriteStream, remove } from 'fs-extra'
2 import { request as requestHTTP } from 'http'
3 import { request as requestHTTPS, RequestOptions } from 'https'
4 import { logger } from './logger'
6 export function downloadFile (options: {
12 const { url, destination, runnerToken, jobToken } = options
14 logger.debug(`Downloading file ${url}`)
16 return new Promise<void>((res, rej) => {
17 const parsed = new URL(url)
19 const body = JSON.stringify({
24 const getOptions: RequestOptions = {
26 hostname: parsed.hostname,
28 path: parsed.pathname,
30 'Content-Type': 'application/json',
31 'Content-Length': Buffer.byteLength(body, 'utf-8')
35 const request = getRequest(url)(getOptions, response => {
36 const code = response.statusCode ?? 0
39 return rej(new Error(response.statusMessage))
42 const file = createWriteStream(destination)
43 file.on('finish', () => res())
48 request.on('error', err => {
50 .catch(err => logger.error(err))
60 // ---------------------------------------------------------------------------
62 function getRequest (url: string) {
63 if (url.startsWith('https://')) return requestHTTPS