in packages/enterprise-search-universal/src/client.ts [85:136]
async transportRequest<T = unknown>(params: RequestParams, options?: RequestOptions): Promise<T> {
const requestOptions: RequestInit = {
method: params.method,
headers: new Headers({ authorization: this._token }),
signal: options?.signal
}
if (this._metaHeader != null) {
// @ts-expect-error
requestOptions.headers.set('x-elastic-client-meta', this._metaHeader)
}
if (params.body != null && typeof params.body === 'object') {
requestOptions.body = JSON.stringify(params.body)
// @ts-expect-error
requestOptions.headers.set('content-type', 'application/json')
}
for (const header in options?.headers) {
// @ts-expect-error
requestOptions.headers.set(header, options.headers[header])
}
const url = new URL(params.path, this._url)
for (const param in params.querystring) {
if (Array.isArray(params.querystring[param])) {
for (const element of params.querystring[param]) {
url.searchParams.append(`${param}[]`, element)
}
} else if (typeof params.querystring[param] === 'object' && params.querystring[param] !== null) {
// it only works for flat objects
for (const key in params.querystring[param]) {
url.searchParams.append(`${param}[${key}]`, params.querystring[param][key])
}
} else {
url.searchParams.set(param, params.querystring[param])
}
}
const response = await fetch(url.toString(), requestOptions)
let body = await response.text()
if (response.headers.get('content-type')?.includes('json') === true && body !== '') {
body = JSON.parse(body)
}
if (!response.ok) {
throw new ResponseError('Response error', response.status, body)
}
// @ts-expect-error
return body
}