Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 2x 2x 11x 2x 11x 11x 11x 11x 11x 11x 11x 11x 10x 10x 10x 10x 10x 10x 10x 11x 1x 1x 11x 11x 11x | import { AgentOptions } from '../model'
import { CloudFrontResultResponse } from 'aws-lambda'
import https from 'https'
import { updateResponseHeadersForAgentDownload, addTrafficMonitoringSearchParamsForProCDN } from '../utils'
function copySearchParams(oldSearchString: string, newURL: URL): void {
newURL.search = oldSearchString
}
export function downloadAgent(options: AgentOptions): Promise<CloudFrontResultResponse> {
return new Promise((resolve) => {
const data: any[] = []
const url = new URL(`https://${options.fpCdnUrl}`)
url.pathname = getEndpoint(options.apiKey, options.version, options.loaderVersion)
copySearchParams(options.querystring, url)
addTrafficMonitoringSearchParamsForProCDN(url)
console.debug(`Downloading agent from: ${url.toString()}`)
const request = https.request(
url,
{
method: options.method,
headers: options.headers,
},
(response) => {
let binary = false
Iif (response.headers['content-encoding']) {
binary = true
}
response.setEncoding(binary ? 'binary' : 'utf8')
response.on('data', (chunk) => data.push(Buffer.from(chunk, 'binary')))
response.on('end', () => {
const body = Buffer.concat(data)
resolve({
status: response.statusCode ? response.statusCode.toString() : '500',
statusDescription: response.statusMessage,
headers: updateResponseHeadersForAgentDownload(response.headers),
bodyEncoding: 'base64',
body: body.toString('base64'),
})
})
}
)
request.on('error', (error) => {
console.error('unable to download agent', { error })
resolve({
status: '500',
statusDescription: 'Bad request',
headers: {},
bodyEncoding: 'text',
body: 'error',
})
})
request.end()
})
}
function getEndpoint(apiKey: string | undefined, version: string, loaderVersion: string | undefined): string {
const lv: string = loaderVersion !== undefined && loaderVersion !== '' ? `/loader_v${loaderVersion}.js` : ''
return `/v${version}/${apiKey}${lv}`
}
|