UNPKG

@helia/verified-fetch

Version:

A fetch-like API for obtaining verified & trustless IPFS content on the web

43 lines (33 loc) 1.83 kB
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 }