Kora облачно ориентированный серверный фреймворк написанный на Java для написания Java / Kotlin приложений с упором на производительность, эффективность, прозрачность сделанный разработчиками Т-Банк / Тинькофф

Kora is a cloud-oriented server-side Java framework for writing Java / Kotlin applications with a focus on performance, efficiency and transparency made by T-Bank / Tinkoff developers

Перейти к содержанию

1.1.29

Добавлено:

  • Добавлена в OpenAPI генератор поддержка опций ImplicitHeaders и ImplicitHeadersRegex
  • Добавлена опция enabled для всех resilient компонентов в конфигурацию
  • Добавлена поддержка KafkaClientMetrics метрик Micrometer для Kafka потребителей
  • Добавлен провайдер серверных тегов Micrometer для gRPC-сервера

Исправлено:

  • Исправлена ленивая инициализация content-type для JDK HTTP-клиента
  • Исправлено логирование тела для HTTP-клиента

1.1.28

Исправлено:

  • Исправлено сообщение об ошибке Kotlin KSP для неизвестного типа при построении графа

1.1.27

Добавлено:

  • Добавлена поддержка в интерфейсе Head контракта для AWS S3 Client
  • Добавлена поддержка конфигурации для Map с пользовательским объявлением ключей (Enum/UUID/итп)
  • Добавлены методы чтения JsonReader без строгих исключений
  • Добавлен улучшенный вывод ошибок контейнера зависимостей во время обработки аннотаций

Исправлено:

  • Исправлено зависание запроса и потеря сигнала onComplete в работе JDK HTTP-клиента
  • Исправлена реализация метода objectMeta в AWS S3 Client
  • Исправлено извлечение content-type JDK HTTP-клиента
  • Исправлены ошибки совместимости Kotlin синтаксиса и компилятора Kotlin 2.0 для репозиториев JDBC
  • Исправлена OpenAPI генерация @Valid аннотаций для Enum типов
  • Исправлена совместимость методов KafkaConsumerTelemetry с библиотеками на устаревших версиях Kora
  • Исправлен OpenAPI FILTER для сложного сканирования рекурсии в иерархии моделей
  • Исправлено отсутствие свойств override при генерации OpenAPI полей моделей для Kotlin
  • Исправлена обработка ошибок перехватчика телеметрии gRPC сервера

1.1.26

Добавлено:

  • Обновлены минорные версии всех зависимостей

Исправлено:

  • Исправлена ошибка счетчика CircuitBreaker в полуоткрытом состоянии, появившийся в 1.1.24
  • Исправлен порядок полей при чтении через JsonObjectCodec
  • Исправлена поддержка AOP для default методов в интерфейсах обрабатываемых AP (например, интерфейс @HttpClient)
  • Исправлена обработка JSON для библиотеки Enum при вызове через расширение
  • Исправлено распространение JSON-типов для запечатанных (sealed) типов при вызове через расширение
  • Исправлена OpenAPI генерация Cookie авторизации для HTTP-сервера в Kotlin
  • Исправлена OpenAPI генерация валидации моделей в Kotlin
  • Исправлена поддержка Wrapped<T> компонент и заглушек при тестировании в JUnit

1.1.25

Добавлено:

  • Добавлено больше конвертеров для Json и StringConverter по умолчанию
  • Добавлена поддержка свойств Kotlin интерфейсов в @ConfigSource

Исправлено:

  • Исправлено OpenAPI именование полей и типизация Enum массивов
  • Исправлено OpenAPI именование полей при транслитерации с кириллицы
  • Исправлена опция OpenAPI filterWithModels для работы со сложными иерархиями и рекурсией
  • Исправлена поддержка приватных методов и свойств в реализациях PromisedProxy
  • Исправлена генерация JsonReader для sealed интерфейсов

1.1.24

Добавлено:

  • Добавлена OpenAPI поддержка транслитерации Enum кириллических констант
  • Добавлена OpenAPI поддержка дополнительного именования Enum констант в SnakeCase формате
  • Добавлена OpenAPI пользовательская опция filterWithModels для фильтрации моделей, когда указана openapiNormalizer опция FILTER
  • Добавлено OpenAPI пользовательская опция prefixPath для генератора контроллеров HTTP-сервера
  • Добавлена OpenAPI оптимизация авторизации HTTP-сервера в Kotlin
  • Добавлено больше настраиваемых опций экспортера трассировки

Исправлено:

  • Исправлена KSP генерация JsonWriter для Java-классов
  • Исправлен корректный подсчет ошибок в CircuitBreaker при HALF-OPEN состоянии
  • Исправлен потенциальный NPE кэша Redis для операции putAsync
  • Исправлен корректный экспорт значений метрики KafkaConsumer report lag
  • Исправлен OpenAPI дискриминатор именование JsonField полей в моделях детей
  • Исправлен OpenAPI дискриминатор при обработке ошибок свободных форм данных в описании
  • Исправлен OpenAPI модуль отображения, когда указанные пути контроллеров для HTTP-сервера блокировались, даже если были отключены

1.1.23

Добавлено:

  • Добавлен метод записи в отформатированную строку в JsonWriter
  • Добавлены опции конфигурации maxConnectionAge и maxConnectionAgeGrace для gRPC-сервера

Исправлено:

  • Исправлена потенциальная возможность исчерпания всех потоков в JDK планировщике
  • Исправлена проверка доступа полей при генерации JsonWriter/JsonReader в Kotlin
  • Исправлен JsonExtension, что он не должен пытаться генерировать JsonWriter/JsonReader для не sealed интерфейсов
  • Исправлено, что Undertow не использовал IO потоки для записи результатов приватного API /metrics и /health
  • Исправлено освобождение HTTP Interceptor, которое должно вызываться после освобождения зависимых узлов
  • Исправлено извлечение булевых значений в DefaultServiceConfigConfigValueExtractor
  • Исправлено внедрение полного графа в тестах через расширения JUnit для графов только с заглушками в тестах
  • Исправлено сообщение об ошибке CircuitBreakerConfig
  • Исправлено сообщение о подсказке подключения зависимостей в графе и стратегия совпадения
  • Исправлено и улучшено правильное выполнение параллельных тестов JUnit и @Nested тестов

1.1.22

Исправлено:

  • Исправлен создаваемый OpenAPI конструктор модели, где дискриминатор с 1 значением, был обязательным аргументом в Java
  • Исправлено именование полей модели с типом Enum массива создаваемого OpenAPI

1.1.21

Добавлено:

  • Добавлена поддержка сигнатуры Cache<K, Optional<T>> в кешах в Java
  • Добавлена поддержка Record/Data классов в качестве само-параметра в базах данных
  • Добавлена поддержка nullable и/или non required параметра OpenAPI additionalProperties
  • Добавлен парсинг BigDecimal с использованием JsonReader<BigDecimal> из контейнера зависимостей, а не статической функции
  • Добавлен оптимизированный доступ к получению HTTP-серверных параметров и заголовков
  • Добавлен оптимизированный Cassandra обработчик List<T> для пустых значений
  • Добавлена усиленная проверка конфигурации CircuitBreaker на старте
  • Добавлено логирование медленно инициализируемых узлов в контейнере зависимостей

Исправлено:

  • Исправлено поведение HTTP Client для проверки кодов ответов только для методов аннотированных @Tag
  • Исправлен не основной конструктор в сгенерированном S3Client в Kotlin
  • Исправлена подстановка имени колонки из аннотации @Column базы данных в Kotlin обработчиках
  • Исправлено именование параметров переменных Enum в OpenAPI
  • Исправлена поддержка внедрения Wrapped<T> в контейнере зависимостей Java
  • Исправлен правильный разбор параметров запросов List<T> и Set<T> в HTTP-сервере
  • Исправлена обработка SoapClient xml-элементов Wrapped<T> для запросов/ответов
  • Исправлена обработка ошибки JdbcMappers при не предоставлении обработчиков для T? сущностей в Kotlin
  • Исправлена ошибка, когда JUnit5 не находил @Mock компонент в контейнере зависимостей
  • Исправлено пометка HttpServerRequest#route как nullable, при не сопоставлении ни с одним контроллером
  • Исправлено, что сгенерированный HTTP Client не должен использовать this для доступа к статическим обработчикам
  • Исправлено, что сгенерированный ConfigValueExtractor содержал неиспользуемые поля

1.1.20

Добавлено:

  • Добавлена аннотация @EntityCassandra с процессорами.
  • Добавлен более гибкий способ настройки компонентов gRPC
  • Добавлено предупреждение в расширениях @Json для не аннотированных типов
  • Заменено устаревшее использование OpenTelemetry SemanticAttributes.

Исправлено:

  • Исправлены обработчики Cassandra UDT для списков.
  • Исправлена частичная ошибка T is not a sub type of the class/interface that contains в Kotlin
  • Исправлена работа дискриминаторов моделей в OpenApi генераторе

1.1.19

Добавлено:

  • Добавлен обогащенный API разбора параметров HTTP-сервера с поддержкой Set<T>
  • Добавлено больше конвертеров результата Cassandra по умолчанию
  • Улучшена обработка ошибок ClientClassGenerator при несовпадении Пути/Параметров
  • Добавлена инъекция контекста ViolationExceptionHttpServerResponseMapper перед выполнением

Исправлено:

  • Исправлена операция получения по множеству ключей для кэша Redis
  • Исправлены Cassandra конвертеры результата для примитивных типов
  • Исправлено именование перечисления дискриминатора при генерации OpenAPI
  • Исправлены значения свойств Quartz по умолчанию
  • Исправлена обработка пустых интерфейсов в качестве цели для @ConfigValueExtractor в Kotlin
  • Исправлена обработка значений null дискриминатора для запечатанных интерфейсов при разборе JSON
  • Исправлена работа OpenAPI параметра typeMapping для примитивных типов Java
  • Исправлено обнаружение параметризованных общих классов в качестве конечных компонент контейнера

1.1.18

Добавлено:

  • Добавлен Camunda Zeebe Worker экспериментальный модуль
  • Добавлены транзакционные Kotlin suspend методы-расширения для базы данных
  • Улучшены сгенерированные OpenAPI контракты моделей с дискриминаторами

Исправлено:

  • Исправлен неиспользуемый параметр Kafka в HandlerWrapper
  • Исправлен метод sendOffsetsToTransaction издателя транзакций Kafka
  • Исправлена конфигурация планировщика Quartz по умолчанию для корректного поведения в кластере
  • Исправлена работа с Wrapped компонентами в JUnit при Mock/Spy/Replace
  • Исправлены незначительные обновления безопасности зависимостей

1.1.17

Добавлено:

  • Добавлена метрика пакетной обработки Kafka потребителя и другие улучшения телеметрии
  • Добавлен булевый тип в конфигурацию как родной тип

Исправлено:

  • Исправлена обработка телеметрии клиента gRPC при отмене запроса
  • Исправлена совместимость интерфейсов у общих компонент шаблона при построении графа
  • Исправлено засыпание служебного HTTP-сервера при выключении
  • Исправлено описание у ResourceConfigOrigin в конфигурации для улучшения сообщения об ошибках

1.1.16

Добавлено:

Исправлено:

  • Исправлена обработка типа byte[] в JDBC
  • Исправлено ожидание правильного штатного завершения JdkScheduler
  • Исправлена потенциальная ошибка NPE при регистрации задач Quartz
  • Исправлено обновление заданий планировщика, вызывающее полное обновление планировщика
  • Улучшено завершение работы Quartz планировщика
  • Обновлены минорные версии зависимостей

1.1.15

Исправлено:

  • Исправлено отсутствие трассировки HTTP-клиента
  • Исправлена потенциальная коллизия метода конфигурации QuartzModule с планировщиком JDK
  • Исправлено ожидание штатного завершения работы Jdk планировщика

1.1.14

Добавлено:

  • Добавлено принудительное завершение работы при сбое штатного завершения для gRPC-сервера, Kafka потребителя, планировщика

Исправлено:

  • Исправлено отсутствие экстрактора конфигурации для Quartz

1.1.13

Добавлено:

  • Добавлен специальный тип JsonNullable
  • Добавлен параметр конфигурации KafkaConsumer, позволяющий обрабатывать пустые события после poll()
  • Добавлена поддержка параметра OpenAPI enableJsonNullable (Изменено поведение по умолчанию, теперь nullable и non required поля Include.Always по умолчанию, если не включен JsonNullable)
  • Добавлен Camunda Rest OpenAPI
  • Улучшена телеметрия Camunda Rest
  • Улучшено штатное завершение работы HTTP-сервера, KafkaListener, gRPC-сервера, планировщиков

Исправлено:

  • Исправлена ошибка параметра additionalContractAnnotations OpenAPI кодогенерации без включенной валидации
  • Исправлена работа RebalanceListener для потребителя при конфигурации через топики
  • Исправлена обработка исключений HttpServerResponse в блокирующих потоках
  • Исправлены возможность добавлять не абстрактные методы в Kotlin Kafka продюсере

1.1.12

Добавлено:

  • Добавлена опция OpenAPI для генерации авторизации HTTP-клиента в качестве аргумента метода
  • Добавлен параметр @KoraAppTest#modules
  • Добавлена возможность @KoraApp генерировать @SubModule, если это включено, для возможного расширения реального графа в других средах
  • Добавлена трассировка и логирование в телеметрии SOAP

Исправлено:

  • Исправлена обратная совместимость со старыми версиями представленной в 1.1.11 конфигурации телеметрии HTTP-клиента (актуально библиотекам с версией до 1.1.11)
  • Исправлена обработка отсутствующих тегов в метриках нескольких модулей
  • Исправлена проверка Jdbc Kotlin ResultSet.next() для опциональных параметров
  • Исправлено включение логирования определенных операций HTTP-клиента
  • Исправлена трассировка отсутствующего кода состояния ERROR для нескольких модулей

1.1.11

Добавлено:

Исправлено:

  • Исправлена утечка памяти метрик сервера/клиента gRPC
  • Исправлена поддержка сложных дженерик типов для фабрик компонентов в Java
  • Исправлено неправильное протоколирование ошибок в планировщике Quartz
  • Исправлено сопоставление строк значений конфигурации для Enum типов
  • Исправлено чтение JSON типов Set и Map на реализации Linked коллекций для сохранения порядка элементов
  • Исправлена поддержка отсутствия попыток в конфигурации повторителя
  • Исправлен Content-Type ответа HTTP-клиента когда ответ строка

1.1.10

Добавлено:

  • Добавлен доступ к TypeSpec.Builder при создании аспектов для конечного пользователя
  • Добавлена поддержка опции additionalModelTypeAnnotations для OpenAPI генератора
  • Добавлена поддержка аннотации @Deprecated для сгенерированных OpenAPI методов HTTP-клиента
  • Добавлена поддержка значений по умолчанию для Date-Time в случае typeMapping в генераторе OpenAPI
  • Добавлены улучшенная конфигурация метрик Cassandra

Исправлено:

  • Исправлены утечки байтовых буферов в Undertow
  • Исправлена обязательность CodegenModel в OpenAPI при отсутствии валидации
  • Исправлено логирование тела запроса в HTTP-клиенте при использовании async-http-client
  • Исправлена обработка null типов ответов для Kotlin в Cassandra
  • Исправлена проверка null аннотаций на стадии обработки аннотаций в Java
  • Исправлен ответ примитивного типа в HTTP-сервере в Java
  • Исправлена поддержка LocalDate в JDBC репозиториях для Kotlin

1.1.9

Добавлено:

Исправлено:

  • Исправлен GraphInterceptor для компонентов с аспектами
  • Исправлена конфигурация метрик Cassandra
  • Исправлена обработка исключений аспектами логгирования
  • Исправлена потенциальная коллизия имен JSON
  • Исправлено отсутствие в KSP конструктора внешнего писателя из библиотек
  • Исправлено присутствие телеметрии для пустых записей в Kafka потребителе
  • Исправлена фиксация событий при обработке один за другим в @KafkaListener
  • Исправлено сообщение об ошибке в случае не правильного использования @Batch запросов
  • Исправлено отсутствие @Nullable аннотации при формировании @KoraSubmodule
  • Исправлено отсутствие HTTP-сервера Content-Type в исключениях с телом
  • Исправлены нестрочные значения по умолчанию в схемах OpenAPI

1.1.8

Добавлено:

Исправлено:

  • Исправлено логгирование тела в HttpClientTelemetry, которое не читалось до конца
  • Исправлен порядок выполнения перехватчика gRPC
  • Исправлена фиксация записи Kafka Consumer только после пакетной обработки
  • Исправлена длительность смещения KafkaAssignConsumerContainer
  • Исправлено смешивание кодегена Openapi, ссылающегося на поля oneOf в корневом типе

1.1.7

Добавлено:

  • Добавлено распространение @Tag для @Repository
  • Добавлена до настройка OkHttp

Исправлено:

  • Исправлены JsonReader/JsonWriter для полей с символом $
  • Исправлено требование ReactorContextKt для CoroutineContextInjectInterceptor
  • Исправлен NPE в метриках GrpcServer
  • Исправлена валидация аргументов метода через @Pattern в Kotlin
  • Исправлена установка Content-Type для Response Entity
  • Исправлена коллизия псевдонимов в Kotlin для классов с одинаковыми именами
  • Удалена зависимость Prometheus JMX

1.1.6

Исправлено:

1.1.5

Добавлено:

  • Улучшено сообщение об ошибке HTTP Client header required в OpenAPI Generator

Исправлено:

  • Исправлена CompletionFuture сигнатура Cassandra репозиториев
  • Исправлено определение обязательности полей/колонок с использованием любой аннотации @Nullable для сущностей базы данных

1.1.4

Добавлено:

  • Добавлена поддержка @Nullable параметров конструктора Record у баз данных
  • Добавлен выбор транспорта Netty
  • Добавлена возможность отключение/включение наблюдателя за конфигураций
  • Оптимизирована авторизация у генератора OpenAPI HTTP сервера

Исправлено:

  • Исправлена доступность фабрики ByteBufferPool для служебного модуля HTTP-сервера
  • Исправлено требование @NonNull для сигнатур CompletionStage в базах данных
  • Исправлена обработка потенциальных ошибок служебного HTTP-сервера
  • Исправлена потенциальная коллизии имен у перехватчиков авторизации в OpenAPI
  • Исправлены зависимости Netty transport у Async HTTP Client
  • Исправлена обработка трассировки баз данных
  • Исправлены шаблонизированные компоненты, которые должны работать с @Component
  • Исправлены предупреждения Gradle при сборке

1.1.3

Исправлено:

  • Исправлено предотвращения утечек памяти посредствам замены байтового буфера Undertow на наш собственный
  • Исправлена поддержка типа URI в OpenAPI
  • Исправлена поддержка асинхронных сигнатур в JDBC (требуется предоставить Executor)
  • Исправлена аутентификация по Cookie в генерации OpenAPI севера
  • Обновлены зависимости с версиями с исправлениями
  • Помечен тегами исполнитель Undertow Xnio

1.1.2

Исправлено:

  • Исправлено @Retry для сигнатуры CompletableFuture
  • Исправлена обработка ошибок Cache AOP
  • Исправлена работа свойства primaryAuth генератора OpenAPI
  • Исправлена телеметрия HttpClient, передающая Content-Length базовому клиенту
  • Исправлена поддержка Wrapped в расширении JUnit5 тестировании

1.1.1

Исправлено:

  • Исправлен результат Void для методов @HttpClient с мапперами по коду
  • Исправлен @Cacheable аспект для реактивного контракта
  • Исправлена обработка HTTP Content-Length в реализациях
  • Исправлен Kotlin Nullable enum в OpenAPI
  • Исправлено отсутствие equals & hashCode в пустых классах Kotlin в OpenAPI
  • Исправлена ошибка GraalVM ReactorContextHook#init() во время выполнения

1.1.0

Добавлено:

  • Добавлена поддержка метрик OpenTelemetry нового стандарта 1.23
  • Добавлена поддержка GraalVM для большинства модулей и поддержка виртуальных потоков в GraalVM
  • Обновлены и синхронизированы зависимости всех модулей
  • Добавлено улучшенное сообщение при сборке компонент
  • Стандартизированы сообщения компонент жизненного цикла

Исправлено:

  • Исправлена некорректная сигнатура HttpBody.contentLength (int -> long)
  • Исправлено поведение @ResponseCodeMapper когда определен только код
  • Исправлено отсутствие метрик драйвера Cassandra
  • Исправлена ошибка при записи в закрытое соединение Undertow игнорировавшее телеметрию
  • Исправлено падение процессора аннотаций AOP без зависимостей Kora во время компиляции
  • Исправлены незначительные ошибки в модуле отказоустойчивости
  • Исправлено отсутствие аннотаций @Generated
  • Исправлена ошибка ненужного обновление графа зависимостей

1.0.9

Добавлено:

Исправлено:

  • Исправлено отсутствие аннотаций @Generated (влияло на отчеты JaCoCo)

1.0.8

Добавлено:

  • Добавлен тег ошибок метрики баз данных
  • Добавлены метрики драйвера Cassandra
  • Добавлен контракт для повторителя для CompletableStage и оптимизирован аспект для CompletableStage

Исправлено:

  • Исправлена поддержка OpenAPI Generation кодогенерации для Java 21
  • Исправлены недостающие вызовы Span.recordException в телеметрии
  • Исправлена телеметрия HTTP-клиента с одно пакетными ответами в качестве InputStream

1.0.7

Добавлено:

  • Поддержка @Nested тестов
  • Поддержка сигнатуры CompletionStage<Optional<T>> для кеша AOP
  • Поддержка освобождения Graph AutoClosable на стадии release
  • Улучшено логирование процессора аннотаций Java

Исправлено:

  • Исправлено генерирование OpenAPI не Json Content-Type преобразователей
  • Исправлена опция OpenAPI для java-async-server & java-reactive-server
  • Исправлена ошибка Undertow exchange already complete
  • Исправлена ошибка кеша Redis AOP для контрактов Mono

1.0.6

Исправлено:

  • Исправлена поддержка метрик HTTP сервера/клиента по старым стандартам OpenTelemetry

1.0.5

Добавлено:

  • Поддержка улучшена для всех конфигураций HTTP клиентов
  • Поддержка метки партиции в метрике messaging.kafka.consumer.lag для KafkaProducer
  • Поддержка метрик и телеметрии HTTP сервера/клиента приведена к новым стандартам OpenTelemetry
  • Поддержка перехватчиков для HTTP сервера/клиента в OpenAPI генераторе с помощью опции interceptors
  • Поддержка типа short для баз данных

Исправлено:

  • Исправлена поддержка байтовых контрактов в HTTP сервере при создании через OpenAPI генераторе

1.0.4

Добавлено:

  • Поддержка реализации OkHttp клиента HTTP

Исправлено:

  • Исправлена ошибка обработки нескольких ссылочных значений в рамках одного значения в файле конфигурации
  • Исправлено NPE в Kafka продюсере
  • Исправлен экспортер трассировки OpenTelemetry по gRPC

1.0.3

Добавлено:

  • Поддержка метрик Kafka совместимыми с семантическими соглашениями OpenTelemetry
  • Поддержка экспортера трассировки OpenTelemetry через HTTP
  • Поддержка сигнатуры CompletionStage для возврата в Kafka Publisher
  • Поддержка необязательных параметров в каноническом конструкторе для моделей Kotlin, сгенерированных OpenAPI
  • Поддержка значений даты и времени в конфигурации
  • Поддержка аннотаций псевдонимов типов (Type Alias) в Kotlin

Исправлено:

  • Исправлена ошибка захвата CircuitBreaker в полу открытом состоянии (HalfOpen)
  • Исправлено переопределение диспетчера при вызове gRPC сервера
  • Исправлено сохранение аннотаций аспектов для всех классов созданных фреймворком

1.0.2

Добавлено:

  • Поддержка HttpServerRequest как параметра в сгенерированных OpenAPI контрактах
  • Поддержка необязательных заголовков в ответе в сгенерированных OpenAPI контрактах

Исправлено:

  • Исправлена обработка повторяемых Cache аннотаций в Kotlin
  • Исправлены обработка Type Alias аннотации в Kotlin
  • Исправлены отсутствующие аннотации @Root в @KoraSubmodule

1.0.1

Добавлено:

  • Поддержка HTTP клиентом параметров @Query и @Header типа Map и HttpHeaders
  • Поддержка планировщиком Quartz.properties по умолчанию
  • Поддержка планировщиком JDK значения кол-ва потоков в конфигурации по умолчанию

Исправлено:

  • Исправлена обработка перехватчиками исключения 405 от HTTP сервера
  • Исправлена обработка перехватчиком исключения при отсутствии HTTP-параметров в HTTP сервере
  • Исправлена обработка исключений в иерархии перехватчиков HTTP сервера
  • Исправлены недостающие аннотации @Generated
  • Исправлены отсутствующие аннотации @Nullable в @KoraSubmodule
  • Исправлена обработка примитивных возвращаемых значений методов у аспекта логирования

1.0.0

Первая полностью стабилизированная версия с зафиксированным API.