diff --git a/.pubnub.yml b/.pubnub.yml
index b8e5d9af97..fde4b1e250 100644
--- a/.pubnub.yml
+++ b/.pubnub.yml
@@ -1,9 +1,9 @@
name: kotlin
-version: 12.0.2
+version: 12.0.3
schema: 1
scm: github.com/pubnub/kotlin
files:
- - build/libs/pubnub-kotlin-12.0.2-all.jar
+ - build/libs/pubnub-kotlin-12.0.3-all.jar
sdks:
-
type: library
@@ -23,8 +23,8 @@ sdks:
-
distribution-type: library
distribution-repository: maven
- package-name: pubnub-kotlin-12.0.2
- location: https://repo.maven.apache.org/maven2/com/pubnub/pubnub-kotlin/12.0.2/pubnub-kotlin-12.0.2.jar
+ package-name: pubnub-kotlin-12.0.3
+ location: https://repo.maven.apache.org/maven2/com/pubnub/pubnub-kotlin/12.0.3/pubnub-kotlin-12.0.3.jar
supported-platforms:
supported-operating-systems:
Android:
@@ -121,6 +121,11 @@ sdks:
license-url: https://www.apache.org/licenses/LICENSE-2.0.txt
is-required: Required
changelog:
+ - date: 2025-12-16
+ version: v12.0.3
+ changes:
+ - type: bug
+ text: "Internal changes - added logLevel for KMP tests."
- date: 2025-12-09
version: v12.0.2
changes:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 55001bd820..db639c6362 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## v12.0.3
+December 16 2025
+
+#### Fixed
+- Internal changes - added logLevel for KMP tests.
+
## v12.0.2
December 09 2025
diff --git a/README.md b/README.md
index 08a5a6ec99..4a032f0323 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ You will need the publish and subscribe keys to authenticate your app. Get your
com.pubnub
pubnub-kotlin
- 12.0.2
+ 12.0.3
```
diff --git a/gradle.properties b/gradle.properties
index 2064ea2cf4..dfb85bac1f 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -18,7 +18,7 @@ RELEASE_SIGNING_ENABLED=true
SONATYPE_HOST=DEFAULT
SONATYPE_AUTOMATIC_RELEASE=false
GROUP=com.pubnub
-VERSION_NAME=12.0.2
+VERSION_NAME=12.0.3
POM_PACKAGING=jar
POM_NAME=PubNub SDK
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index e94e3661c0..f5ce029a80 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -13,7 +13,7 @@ dokka = "2.0.0"
kotlinx_datetime = "0.6.2"
kotlinx_coroutines = "1.10.2"
pubnub_js = "10.2.4"
-pubnub_swift = "10.1.0"
+pubnub_swift = "10.1.1"
[libraries]
retrofit2 = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit2" }
diff --git a/pubnub-gson/pubnub-gson-docs/src/main/java/com/pubnub/docs/presence/HereNowApp.java b/pubnub-gson/pubnub-gson-docs/src/main/java/com/pubnub/docs/presence/HereNowApp.java
index 0e80fe4cb6..20365dca82 100644
--- a/pubnub-gson/pubnub-gson-docs/src/main/java/com/pubnub/docs/presence/HereNowApp.java
+++ b/pubnub-gson/pubnub-gson-docs/src/main/java/com/pubnub/docs/presence/HereNowApp.java
@@ -4,7 +4,6 @@
import com.pubnub.api.PubNubException;
import com.pubnub.api.UserId;
-import com.pubnub.api.enums.PNLogVerbosity;
import com.pubnub.api.java.PubNub;
import com.pubnub.api.java.v2.PNConfiguration;
import com.pubnub.api.models.consumer.presence.PNHereNowChannelData;
@@ -18,7 +17,6 @@ public static void main(String[] args) throws PubNubException {
// Configure PubNub instance
PNConfiguration.Builder configBuilder = PNConfiguration.builder(new UserId("demoUserId"), "demo");
configBuilder.publishKey("demo");
- configBuilder.logVerbosity(PNLogVerbosity.BODY);
configBuilder.secure(true);
PubNub pubnub = PubNub.create(configBuilder.build());
diff --git a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/managers/subscription/ReconnectionProblemWithoutRetryConfigurationIT.java b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/managers/subscription/ReconnectionProblemWithoutRetryConfigurationIT.java
index 84d74f35a7..60fcc64754 100644
--- a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/managers/subscription/ReconnectionProblemWithoutRetryConfigurationIT.java
+++ b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/managers/subscription/ReconnectionProblemWithoutRetryConfigurationIT.java
@@ -8,9 +8,6 @@
import java.util.UUID;
-import static com.pubnub.api.enums.PNLogVerbosity.BODY;
-
-
public class ReconnectionProblemWithoutRetryConfigurationIT extends AbstractReconnectionProblemIT {
@Override
protected @NotNull PubNub privilegedClientPubNub() {
@@ -23,7 +20,6 @@ public class ReconnectionProblemWithoutRetryConfigurationIT extends AbstractReco
pnConfiguration.subscribeKey(itPamTestConfig.pamSubKey());
pnConfiguration.publishKey(itPamTestConfig.pamPubKey());
pnConfiguration.subscribeTimeout(SUBSCRIBE_TIMEOUT);
- pnConfiguration.logVerbosity(BODY);
pnConfiguration.authKey(authKey);
pnConfiguration.retryConfiguration(RetryConfiguration.None.INSTANCE);
return PubNub.create(pnConfiguration.build());
diff --git a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java
index 9193cb1f97..afc94fa65e 100644
--- a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java
+++ b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/objects/ObjectsApiBaseIT.java
@@ -2,7 +2,6 @@
import com.pubnub.api.PubNubException;
import com.pubnub.api.UserId;
-import com.pubnub.api.enums.PNLogVerbosity;
import com.pubnub.api.integration.util.ITTestConfig;
import com.pubnub.api.java.PubNub;
import com.pubnub.api.java.v2.PNConfiguration;
@@ -29,7 +28,6 @@ private PubNub pubNub() {
throw new RuntimeException(e);
}
pnConfiguration.subscribeKey(itTestConfig.subscribeKey());
- pnConfiguration.logVerbosity(PNLogVerbosity.BODY);
return PubNub.create(pnConfiguration.build());
}
diff --git a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/pam/GrantTokenIT.java b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/pam/GrantTokenIT.java
index 75edf73dec..b8481ff705 100644
--- a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/pam/GrantTokenIT.java
+++ b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/pam/GrantTokenIT.java
@@ -2,7 +2,6 @@
import com.pubnub.api.PubNubException;
import com.pubnub.api.UserId;
-import com.pubnub.api.enums.PNLogVerbosity;
import com.pubnub.api.integration.util.BaseIntegrationTest;
import com.pubnub.api.java.PubNub;
import com.pubnub.api.java.SpaceId;
@@ -54,7 +53,7 @@ public void happyPath_SUM() throws PubNubException {
@Test
public void happyPath() throws PubNubException {
//given
- PubNub pubNubUnderTest = getServer(builder -> builder.logVerbosity(PNLogVerbosity.BODY));
+ PubNub pubNubUnderTest = getServer();
final int expectedTTL = 1337;
final String expectedChannelResourceName = "channelResource";
final String expectedChannelPattern = "channel.*";
diff --git a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/util/BaseIntegrationTest.java b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/util/BaseIntegrationTest.java
index e30393c5b3..2f49e545e3 100644
--- a/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/util/BaseIntegrationTest.java
+++ b/pubnub-gson/pubnub-gson-impl/src/integrationTest/java/com/pubnub/api/integration/util/BaseIntegrationTest.java
@@ -4,14 +4,12 @@
import com.pubnub.api.PubNubError;
import com.pubnub.api.PubNubException;
import com.pubnub.api.UserId;
-import com.pubnub.api.enums.PNLogVerbosity;
import com.pubnub.api.enums.PNStatusCategory;
import com.pubnub.api.java.PubNub;
import com.pubnub.api.java.callbacks.SubscribeCallback;
import com.pubnub.api.java.v2.PNConfiguration;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.retry.RetryConfiguration;
-import okhttp3.logging.HttpLoggingInterceptor;
import org.aeonbits.owner.ConfigFactory;
import org.awaitility.Awaitility;
import org.awaitility.Durations;
@@ -23,8 +21,6 @@
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.time.Duration;
import java.util.ArrayList;
@@ -146,7 +142,6 @@ private PNConfiguration getBasicPnConfiguration(@Nullable Consumer
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -58,9 +48,6 @@
-
-
-
@@ -78,5 +65,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/PubNubImpl.kt b/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/PubNubImpl.kt
index 86d73e2a06..7dfdffc589 100644
--- a/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/PubNubImpl.kt
+++ b/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/PubNubImpl.kt
@@ -1,5 +1,6 @@
package com.pubnub.api
+import cocoapods.PubNubSwift.KMPLogLevel
import cocoapods.PubNubSwift.KMPPAMPermission
import cocoapods.PubNubSwift.KMPPAMTokenResource
import cocoapods.PubNubSwift.KMPPubNub
@@ -12,6 +13,7 @@ import cocoapods.PubNubSwift.channelMetadataWith
import cocoapods.PubNubSwift.channelWith
import cocoapods.PubNubSwift.disconnect
import cocoapods.PubNubSwift.getToken
+import cocoapods.PubNubSwift.logLevel
import cocoapods.PubNubSwift.parseWithToken
import cocoapods.PubNubSwift.reconnectWithTimetoken
import cocoapods.PubNubSwift.removeAllListeners
@@ -108,7 +110,7 @@ import com.pubnub.api.endpoints.push.RemoveAllPushChannelsForDevice
import com.pubnub.api.endpoints.push.RemoveAllPushChannelsForDeviceImpl
import com.pubnub.api.endpoints.push.RemoveChannelsFromPush
import com.pubnub.api.endpoints.push.RemoveChannelsFromPushImpl
-import com.pubnub.api.enums.PNLogVerbosity
+import com.pubnub.api.enums.LogLevel
import com.pubnub.api.enums.PNPushEnvironment
import com.pubnub.api.enums.PNPushType
import com.pubnub.api.models.consumer.PNBoundedPage
@@ -156,7 +158,8 @@ class PubNubImpl(private val pubNubObjC: KMPPubNub) : PubNub {
KMPPubNub(
user = configuration.userId.value,
subKey = configuration.subscribeKey,
- pubKey = configuration.publishKey
+ pubKey = configuration.publishKey,
+ logLevel = KMPLogLevel(configuration.logLevel.levels.fold(0u) { acc, level -> acc or level.value })
)
)
@@ -167,14 +170,19 @@ class PubNubImpl(private val pubNubObjC: KMPPubNub) : PubNub {
}
override val configuration: PNConfiguration = createPNConfiguration(
- UserId(pubNubObjC.configObjC().userId()),
- "", // todo
- "", // todo
- "", // todo
- pubNubObjC.configObjC().authKey(),
- PNLogVerbosity.NONE
+ userId = UserId(pubNubObjC.configObjC().userId()),
+ subscribeKey = pubNubObjC.configObjC().subscribeKey(),
+ publishKey = pubNubObjC.configObjC().publishKey().orEmpty(),
+ logLevel = mapToLogLevel(pubNubObjC.logLevel())
)
+ private fun mapToLogLevel(level: KMPLogLevel): LogLevel {
+ val currentMask = level.rawValue()
+ val levels = LogLevel.Level.entries.filter { l -> (currentMask and l.value) != 0u }.toSet()
+
+ return LogLevel(levels)
+ }
+
override fun addListener(listener: EventListener) {
pubNubObjC.addEventListenerWithListener(listener = listener.underlying)
}
diff --git a/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/endpoints/presence/HereNow.ios.kt b/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/endpoints/presence/HereNow.ios.kt
index 5b998784f1..673d9fe8bf 100644
--- a/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/endpoints/presence/HereNow.ios.kt
+++ b/pubnub-kotlin/pubnub-kotlin-api/src/appleMain/kotlin/com/pubnub/api/endpoints/presence/HereNow.ios.kt
@@ -38,7 +38,7 @@ class HereNowImpl(
channelGroups = channelGroups,
includeState = includeState,
includeUUIDs = includeUUIDs,
- limit = limit.toLong(),
+ limit = NSNumber(limit).integerValue,
offset = offset?.let { NSNumber(it) },
onSuccess = callback.onSuccessHandler {
PNHereNowResult(
diff --git a/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/Pubnub.d.kt b/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/Pubnub.d.kt
index 7b338bf066..3a3eda6d6d 100644
--- a/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/Pubnub.d.kt
+++ b/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/Pubnub.d.kt
@@ -333,7 +333,10 @@ open external class PubNub(config: Any /* UUID | UserId */) {
var publishKey: String?
var cipherKey: String?
var authKey: String?
+
+ @Deprecated("Use logLevel instead", ReplaceWith("logLevel"))
var logVerbosity: Boolean?
+ var logLevel: dynamic // Type: JsLogLevel value (e.g., PubNub.LogLevel.Debug)
var ssl: Boolean?
var origin: dynamic // String? | Array?
var presenceTimeout: Number?
@@ -1424,6 +1427,22 @@ open external class PubNub(config: Any /* UUID | UserId */) {
var ExponentialRetryPolicy: Any
fun notificationPayload(title: String, body: String): NotificationsPayload
+
+ // PubNub.LogLevel static property from JavaScript SDK
+ val LogLevel: JsLogLevel
+ }
+
+ /**
+ * External interface representing PubNub.LogLevel enum from JavaScript SDK.
+ * Used as: PubNub.LogLevel.Debug, PubNub.LogLevel.Info, etc.
+ */
+ interface JsLogLevel {
+ val None: dynamic
+ val Error: dynamic
+ val Warn: dynamic
+ val Info: dynamic
+ val Debug: dynamic
+ val Trace: dynamic
}
}
diff --git a/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/com/pubnub/api/PubNubImpl.kt b/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/com/pubnub/api/PubNubImpl.kt
index e980f510bd..02787992aa 100644
--- a/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/com/pubnub/api/PubNubImpl.kt
+++ b/pubnub-kotlin/pubnub-kotlin-api/src/jsMain/kotlin/com/pubnub/api/PubNubImpl.kt
@@ -88,7 +88,6 @@ import com.pubnub.api.endpoints.push.RemoveAllPushChannelsForDevice
import com.pubnub.api.endpoints.push.RemoveAllPushChannelsForDeviceImpl
import com.pubnub.api.endpoints.push.RemoveChannelsFromPush
import com.pubnub.api.endpoints.push.RemoveChannelsFromPushImpl
-import com.pubnub.api.enums.PNLogVerbosity
import com.pubnub.api.enums.PNPushEnvironment
import com.pubnub.api.enums.PNPushType
import com.pubnub.api.models.consumer.PNBoundedPage
@@ -143,11 +142,11 @@ class PubNubImpl(val jsPubNub: PubNubJs) : PubNub {
override val configuration: PNConfiguration
get() = createPNConfiguration( // todo test this!
- UserId(jsPubNub.getUUID()),
- jsPubNub.asDynamic().configuration.subscribeKey,
- jsPubNub.asDynamic().configuration.publishKey,
- jsPubNub.asDynamic().configuration.secretKey,
- jsPubNub.asDynamic().configuration.logVerbosity,
+ userId = UserId(jsPubNub.getUUID()),
+ subscribeKey = jsPubNub.asDynamic().configuration.subscribeKey,
+ publishKey = jsPubNub.asDynamic().configuration.publishKey,
+ secretKey = jsPubNub.asDynamic().configuration.secretKey,
+ logLevel = fromJsEnum(jsPubNub.asDynamic().configuration.logLevel),
authToken = jsPubNub.asDynamic().configuration.authToken
)
@@ -1390,7 +1389,7 @@ fun PNConfiguration.toJs(): PubNubJs.PNConfiguration {
config.subscribeKey = subscribeKey
config.publishKey = publishKey
config.secretKey = secretKey
- config.logVerbosity = logVerbosity == PNLogVerbosity.BODY
+ config.logLevel = logLevel.toJsEnum()
config.enableEventEngine = enableEventEngine
// config.authKey
// config.ssl: Boolean?
@@ -1470,3 +1469,33 @@ private fun MemberInclude.toMemberIncludeOptions(): PubNubJs.IncludeOptions {
this.typeField = this@toMemberIncludeOptions.includeType
}
}
+
+/**
+ * Converts Kotlin LogLevel enum to JavaScript SDK's PubNub.LogLevel enum value.
+ * @internal
+ */
+internal fun com.pubnub.api.enums.LogLevel.toJsEnum(): dynamic = when (this) {
+ com.pubnub.api.enums.LogLevel.NONE -> PubNubJs.LogLevel.None
+ com.pubnub.api.enums.LogLevel.ERROR -> PubNubJs.LogLevel.Error
+ com.pubnub.api.enums.LogLevel.WARN -> PubNubJs.LogLevel.Warn
+ com.pubnub.api.enums.LogLevel.INFO -> PubNubJs.LogLevel.Info
+ com.pubnub.api.enums.LogLevel.DEBUG -> PubNubJs.LogLevel.Debug
+ com.pubnub.api.enums.LogLevel.TRACE -> PubNubJs.LogLevel.Trace
+ else -> {}
+}
+
+/**
+ * Converts JavaScript SDK's PubNub.LogLevel enum value to Kotlin LogLevel enum.
+ * @internal
+ */
+internal fun fromJsEnum(jsLogLevel: dynamic): com.pubnub.api.enums.LogLevel {
+ return when (jsLogLevel) {
+ PubNubJs.LogLevel.None -> com.pubnub.api.enums.LogLevel.NONE
+ PubNubJs.LogLevel.Error -> com.pubnub.api.enums.LogLevel.ERROR
+ PubNubJs.LogLevel.Warn -> com.pubnub.api.enums.LogLevel.WARN
+ PubNubJs.LogLevel.Info -> com.pubnub.api.enums.LogLevel.INFO
+ PubNubJs.LogLevel.Debug -> com.pubnub.api.enums.LogLevel.DEBUG
+ PubNubJs.LogLevel.Trace -> com.pubnub.api.enums.LogLevel.TRACE
+ else -> com.pubnub.api.enums.LogLevel.NONE // Default to NONE for unknown values
+ }
+}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/enums/LogLevel.ios.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/enums/LogLevel.ios.kt
new file mode 100644
index 0000000000..687dc4de41
--- /dev/null
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/enums/LogLevel.ios.kt
@@ -0,0 +1,132 @@
+package com.pubnub.api.enums
+
+import platform.darwin.UInt32
+
+/**
+ * Swift SDK log level configuration.
+ *
+ * Uses bitmask flags that can be combined to create custom logging configurations.
+ * Unlike hierarchical logging, each level must be explicitly enabled.
+ *
+ * Example:
+ * ```kotlin
+ * // Predefined combinations
+ * LogLevel.Standard // info, event, warn, error
+ *
+ * // Custom combination
+ * LogLevel.custom(Level.ERROR, Level.WARN, Level.EVENT)
+ * ```
+ *
+ * @see [Swift SDK Logging Documentation](https://www.pubnub.com/docs/sdks/swift/logging#log-levels)
+ */
+actual data class LogLevel(val levels: Set) {
+ /**
+ * Individual log level flags that can be combined.
+ * Each level corresponds to a specific bitmask in the Swift SDK.
+ */
+ enum class Level(val value: UInt32) {
+ /**
+ * Logging is disabled (bitmask: 0).
+ * Default setting.
+ */
+ NONE(0u),
+
+ /**
+ * Internal operations: method calls, state-machine transitions, detailed execution flow.
+ * Bitmask: 1 << 0
+ *
+ * Warning: Logs sensitive information. Use only in development.
+ */
+ TRACE(1u shl 0),
+
+ /**
+ * User inputs, API parameters, HTTP requests and responses, operation results.
+ * Bitmask: 1 << 1
+ *
+ * Warning: May log sensitive information. Use only in development.
+ */
+ DEBUG(1u shl 1),
+
+ /**
+ * Significant events including successful initialization and configuration changes.
+ * Bitmask: 1 << 2
+ */
+ INFO(1u shl 2),
+
+ /**
+ * Internal PubNub operations or events.
+ * Bitmask: 1 << 3
+ */
+ EVENT(1u shl 3),
+
+ /**
+ * Unusual conditions and non-breaking validation warnings.
+ * Bitmask: 1 << 4
+ */
+ WARN(1u shl 4),
+
+ /**
+ * Errors, exceptions, and configuration conflicts.
+ * Bitmask: 1 << 5
+ */
+ ERROR(1u shl 5),
+
+ /**
+ * All log levels will be captured.
+ * Bitmask: UInt32.max
+ *
+ * Warning: Logs sensitive information. Never use in production.
+ */
+ ALL(UInt32.MAX_VALUE)
+ }
+
+ actual companion object {
+ /** Logging disabled */
+ val None = LogLevel(setOf(Level.NONE))
+ actual val NONE = None
+
+ /** Only errors */
+ val Error = LogLevel(setOf(Level.ERROR))
+
+ /** Warnings and errors */
+ val Warn = LogLevel(setOf(Level.WARN, Level.ERROR))
+
+ /**
+ * Production logging: info, event, warn, error.
+ * Recommended for production environments.
+ */
+ val Standard = LogLevel(setOf(Level.INFO, Level.EVENT, Level.WARN, Level.ERROR))
+
+ /** Info, event, warnings, and errors */
+ val Info = LogLevel(setOf(Level.INFO, Level.EVENT, Level.WARN, Level.ERROR))
+
+ /**
+ * Debug and above (excludes TRACE).
+ * Warning: May log sensitive information.
+ */
+ val Debug = LogLevel(setOf(Level.DEBUG, Level.INFO, Level.EVENT, Level.WARN, Level.ERROR))
+
+ /**
+ * Everything including trace.
+ * Warning: Logs sensitive information. Never use in production.
+ */
+ val All = LogLevel(setOf(Level.ALL))
+
+ /** Default log level (logging disabled) */
+ val DEFAULT = None
+
+ /**
+ * Create custom combination of log levels.
+ *
+ * Example:
+ * ```kotlin
+ * val customLogs = LogLevel.custom(
+ * Level.ERROR,
+ * Level.WARN,
+ * Level.EVENT
+ * )
+ * ```
+ */
+ fun custom(vararg levels: Level) = LogLevel(levels.toSet())
+ }
+}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/v2/PNConfiguration.ios.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/v2/PNConfiguration.ios.kt
index 06bd89735b..032ec748bc 100644
--- a/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/v2/PNConfiguration.ios.kt
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/appleMain/kotlin/com/pubnub/api/v2/PNConfiguration.ios.kt
@@ -1,6 +1,7 @@
package com.pubnub.api.v2
import com.pubnub.api.UserId
+import com.pubnub.api.enums.LogLevel
import com.pubnub.api.enums.PNLogVerbosity
private const val NO_AUTH_KEY = ""
@@ -11,7 +12,7 @@ actual interface PNConfiguration {
actual val subscribeKey: String
actual val publishKey: String
actual val secretKey: String
- actual val logVerbosity: PNLogVerbosity
+ val logLevel: LogLevel
@Deprecated(
message = "This setting is deprecated because it relates to deprecated Access Manager (PAM V2) and will be removed in the future. " +
@@ -52,8 +53,8 @@ actual fun createPNConfiguration(
get() = secretKey.orEmpty()
override val authKey: String
get() = authKey.orEmpty()
- override val logVerbosity: PNLogVerbosity
- get() = logVerbosity
+ override val logLevel: LogLevel
+ get() = LogLevel.None
override val authToken: String?
get() = null
}
@@ -64,7 +65,7 @@ actual fun createPNConfiguration(
subscribeKey: String,
publishKey: String,
secretKey: String?,
- logVerbosity: PNLogVerbosity,
+ logLevel: LogLevel,
authToken: String?
): PNConfiguration {
return object : PNConfiguration {
@@ -75,8 +76,8 @@ actual fun createPNConfiguration(
get() = secretKey.orEmpty()
override val authKey: String
get() = NO_AUTH_KEY
- override val logVerbosity: PNLogVerbosity
- get() = logVerbosity
+ override val logLevel: LogLevel
+ get() = logLevel
override val authToken: String?
get() = authToken
}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/enums/LogLevel.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/enums/LogLevel.kt
new file mode 100644
index 0000000000..d1384ee416
--- /dev/null
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/enums/LogLevel.kt
@@ -0,0 +1,17 @@
+package com.pubnub.api.enums
+
+/**
+ * Platform-specific log level configuration.
+ *
+ * - **JVM**: This parameter is ignored. Configure logging via slf4j implementation.
+ * - **JS**: Simple hierarchical log levels (NONE, ERROR, WARN, INFO, DEBUG, TRACE).
+ * - **iOS**: Bitmask-based log levels that can be combined.
+ */
+expect class LogLevel {
+ companion object {
+ /** Logging disabled (default) */
+ val NONE: LogLevel
+
+ // Additional common constants can be added
+ }
+}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt
index a409e904ae..121f867eb2 100644
--- a/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt
@@ -1,6 +1,7 @@
package com.pubnub.api.v2
import com.pubnub.api.UserId
+import com.pubnub.api.enums.LogLevel
import com.pubnub.api.enums.PNLogVerbosity
expect interface PNConfiguration {
@@ -12,7 +13,6 @@ expect interface PNConfiguration {
* The secretKey should only be used within a server side and never exposed to client devices.
*/
val secretKey: String
- val logVerbosity: PNLogVerbosity
@Deprecated(
message = "This setting is deprecated because it relates to deprecated Access Manager (PAM V2) and will be removed in the future. " +
@@ -34,7 +34,7 @@ expect interface PNConfiguration {
"(PAM V3) https://www.pubnub.com/docs/general/resources/migration-guides/pam-v3-migration ",
level = DeprecationLevel.WARNING,
replaceWith = ReplaceWith(
- "createPNConfiguration(userId, subscribeKey, publishKey, secretKey, logVerbosity)"
+ "createPNConfiguration(userId, subscribeKey, publishKey, secretKey, logLevel, authToken)"
),
)
expect fun createPNConfiguration(
@@ -51,6 +51,6 @@ expect fun createPNConfiguration(
subscribeKey: String,
publishKey: String,
secretKey: String? = null,
- logVerbosity: PNLogVerbosity = PNLogVerbosity.NONE,
+ logLevel: LogLevel = LogLevel.NONE,
authToken: String? = null
): PNConfiguration
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/enums/LogLevel.js.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/enums/LogLevel.js.kt
new file mode 100644
index 0000000000..f9339bd9df
--- /dev/null
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/enums/LogLevel.js.kt
@@ -0,0 +1,65 @@
+package com.pubnub.api.enums
+
+/**
+ * JavaScript SDK log level.
+ */
+actual class LogLevel private constructor(private val name: String, internal val level: Int) {
+ actual companion object {
+ /**
+ * Logging is disabled.
+ * Default setting.
+ */
+ actual val NONE: LogLevel = LogLevel("NONE", 0)
+
+ /**
+ * Logs only error messages.
+ * Most restrictive level.
+ */
+ val ERROR: LogLevel = LogLevel("ERROR", 1)
+
+ /**
+ * Logs warnings and errors.
+ * Includes: WARN, ERROR
+ */
+ val WARN: LogLevel = LogLevel("WARN", 2)
+
+ /**
+ * Logs informational messages, warnings, and errors.
+ * Includes: INFO, WARN, ERROR
+ */
+ val INFO: LogLevel = LogLevel("INFO", 3)
+
+ /**
+ * Logs debug information and all higher severity levels.
+ * Includes: DEBUG, INFO, WARN, ERROR
+ *
+ * Warning: May log sensitive information including API keys and message content.
+ * Use only in development environments.
+ */
+ val DEBUG: LogLevel = LogLevel("DEBUG", 4)
+
+ /**
+ * Most verbose logging level. Logs all messages including internal traces.
+ * Includes: TRACE, DEBUG, INFO, WARN, ERROR
+ *
+ * Warning: Logs sensitive information. Never enable in production.
+ */
+ val TRACE: LogLevel = LogLevel("TRACE", 5)
+
+ val DEFAULT = NONE
+ }
+
+ override fun toString(): String = name
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+ if (other !is LogLevel) {
+ return false
+ }
+ return level == other.level
+ }
+
+ override fun hashCode(): Int = level
+}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/v2/PNConfiguration.js.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/v2/PNConfiguration.js.kt
index 0ca0736b9e..93e179271d 100644
--- a/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/v2/PNConfiguration.js.kt
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/jsMain/kotlin/com/pubnub/api/v2/PNConfiguration.js.kt
@@ -1,6 +1,7 @@
package com.pubnub.api.v2
import com.pubnub.api.UserId
+import com.pubnub.api.enums.LogLevel
import com.pubnub.api.enums.PNLogVerbosity
private const val NO_AUTH_KEY = ""
@@ -11,7 +12,7 @@ actual interface PNConfiguration {
actual val subscribeKey: String
actual val publishKey: String
actual val secretKey: String
- actual val logVerbosity: PNLogVerbosity
+ val logLevel: LogLevel
val enableEventEngine: Boolean
@Deprecated(
@@ -34,7 +35,7 @@ actual interface PNConfiguration {
"(PAM V3) https://www.pubnub.com/docs/general/resources/migration-guides/pam-v3-migration ",
level = DeprecationLevel.WARNING,
replaceWith = ReplaceWith(
- "createPNConfiguration(userId, subscribeKey, publishKey, secretKey, logVerbosity)"
+ "createPNConfiguration(userId, subscribeKey, publishKey, secretKey, logLevel, authToken)"
),
)
actual fun createPNConfiguration(
@@ -60,8 +61,8 @@ actual fun createPNConfiguration(
get() = null
override val enableEventEngine: Boolean
get() = true
- override val logVerbosity: PNLogVerbosity
- get() = logVerbosity
+ override val logLevel: LogLevel
+ get() = LogLevel.NONE
}
}
@@ -70,7 +71,7 @@ actual fun createPNConfiguration(
subscribeKey: String,
publishKey: String,
secretKey: String?,
- logVerbosity: PNLogVerbosity,
+ logLevel: LogLevel,
authToken: String?
): PNConfiguration {
return object : PNConfiguration {
@@ -88,7 +89,7 @@ actual fun createPNConfiguration(
get() = authToken
override val enableEventEngine: Boolean
get() = true
- override val logVerbosity: PNLogVerbosity
- get() = logVerbosity
+ override val logLevel: LogLevel
+ get() = logLevel
}
}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/enums/LogLevel.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/enums/LogLevel.kt
new file mode 100644
index 0000000000..5d0520d916
--- /dev/null
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/enums/LogLevel.kt
@@ -0,0 +1,35 @@
+package com.pubnub.api.enums
+
+/**
+ * JVM LogLevel (ignored - use slf4j configuration instead).
+ *
+ * This parameter exists for API consistency across platforms but has no effect on JVM.
+ * To configure logging on JVM, add an slf4j implementation (e.g., logback, log4j2)
+ * and configure it according to that implementation's documentation.
+ */
+actual class LogLevel private constructor(private val name: String) {
+ actual companion object {
+ /** Logging disabled (JVM: configure via slf4j) */
+ actual val NONE: LogLevel = LogLevel("NONE")
+
+ val ERROR: LogLevel = LogLevel("ERROR")
+ val WARN: LogLevel = LogLevel("WARN")
+ val INFO: LogLevel = LogLevel("INFO")
+ val DEBUG: LogLevel = LogLevel("DEBUG")
+ val TRACE: LogLevel = LogLevel("TRACE")
+ }
+
+ override fun toString(): String = name
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) {
+ return true
+ }
+ if (other !is LogLevel) {
+ return false
+ }
+ return name == other.name
+ }
+
+ override fun hashCode(): Int = name.hashCode()
+}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.jvm.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.jvm.kt
index 4b5d40563a..f0c26bcc8a 100644
--- a/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.jvm.kt
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.jvm.kt
@@ -1,6 +1,7 @@
package com.pubnub.api.v2
import com.pubnub.api.UserId
+import com.pubnub.api.enums.LogLevel
import com.pubnub.api.enums.PNLogVerbosity
private const val NO_AUTH_KEY = ""
@@ -11,7 +12,7 @@ private const val NO_AUTH_KEY = ""
"(PAM V3) https://www.pubnub.com/docs/general/resources/migration-guides/pam-v3-migration ",
level = DeprecationLevel.WARNING,
replaceWith = ReplaceWith(
- "createPNConfiguration(userId, subscribeKey, publishKey, secretKey, logVerbosity)"
+ "createPNConfiguration(userId, subscribeKey, publishKey, secretKey, logLevel, authToken)"
),
)
actual fun createPNConfiguration(
@@ -36,7 +37,7 @@ actual fun createPNConfiguration(
subscribeKey: String,
publishKey: String,
secretKey: String?,
- logVerbosity: PNLogVerbosity,
+ logLevel: LogLevel, // jvm doesn't have logLevel. Slf4j implementation (logback, log4j2) should be used to enable logging.
authToken: String?
): PNConfiguration {
return PNConfiguration.builder(userId, subscribeKey) {
@@ -44,7 +45,7 @@ actual fun createPNConfiguration(
this.secretKey = secretKey.orEmpty()
this.authKey = NO_AUTH_KEY
this.secretKey = secretKey.orEmpty()
- this.logVerbosity = logVerbosity
this.authToken = authToken
+ // jvm doesn't have logLevel. Slf4j implementation (logback, log4j2) should be used to enable logging.
}.build()
}
diff --git a/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt b/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt
index 54a02a8b42..0d91a7be32 100644
--- a/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt
+++ b/pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt
@@ -85,7 +85,7 @@ actual interface PNConfiguration {
"2. Or implement CustomLogger interface and set via customLoggers property",
level = DeprecationLevel.WARNING
)
- actual val logVerbosity: PNLogVerbosity
+ val logVerbosity: PNLogVerbosity
/**
* Set Heartbeat notification options.
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/AppTest.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/AppTest.kt
index 60c92a24c1..6d095c523a 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/AppTest.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/AppTest.kt
@@ -2,7 +2,6 @@ package com.pubnub.api.integration
import com.pubnub.api.PubNub
import com.pubnub.api.UserId
-import com.pubnub.api.enums.PNLogVerbosity
import com.pubnub.api.v2.PNConfiguration
import com.pubnub.test.Keys
import com.pubnub.test.listen
@@ -24,7 +23,6 @@ class AppTest {
PubNub.create(
PNConfiguration.builder(userId = UserId(PubNub.generateUUID()), subscribeKey = Keys.subKey) {
publishKey = Keys.pubKey
- logVerbosity = PNLogVerbosity.BODY
}.build(),
)
}
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/BaseIntegrationTest.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/BaseIntegrationTest.kt
index a2812130e0..7dec3e2d17 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/BaseIntegrationTest.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/BaseIntegrationTest.kt
@@ -2,7 +2,6 @@ package com.pubnub.api.integration
import com.pubnub.api.PubNub
import com.pubnub.api.UserId
-import com.pubnub.api.enums.PNLogVerbosity
import com.pubnub.api.retry.RetryConfiguration
import com.pubnub.api.v2.PNConfiguration
import com.pubnub.test.Keys
@@ -91,7 +90,6 @@ abstract class BaseIntegrationTest {
clientConfig.authKey = provideAuthKey()!!
}
clientConfig.retryConfiguration = RetryConfiguration.None
- clientConfig.logVerbosity = PNLogVerbosity.NONE
return clientConfig
}
@@ -100,7 +98,6 @@ abstract class BaseIntegrationTest {
serverConfig.subscribeKey = Keys.pamSubKey
serverConfig.publishKey = Keys.pamPubKey
serverConfig.secretKey = Keys.pamSecKey
- serverConfig.logVerbosity = PNLogVerbosity.NONE
serverConfig.httpLoggingInterceptor = HttpLoggingInterceptor()
serverConfig.action()
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/PNConfigurationIntegrationTests.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/PNConfigurationIntegrationTests.kt
index 624ebaf542..9b87f90844 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/PNConfigurationIntegrationTests.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/PNConfigurationIntegrationTests.kt
@@ -2,7 +2,6 @@ package com.pubnub.api.integration
import com.pubnub.api.PubNub
import com.pubnub.api.UserId
-import com.pubnub.api.enums.PNLogVerbosity
import com.pubnub.api.integration.LoggingIntegrationTest.CustomLoggerTestImpl
import com.pubnub.api.v2.PNConfiguration
import com.pubnub.api.v2.PNConfigurationOverride
@@ -36,7 +35,6 @@ class PNConfigurationIntegrationTests : BaseIntegrationTest() {
val configBuilder = PNConfiguration.builder(UserId(expectedUuid), Keys.subKey) {
publishKey = Keys.pubKey
authToken = expectedAuthToken
- logVerbosity = PNLogVerbosity.NONE
customLoggers = listOf(CustomLoggerTestImpl())
}
val pubNub = PubNub.create(configBuilder.build())
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/pam/GrantTokenIntegrationTest.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/pam/GrantTokenIntegrationTest.kt
index eea0dba3a5..4947c5c7af 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/pam/GrantTokenIntegrationTest.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/integrationTest/kotlin/com/pubnub/api/integration/pam/GrantTokenIntegrationTest.kt
@@ -20,7 +20,6 @@ class GrantTokenIntegrationTest : BaseIntegrationTest() {
@Test
fun happyPath_SUM() {
// given
- serverConfig.logVerbosity = PNLogVerbosity.BODY
val pubNubUnderTest = server
val expectedTTL = 1337
val expectedAuthorizedUserId = UserId("authorizedUser01")
@@ -74,7 +73,6 @@ class GrantTokenIntegrationTest : BaseIntegrationTest() {
@Test
fun happyPath() {
// given
- serverConfig.logVerbosity = PNLogVerbosity.BODY
val pubNubUnderTest = server
val expectedTTL = 1337
val expectedChannelResourceName = "channelResource"
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/BaseTest.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/BaseTest.kt
index 350e7bf6a1..2becb65d25 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/BaseTest.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/BaseTest.kt
@@ -8,7 +8,6 @@ import com.github.tomakehurst.wiremock.client.WireMock.stubFor
import com.github.tomakehurst.wiremock.client.WireMock.urlMatching
import com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig
import com.pubnub.api.UserId
-import com.pubnub.api.enums.PNLogVerbosity
import com.pubnub.api.retry.RetryConfiguration
import com.pubnub.api.v2.PNConfiguration
import com.pubnub.internal.PubNubImpl
@@ -68,7 +67,6 @@ abstract class BaseTest {
publishKey = "myPublishKey"
origin = wireMockServer.baseUrl().toHttpUrlOrNull()!!.run { "$host:$port" }
secure = false
- logVerbosity = PNLogVerbosity.BODY
retryConfiguration = RetryConfiguration.None
}
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/PubNubImplTest.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/PubNubImplTest.kt
index 786a422835..f43aecfab1 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/PubNubImplTest.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/api/legacy/PubNubImplTest.kt
@@ -56,7 +56,7 @@ class PubNubImplTest : BaseTest() {
fun getVersionAndTimeStamp() {
val version = PubNubImpl.SDK_VERSION
val timeStamp = PubNubImpl.timestamp()
- assertEquals("12.0.2", version)
+ assertEquals("12.0.3", version)
assertTrue(timeStamp > 0)
}
diff --git a/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/contract/state/World.kt b/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/contract/state/World.kt
index 391cfd2ccb..7359e38351 100644
--- a/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/contract/state/World.kt
+++ b/pubnub-kotlin/pubnub-kotlin-impl/src/test/kotlin/com/pubnub/contract/state/World.kt
@@ -2,7 +2,6 @@ package com.pubnub.contract.state
import com.pubnub.api.PubNubException
import com.pubnub.api.UserId
-import com.pubnub.api.enums.PNLogVerbosity
import com.pubnub.api.v2.PNConfiguration
import com.pubnub.contract.ContractTestConfig
import com.pubnub.internal.PubNubImpl
@@ -19,7 +18,6 @@ class World : WorldState {
PNConfiguration.builder(userId = UserId(PubNubImpl.generateUUID()), "").apply {
origin = ContractTestConfig.serverHostPort
secure = false
- logVerbosity = PNLogVerbosity.BODY
}
val pubnub: PubNubImpl by lazy { PubNubImpl(configuration.build()) }
diff --git a/pubnub-kotlin/pubnub-kotlin-test/src/commonMain/kotlin/com.pubnub.test/BaseIntegrationTest.kt b/pubnub-kotlin/pubnub-kotlin-test/src/commonMain/kotlin/com.pubnub.test/BaseIntegrationTest.kt
index 873dc765f4..3229553b55 100644
--- a/pubnub-kotlin/pubnub-kotlin-test/src/commonMain/kotlin/com.pubnub.test/BaseIntegrationTest.kt
+++ b/pubnub-kotlin/pubnub-kotlin-test/src/commonMain/kotlin/com.pubnub.test/BaseIntegrationTest.kt
@@ -2,7 +2,7 @@ package com.pubnub.test
import com.pubnub.api.PubNub
import com.pubnub.api.UserId
-import com.pubnub.api.enums.PNLogVerbosity
+import com.pubnub.api.enums.LogLevel
import com.pubnub.api.enums.PNStatusCategory
import com.pubnub.api.models.consumer.PNStatus
import com.pubnub.api.models.consumer.pubsub.PNEvent
@@ -61,16 +61,16 @@ abstract class BaseIntegrationTest {
pubnub02 = createPubNub(config02)
configPamServer = createPNConfiguration(
UserId(randomString()),
- Keys.pamSubKey,
- Keys.pamPubKey,
- Keys.pamSecKey,
- PNLogVerbosity.BODY
+ subscribeKey = Keys.pamSubKey,
+ publishKey = Keys.pamPubKey,
+ secretKey = Keys.pamSecKey,
+ logLevel = LogLevel.NONE
)
configPamClient = createPNConfiguration(
UserId(randomString()),
- Keys.pamSubKey,
- Keys.pamPubKey,
- logVerbosity = PNLogVerbosity.BODY,
+ subscribeKey = Keys.pamSubKey,
+ publishKey = Keys.pamPubKey,
+ logLevel = LogLevel.NONE,
authToken = null
)
pubnubPamServer = createPubNub(configPamServer)