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 | 4x 38x 38x 38x 38x 38x 38x 38x 28x 28x 28x 28x 28x 28x 28x 28x 28x 10x 10x 10x 10x 10x 10x 4x 38x 10x 10x 2x 28x 28x 3x | import { WorkerEnv } from '../env'
import {
addProxyIntegrationHeaders,
addTrafficMonitoringSearchParamsForVisitorIdRequest,
createErrorResponseForIngress,
filterCookies,
getVisitorIdEndpoint,
createFallbackErrorResponse,
} from '../utils'
function copySearchParams(oldURL: URL, newURL: URL): void {
newURL.search = new URLSearchParams(oldURL.search).toString()
}
function createRequestURL(receivedRequestURL: string, routeMatches: RegExpMatchArray | undefined) {
const routeSuffix = routeMatches ? routeMatches[1] : undefined
const oldURL = new URL(receivedRequestURL)
const endpoint = getVisitorIdEndpoint(oldURL.searchParams, routeSuffix)
const newURL = new URL(endpoint)
copySearchParams(oldURL, newURL)
return newURL
}
async function makeIngressRequest(
receivedRequest: Request,
env: WorkerEnv,
routeMatches: RegExpMatchArray | undefined
) {
const requestURL = createRequestURL(receivedRequest.url, routeMatches)
addTrafficMonitoringSearchParamsForVisitorIdRequest(requestURL)
let headers = new Headers(receivedRequest.headers)
headers = filterCookies(headers, (key) => key === '_iidt')
addProxyIntegrationHeaders(headers, receivedRequest.url, env)
const body = await (receivedRequest.headers.get('Content-Type') ? receivedRequest.blob() : Promise.resolve(null))
console.log(`sending ingress request to ${requestURL}...`)
const request = new Request(requestURL, new Request(receivedRequest, { headers, body }))
return fetch(request).then((oldResponse) => new Response(oldResponse.body, oldResponse))
}
function makeCacheEndpointRequest(receivedRequest: Request, routeMatches: RegExpMatchArray | undefined) {
const requestURL = createRequestURL(receivedRequest.url, routeMatches)
const headers = new Headers(receivedRequest.headers)
headers.delete('Cookie')
console.log(`sending cache request to ${requestURL}...`)
const request = new Request(requestURL, new Request(receivedRequest, { headers }))
return fetch(request).then((oldResponse) => new Response(oldResponse.body, oldResponse))
}
export async function handleIngressAPI(request: Request, env: WorkerEnv, routeMatches: RegExpMatchArray | undefined) {
if (request.method === 'GET') {
try {
return await makeCacheEndpointRequest(request, routeMatches)
} catch (e) {
return createFallbackErrorResponse(e)
}
}
try {
return await makeIngressRequest(request, env, routeMatches)
} catch (e) {
return createErrorResponseForIngress(request, e)
}
}
|