All files / src/handlers handleDownloadScript.ts

100% Statements 22/22
100% Branches 0/0
100% Functions 4/4
100% Lines 21/21

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 424x             4x     24x       24x   24x 24x 24x 24x 24x   24x 24x   24x 24x 24x 24x 24x   24x     4x 24x 24x   1x      
import {
  fetchCacheable,
  addTrafficMonitoringSearchParamsForProCDN,
  createFallbackErrorResponse,
  getAgentScriptEndpoint,
  createResponseWithMaxAge,
} from '../utils'
import { getCdnUrl, WorkerEnv } from '../env'
 
function copySearchParams(oldURL: URL, newURL: URL): void {
  newURL.search = new URLSearchParams(oldURL.search).toString()
}
 
function makeDownloadScriptRequest(request: Request, env: WorkerEnv): Promise<Response> {
  const cdnUrl = getCdnUrl(env)!
 
  const oldURL = new URL(request.url)
  const agentScriptEndpoint = getAgentScriptEndpoint(cdnUrl, 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, env: WorkerEnv): Promise<Response> {
  try {
    return await makeDownloadScriptRequest(request, env)
  } catch (e) {
    return createFallbackErrorResponse(e)
  }
}