TypeScript SDK
@importos/sdk: типізований клієнт Data API на openapi-fetch, помилки ImportOsApiError, повтори після 429.
@importos/sdk — тонкий типізований клієнт для REST API. Типи генеруються з openapi.json (openapi-typescript), а виклики роблять openapi-fetch (близько 6 KB).
Поки лише в monorepo
Пакет private: його немає в npm-реєстрі. Опублікувати його (і вибрати ім'я та реєстр) має власник
Чекає на власника. Усередині monorepo RVAuto2 він підключається як "@importos/sdk": "workspace:*".
До публікації для зовнішніх проєктів використовуйте REST напряму або згенеруйте типи самі з /openapi.json.
Створення клієнта
import { createImportOsClient, ImportOsApiError } from '@importos/sdk';
const api = createImportOsClient({
apiKey: process.env.IMPORTOS_API_KEY!, // тільки на сервері, ніколи в браузері публічного сайту
baseUrl: 'https://api.importos.app',
maxRetries: 2, // повторити після 429, якщо Retry-After не більший за maxRetryDelaySec
maxRetryDelaySec: 30,
});| Параметр | Значення |
|---|---|
apiKey | ключ rv_live_… |
baseUrl | адреса API без кінцевого / |
fetch | власна реалізація fetch (тести, проксі) |
maxRetries | скільки разів повторити запит після 429 (за замовчуванням 0: не повторювати) |
maxRetryDelaySec | найбільша затримка Retry-After, яку клієнт готовий чекати (за замовчуванням 30) |
Методи
| Метод | Ендпоінт |
|---|---|
api.landedCost(body) | POST /v1/landed-cost |
api.marketPrice(query) | GET /v1/market-price |
api.decodeVin(vin) | GET /v1/vin/{vin} |
api.searchListings(query) | GET /v1/listings/search |
api.customsRules(country, date?) | GET /v1/rules/{country} |
api.fxRate(query) | GET /v1/fx |
api.client | низькорівневий клієнт openapi-fetch, усі шляхи типізовані |
Експортуються також типи LandedCostRequest, LandedCostResponse, MarketPriceResponse, VinResponse, SearchListingsResponse, RulesResponse, FxResponse, Problem.
const cost = await api.landedCost({
lot_price: 8000,
auction: 'copart',
vehicle: { vin: '4T1B11HK5JU000001', year: 2018, fuel: 'petrol', engine_cc: 2487, damage: 'FRONT END' },
from: { auction_yard: 'NJ - TRENTON' },
to: { country: 'UA', city: 'Київ' },
fee_model: { model: 'fixed', amount: 700, currency: 'USD' },
date: '2026-10-17',
});
console.log(cost.total, cost.warnings);Помилки
Будь-яка не-2xx відповідь кидає ImportOsApiError:
try {
await api.marketPrice({ make: 'Toyota', model: 'Camry', year: 2018, market: 'ua' });
} catch (e) {
if (e instanceof ImportOsApiError) {
console.error(e.status, e.code, e.requestId); // 429 'rate_limited' '...'
if (e.retryAfterSec) await new Promise((r) => setTimeout(r, e.retryAfterSec! * 1000));
} else {
throw e;
}
}| Поле | Опис |
|---|---|
status | HTTP-статус |
code | стабільний код з problem+json, див. таблицю кодів |
problem | усе тіло problem+json |
requestId | request_id або заголовок X-Request-Id |
retryAfterSec | заповнено для 429 |
Перегенерація типів
Типи лежать у packages/sdk/src/generated/schema.d.ts і комітяться разом із openapi.json. Після зміни API:
pnpm --filter @importos/sdk generateТести падають, якщо спека чи типи застаріли.