Пример
======

```javascript
var smsc = require('node-smsc')({
    login: 'login',
    password: '5f4dcc3b5aa765d61d8327deb882cf99',
    hashed: true,
})

smsc.send({
    phones: '79XXXXXXXXX',
    mes: 'Hello from node-smsc!',
})
```

Для дополнительных примеров использования обратитесь к тестам.

API
===

###initSmsc

`function initSmsc (options)` - непосредственно функция, возвращаемая модулем.
Принимает необязательный параметр `options`.

####options

* `login` - логин пользователя smsc
* `psw` - пароль пользователя smsc
* `password` - алиас для `psw`
* `hashed` - флаг, указывающий, что передан уже захешированный пароль
* `request` - опция, позволяющая указать путь к API, либо же объект с теми же
ключами, что и ожидаемые функцией `request` модуля `http` или `https`, значение
по умолчанию `https://smsc.ru/sys/`.
* `apiCalls` - объект, позволяет определить пользовательские методы апи, или
переопределить встроенные. Ключи - названия методов, значение - функция,
имеющая ту же структуру, что и встроенные.

Возвращает объект, ключами которого являются названия роутов API:

- `send`
- `jobs`
- `status`
- `balance`
- `phones`
- `users`
- `info`
- `get`
- `get_mnp`
- `receive_phones`
- `senders`

Значениями ключей являются функции, с учетом некоторого переопределенного
поведения и параметров, обладающие следующим общим интерфейсом:

`function apiCall (query, options, cb)`

- `query` - параметры, принимаемые и описываемые API
- `options` - опции
  - `options.files` - массив объектов с полями `field`, `value`, `options`.
    Значения полей используются для параметризации метода `append`
    модуля `form-data`. Если это поле указано, поле `requestBodyStream`
    игнорируется.
  - `options.requestBodyStream` - указывает `Readable` stream, используемый
    для наполнения тела запроса
  - `options.stream` - флаг, указывающий, что следует вернуть не обработанный
    ответ API, а поток ответа
  - `options.responseParser` - объект с методом `parse`, принимающий два
    аргумента - `utf8` строку ответа и дополнительные опции
  - `options.responseParserOptions` - дополнительные опции для метода `parse`
    `responseParser`'а
  - `options.request` - переопределение опций запроса (опции, которые принимает
    метод `request` модуля `http` или `https`)
- `cb` - необязательный коллбэк, если не передан, `Promise` возвращается

###SmscApiError

`SmscApiError (message, response)` - Класс-наследник класса `Error`. Экземпляры
этого класса могут передаваться первым параметром в коллбеке или rejection
handler промиса при выполнении вызова API.

Отличия от провайдера
=====================

* Кодировка по умолчанию - `utf-8`
* В случаях, когда провайдер возвращает строку `OK`, методы модуля возвращают
`{result: 'OK'}`.

Тесты
=====

__Перед запуском тестов следует включить режим тестирования в личном кабинете,
иначе запуск тестов может привести к отправке настоящих смс и, как следствие,
снятию средств со счета.__

Тесты требуют предварительной настройки. Для этих целей служит файл конфигурации
`test/config.json`, который необходимо предварительно создать.

Пример структуры конфигурационного файла:

```json
{
    "init": {
        "login": "<LOGIN>",
        "password": "<PASSWORD>",
        "hashed": true
    },
    "phone": "79XXXXXXXXX",
    "email": "a@b.c",
    "sublogin": "sublogin",
    "subpassword": "subpassword"
}
```

#####Описание полей:

- `init` - формат поля полностью соответствует формату опций, принимаемых
модулем (функцией `initSmsc`)
- `phone` - контроллируемый вами номер телефона. В случае, если вы забыли
включить режим тестирования в личном кабинете, именно на этот номер посыпятся
сообщения.
- `email` - контроллируемый вами адрес электронной почты. Для отправки сообщений
электронной почты предварительлно придется зарегистрировать ваш адрес
электронной почты в личном кабинете. Тестовый режим не
действует на сообщения электонной почты, они отправляются по-настоящему даже при
включенном тестовом режиме. По этой причине соответствующие тесты выключены на
уровне кода теста.
- `sublogin` - желаемый тестовый логин субклиента. Все тесты на управление
субклиентами выключены, из-за невозможности программной очистки результатов
тестов, ввиду отсутствия соответствующей поддержки со стороны API.
- `subpassword` - соответствующий субклиенту пароль

