standard-json-api-connectors
Version:
Standardized HTTP JSON requests with standardized errors.
29 lines (25 loc) • 904 B
JavaScript
import qs from 'qs'
import throwOnError from './helpers/throwOnError.js'
import createResponseObject from './helpers/createResponseObject.js'
import { CorsError } from 'standard-api-errors'
export default (fetch, apiUrl, generateRoute, generateHeaderFields = () => ({}), options = {}) => async (params, query) => {
const queryString = qs.stringify(query, { encodeValuesOnly: true })
let response
const requestOptions = {
method: 'GET',
headers: {
...generateHeaderFields(params),
'Content-Type': 'application/json'
}
}
if (options.timeout) {
requestOptions.signal = AbortSignal.timeout(options.timeout)
}
try {
response = await fetch(`${apiUrl}${generateRoute(params)}${queryString ? `?${queryString}` : ''}`, requestOptions)
} catch (error) {
throw new CorsError()
}
await throwOnError(response)
return await createResponseObject(response)
}