JavaScript и TypeScript SDK
Типизированный клиент на fetch для Node.js и серверных сред.
Установите проверенную сборку. Поддерживаются Node.js 18+ и типизированные импорты TypeScript. В конструкторе можно задать ключ, базовый адрес, тайм-аут, число повторов или свой fetch. По умолчанию читаются CYBERRXN_API_KEY и CYBERRXN_BASE_URL.
Поиск и исходный текст
import { CyberRXN } from 'cyberrxn';
const client = new CyberRXN();
const page = await client.moleculeReactions(
'CCN1CCN(CO)C(=O)C1=O', { role: 'product', limit: 3 }
);
if (page.items.length) {
const observation = await client.getObservation(page.items[0]!.observation_id);
console.log(observation.paragraph_text);
}Параметры запроса используют camelCase, ответ сохраняет API-имена в snake_case. ID наблюдения остаётся непрозрачным идентификатором.
Химические инструменты
import { CyberRXN } from 'cyberrxn';
const client = new CyberRXN();
const validation = await client.validateReaction('CCO>>CC=O');
console.log(validation.valid, validation.atom_balance.delta);
const balance = await client.balanceReaction('[H][H].O=O>>O');
if (balance.solved && balance.balanced_reaction_smiles) {
const formula = await client.convertSmiles(balance.balanced_reaction_smiles);
console.log(formula.unicode);
}Для универсального конвертера используйте convertRepresentation(data, { inputFormat, outputFormat, allowLossy }). Актуальный гайд и схемы действий возвращает getReactionSkill().
Страницы и метаданные
searchReactions, lookupReaction и moleculeReactions возвращают PagePromise: await даёт одну страницу, for await последовательно загружает следующие. Каждая страница расходует вызов. Не запускайте случайный обход всего корпуса.
У объектов верхнего уровня есть неперечисляемое поле lastResponse с ID запроса и разобранным заголовком расхода. Сохраняйте ID запроса при сообщении о сбое.
Работа с качеством базы
Методы: reportObservationIssue, reports, getReport, submitReactionContribution, contributions, getContribution. В запросе на запись нужен стабильный idempotencyKey; клиент преобразует его в API-поле idempotency_key. Состояния pending и needs_review ещё не означают публикацию или исправление факта.
Ошибки и браузер
В APIError доступны status, code, retryable, requestId; типизированные подклассы соответствуют HTTP-статусам. Сначала исправляйте некорректный запрос. Ответ HTTP 200 с химическим valid:false обрабатывается как данные.
Закрытые ключи должны оставаться на сервере. Конструктор по умолчанию защищает от случайного запуска SDK в браузере. В кабинете CyberRXN браузер работает через OAuth без раскрытия постоянного API-ключа посетителям.