Files
mostovik-backend/ts_client

TypeScript-клиент API организаций Mostovik

Клиент покрывает два endpoint API v2:

  • GET /api/v2/organizations/ — список организаций.
  • GET /api/v2/organizations/{uid}/ — карточка одной организации.

Пакет не имеет runtime-зависимостей и использует fetch. В settings.dev backend открывает эти endpoint без JWT, в остальных окружениях можно передать accessToken или свои headers.

import { MostovikOrganizationsClient } from "@mostovik/organizations-api-client";

const client = new MostovikOrganizationsClient({
  baseUrl: "https://backend.example.com",
  accessToken: "<jwt>",
});

const page = await client.listOrganizations({
  page: 1,
  page_size: 20,
  search: "мост",
  has_registry: true,
  has_industrial: true,
  data: ["industrial", "fns_reports"],
});

const item = await client.getOrganization(page.data[0].uid, {
  data_sources: ["industrial", "fns_reports"],
});

Методы

listOrganizations(params?, options?)

Вызывает GET /api/v2/organizations/.

Возвращает пагинированный ответ:

{
  success: true,
  data: Organization[],
  errors: null,
  meta: {
    pagination: {
      page: number,
      page_size: number,
      total_count: number,
      total_pages: number,
      has_next: boolean,
      has_previous: boolean,
    },
  },
}

Важно: backend по умолчанию применяет has_registry=true для list endpoint, если параметр has_registry не передан. Чтобы получить организации без активного участия в реестрах, передайте has_registry: false.

getOrganization(uid, params?, options?)

Вызывает GET /api/v2/organizations/{uid}/.

Возвращает сам объект Organization, без wrapper success/data/meta.

Параметры списка

Параметр Тип Назначение
page number Номер страницы пагинации. Backend default: 1.
page_size number Размер страницы. Backend default: 20, максимум 100.
search string Поиск по наименованию, ИНН, КПП, ОГРН и ОГРИП.
ordering OrganizationOrdering Сортировка по uid, name, inn, kpp, ogrn, ogrip; префикс - включает обратный порядок, например -name.
name string Фильтр по части полного наименования организации.
inn string Точный фильтр по ИНН.
kpp string Точный фильтр по КПП.
ogrn string Точный фильтр по ОГРН.
ogrip string Точный фильтр по ОГРИП.
registry string UUID реестра. Возвращает организации с активным участием в этом реестре.
registry_name string Фильтр по части наименования реестра.
has_registry boolean Фильтр наличия активного участия в любом реестре.
has_industrial boolean Наличие данных источника industrial.
has_industrial_products boolean Наличие данных источника industrial_products.
has_manufactures boolean Наличие данных источника manufactures.
has_inspections boolean Наличие данных источника inspections.
has_procurements boolean Наличие данных источника procurements.
has_procurements_44fz boolean Наличие данных источника procurements_44fz.
has_procurements_223fz boolean Наличие данных источника procurements_223fz.
has_contracts boolean Наличие данных источника contracts.
has_unfair_suppliers boolean Наличие данных источника unfair_suppliers.
has_fas_goz boolean Наличие данных источника fas_goz.
has_arbitration boolean Наличие данных источника arbitration.
has_fedresurs_bankruptcy boolean Наличие данных источника fedresurs_bankruptcy.
has_fstec boolean Наличие данных источника fstec.
has_vacancies boolean Наличие данных публичного источника API v2 vacancies. Внутренний backend source — trudvsem.
has_trudvsem boolean Deprecated alias backend для has_vacancies; оставлен в типах, но новый код должен использовать has_vacancies.
has_fns_reports boolean Наличие данных источника fns_reports.
data OrganizationDataSource | OrganizationDataSource[] Вернуть в блоке data только указанные источники.
data_sources OrganizationDataSource | OrganizationDataSource[] Alias для data.
exclude_data OrganizationDataSource | OrganizationDataSource[] Исключить указанные источники из блока data.
exclude_data_sources OrganizationDataSource | OrganizationDataSource[] Alias для exclude_data.

Параметры карточки

getOrganization(uid, params) принимает path-параметр uid и параметры управления блоком data:

Параметр Тип Назначение
uid string UID организации в path: /api/v2/organizations/{uid}/.
data OrganizationDataSource | OrganizationDataSource[] Вернуть в блоке data только указанные источники.
data_sources OrganizationDataSource | OrganizationDataSource[] Alias для data.
exclude_data OrganizationDataSource | OrganizationDataSource[] Исключить указанные источники из блока data.
exclude_data_sources OrganizationDataSource | OrganizationDataSource[] Alias для exclude_data.

Backend также принимает CSV-строки для data/exclude_data, но в клиенте лучше передавать массив: так TypeScript проверит допустимые source keys.

Источники данных

Допустимые публичные source keys API v2:

  • arbitration
  • contracts
  • fas_goz
  • fedresurs_bankruptcy
  • fns_reports
  • fstec
  • industrial
  • industrial_products
  • inspections
  • manufactures
  • procurements
  • procurements_44fz
  • procurements_223fz
  • unfair_suppliers
  • vacancies

Публичный ключ для Работа России — vacancies. Параметры data=trudvsem и data_sources=trudvsem backend API v2 отклоняет.

Структуры ответа

Organization содержит:

  • uid, name, normalized_name, inn, kpp, ogrn, ogrip
  • registries — активные реестры организации: { id, name }[]
  • data_sources — краткая сводка непустых источников: { source, count }[]
  • data — объект, где ключи являются source keys, а значения — массивы записей источников

В types.ts описаны структуры всех возвращаемых блоков data:

  • IndustrialCertificateRecord для industrial
  • IndustrialProductRecord для industrial_products
  • ManufacturerRecord для manufactures
  • InspectionRecord для inspections
  • ProcurementRecord для procurements
  • GenericOrganizationSourceRecord для procurements_44fz, procurements_223fz, contracts, unfair_suppliers, fas_goz, arbitration, fedresurs_bankruptcy, fstec, vacancies
  • FinancialReportRecord и FinancialReportLineValue для fns_reports

Для GenericOrganizationSourceRecord.payload используется отдельный тип GenericSourcePayload. Это JSON-object, потому что backend сохраняет в этом поле исходный нормализованный документ внешнего generic-источника как dict.

Ошибки

Для HTTP-ответов вне диапазона 2xx клиент бросает ApiClientError:

import { ApiClientError } from "@mostovik/organizations-api-client";

try {
  await client.getOrganization(uid, { data: ["industrial"] });
} catch (error) {
  if (error instanceof ApiClientError) {
    console.log(error.status);
    console.log(error.payload);
  }
}

ApiClientError.payload типизирован как ApiErrorPayload:

{
  success: false,
  data: null,
  errors: Array<{
    code: string,
    message: string,
    details?: JsonObject,
  }>,
  meta: {
    request_id?: string,
  } | null,
}