import { IYandexApi } from './interfaces';
import { AppContext, Request } from '../../../index';
/**
 * @class YandexRequest
 * Класс для работы с API Яндекса
 *
 * Предоставляет методы для отправки запросов к API Яндекса,
 * управления авторизацией и обработки ошибок.
 *
 * @example
 * ```ts
 * // Создание экземпляра
 * const api = new YandexRequest('your-token');
 *
 * // Установка нового токена
 * api.setOAuth('new-token');
 *
 * // Выполнение запроса
 * const result = await api.call<ApiResponse>('...');
 * if (result) {
 *   // Обработка успешного ответа
 *   console.log(result);
 * } else {
 *   // Обработка ошибки
 *   console.error(api.#error);
 * }
 * ```
 */
export declare class YandexRequest {
    #private;
    /**
     * Экземпляр класса для отправки HTTP-запросов
     */
    protected _request: Request;
    /**
     * Контекст приложения.
     */
    protected _appContext: AppContext;
    /**
     * Создает экземпляр класса YandexRequest
     *
     * Инициализирует класс с OAuth-токеном и настраивает
     * параметры HTTP-запросов.
     *
     * @param {string | null} [oauth=null] - OAuth-токен для авторизации
     * @param {AppContext} [appContext] - Контекст приложения
     *
     * @remarks
     * Если токен не указан, будет использован токен из appContext.platformParams.yandex_token.
     * Если и там токена нет, запросы будут выполняться без авторизации.
     *
     * @example
     * ```ts
     * // Создание с токеном
     * const api = new YandexRequest('your-token');
     *
     * // Создание без токена (будет использован токен из appContext.platformParams)
     * const api = new YandexRequest();
     *
     * // Создание без авторизации
     * const api = new YandexRequest(null);
     * ```
     */
    constructor(oauth: string | null | undefined, appContext: AppContext);
    get oauth(): string | null | undefined;
    /**
     * Устанавливает OAuth-токен для авторизации
     *
     * Обновляет токен авторизации и заголовки запросов.
     * При установке токена автоматически добавляется заголовок
     * 'Authorization: OAuth {token}' ко всем последующим запросам.
     *
     * @param {string | null} oauth - OAuth-токен для авторизации
     *
     * @remarks
     * - Если передать null, авторизация будет отключена
     * - Заголовок авторизации добавляется автоматически
     * - Токен сохраняется для всех последующих запросов
     *
     * @example
     * ```ts
     * const api = new YandexRequest();
     *
     * // Установка нового токена
     * api.setOAuth('new-token');
     * // Теперь все запросы будут с заголовком:
     * // Authorization: OAuth new-token
     *
     * // Сброс токена
     * api.setOAuth(null);
     * // Запросы будут без авторизации
     * ```
     */
    setOAuth(oauth: string | null): void;
    /**
     * Выполняет HTTP-запрос к API Яндекса
     *
     * Отправляет запрос к указанному эндпоинту API и
     * обрабатывает полученный ответ.
     *
     * @template T - Тип ожидаемого ответа, наследующий интерфейс IYandexApi
     * @param {string | null} [url=null] - URL-адрес эндпоинта API
     * @returns {Promise<T | null>} - Результат запроса или null в случае ошибки
     *
     * @throws {Error} Если произошла ошибка сети или сервера
     *
     * @example
     * ```ts
     * interface MyApiResponse extends IYandexApi {
     *   data: {
     *     id: string;
     *     name: string;
     *   };
     * }
     *
     * const api = new YandexRequest('token');
     *
     * try {
     *   // Выполнение запроса
     *   const response = await api.call<MyApiResponse>('...');
     *
     *   if (response) {
     *     // Обработка успешного ответа
     *     console.log('ID:', response.data.id);
     *     console.log('Name:', response.data.name);
     *   } else {
     *     // Обработка ошибки API
     *     console.error('Ошибка API:', api.#error);
     *   }
     * } catch (error) {
     *   // Обработка ошибок сети или сервера
     *   console.error('Ошибка запроса:', error);
     * }
     * ```
     */
    call<T extends IYandexApi>(url?: string | null): Promise<T | null>;
    /**
     * Сохраняет информацию об ошибках в лог-файл
     *
     * Записывает детальную информацию об ошибке в файл логов,
     * включая время возникновения, URL запроса и текст ошибки.
     *
     * @param {string} [error=''] - Текст ошибки для логирования
     */
    protected _log(error?: string): void;
}
