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 | 29x 29x 30x 3x 38x 38x 4x 34x 37x 37x 35x 2x 2x 13x | import { HeaderMissingError } from '../errors'
export function hasContentType(headers: Headers, ...expectedContentTypes: string[]) {
const contentType = headers.get('Content-Type')?.toLowerCase()
if (contentType) {
return expectedContentTypes.some((expectedContentType) => contentType.startsWith(expectedContentType))
}
return false
}
export function getHeaderOrThrow(headers: Headers, name: string) {
const value = headers.get(name)
if (!value) {
throw new HeaderMissingError(name)
}
return value
}
let localIp: string | undefined
export async function getIp(headers: Headers): Promise<string> {
const ip = headers.get('cf-connecting-ip')
if (ip) {
return ip
}
Iif (import.meta.env.MODE == 'dev') {
console.debug('Fetching local IP for dev mode')
if (localIp === undefined) {
const ipResponse = await fetch('https://checkip.amazonaws.com/')
const ip = await ipResponse.text()
localIp = ip.trim()
}
return localIp
}
throw new HeaderMissingError('cf-connecting-ip')
}
export function isDocumentDestination(headers: Headers) {
return headers.get('Sec-Fetch-Dest')?.includes('document')
}
|