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)