# HTTP Client

## TS SDK HTTP Client <a href="#ts-sdk-http-client" id="ts-sdk-http-client"></a>

### Default HTTP Client <a href="#default-http-client" id="default-http-client"></a>

The SDK uses [@endless-labs/endless-client](https://www.npmjs.com/package/@endless-labs/endless-client) library with the ability to modify some request configurations like AUTH\_TOKEN, HEADERS, etc.

The @endless-labs/endless-client package supports `http2` protocol and implements 2 clients environment based:

* **axios** - To use in a browser environment (in a browser env it is up to the browser and the server to negotiate http2 connection)
* **got** - To use in a node environment (to support http2 in node environment, still the server must support http2 also)

### Custom HTTP Client <a href="#custom-http-client" id="custom-http-client"></a>

Sometimes developers want to set custom configurations or use a specific http client for queries.

The SDK supports a custom client configuration as a function with this signature:

```js
<Req, Res>(requestOptions: ClientRequest<Req>): Promise<ClientResponse<Res>>
```

:::note Both `ClientRequest` and `ClientResponse` are types defined in the SDK. :::

```js
async function customClient<Req, Res>(requestOptions: ClientRequest<Req>): Promise<ClientResponse<Res>> {
  ....
}

const config = new EndlessConfig({ client: { provider: customClient } });
const endless = new Endless(config);
```
