optimatica-meters
TypeScript SDK — ядро monorepo. HTTP-клиент, типы и глобальная конфигурация.
Установка
npm install optimatica-metersЭкспорты
| Имя | Описание |
|---|---|
analyzeMeterPhoto | Отправка одного фото на API |
analyzeMeterPhotos | Отправка нескольких фото за один запрос |
configureZhkhSdk | Глобальный конфиг (apiKey) |
getZhkhConfig | Текущий конфиг |
resolveSdkOptions | Слияние пропсов и глобального конфига |
API_ENDPOINT | URL эндпоинта, зашитый при сборке |
ZhkhApiError | Ошибка HTTP / валидации |
METER_TYPE_LABELS | Русские названия типов счётчиков |
Конфигурация
import { configureZhkhSdk } from 'optimatica-meters'
configureZhkhSdk({
apiKey: 'eyJhbGci...', // опционально — можно передать в каждый вызов
})Эндпоинт API
URL эндпоинта зашивается в SDK на этапе сборки из переменной окружения OPTIMATICA_API_URL. Если переменная не задана, используется production по умолчанию:
https://meters-api-prod.nyc-1.optimatica.pro/api/meters/analyzeЧтобы зафиксировать другой эндпоинт, задайте переменную при сборке пакета:
OPTIMATICA_API_URL="https://staging.example.com/api/meters/analyze" npm run buildВ рантайме URL не настраивается.
analyzeMeterPhoto
import { analyzeMeterPhoto } from 'optimatica-meters'
// Browser
await analyzeMeterPhoto(file)
// React Native
await analyzeMeterPhoto({
uri: 'file:///path/to/photo.jpg',
name: 'meter.jpg',
type: 'image/jpeg',
})
// С переопределением ключа
await analyzeMeterPhoto(file, {
apiKey: 'eyJhbGci...',
signal: abortController.signal,
})analyzeMeterPhotos
Распознавание нескольких счётчиков за один запрос (до 10 фото). Возвращает массив результатов в том же порядке, что и переданные изображения.
import { analyzeMeterPhotos } from 'optimatica-meters'
const results = await analyzeMeterPhotos([file1, file2, file3])
results.forEach((result, index) => {
if (result.success) {
console.log(index, result.meter.serialNumber)
} else {
console.warn(index, result.error)
}
})Эндпоинт POST /api/meters/analyze принимает поле image один или несколько раз и всегда возвращает { results: AnalyzeMeterResponse[] }. При единственном фото поля результата дополнительно дублируются на верхнем уровне — analyzeMeterPhoto остаётся полностью обратно совместимым.
Типы изображений
type AnalyzeMeterImage = File | Blob | ReactNativeImageAssetЗависимости
Нет runtime-зависимостей — только встроенный fetch и FormData.