feintegration
v1.0.1
Published
Типизированный Node.js клиент для партнерского API fe.ru - регистрация доменов, управление, профили и аккаунты
Maintainers
Readme
FeIntegration
Типизированный Node.js клиент для партнерского API fe.ru - регистрация доменов, управление, профили и аккаунты.
Версия API:
0.25alpha(01.03.2025)
Требования
- Node.js 18+
- Работает с CommonJS (
require) и ESM (import)
Установка
npm install feintegration
# или
yarn add feintegration
# или
pnpm add feintegration
# или
bun add feintegrationБыстрый старт
import { FeClient, FeError, DomainStatus } from 'feintegration';
const client = new FeClient({
username: 'ivan',
password: 'secret',
// baseUrl: 'https://my.fe.ru/apiferu/' - по умолчанию
// hostname: 'my.fe.ru' - по умолчанию
});
// Клиент авторизуется автоматически при первом вызове.
// Можно авторизоваться заранее:
await client.login();
// Получить доступные зоны
const { zones } = await client.getZones();
console.log(zones); // [{ zone: 'ru', price: '99', renew: '599', minperiod: '1' }, ...]
// Проверить доступность домена
const { answer } = await client.whois({ domainname: 'example.com' });
if (answer === 'domain available') {
// Создать профиль регистранта
const { profileid } = await client.createProfile({
fioa: 'Ivan A Ivanov',
email: '[email protected]',
phone: '+7 495 1234567',
country: 'RU',
});
// Зарегистрировать домен
const { domainid } = await client.registerDomain({
domainname: 'example.com',
profileid,
org: '0', // физлицо
ns1: 'ns1.example.com',
ns2: 'ns2.example.com',
});
console.log('ID зарегистрированного домена:', domainid);
}Конструктор
new FeClient(config: FeClientConfig)| Параметр | Тип | Обязателен | Описание |
|----------|-----|------------|----------|
| baseUrl | string | нет | URL сервера API. По умолчанию: "https://my.fe.ru/apiferu/" |
| username | string | да | Логин аккаунта |
| password | string | да | Пароль аккаунта |
| hostname | string | нет | Hostname для авторизации. По умолчанию: "my.fe.ru" |
Управление сессией
Клиент хранит sessid внутри после первой успешной авторизации:
- Авто-логин - если метод вызван до
login(), клиент авторизуется автоматически. - Авто-реавторизация - если любой запрос вернул
result: "2"(сессия истекла), клиент переавторизуется и повторяет запрос один раз. client.logout()- сбрасывает сохраненный sessid. Следующий вызов вызовет новую авторизацию.client.isAuthenticated-true, если sessid сейчас сохранен.
Справочник методов
Авторизация и аккаунты
| Метод | Описание |
|-------|----------|
| client.login() | Авторизует клиент, возвращает { sessid }. |
| client.createAccount(username, password, hostname) | Создает новый аккаунт, возвращает { sessid }. |
Зоны
| Метод | Описание |
|-------|----------|
| client.getZones() | Возвращает список зон для регистрации с ценами. |
Важно: Из-за особенности alpha API, сервер возвращает
result: 0(число) при успехе дляgetZones. Библиотека умеет обрабатывать это. Возможно позже будет исправлено.
Профили
| Метод | Описание |
|-------|----------|
| client.createProfile(params) | Создает профиль регистранта, возвращает { profileid }. |
| client.updateProfile(params) | Обновляет профиль. Необходим profileid. |
| client.getProfile({ profileid }) | Получает данные профиля по ID. |
Домены
| Метод | Описание |
|-------|----------|
| client.registerDomain(params) | Регистрирует домен на 1 год. |
| client.getDomains() | Возвращает список всех доменов аккаунта. |
| client.getDomainInfo({ domainid }) | Подробная информация о домене: NS, статус, профиль. |
| client.changeNameservers(params) | Смена NS-серверов домена. |
| client.renewDomain(params) | Продление домена на 1 год. |
| client.getAuthCode(params) | Получить authcode для переноса домена. |
| client.togglePrivacy(params) | Включить/выключить WHOIS-privacy. |
| client.changeAdmin(params) | Сменить администратора домена. |
| client.transferDomain(params) | Подать заявку на перенос домена к FE.RU. |
| client.whois({ domainname }) | Проверить доступность домена. |
Аккаунт
| Метод | Описание |
|-------|----------|
| client.getBalance() | Баланс лицевого счета в рублях. |
Статусы доменов
import { DomainStatus } from 'feintegration';
DomainStatus.NotRegistered // 0 - не зарегистрирован
DomainStatus.Registered // 1 - зарегистрирован
DomainStatus.PendingPayment // 2 - не зарегистрирован, ожидает оплаты
DomainStatus.PendingRegistration // 3 - оплачен, ожидает регистрации
DomainStatus.TransferInProgress // 4 - в процессе переноса
DomainStatus.TransferredAway // 5 - унесен от регистратора
DomainStatus.Blocked // 6 - заблокированОбработка ошибок
Все ошибки наследуют FeError. Используйте instanceof для различения:
import {
FeError,
FeSessionError,
FeAuthError,
FeProfileError,
FeInsufficientFundsError,
FeDomainUnavailableError,
FeProfileDataError,
FeNetworkError,
} from 'feintegration';
try {
await client.registerDomain(params);
} catch (err) {
if (err instanceof FeInsufficientFundsError) {
console.error('Недостаточно средств на балансе');
} else if (err instanceof FeDomainUnavailableError) {
console.error('Домен занят');
} else if (err instanceof FeNetworkError) {
console.error('Сетевая ошибка:', err.cause);
} else if (err instanceof FeError) {
console.error(`Ошибка API [${err.code}]:`, err.apiMessage);
}
}| Класс | Код | Описание |
|-------|-----|----------|
| FeError | любой | Базовый класс, общая ошибка API |
| FeSessionError | "2" | Сессия невалидна/истекла |
| FeAuthError | "3" | Неверный логин |
| FeProfileError | "4" | Неверный или недоступный профиль/домен |
| FeInsufficientFundsError | "5" | Недостаточно средств |
| FeDomainUnavailableError | "6" | Домен недоступен |
| FeProfileDataError | "7" | Ошибка в данных профиля |
| FeNetworkError | - | Сетевая ошибка или ошибка разбора JSON |
Справочник полей профиля
При создании и обновлении профиля поля делятся на российские и международные:
| Поле | Для чего | Примечание |
|------|----------|------------|
| fioa | Все домены | ФИО латиницей |
| email | Все домены | E-mail адрес |
| phone | Все домены | Телефон в формате +7 XXX XXXXXXX |
| country | Все домены | Двухбуквенный код ISO, например "RU" |
| fior | ru/рф/su (физлицо) | ФИО кириллицей |
| addressr | ru/рф/su (физлицо) | Почтовый адрес на русском |
| passport | ru/рф/su (физлицо) | Паспортные данные |
| bdate | ru/рф/su (физлицо) | Дата рождения ДД.ММ.ГГГГ |
| orgnamer | ru/рф/su (юрлицо) | Название организации на русском |
| orgnamea | Международные (юрлицо) | Название организации латиницей |
| inn | ru/рф/su (юрлицо) | ИНН |
| kpp | ru/рф/su (юрлицо) | КПП |
| addressa | Международные | Адрес латиницей |
| pindex | Международные | Почтовый индекс |
| ptown | Международные | Город латиницей |
| region | Международные | Регион латиницей |
