# @soleil-se/requester

A wrapper for [Requester](https://developer.sitevision.se/webdav/files/apidocs/senselogic/sitevision/api/script/Requester.html) since the request always is synchronous even though the API looks asynchronous.

## Install

```sh
npm i @soleil-se/requester
```

## Usage

```js
import requester from '@soleil-se/requester';
```

### Example

Options are the same as [Requester](https://developer.sitevision.se/webdav/files/apidocs/senselogic/sitevision/api/script/Requester.html) with the addition of `method`.\
Throws a [HttpError](/packages/http-error/) on fail.\
For TypeScript, you can specify the type of the response `result` using a generic type parameter.

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    // Default method is GET.
    const { result, status, headers } = requester('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });


    // Send a POST request
    const { result, status, headers } = requester('https://example.com/api', {
      method: 'POST',
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  type Result = {
    foo: string;
  }


  try {
    // Default method is GET.
    const { result, status, headers } = requester<Result>('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });


    // Send a POST request
    const { result, status, headers } = requester<Result>('https://example.com/api', {
      method: 'POST',
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

### Request method alias

Aliases exist for all supported request methods.\
`requester.get(url, config)`\
`requester.post(url, config)`\
`requester.put(url, config)`\
`requester.delete(url, config)`\
`requester.patch(url, config)` `requester.head(url, config)`

#### `GET` request

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    const { result, status, headers } = requester.get('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  type Result = {
    foo: string;
  }


  try {
    const { result, status, headers } = requester.get<Result>('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

#### `POST` request

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    const { result, status, headers } = requester.post('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  type Result = {
    foo: string;
  }


  try {
    const { result, status, headers } = requester.post<Result>('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

#### `PUT` request

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    const { result, status, headers } = requester.put('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  type Result = {
    foo: string;
  }


  try {
    const { result, status, headers } = requester.put<Result>('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

#### `DELETE` request

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    const { result, status, headers } = requester.delete('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  type Result = {
    foo: string;
  }


  try {
    const { result, status, headers } = requester.delete<Result>('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

#### `PATCH` request

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    const { result, status, headers } = requester.patch('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  type Result = {
    foo: string;
  }


  try {
    const { result, status, headers } = requester.patch<Result>('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

#### `HEAD` request

* JavaScript

  ```js
  import requester from '@soleil-se/requester';


  try {
    const { status, headers } = requester.head('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

* TypeScript

  ```ts
  import requester from '@soleil-se/requester';


  try {
    const { status, headers } = requester.head('https://example.com/api', {
      data: {
        id: 'foo',
      },
    });
  } catch (error) {
    // Do something with error.
  }
  ```

### Options

See [Requester Options](https://developer.sitevision.se/webdav/files/apidocs/senselogic/sitevision/api/script/Requester.html#options) for all available options.