@helia/verified-fetch
Version:
A fetch-like API for obtaining verified & trustless IPFS content on the web
43 lines (33 loc) • 1.83 kB
text/typescript
import { isExplicitAcceptHeader, isExplicitFormatQuery, isExplicitIpldAcceptRequest } from './is-accept-explicit.js'
import { queryFormatToAcceptHeader } from './select-output-type.js'
import type { ParsedUrlStringResults } from './parse-url-string.js'
import type { ComponentLogger } from '@libp2p/interface'
export interface ResolvedAcceptHeaderOptions {
query?: ParsedUrlStringResults['query']
headers?: RequestInit['headers']
logger: ComponentLogger
}
export function getResolvedAcceptHeader ({ query, headers, logger }: ResolvedAcceptHeaderOptions): string | undefined {
const log = logger.forComponent('helia:verified-fetch:get-resolved-accept-header')
const requestHeaders = new Headers(headers)
const incomingAcceptHeader = requestHeaders.get('accept') ?? undefined
if (incomingAcceptHeader != null) {
log('incoming accept header "%s"', incomingAcceptHeader)
}
if (!isExplicitIpldAcceptRequest({ query, headers: requestHeaders })) {
log('no explicit IPLD content-type requested, returning incoming accept header %s', incomingAcceptHeader)
return incomingAcceptHeader
}
const queryFormatMapping = queryFormatToAcceptHeader(query?.format)
if (query?.format != null) {
log('incoming query format "%s", mapped to %s', query.format, queryFormatMapping)
}
let acceptHeader = incomingAcceptHeader
// if the incomingAcceptHeader is autogenerated by the requesting client (browser/curl/fetch/etc) then we may need to override it if query.format is specified
if (!isExplicitAcceptHeader(requestHeaders) && isExplicitFormatQuery(query)) {
log('accept header not recognized, but query format provided, setting accept header to %s', queryFormatMapping)
acceptHeader = queryFormatMapping
}
log('resolved accept header to "%s"', acceptHeader)
return acceptHeader
}