diff --git a/CHANGELOG.md b/CHANGELOG.md index b85851f815..4d975cd783 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## 29.0.0 +## 28.0.3 + +* `Core`: + * Add passing of default engines in `HttpClient` constructors + ## 28.0.2 * `Core`: diff --git a/build.gradle b/build.gradle index 528c036dbe..f78808dee8 100644 --- a/build.gradle +++ b/build.gradle @@ -28,7 +28,7 @@ if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != n username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER') password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD') validationTimeout = Duration.ofSeconds(0) - publishingType = "USER_MANAGED" + publishingType = System.getenv('PUBLISHING_TYPE') != "" ? System.getenv('PUBLISHING_TYPE') : "USER_MANAGED" } publishAllProjectsProbablyBreakingProjectIsolation() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 33963a401e..927d64b412 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,6 +37,8 @@ kotlin-test-js = { module = "org.jetbrains.kotlin:kotlin-test-js", version.ref = ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" } +ktor-client-java = { module = "io.ktor:ktor-client-java", version.ref = "ktor" } +ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" } ktor-client-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor" } ktor-client-winhttp = { module = "io.ktor:ktor-client-winhttp", version.ref = "ktor" } ktor-server = { module = "io.ktor:ktor-server", version.ref = "ktor" } diff --git a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/BotExtensions.kt b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/BotExtensions.kt index c05a7aa8c3..613ffdd372 100644 --- a/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/BotExtensions.kt +++ b/tgbotapi.api/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/api/BotExtensions.kt @@ -3,6 +3,7 @@ package dev.inmo.tgbotapi.extensions.api import dev.inmo.tgbotapi.bot.ktor.telegramBot import dev.inmo.tgbotapi.bot.TelegramBot import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper +import dev.inmo.tgbotapi.utils.defaultKtorEngine import dev.inmo.tgbotapi.utils.telegramBotAPIDefaultUrl import io.ktor.client.HttpClient import io.ktor.client.HttpClientConfig @@ -13,7 +14,7 @@ import io.ktor.client.engine.* */ public fun telegramBot( urlsKeeper: TelegramAPIUrlsKeeper, - client: HttpClient = HttpClient() + client: HttpClient = HttpClient(defaultKtorEngine) ): TelegramBot = telegramBot(urlsKeeper) { this.client = client } @@ -68,7 +69,7 @@ public fun telegramBot( apiUrl: String = telegramBotAPIDefaultUrl, testServer: Boolean = false, fileLinkUrlMapper: TelegramAPIUrlsKeeper.(String) -> String = { "${fileBaseUrl}/$it" }, - client: HttpClient = HttpClient() + client: HttpClient = HttpClient(defaultKtorEngine) ): TelegramBot = telegramBot(TelegramAPIUrlsKeeper(token, testServer, apiUrl, fileLinkUrlMapper), client) @Suppress("NOTHING_TO_INLINE") diff --git a/tgbotapi.core/api/tgbotapi.core.api b/tgbotapi.core/api/tgbotapi.core.api index 2e8d592d53..f32836f6c1 100644 --- a/tgbotapi.core/api/tgbotapi.core.api +++ b/tgbotapi.core/api/tgbotapi.core.api @@ -31910,6 +31910,10 @@ public final class dev/inmo/tgbotapi/utils/DefaultKSLogKt { public static final fun setDefaultKTgBotAPIKSLogSystemTag (Ljava/lang/String;)V } +public final class dev/inmo/tgbotapi/utils/DefaultKtorEngine_jvmKt { + public static final fun getDefaultKtorEngine ()Lio/ktor/client/engine/HttpClientEngineFactory; +} + public final class dev/inmo/tgbotapi/utils/DeserializeWithUnknownKt { public static final fun deserializeEitherWithRaw (Lkotlinx/serialization/encoding/Decoder;Lkotlinx/serialization/KSerializer;)Ldev/inmo/micro_utils/common/Either; public static final fun deserializeWithRaw (Lkotlinx/serialization/encoding/Decoder;Lkotlinx/serialization/KSerializer;)Lkotlin/Pair; diff --git a/tgbotapi.core/build.gradle b/tgbotapi.core/build.gradle index 913de5000c..73ef44ea01 100644 --- a/tgbotapi.core/build.gradle +++ b/tgbotapi.core/build.gradle @@ -47,12 +47,19 @@ kotlin { api libs.ktor.server.host.common api libs.ktor.client.cio + api libs.ktor.client.java api libs.javax.activation } } - linuxX64Main { + jsMain { + dependencies { + api libs.ktor.client.js + } + } + + linuxMain { dependencies { api libs.ktor.client.curl } @@ -64,7 +71,7 @@ kotlin { } } - mingwX64Main { + mingwMain { dependencies { api libs.ktor.client.winhttp } diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt index fb4d680c97..4f3a5dae1a 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutor.kt @@ -8,6 +8,7 @@ import dev.inmo.tgbotapi.bot.settings.limiters.RequestLimiter import dev.inmo.tgbotapi.requests.abstracts.Request import dev.inmo.tgbotapi.utils.DefaultKTgBotAPIKSLog import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper +import dev.inmo.tgbotapi.utils.defaultKtorEngine import dev.inmo.tgbotapi.utils.nonstrictJsonFormat import io.ktor.client.* import kotlinx.serialization.json.Json @@ -37,7 +38,7 @@ expect class KtorRequestsExecutor internal constructor( fun KtorRequestsExecutor( telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper, - client: HttpClient = HttpClient(), + client: HttpClient = HttpClient(defaultKtorEngine), callsFactories: List = emptyList(), excludeDefaultFactories: Boolean = false, requestsLimiter: RequestLimiter = ExceptionsOnlyLimiter, diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt index fe63166cc5..bacd033a92 100644 --- a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/bot/ktor/KtorRequestsExecutorFactories.kt @@ -21,7 +21,7 @@ fun createTelegramBotDefaultKtorCallRequestsFactories(logger: KSLog? = null) = l class KtorRequestsExecutorBuilder( var telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper ) { - var client: HttpClient = HttpClient() + var client: HttpClient = HttpClient(defaultKtorEngine) var callsFactories: List = emptyList() var excludeDefaultFactories: Boolean = false var requestsLimiter: RequestLimiter = ExceptionsOnlyLimiter diff --git a/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.kt b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.kt new file mode 100644 index 0000000000..711de69a23 --- /dev/null +++ b/tgbotapi.core/src/commonMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.kt @@ -0,0 +1,5 @@ +package dev.inmo.tgbotapi.utils + +import io.ktor.client.engine.HttpClientEngineFactory + +expect val defaultKtorEngine: HttpClientEngineFactory<*> diff --git a/tgbotapi.core/src/jsMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.js.kt b/tgbotapi.core/src/jsMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.js.kt new file mode 100644 index 0000000000..c5d35e6641 --- /dev/null +++ b/tgbotapi.core/src/jsMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.js.kt @@ -0,0 +1,8 @@ +package dev.inmo.tgbotapi.utils + +import io.ktor.client.engine.HttpClientEngineFactory +import io.ktor.client.engine.js.Js + +actual val defaultKtorEngine: HttpClientEngineFactory<*> by lazy { + Js +} diff --git a/tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.jvm.kt b/tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.jvm.kt new file mode 100644 index 0000000000..49256eeb2d --- /dev/null +++ b/tgbotapi.core/src/jvmMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.jvm.kt @@ -0,0 +1,8 @@ +package dev.inmo.tgbotapi.utils + +import io.ktor.client.engine.HttpClientEngineFactory +import io.ktor.client.engine.java.Java + +actual val defaultKtorEngine: HttpClientEngineFactory<*> by lazy { + Java +} diff --git a/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt b/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt index ef61138b91..f92d81bdc7 100644 --- a/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt +++ b/tgbotapi.core/src/linuxArm64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt @@ -1,5 +1,6 @@ package dev.inmo.tgbotapi.bot.ktor.base +import dev.inmo.tgbotapi.utils.defaultKtorEngine import io.ktor.client.* import io.ktor.client.engine.cio.* @@ -21,4 +22,8 @@ internal actual inline fun platformClientCopy(client: HttpClient): HttpClient = HttpClient(CIO) { this.plusAssign(config) } -} ?: throw IllegalArgumentException("On LinuxX64 TelegramBotAPI currently support only Curl Ktor HttpClient engine") +} ?: HttpClient( + defaultKtorEngine +) { + install(client) +} diff --git a/tgbotapi.core/src/linuxMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.linux.kt b/tgbotapi.core/src/linuxMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.linux.kt new file mode 100644 index 0000000000..e70d5bd60d --- /dev/null +++ b/tgbotapi.core/src/linuxMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.linux.kt @@ -0,0 +1,8 @@ +package dev.inmo.tgbotapi.utils + +import io.ktor.client.engine.HttpClientEngineFactory +import io.ktor.client.engine.curl.Curl + +actual val defaultKtorEngine: HttpClientEngineFactory<*> by lazy { + Curl +} diff --git a/tgbotapi.core/src/linuxX64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt b/tgbotapi.core/src/linuxX64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt index ffeaadbf1c..4a2aeef1ef 100644 --- a/tgbotapi.core/src/linuxX64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt +++ b/tgbotapi.core/src/linuxX64Main/kotlin/bot/ktor/base/ActualPlatformClientCopy.kt @@ -1,6 +1,8 @@ package dev.inmo.tgbotapi.bot.ktor.base +import dev.inmo.tgbotapi.utils.defaultKtorEngine import io.ktor.client.* +import io.ktor.client.HttpClient import io.ktor.client.engine.curl.* /** @@ -21,4 +23,8 @@ internal actual inline fun platformClientCopy(client: HttpClient): HttpClient = HttpClient(Curl) { this.plusAssign(config) } -} ?: throw IllegalArgumentException("On LinuxX64 TelegramBotAPI currently support only Curl Ktor HttpClient engine") +} ?: HttpClient( + defaultKtorEngine +) { + install(client) +} diff --git a/tgbotapi.core/src/mingwMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.mingw.kt b/tgbotapi.core/src/mingwMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.mingw.kt new file mode 100644 index 0000000000..5cbcb22faa --- /dev/null +++ b/tgbotapi.core/src/mingwMain/kotlin/dev/inmo/tgbotapi/utils/DefaultKtorEngine.mingw.kt @@ -0,0 +1,8 @@ +package dev.inmo.tgbotapi.utils + +import io.ktor.client.engine.HttpClientEngineFactory +import io.ktor.client.engine.winhttp.WinHttp + +actual val defaultKtorEngine: HttpClientEngineFactory<*> by lazy { + WinHttp +} diff --git a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/FilesDownloading.kt b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/FilesDownloading.kt index 6b1c296f6c..c7c23734a9 100644 --- a/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/FilesDownloading.kt +++ b/tgbotapi.utils/src/commonMain/kotlin/dev/inmo/tgbotapi/extensions/utils/extensions/FilesDownloading.kt @@ -2,6 +2,7 @@ package dev.inmo.tgbotapi.extensions.utils.extensions import dev.inmo.tgbotapi.types.files.PathedFile import dev.inmo.tgbotapi.utils.TelegramAPIUrlsKeeper +import dev.inmo.tgbotapi.utils.defaultKtorEngine import io.ktor.client.HttpClient import io.ktor.client.request.get import io.ktor.client.statement.readBytes @@ -19,5 +20,5 @@ suspend fun HttpClient.loadFile( suspend fun PathedFile.download( telegramAPIUrlsKeeper: TelegramAPIUrlsKeeper, - client: HttpClient = HttpClient() + client: HttpClient = HttpClient(defaultKtorEngine) ) = client.loadFile(telegramAPIUrlsKeeper, this)