# Revolugo Booking API Client

The Revolugo Booking API Client provides convenient access to the Revolugo Booking API from
applications written in server-side JavaScript or for browser based applications. This client exposes Typescript types.

See the [Revolugo Booking API documentation](https://booking-api.revolugo.com/v1/documentation).

````

## Getting Started

### Import & Configure

```js
import { ApiClient } from '@revolugo/booking-api-client'

const revolugoApiClient = new ApiClient({
  apiEnvironment: Revolugo.Environment.Production,
  apiKey: '<public-or-private-api-key-here>',
  apiVersion: 'v1',
})
````

#### Configuration

| Option           | Default  | Description                                                  |
| ---------------- | -------- | ------------------------------------------------------------ | -------------------- | -------- | -------- | ---------------------------------------------- |
| `apiEnvironment` | Required | Target environment for the client (Environment.Production \  | Environment.Sandbox) | `apiKey` | Required | Public or Private Api Key provided by Revolugo |
| `apiVersion`     | Required | Api version                                                  |

## Usage

See the [Revolugo Booking API documentation](https://booking-api.revolugo.com/v1/documentation) for details about request/reponse data.

```js
const hotelOfferRequest = await revolugoApiClient.hotelOfferRequests.create({
  adult_count: 5,
  check_in_date: '2021-05-30',
  check_out_date: '2021-06-02',
  children: '2,8',
  latitude: 45.76405021831942,
  longitude: 4.835700988769532,
  room_count: 3,
  source_market: 'FR',
})
```

### Polling

Some endpoints require polling to get the complete result. Polling is already handled by the library:

```js
revolugoApiClient.hotelOffers.list(
  {
    currency: HotelOffersCurrencyEnum.Eur,
    hotelOfferRequestId: 'xxxx-xxxx-xxxx-xxxx-xxxx',
  },
  (err, result) => {
    if (err) {
      console.log('Error while Polling')
      handleError(err)
      return
    }

    if (result.meta.status === 'in-progress') {
      console.log('Still Polling')

      doSomething(result)
    } else {
      console.log('Done Polling')

      doSomethingElse(result)
    }
  },
)
```
