# Набор сервисов для обращения к различным API контура

## Список поддерживаемых API
* [Infra.Drive](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=156107221)
* [Portal.Auth](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=59811765)
* [Portal.Permissions](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=59812271)
* [Portal.OrganizationRequisites](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=74449316)
* [Portal.UserRequisites](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=72910841)
* [Portal.RepresentativeRequisites](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=74449345)
* [Portal.UserGroupRequisites](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=74449552)
* [Portal.BillingAccounts](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=66815397)
* [Portal.Cerberus](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=186431564)
* [Portal.Fias](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=186435051)
* [Portal.Authorizator](https://wiki.skbkontur.ru/pages/viewpage.action?pageId=109708274)
* [Notifications.Subscriptions](http://siberia.kontur/Notifications/dev/subscriptions/lastest/docs/notifications.subscriptions.html)
* [AccountsV1](https://wiki.skbkontur.ru/display/KEAPI/Accounts+v1)
* [AccountsV2](https://wiki.skbkontur.ru/display/KEAPI/Accounts+v2)
* [Docflow](https://wiki.skbkontur.ru/display/DC/API)

Список имлементированных методов можно посмотреть непосредственно в репозитории

## Как добавить методы или API которых тут нет?
Нужно создать пулл реквест. Если пул реквест был смержен пакет будет обновлен в соответствие с семвер.

## Условия принятия пулл реквеста
* В случае если API уже существует в репозитории, добавленный метод может быть принят только в том случае если он существует в реальном API и не является дубликатом.
* В случае когда добавляется новое API проверяется то что API является массово используемым.
* В случае добавления нового API необходимо добавить его в список поддерживаемых API в файле `README.md`
* Стараться избегать ломающих изменений. Если ломающее изменение есть необходимо отписать об этом в тексте пул реквеста.

## Как получить клиент
```javascript
const baseClients = require('@skbkontur/base-clients')

const {
  AccountsV1,
  AccountsV2,
  Docflow
} = baseClients
const {
  Auth,
  Permissions,
  UserRequisites,
  OrganizationRequisites,
  BillingAccounts,
  Cerberus
} = baseClients.portal
const { Drive } = baseClients.infrastructure
const { Subscriptions } = baseClients.notifications
```

## Как создать инстанс
Для создания инстанса клиента вам нужно передать `ClusterClientProvider` и соответствующий провайдер авторизации, для большинства сервисов это `PortalAuthProvider`.

Существует 2 провайдера:
1) `PortalAutoAuthProvider` Авторизует и автоматически обновляет sid по логину и паролю
2) `PortalAuthProvider` Авторизует по заданному `auth.sid` и никогда не обновляет его

```javascript
const { portal: { Permissions }, providers: { PortalAutoAuthProvider } } = baseClients
const portalAuthProvider = new PortalAutoAuthProvider({
  portalLogin: '...',
  portalPassword: '...',
  apiKey:'...',
  clusterClientProvider
})

const portalAuthProvider = new PortalAuthProvider({
  sid: '...',
  apiKey: '...'
})

const permissionsClient = new Permissions({
  authProvider: portalAuthProvider,
  clusterClientProvider
})
```
