[[transport]]
=== Transport

This class is responsible for performing the request to {es} and handling
errors, it also handles sniffing.

[source,js]
----
const { Client } = require('@elastic/elasticsearch')
const { Transport } = require('@elastic/transport')

class MyTransport extends Transport {
  request (params, options, callback) {
    // your code
  }
}

const client = new Client({
    Transport: MyTransport
})
----

Sometimes you need to inject a small snippet of your code and then continue to
use the usual client code. In such cases, call `super.method`:

[source,js]
----
class MyTransport extends Transport {
  request (params, options, callback) {
    // your code
    return super.request(params, options, callback)
  }
}
----

==== Supported content types

Depending on the `content-type` of the response, the transport will return the body as different types:

[cols="1,1"]
|===
|Content-Type |JavaScript type

|`application/json`
|`object`

|`text/plain`
|`string`

|`application/vnd.elasticsearch+json`
|`object`

|`application/vnd.mapbox-vector-tile`
|`Buffer`

|`application/vnd.apache.arrow.stream`
|`Buffer`

|`application/vnd.elasticsearch+arrow+stream`
|`Buffer`

|`application/smile`
|`Buffer`

|`application/vnd.elasticsearch+smile`
|`Buffer`

|`application/cbor`
|`Buffer`

|`application/vnd.elasticsearch+cbor`
|`Buffer`
|===
