All files / src/handlers handleDownloadScript.ts

100% Statements 20/20
100% Branches 0/0
100% Functions 4/4
100% Lines 19/19

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 394x                 22x       22x 22x 22x 22x 22x   22x 22x   22x 22x 22x 22x 22x   22x     4x 22x 22x   1x      
import {
  fetchCacheable,
  addTrafficMonitoringSearchParamsForProCDN,
  createFallbackErrorResponse,
  getAgentScriptEndpoint,
  createResponseWithMaxAge,
} from '../utils'
 
function copySearchParams(oldURL: URL, newURL: URL): void {
  newURL.search = new URLSearchParams(oldURL.search).toString()
}
 
function makeDownloadScriptRequest(request: Request): Promise<Response> {
  const oldURL = new URL(request.url)
  const agentScriptEndpoint = getAgentScriptEndpoint(oldURL.searchParams)
  const newURL = new URL(agentScriptEndpoint)
  copySearchParams(oldURL, newURL)
  addTrafficMonitoringSearchParamsForProCDN(newURL)
 
  const headers = new Headers(request.headers)
  headers.delete('Cookie')
 
  console.log(`Downloading script from cdnEndpoint ${newURL.toString()}...`)
  const newRequest = new Request(newURL.toString(), new Request(request, { headers }))
  const workerCacheTtl = 60
  const maxMaxAge = 60 * 60
  const maxSMaxAge = 60
 
  return fetchCacheable(newRequest, workerCacheTtl).then((res) => createResponseWithMaxAge(res, maxMaxAge, maxSMaxAge))
}
 
export async function handleDownloadScript(request: Request): Promise<Response> {
  try {
    return await makeDownloadScriptRequest(request)
  } catch (e) {
    return createFallbackErrorResponse(e)
  }
}