### Custom Request Libraries

There is another constructor parameter that allows the user to specify their custom request library. To specify the library, simply set the `requester` property when instantiating a service:

An example can be seen in the [Requester.ts](../packages/rest/src/Requester.ts) file.

```javascript
import { Gitlab } from '@gitbeaker/rest';
import YourCustomRequester from 'custom-requester';

const api = new Gitlab({
  host: 'http://example.com',
  token: 'personaltoken',
  requester: YourCustomRequester,
});
```

#### Handling HTTPS certificates

If your Gitlab server is running via HTTPS, the proper way to pass in your certificates is via a `NODE_EXTRA_CA_CERTS` environment key, like this:

```js
"scripts": {
    "start": "NODE_EXTRA_CA_CERTS=./secrets/3ShapeCA.pem node bot.js"
},
```

> **NOTE**: _Using `process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'` will not work with the `gitlab` library. The `rejectUnauthorized` key is the only way to allow insecure certificates to be bypassed._

#### Support for Node v16.18+

Since everything builds off fetch support, applying a poly fill will allow for Node v16.18 instead of 18+. ie:

1. Install node-fetch
2. Set the following in your entry point:

```js
const semver = require('semver')

if ( semver.lt(process.version, '20.0.0') ) {
  global.fetch = require('node-fetch')
}
```

#### Headers / Body Timeout Error

This is caused by the internal undici fetch implementation's dispatcher [defaults](https://github.com/nodejs/undici/issues/1373) for the headers and body timeout when performing a request. In the future we will support modifying these properties in a more defined way, but for now, once can override this by setting the global symbol at the beginning of your script:

```js
import { Agent } from 'undici'

globalThis[Symbol.for("undici.globalDispatcher.1")] = new Agent({
  headersTimeout: 0,
  bodyTimeout: 0,
});
```
