From 8aa1da8b3fb7ae4852fc2b15802a7410683f69b7 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 14:29:24 +0300 Subject: [PATCH 01/33] TelemetryRequest --- .../sdk/api/model/request/TelemetryRequest.kt | 57 +++++++++++++++++++ .../api/model/response/TelemetryResponse.kt | 8 +++ 2 files changed, 65 insertions(+) create mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt create mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/model/response/TelemetryResponse.kt diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt new file mode 100644 index 000000000..6ca66d032 --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt @@ -0,0 +1,57 @@ +package com.processout.sdk.api.model.request + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class TelemetryRequest( + val events: List, + val metadata: Metadata +) { + + /** + * @param[timestamp] RFC3339 encoded timestamp. + * @param[level] Event level: debug, info, warn, error. + */ + @JsonClass(generateAdapter = true) + data class Event( + val timestamp: String, + val level: String, + val message: String, + @Json(name = "gateway_configuration_id") + val gatewayConfigurationId: String?, + @Json(name = "customer_id") + val customerId: String?, + @Json(name = "customer_token_id") + val customerTokenId: String?, + @Json(name = "card_id") + val cardId: String?, + @Json(name = "invoice_id") + val invoiceId: String?, + val attributes: Map + ) + + @JsonClass(generateAdapter = true) + data class Metadata( + val application: ApplicationMetadata, + val device: DeviceMetadata + ) + + @JsonClass(generateAdapter = true) + data class ApplicationMetadata( + val name: String?, + val version: String? + ) + + /** + * @param[language] Default locale of the client device. + * @param[timeZone] UTC offset of the device time zone. + */ + @JsonClass(generateAdapter = true) + data class DeviceMetadata( + val language: String, + val model: String?, + @Json(name = "time_zone") + val timeZone: Int + ) +} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/response/TelemetryResponse.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/TelemetryResponse.kt new file mode 100644 index 000000000..98b72b445 --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/response/TelemetryResponse.kt @@ -0,0 +1,8 @@ +package com.processout.sdk.api.model.response + +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class TelemetryResponse( + val success: Boolean +) From dfd13080b92a1fa8b0d22a495e1a733d4350ecf3 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 15:19:34 +0300 Subject: [PATCH 02/33] Update comment in BaseLoggerService --- .../com/processout/sdk/core/logger/BaseLoggerService.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/core/logger/BaseLoggerService.kt b/sdk/src/main/kotlin/com/processout/sdk/core/logger/BaseLoggerService.kt index f9428d763..d20264130 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/core/logger/BaseLoggerService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/core/logger/BaseLoggerService.kt @@ -20,8 +20,8 @@ internal abstract class BaseLoggerService( val formattedMessage = if (args.isNotEmpty()) message.format(*args) else message val stackTraceElement = Throwable().stackTrace.find { element -> - // Find first element in the stack trace that do not belongs to logger package. - // This element refers to the class that actually invoked logging. + // Find first element in the stack trace that do not belong to logger package. + // This element refers to the class that actually invoked the logging. loggerPackageName?.let { element.className.startsWith(it).not() } ?: false From beb4d330656d96f50b2eaba5b4f7eedc7b70655f Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 17:36:10 +0300 Subject: [PATCH 03/33] Telemetry: api, repo, service, di --- .../sdk/api/model/request/LogRequest.kt | 13 ----- .../com/processout/sdk/api/network/LogsApi.kt | 12 ----- .../sdk/api/network/TelemetryApi.kt | 13 +++++ .../api/repository/DefaultLogsRepository.kt | 17 ------- .../repository/DefaultTelemetryRepository.kt | 13 +++++ .../sdk/api/repository/LogsRepository.kt | 8 --- .../sdk/api/repository/TelemetryRepository.kt | 10 ++++ .../sdk/api/service/RemoteLoggerService.kt | 49 ++++++++++++++----- .../com/processout/sdk/di/NetworkGraph.kt | 6 +-- .../com/processout/sdk/di/RepositoryGraph.kt | 6 +-- .../com/processout/sdk/di/ServiceGraph.kt | 7 ++- 11 files changed, 85 insertions(+), 69 deletions(-) delete mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/model/request/LogRequest.kt delete mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/network/LogsApi.kt create mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/network/TelemetryApi.kt delete mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultLogsRepository.kt create mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultTelemetryRepository.kt delete mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/repository/LogsRepository.kt create mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/repository/TelemetryRepository.kt diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/LogRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/LogRequest.kt deleted file mode 100644 index 6d17f781f..000000000 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/LogRequest.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.processout.sdk.api.model.request - -import com.squareup.moshi.JsonClass -import java.util.Date - -@JsonClass(generateAdapter = true) -internal data class LogRequest( - val level: String, - val tag: String, - val message: String, - val timestamp: Date, - val attributes: Map -) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/LogsApi.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/LogsApi.kt deleted file mode 100644 index b5e10aed9..000000000 --- a/sdk/src/main/kotlin/com/processout/sdk/api/network/LogsApi.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.processout.sdk.api.network - -import com.processout.sdk.api.model.request.LogRequest -import retrofit2.Response -import retrofit2.http.Body -import retrofit2.http.POST - -internal interface LogsApi { - - @POST("/logs") - suspend fun send(@Body request: LogRequest): Response -} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/TelemetryApi.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/TelemetryApi.kt new file mode 100644 index 000000000..ae350489d --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/api/network/TelemetryApi.kt @@ -0,0 +1,13 @@ +package com.processout.sdk.api.network + +import com.processout.sdk.api.model.request.TelemetryRequest +import com.processout.sdk.api.model.response.TelemetryResponse +import retrofit2.Response +import retrofit2.http.Body +import retrofit2.http.POST + +internal interface TelemetryApi { + + @POST("/telemetry") + suspend fun send(@Body request: TelemetryRequest): Response +} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultLogsRepository.kt b/sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultLogsRepository.kt deleted file mode 100644 index da908ee43..000000000 --- a/sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultLogsRepository.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.processout.sdk.api.repository - -import com.processout.sdk.api.model.request.LogRequest -import com.processout.sdk.api.network.LogsApi -import kotlinx.coroutines.launch - -internal class DefaultLogsRepository( - failureMapper: ApiFailureMapper, - private val api: LogsApi -) : BaseRepository(failureMapper), LogsRepository { - - override fun send(request: LogRequest) { - repositoryScope.launch { - apiCall { api.send(request) } - } - } -} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultTelemetryRepository.kt b/sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultTelemetryRepository.kt new file mode 100644 index 000000000..ca69b1ad9 --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/api/repository/DefaultTelemetryRepository.kt @@ -0,0 +1,13 @@ +package com.processout.sdk.api.repository + +import com.processout.sdk.api.model.request.TelemetryRequest +import com.processout.sdk.api.network.TelemetryApi + +internal class DefaultTelemetryRepository( + failureMapper: ApiFailureMapper, + private val api: TelemetryApi +) : BaseRepository(failureMapper), TelemetryRepository { + + override suspend fun send(request: TelemetryRequest) = + apiCall { api.send(request) } +} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/repository/LogsRepository.kt b/sdk/src/main/kotlin/com/processout/sdk/api/repository/LogsRepository.kt deleted file mode 100644 index 4463f33b4..000000000 --- a/sdk/src/main/kotlin/com/processout/sdk/api/repository/LogsRepository.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.processout.sdk.api.repository - -import com.processout.sdk.api.model.request.LogRequest - -internal interface LogsRepository { - - fun send(request: LogRequest) -} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/repository/TelemetryRepository.kt b/sdk/src/main/kotlin/com/processout/sdk/api/repository/TelemetryRepository.kt new file mode 100644 index 000000000..2aeacd232 --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/api/repository/TelemetryRepository.kt @@ -0,0 +1,10 @@ +package com.processout.sdk.api.repository + +import com.processout.sdk.api.model.request.TelemetryRequest +import com.processout.sdk.api.model.response.TelemetryResponse +import com.processout.sdk.core.ProcessOutResult + +internal interface TelemetryRepository { + + suspend fun send(request: TelemetryRequest): ProcessOutResult +} diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt index 6694b9897..079ed5e07 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt @@ -1,14 +1,20 @@ package com.processout.sdk.api.service -import com.processout.sdk.api.model.request.LogRequest -import com.processout.sdk.api.repository.LogsRepository +import com.processout.sdk.api.model.request.DeviceData +import com.processout.sdk.api.model.request.TelemetryRequest +import com.processout.sdk.api.repository.TelemetryRepository import com.processout.sdk.core.logger.BaseLoggerService import com.processout.sdk.core.logger.LogEvent import com.processout.sdk.core.logger.POLogLevel +import com.processout.sdk.di.ContextGraph +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch internal class RemoteLoggerService( minimumLevel: POLogLevel, - private val repository: LogsRepository + private val scope: CoroutineScope, + private val repository: TelemetryRepository, + private val contextGraph: ContextGraph ) : BaseLoggerService(minimumLevel) { companion object { @@ -16,16 +22,35 @@ internal class RemoteLoggerService( } override fun log(event: LogEvent) { - repository.send(event.toRequest()) + scope.launch { + repository.send(event.toRequest(contextGraph.deviceData)) + } } - private fun LogEvent.toRequest() = LogRequest( - level = level.name.lowercase(), - tag = simpleClassName, - message = message, - timestamp = timestamp, - attributes = mutableMapOf( - ATTRIBUTE_LINE to lineNumber.toString() - ).apply { attributes?.let { putAll(it) } } + private fun LogEvent.toRequest(deviceData: DeviceData) = TelemetryRequest( + events = listOf( + TelemetryRequest.Event( + timestamp = timestamp.toString(), + level = level.name.lowercase(), + message = message, + gatewayConfigurationId = null, + customerId = null, + customerTokenId = null, + cardId = null, + invoiceId = null, + attributes = emptyMap() + ) + ), + metadata = TelemetryRequest.Metadata( + application = TelemetryRequest.ApplicationMetadata( + name = null, + version = null + ), + device = TelemetryRequest.DeviceMetadata( + language = deviceData.appLanguage, + model = null, + timeZone = deviceData.appTimeZoneOffset + ) + ) ) } diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt index 988010254..d7a0853b5 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt @@ -19,7 +19,7 @@ internal interface NetworkGraph { val invoicesApi: InvoicesApi val cardsApi: CardsApi val customerTokensApi: CustomerTokensApi - val logsApi: LogsApi + val telemetryApi: TelemetryApi } internal class DefaultNetworkGraph( @@ -73,7 +73,7 @@ internal class DefaultNetworkGraph( retrofit.create(CustomerTokensApi::class.java) } - override val logsApi: LogsApi by lazy { - retrofit.create(LogsApi::class.java) + override val telemetryApi: TelemetryApi by lazy { + retrofit.create(TelemetryApi::class.java) } } diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/RepositoryGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/RepositoryGraph.kt index 922e3d3a1..c1c69b9e0 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/RepositoryGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/RepositoryGraph.kt @@ -8,7 +8,7 @@ internal interface RepositoryGraph { val invoicesRepository: InvoicesRepository val cardsRepository: POCardsRepository val customerTokensRepository: CustomerTokensRepository - val logsRepository: LogsRepository + val telemetryRepository: TelemetryRepository } internal class DefaultRepositoryGraph( @@ -35,7 +35,7 @@ internal class DefaultRepositoryGraph( DefaultCustomerTokensRepository(failureMapper, networkGraph.customerTokensApi, contextGraph) } - override val logsRepository: LogsRepository by lazy { - DefaultLogsRepository(failureMapper, networkGraph.logsApi) + override val telemetryRepository: TelemetryRepository by lazy { + DefaultTelemetryRepository(failureMapper, networkGraph.telemetryApi) } } diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt index ff2c4643e..91e4f737f 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt @@ -60,6 +60,11 @@ internal class DefaultServiceGraph( } override val remoteLoggerService: POLoggerService by lazy { - RemoteLoggerService(minimumLevel = POLogLevel.WARN, repositoryGraph.logsRepository) + RemoteLoggerService( + minimumLevel = POLogLevel.WARN, + scope = mainCoroutineScope, + repository = repositoryGraph.telemetryRepository, + contextGraph = contextGraph + ) } } From 21e3f9ec7d37cce69a05e1121f9a7ba2ecee468c Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 18:09:39 +0300 Subject: [PATCH 04/33] TelemetryService --- .../service/{RemoteLoggerService.kt => TelemetryService.kt} | 2 +- sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename sdk/src/main/kotlin/com/processout/sdk/api/service/{RemoteLoggerService.kt => TelemetryService.kt} (98%) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt similarity index 98% rename from sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt rename to sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 079ed5e07..6b41a4939 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/RemoteLoggerService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -10,7 +10,7 @@ import com.processout.sdk.di.ContextGraph import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -internal class RemoteLoggerService( +internal class TelemetryService( minimumLevel: POLogLevel, private val scope: CoroutineScope, private val repository: TelemetryRepository, diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt index 91e4f737f..b9bb103a3 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/ServiceGraph.kt @@ -14,7 +14,7 @@ internal interface ServiceGraph { val alternativePaymentMethodsService: POAlternativePaymentMethodsService val browserCapabilitiesService: POBrowserCapabilitiesService val systemLoggerService: POLoggerService - val remoteLoggerService: POLoggerService + val telemetryService: POLoggerService } internal class DefaultServiceGraph( @@ -59,8 +59,8 @@ internal class DefaultServiceGraph( SystemLoggerService(minimumLevel = POLogLevel.DEBUG) } - override val remoteLoggerService: POLoggerService by lazy { - RemoteLoggerService( + override val telemetryService: POLoggerService by lazy { + TelemetryService( minimumLevel = POLogLevel.WARN, scope = mainCoroutineScope, repository = repositoryGraph.telemetryRepository, From a6177cedbae792a8f6a101b09ebca15de6775689 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 18:22:56 +0300 Subject: [PATCH 05/33] POLogAttribute --- .../processout/sdk/core/logger/POLogAttribute.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt diff --git a/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt b/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt new file mode 100644 index 000000000..64e063d58 --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt @@ -0,0 +1,13 @@ +package com.processout.sdk.core.logger + +import com.processout.sdk.core.annotation.ProcessOutInternalApi + +/** @suppress */ +@ProcessOutInternalApi +object POLogAttribute { + const val CARD_ID = "CardId" + const val INVOICE_ID = "InvoiceId" + const val CUSTOMER_ID = "CustomerId" + const val CUSTOMER_TOKEN_ID = "CustomerTokenId" + const val GATEWAY_CONFIGURATION_ID = "GatewayConfigurationId" +} From 78aef15ffe3338058750c4fb45e1bc39ee61e2d3 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 18:47:45 +0300 Subject: [PATCH 06/33] Use POLogAttribute in all implementations --- .../processout/sdk/core/logger/POLogAttribute.kt | 1 + .../NativeAlternativePaymentMethodViewModel.kt | 10 +++------- .../card/tokenization/CardTokenizationInteractor.kt | 13 ++++++------- .../sdk/ui/card/update/CardUpdateViewModel.kt | 7 ++----- .../ui/napm/NativeAlternativePaymentInteractor.kt | 2 -- .../ui/napm/NativeAlternativePaymentViewModel.kt | 7 +++---- 6 files changed, 15 insertions(+), 25 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt b/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt index 64e063d58..9acab780d 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt @@ -5,6 +5,7 @@ import com.processout.sdk.core.annotation.ProcessOutInternalApi /** @suppress */ @ProcessOutInternalApi object POLogAttribute { + const val IIN = "IIN" const val CARD_ID = "CardId" const val INVOICE_ID = "InvoiceId" const val CUSTOMER_ID = "CustomerId" diff --git a/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/NativeAlternativePaymentMethodViewModel.kt b/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/NativeAlternativePaymentMethodViewModel.kt index 898ab8855..cde6eeea9 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/NativeAlternativePaymentMethodViewModel.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/ui/nativeapm/NativeAlternativePaymentMethodViewModel.kt @@ -32,6 +32,7 @@ import com.processout.sdk.api.service.POInvoicesService import com.processout.sdk.core.POFailure import com.processout.sdk.core.POFailure.Code.* import com.processout.sdk.core.ProcessOutResult +import com.processout.sdk.core.logger.POLogAttribute import com.processout.sdk.core.logger.POLogger import com.processout.sdk.core.retry.PORetryStrategy import com.processout.sdk.core.retry.PORetryStrategy.Exponential @@ -85,8 +86,8 @@ internal class NativeAlternativePaymentMethodViewModel( ), options = options.validate(), logAttributes = mapOf( - LOG_ATTRIBUTE_INVOICE_ID to invoiceId, - LOG_ATTRIBUTE_GATEWAY_CONFIGURATION_ID to gatewayConfigurationId + POLogAttribute.INVOICE_ID to invoiceId, + POLogAttribute.GATEWAY_CONFIGURATION_ID to gatewayConfigurationId ) ) } as T @@ -98,11 +99,6 @@ internal class NativeAlternativePaymentMethodViewModel( ) } - companion object { - private const val LOG_ATTRIBUTE_INVOICE_ID = "InvoiceId" - private const val LOG_ATTRIBUTE_GATEWAY_CONFIGURATION_ID = "GatewayConfigurationId" - } - private val _uiState = MutableStateFlow(Loading) val uiState = _uiState.asStateFlow() diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt index e5e4cee27..f297be1cf 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/tokenization/CardTokenizationInteractor.kt @@ -19,6 +19,7 @@ import com.processout.sdk.core.POFailure.Code.Generic import com.processout.sdk.core.POFailure.GenericCode.* import com.processout.sdk.core.ProcessOutResult import com.processout.sdk.core.getOrNull +import com.processout.sdk.core.logger.POLogAttribute import com.processout.sdk.core.logger.POLogger import com.processout.sdk.core.onFailure import com.processout.sdk.core.onSuccess @@ -53,8 +54,6 @@ internal class CardTokenizationInteractor( private companion object { const val IIN_LENGTH = 6 const val EXPIRATION_DATE_PART_LENGTH = 2 - const val LOG_ATTRIBUTE_IIN = "IIN" - const val LOG_ATTRIBUTE_CARD_ID = "CardId" } private data class Expiration( @@ -260,7 +259,7 @@ internal class CardTokenizationInteractor( .onFailure { POLogger.info( message = "Failed to fetch issuer information: %s", it, - attributes = mapOf(LOG_ATTRIBUTE_IIN to iin) + attributes = mapOf(POLogAttribute.IIN to iin) ) }.getOrNull() @@ -533,7 +532,7 @@ internal class CardTokenizationInteractor( _state.update { it.copy(tokenizedCard = card) } POLogger.info( message = "Card tokenized successfully.", - attributes = mapOf(LOG_ATTRIBUTE_CARD_ID to card.id) + attributes = mapOf(POLogAttribute.CARD_ID to card.id) ) dispatch(DidTokenize(card)) if (eventDispatcher.subscribedForProcessTokenizedCard()) { @@ -541,7 +540,7 @@ internal class CardTokenizationInteractor( } else { POLogger.info( message = "Completed successfully.", - attributes = mapOf(LOG_ATTRIBUTE_CARD_ID to card.id) + attributes = mapOf(POLogAttribute.CARD_ID to card.id) ) _completion.update { Success(card) } } @@ -561,7 +560,7 @@ internal class CardTokenizationInteractor( eventDispatcher.processTokenizedCard(card) POLogger.info( message = "Requested to process tokenized card.", - attributes = mapOf(LOG_ATTRIBUTE_CARD_ID to card.id) + attributes = mapOf(POLogAttribute.CARD_ID to card.id) ) } } @@ -573,7 +572,7 @@ internal class CardTokenizationInteractor( _state.value.tokenizedCard?.let { card -> POLogger.info( message = "Completed successfully.", - attributes = mapOf(LOG_ATTRIBUTE_CARD_ID to card.id) + attributes = mapOf(POLogAttribute.CARD_ID to card.id) ) _completion.update { Success(card) } }.orElse { diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt index c0ac277ba..3967a46e9 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/card/update/CardUpdateViewModel.kt @@ -21,6 +21,7 @@ import com.processout.sdk.core.POFailure.Code.Cancelled import com.processout.sdk.core.POFailure.Code.Generic import com.processout.sdk.core.POFailure.GenericCode.* import com.processout.sdk.core.ProcessOutResult +import com.processout.sdk.core.logger.POLogAttribute import com.processout.sdk.core.logger.POLogger import com.processout.sdk.core.onFailure import com.processout.sdk.core.onSuccess @@ -59,14 +60,10 @@ internal class CardUpdateViewModel( options = options, cardsRepository = ProcessOut.instance.cards, eventDispatcher = PODefaultCardUpdateEventDispatcher, - logAttributes = mapOf(LOG_ATTRIBUTE_CARD_ID to cardId) + logAttributes = mapOf(POLogAttribute.CARD_ID to cardId) ) as T } - private companion object { - const val LOG_ATTRIBUTE_CARD_ID = "CardId" - } - private object CardFieldId { const val NUMBER = "card-number" const val CVC = "card-cvc" diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt index 03e6bef95..b547cbcd0 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentInteractor.kt @@ -61,8 +61,6 @@ internal class NativeAlternativePaymentInteractor( companion object { const val SUCCESS_DELAY_MS = 3000L - const val LOG_ATTRIBUTE_INVOICE_ID = "InvoiceId" - const val LOG_ATTRIBUTE_GATEWAY_CONFIGURATION_ID = "GatewayConfigurationId" } private val _completion = MutableStateFlow(Awaiting) diff --git a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentViewModel.kt b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentViewModel.kt index 9565c3058..91ccab6c5 100644 --- a/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentViewModel.kt +++ b/ui/src/main/kotlin/com/processout/sdk/ui/napm/NativeAlternativePaymentViewModel.kt @@ -15,12 +15,11 @@ import com.processout.sdk.api.dispatcher.napm.PODefaultNativeAlternativePaymentM import com.processout.sdk.api.model.response.PONativeAlternativePaymentMethodParameter.ParameterType import com.processout.sdk.api.model.response.PONativeAlternativePaymentMethodParameter.ParameterType.* import com.processout.sdk.api.model.response.PONativeAlternativePaymentMethodTransactionDetails.Invoice +import com.processout.sdk.core.logger.POLogAttribute import com.processout.sdk.core.retry.PORetryStrategy.Exponential import com.processout.sdk.ui.core.state.POActionState import com.processout.sdk.ui.core.state.POActionState.Confirmation import com.processout.sdk.ui.core.state.POImmutableList -import com.processout.sdk.ui.napm.NativeAlternativePaymentInteractor.Companion.LOG_ATTRIBUTE_GATEWAY_CONFIGURATION_ID -import com.processout.sdk.ui.napm.NativeAlternativePaymentInteractor.Companion.LOG_ATTRIBUTE_INVOICE_ID import com.processout.sdk.ui.napm.NativeAlternativePaymentInteractorState.* import com.processout.sdk.ui.napm.NativeAlternativePaymentViewModelState.Field.* import com.processout.sdk.ui.napm.PONativeAlternativePaymentConfiguration.Options @@ -67,8 +66,8 @@ internal class NativeAlternativePaymentViewModel( ), eventDispatcher = PODefaultNativeAlternativePaymentMethodEventDispatcher, logAttributes = mapOf( - LOG_ATTRIBUTE_INVOICE_ID to invoiceId, - LOG_ATTRIBUTE_GATEWAY_CONFIGURATION_ID to gatewayConfigurationId + POLogAttribute.INVOICE_ID to invoiceId, + POLogAttribute.GATEWAY_CONFIGURATION_ID to gatewayConfigurationId ) ) ) as T From e682f45ce908afd626aa7b3d8519914d1a1e44cb Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Fri, 7 Jun 2024 18:55:18 +0300 Subject: [PATCH 07/33] Update POLogAttribute --- .../com/processout/sdk/api/service/TelemetryService.kt | 4 ---- .../kotlin/com/processout/sdk/core/logger/POLogAttribute.kt | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 6b41a4939..8a34a3540 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -17,10 +17,6 @@ internal class TelemetryService( private val contextGraph: ContextGraph ) : BaseLoggerService(minimumLevel) { - companion object { - private const val ATTRIBUTE_LINE = "Line" - } - override fun log(event: LogEvent) { scope.launch { repository.send(event.toRequest(contextGraph.deviceData)) diff --git a/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt b/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt index 9acab780d..0b40fdc30 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/core/logger/POLogAttribute.kt @@ -5,6 +5,11 @@ import com.processout.sdk.core.annotation.ProcessOutInternalApi /** @suppress */ @ProcessOutInternalApi object POLogAttribute { + // Generic + const val FILE = "File" + const val LINE = "Line" + + // Specific const val IIN = "IIN" const val CARD_ID = "CardId" const val INVOICE_ID = "InvoiceId" From fd408d110b1f955167fb647086873d4ba6a4e51d Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 11:26:11 +0300 Subject: [PATCH 08/33] attributes --- .../sdk/api/service/TelemetryService.kt | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 8a34a3540..3927ebfe9 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -5,6 +5,13 @@ import com.processout.sdk.api.model.request.TelemetryRequest import com.processout.sdk.api.repository.TelemetryRepository import com.processout.sdk.core.logger.BaseLoggerService import com.processout.sdk.core.logger.LogEvent +import com.processout.sdk.core.logger.POLogAttribute.CARD_ID +import com.processout.sdk.core.logger.POLogAttribute.CUSTOMER_ID +import com.processout.sdk.core.logger.POLogAttribute.CUSTOMER_TOKEN_ID +import com.processout.sdk.core.logger.POLogAttribute.FILE +import com.processout.sdk.core.logger.POLogAttribute.GATEWAY_CONFIGURATION_ID +import com.processout.sdk.core.logger.POLogAttribute.INVOICE_ID +import com.processout.sdk.core.logger.POLogAttribute.LINE import com.processout.sdk.core.logger.POLogLevel import com.processout.sdk.di.ContextGraph import kotlinx.coroutines.CoroutineScope @@ -23,30 +30,40 @@ internal class TelemetryService( } } - private fun LogEvent.toRequest(deviceData: DeviceData) = TelemetryRequest( - events = listOf( - TelemetryRequest.Event( - timestamp = timestamp.toString(), - level = level.name.lowercase(), - message = message, - gatewayConfigurationId = null, - customerId = null, - customerTokenId = null, - cardId = null, - invoiceId = null, - attributes = emptyMap() - ) - ), - metadata = TelemetryRequest.Metadata( - application = TelemetryRequest.ApplicationMetadata( - name = null, - version = null + private fun LogEvent.toRequest(deviceData: DeviceData): TelemetryRequest { + val additionalAttributes = mutableMapOf( + FILE to simpleClassName, + LINE to lineNumber.toString() + ) + val standaloneAttributes = listOf(GATEWAY_CONFIGURATION_ID, CUSTOMER_ID, CUSTOMER_TOKEN_ID, CARD_ID, INVOICE_ID) + attributes?.filterKeys { !standaloneAttributes.contains(it) }?.let { + additionalAttributes.putAll(it) + } + return TelemetryRequest( + events = listOf( + TelemetryRequest.Event( + timestamp = timestamp.toString(), + level = level.name.lowercase(), + message = message, + gatewayConfigurationId = attributes?.get(GATEWAY_CONFIGURATION_ID), + customerId = attributes?.get(CUSTOMER_ID), + customerTokenId = attributes?.get(CUSTOMER_TOKEN_ID), + cardId = attributes?.get(CARD_ID), + invoiceId = attributes?.get(INVOICE_ID), + attributes = additionalAttributes + ) ), - device = TelemetryRequest.DeviceMetadata( - language = deviceData.appLanguage, - model = null, - timeZone = deviceData.appTimeZoneOffset + metadata = TelemetryRequest.Metadata( + application = TelemetryRequest.ApplicationMetadata( + name = null, + version = null + ), + device = TelemetryRequest.DeviceMetadata( + language = deviceData.appLanguage, + model = null, + timeZone = deviceData.appTimeZoneOffset + ) ) ) - ) + } } From 1ebc6bd831b02b330e2ee18c4f28fd22f64ecab0 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 11:55:51 +0300 Subject: [PATCH 09/33] Device model --- .../processout/sdk/api/model/request/DeviceData.kt | 4 +++- .../sdk/api/model/request/TelemetryRequest.kt | 2 +- .../processout/sdk/api/service/TelemetryService.kt | 11 ++++++----- .../main/kotlin/com/processout/sdk/di/ContextGraph.kt | 3 ++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt index cc6c5611b..710ad9704 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt @@ -13,5 +13,7 @@ internal data class DeviceData( val appScreenHeight: Int, @Json(name = "app_timezone_offset") val appTimeZoneOffset: Int, - val channel: String = "android" + val channel: String = "android", + @Json(ignore = true) + val model: String = "" ) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt index 6ca66d032..9ab753a5e 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt @@ -50,7 +50,7 @@ internal data class TelemetryRequest( @JsonClass(generateAdapter = true) data class DeviceMetadata( val language: String, - val model: String?, + val model: String, @Json(name = "time_zone") val timeZone: Int ) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 3927ebfe9..45e00aa14 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -2,6 +2,7 @@ package com.processout.sdk.api.service import com.processout.sdk.api.model.request.DeviceData import com.processout.sdk.api.model.request.TelemetryRequest +import com.processout.sdk.api.model.request.TelemetryRequest.* import com.processout.sdk.api.repository.TelemetryRepository import com.processout.sdk.core.logger.BaseLoggerService import com.processout.sdk.core.logger.LogEvent @@ -41,7 +42,7 @@ internal class TelemetryService( } return TelemetryRequest( events = listOf( - TelemetryRequest.Event( + Event( timestamp = timestamp.toString(), level = level.name.lowercase(), message = message, @@ -53,14 +54,14 @@ internal class TelemetryService( attributes = additionalAttributes ) ), - metadata = TelemetryRequest.Metadata( - application = TelemetryRequest.ApplicationMetadata( + metadata = Metadata( + application = ApplicationMetadata( name = null, version = null ), - device = TelemetryRequest.DeviceMetadata( + device = DeviceMetadata( language = deviceData.appLanguage, - model = null, + model = deviceData.model, timeZone = deviceData.appTimeZoneOffset ) ) diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt index 5e122ea98..e3ef14ae0 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt @@ -37,7 +37,8 @@ internal class DefaultContextGraph( appLanguage = configuration.application.currentAppLocale().toLanguageTag(), appScreenWidth = screenSize.width, appScreenHeight = screenSize.height, - appTimeZoneOffset = timeZoneOffset + appTimeZoneOffset = timeZoneOffset, + model = "${Build.MANUFACTURER} ${Build.MODEL}" ) } From 8bfaae84569af64abc458e7fdcfc77fa0a158781 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 12:01:28 +0300 Subject: [PATCH 10/33] val names --- .../com/processout/sdk/api/model/request/DeviceData.kt | 6 +++--- .../com/processout/sdk/api/service/TelemetryService.kt | 2 +- sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt index 710ad9704..6b51c156c 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt @@ -8,11 +8,11 @@ internal data class DeviceData( @Json(name = "app_language") val appLanguage: String, @Json(name = "app_screen_width") - val appScreenWidth: Int, + val screenWidth: Int, @Json(name = "app_screen_height") - val appScreenHeight: Int, + val screenHeight: Int, @Json(name = "app_timezone_offset") - val appTimeZoneOffset: Int, + val timeZoneOffset: Int, val channel: String = "android", @Json(ignore = true) val model: String = "" diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 45e00aa14..7800f9f3b 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -62,7 +62,7 @@ internal class TelemetryService( device = DeviceMetadata( language = deviceData.appLanguage, model = deviceData.model, - timeZone = deviceData.appTimeZoneOffset + timeZone = deviceData.timeZoneOffset ) ) ) diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt index e3ef14ae0..eee500cb4 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt @@ -35,9 +35,9 @@ internal class DefaultContextGraph( } return DeviceData( appLanguage = configuration.application.currentAppLocale().toLanguageTag(), - appScreenWidth = screenSize.width, - appScreenHeight = screenSize.height, - appTimeZoneOffset = timeZoneOffset, + screenWidth = screenSize.width, + screenHeight = screenSize.height, + timeZoneOffset = timeZoneOffset, model = "${Build.MANUFACTURER} ${Build.MODEL}" ) } From 41a64f557f23db0781575a544099e559f4da376d Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 13:05:26 +0300 Subject: [PATCH 11/33] Extend ProcessOutConfiguration --- .../sdk/api/ProcessOutConfiguration.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt index a7d8f4333..8096abc40 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt @@ -10,12 +10,28 @@ import com.processout.sdk.core.annotation.ProcessOutInternalApi * @param[application] Instance of the [Application]. * @param[projectId] Project ID. * @param[debug] Enables debug mode. Default value is _false_. __Note:__ debug logs may contain sensitive data. + * @param[enableTelemetry] Enables sending telemetry data to ProcessOut. Default value is _false_. + * @param[applicationInformation] Application information that helps ProcessOut to troubleshoot potential issues. */ data class ProcessOutConfiguration( val application: Application, val projectId: String, - val debug: Boolean = false + val debug: Boolean = false, + val enableTelemetry: Boolean = false, + val applicationInformation: ApplicationInformation? = null ) { + + /** + * Application information that helps ProcessOut to troubleshoot potential issues. + * + * @param[name] Application name. + * @param[version] Application version. + */ + data class ApplicationInformation( + val name: String? = null, + val version: String? = null + ) + /** * __Warning:__ Intended to be used only for testing purposes. * Storing private key inside application is extremely dangerous and is highly discouraged. From 602e3677909fbb26ddb39b9a7de5fc647aed54cd Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 13:14:24 +0300 Subject: [PATCH 12/33] Include app info in telementry --- .../sdk/api/service/TelemetryService.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 7800f9f3b..99cc21ede 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -1,5 +1,6 @@ package com.processout.sdk.api.service +import com.processout.sdk.api.ProcessOutConfiguration.ApplicationInformation import com.processout.sdk.api.model.request.DeviceData import com.processout.sdk.api.model.request.TelemetryRequest import com.processout.sdk.api.model.request.TelemetryRequest.* @@ -27,11 +28,19 @@ internal class TelemetryService( override fun log(event: LogEvent) { scope.launch { - repository.send(event.toRequest(contextGraph.deviceData)) + repository.send( + event.toRequest( + deviceData = contextGraph.deviceData, + appInfo = contextGraph.configuration.applicationInformation + ) + ) } } - private fun LogEvent.toRequest(deviceData: DeviceData): TelemetryRequest { + private fun LogEvent.toRequest( + deviceData: DeviceData, + appInfo: ApplicationInformation?, + ): TelemetryRequest { val additionalAttributes = mutableMapOf( FILE to simpleClassName, LINE to lineNumber.toString() @@ -56,8 +65,8 @@ internal class TelemetryService( ), metadata = Metadata( application = ApplicationMetadata( - name = null, - version = null + name = appInfo?.name, + version = appInfo?.version ), device = DeviceMetadata( language = deviceData.appLanguage, From f7f7b80b53f0766d12ac7e799c55df0ebf1600f3 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 14:33:59 +0300 Subject: [PATCH 13/33] enableTelemetry --- .../com/processout/sdk/api/ProcessOut.kt | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt index f1ca4f1c2..894b217d6 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt @@ -105,18 +105,21 @@ class ProcessOut private constructor( */ fun configure(configuration: ProcessOutConfiguration, force: Boolean = false) { if (isConfigured) { - if (force) { - with(instance.apiGraph) { - contextGraph.configuration = configuration - POLogger.clear() - if (configuration.debug) { - POLogger.add(serviceGraph.systemLoggerService) - POLogger.info("Applied new ProcessOut configuration.") - } - } - } else { + if (!force) { POLogger.info("ProcessOut is already configured.") + return } + with(instance.apiGraph) { + contextGraph.configuration = configuration + POLogger.clear() + if (configuration.debug) { + POLogger.add(serviceGraph.systemLoggerService) + } + if (configuration.enableTelemetry) { + POLogger.add(serviceGraph.telemetryService) + } + } + POLogger.info("Applied new ProcessOut configuration.") } else { val contextGraph = DefaultContextGraph( configuration = configuration @@ -147,8 +150,11 @@ class ProcessOut private constructor( if (configuration.debug) { POLogger.add(serviceGraph.systemLoggerService) - POLogger.info("ProcessOut configuration is complete.") } + if (configuration.enableTelemetry) { + POLogger.add(serviceGraph.telemetryService) + } + POLogger.info("ProcessOut configuration is complete.") } } } From b9eded12385e119c20b0e1f6a6accf122e26a397 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 14:52:43 +0300 Subject: [PATCH 14/33] Session-Id header --- .../kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt | 3 +++ .../sdk/api/network/interceptor/UserAgentInterceptor.kt | 1 + 2 files changed, 4 insertions(+) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt index 8096abc40..1e792bd6a 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOutConfiguration.kt @@ -3,6 +3,7 @@ package com.processout.sdk.api import android.app.Application import androidx.annotation.VisibleForTesting import com.processout.sdk.core.annotation.ProcessOutInternalApi +import java.util.UUID /** * Defines ProcessOut configuration. @@ -32,6 +33,8 @@ data class ProcessOutConfiguration( val version: String? = null ) + internal val sessionId = UUID.randomUUID().toString() + /** * __Warning:__ Intended to be used only for testing purposes. * Storing private key inside application is extremely dangerous and is highly discouraged. diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt index 9c516093b..04e6531c3 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt @@ -24,6 +24,7 @@ internal class UserAgentInterceptor( .header("Idempotency-Key", UUID.randomUUID().toString()) .header("User-Agent", userAgentComponents.joinToString(separator = "/")) .header("Accept-Language", contextGraph.configuration.application.currentSdkLocale().toLanguageTag()) + .header("Session-Id", contextGraph.configuration.sessionId) .build() return chain.proceed(userAgentRequest) } From d456e6f202c4bfcc8e27f52ea37c58cbc1faf533 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 17:05:34 +0300 Subject: [PATCH 15/33] Fix timestamp --- .../com/processout/sdk/api/model/request/TelemetryRequest.kt | 3 ++- .../kotlin/com/processout/sdk/api/service/TelemetryService.kt | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt index 9ab753a5e..6e6ac5c9c 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/TelemetryRequest.kt @@ -2,6 +2,7 @@ package com.processout.sdk.api.model.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import java.util.Date @JsonClass(generateAdapter = true) internal data class TelemetryRequest( @@ -15,7 +16,7 @@ internal data class TelemetryRequest( */ @JsonClass(generateAdapter = true) data class Event( - val timestamp: String, + val timestamp: Date, val level: String, val message: String, @Json(name = "gateway_configuration_id") diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt index 99cc21ede..368775f47 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/service/TelemetryService.kt @@ -52,7 +52,7 @@ internal class TelemetryService( return TelemetryRequest( events = listOf( Event( - timestamp = timestamp.toString(), + timestamp = timestamp, level = level.name.lowercase(), message = message, gatewayConfigurationId = attributes?.get(GATEWAY_CONFIGURATION_ID), From 7cdc55757c83f29705c97d3fde984c83de1d4ca9 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 17:21:06 +0300 Subject: [PATCH 16/33] Product-Version header --- .../sdk/api/network/interceptor/UserAgentInterceptor.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt index 04e6531c3..62375499e 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt @@ -25,6 +25,7 @@ internal class UserAgentInterceptor( .header("User-Agent", userAgentComponents.joinToString(separator = "/")) .header("Accept-Language", contextGraph.configuration.application.currentSdkLocale().toLanguageTag()) .header("Session-Id", contextGraph.configuration.sessionId) + .header("Product-Version", sdkVersion) .build() return chain.proceed(userAgentRequest) } From a8a165a28a970ccb58e1686b81251235a22e9d14 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 17:23:59 +0300 Subject: [PATCH 17/33] Device-System-Name header --- .../sdk/api/network/interceptor/UserAgentInterceptor.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt index 62375499e..a040895b2 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt @@ -25,6 +25,7 @@ internal class UserAgentInterceptor( .header("User-Agent", userAgentComponents.joinToString(separator = "/")) .header("Accept-Language", contextGraph.configuration.application.currentSdkLocale().toLanguageTag()) .header("Session-Id", contextGraph.configuration.sessionId) + .header("Device-System-Name", contextGraph.deviceData.channel) .header("Product-Version", sdkVersion) .build() return chain.proceed(userAgentRequest) From ad18ba034271e43d15ca15c32db35e9b378c940a Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Mon, 10 Jun 2024 17:46:47 +0300 Subject: [PATCH 18/33] Device-System-Version --- .../com/processout/sdk/api/model/request/DeviceData.kt | 5 ++++- .../sdk/api/network/interceptor/UserAgentInterceptor.kt | 1 + sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt index 6b51c156c..268a15eff 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/model/request/DeviceData.kt @@ -1,5 +1,6 @@ package com.processout.sdk.api.model.request +import android.os.Build import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @@ -15,5 +16,7 @@ internal data class DeviceData( val timeZoneOffset: Int, val channel: String = "android", @Json(ignore = true) - val model: String = "" + val model: String = "${Build.MANUFACTURER} ${Build.MODEL}", + @Json(ignore = true) + val systemApiLevel: String = Build.VERSION.SDK_INT.toString() ) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt index a040895b2..2c5a6afd1 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt @@ -26,6 +26,7 @@ internal class UserAgentInterceptor( .header("Accept-Language", contextGraph.configuration.application.currentSdkLocale().toLanguageTag()) .header("Session-Id", contextGraph.configuration.sessionId) .header("Device-System-Name", contextGraph.deviceData.channel) + .header("Device-System-Version", contextGraph.deviceData.systemApiLevel) .header("Product-Version", sdkVersion) .build() return chain.proceed(userAgentRequest) diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt index eee500cb4..7e2e39701 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/ContextGraph.kt @@ -37,8 +37,7 @@ internal class DefaultContextGraph( appLanguage = configuration.application.currentAppLocale().toLanguageTag(), screenWidth = screenSize.width, screenHeight = screenSize.height, - timeZoneOffset = timeZoneOffset, - model = "${Build.MANUFACTURER} ${Build.MODEL}" + timeZoneOffset = timeZoneOffset ) } From 479e32f60111a7b4d72b3f43c2b6174a2da7eca2 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Tue, 11 Jun 2024 21:46:37 +0300 Subject: [PATCH 19/33] 'Installation-Id' header from Preferences --- .../com/processout/sdk/api/ProcessOut.kt | 2 + .../interceptor/UserAgentInterceptor.kt | 3 ++ .../sdk/api/preferences/Preferences.kt | 38 +++++++++++++++++++ .../com/processout/sdk/di/NetworkGraph.kt | 4 +- 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 sdk/src/main/kotlin/com/processout/sdk/api/preferences/Preferences.kt diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt index 894b217d6..3ff1e50fc 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt @@ -9,6 +9,7 @@ import com.processout.sdk.api.dispatcher.POEventDispatchers import com.processout.sdk.api.dispatcher.PONativeAlternativePaymentMethodEventDispatcher import com.processout.sdk.api.dispatcher.napm.PODefaultNativeAlternativePaymentMethodEventDispatcher import com.processout.sdk.api.network.ApiConstants +import com.processout.sdk.api.preferences.Preferences import com.processout.sdk.api.repository.POCardsRepository import com.processout.sdk.api.repository.POGatewayConfigurationsRepository import com.processout.sdk.api.service.POAlternativePaymentMethodsService @@ -126,6 +127,7 @@ class ProcessOut private constructor( ) val networkGraph = DefaultNetworkGraph( contextGraph = contextGraph, + preferences = Preferences(contextGraph), baseUrl = ApiConstants.BASE_URL, sdkVersion = VERSION ) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt index 2c5a6afd1..1fd50491d 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/network/interceptor/UserAgentInterceptor.kt @@ -1,5 +1,6 @@ package com.processout.sdk.api.network.interceptor +import com.processout.sdk.api.preferences.Preferences import com.processout.sdk.core.locale.currentSdkLocale import com.processout.sdk.di.ContextGraph import okhttp3.Interceptor @@ -10,6 +11,7 @@ import java.util.UUID internal class UserAgentInterceptor( private val contextGraph: ContextGraph, + private val preferences: Preferences, private val sdkVersion: String ) : Interceptor { @@ -25,6 +27,7 @@ internal class UserAgentInterceptor( .header("User-Agent", userAgentComponents.joinToString(separator = "/")) .header("Accept-Language", contextGraph.configuration.application.currentSdkLocale().toLanguageTag()) .header("Session-Id", contextGraph.configuration.sessionId) + .header("Installation-Id", preferences.installationId) .header("Device-System-Name", contextGraph.deviceData.channel) .header("Device-System-Version", contextGraph.deviceData.systemApiLevel) .header("Product-Version", sdkVersion) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/preferences/Preferences.kt b/sdk/src/main/kotlin/com/processout/sdk/api/preferences/Preferences.kt new file mode 100644 index 000000000..237bb3d5f --- /dev/null +++ b/sdk/src/main/kotlin/com/processout/sdk/api/preferences/Preferences.kt @@ -0,0 +1,38 @@ +package com.processout.sdk.api.preferences + +import android.content.Context +import androidx.core.content.edit +import com.processout.sdk.BuildConfig +import com.processout.sdk.di.ContextGraph +import kotlinx.coroutines.* +import java.util.UUID + +internal class Preferences( + contextGraph: ContextGraph, + scope: CoroutineScope = CoroutineScope(Dispatchers.Main + SupervisorJob()), + workDispatcher: CoroutineDispatcher = Dispatchers.IO +) { + + private companion object { + const val FILENAME = "${BuildConfig.LIBRARY_PACKAGE_NAME}.preferences" + const val KEY_INSTALLATION_ID = "InstallationId" + } + + private val sharedPreferences = contextGraph.configuration.application + .getSharedPreferences(FILENAME, Context.MODE_PRIVATE) + + var installationId = String() + private set + + init { + scope.launch(workDispatcher) { + installationId = sharedPreferences.getString(KEY_INSTALLATION_ID, String()) ?: String() + if (installationId.isEmpty()) { + installationId = UUID.randomUUID().toString() + sharedPreferences.edit(commit = true) { + putString(KEY_INSTALLATION_ID, installationId) + } + } + } + } +} diff --git a/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt b/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt index d7a0853b5..d4ec40d13 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/di/NetworkGraph.kt @@ -3,6 +3,7 @@ package com.processout.sdk.di import com.processout.sdk.api.network.* import com.processout.sdk.api.network.interceptor.BasicAuthInterceptor import com.processout.sdk.api.network.interceptor.UserAgentInterceptor +import com.processout.sdk.api.preferences.Preferences import com.processout.sdk.core.logger.POLogger import com.squareup.moshi.Moshi import com.squareup.moshi.adapters.Rfc3339DateJsonAdapter @@ -24,6 +25,7 @@ internal interface NetworkGraph { internal class DefaultNetworkGraph( contextGraph: ContextGraph, + preferences: Preferences, baseUrl: String, sdkVersion: String ) : NetworkGraph { @@ -34,7 +36,7 @@ internal class DefaultNetworkGraph( .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .addInterceptor(BasicAuthInterceptor(contextGraph)) - .addInterceptor(UserAgentInterceptor(contextGraph, sdkVersion)) + .addInterceptor(UserAgentInterceptor(contextGraph, preferences, sdkVersion)) .addInterceptor(HttpLoggingInterceptor { message -> if (contextGraph.configuration.debug) { POLogger.debug(message) From e63b2e3ad527ffcf26704eeb144b957b69e172d5 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Tue, 11 Jun 2024 22:33:55 +0300 Subject: [PATCH 20/33] Reformat --- sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt index 3ff1e50fc..46f633163 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt @@ -59,6 +59,9 @@ class ProcessOut private constructor( apiGraph.serviceGraph.browserCapabilitiesService } + /** Dispatchers that allows to handle events during various payment flows. */ + val dispatchers: POEventDispatchers by lazy { DefaultEventDispatchers } + /** Dispatcher that allows to handle events during native alternative payments. */ @Deprecated( message = "Use replacement property.", @@ -68,9 +71,6 @@ class ProcessOut private constructor( PODefaultNativeAlternativePaymentMethodEventDispatcher } - /** Dispatchers that allows to handle events during various payment flows. */ - val dispatchers: POEventDispatchers by lazy { DefaultEventDispatchers } - /** * Entry point to ProcessOut Android SDK. * Provides configuration and access to services. From 36f5b5d4c9af6e2581608a329ad8b22f04888afb Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Tue, 11 Jun 2024 22:55:49 +0300 Subject: [PATCH 21/33] configureLogger() --- .../com/processout/sdk/api/ProcessOut.kt | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt index 46f633163..698a24fb1 100644 --- a/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt +++ b/sdk/src/main/kotlin/com/processout/sdk/api/ProcessOut.kt @@ -104,7 +104,10 @@ class ProcessOut private constructor( * the configuration applies only on first invocation and all subsequent calls are ignored. * When set to _true_, the existing instances will be reconfigured. */ - fun configure(configuration: ProcessOutConfiguration, force: Boolean = false) { + fun configure( + configuration: ProcessOutConfiguration, + force: Boolean = false + ) { if (isConfigured) { if (!force) { POLogger.info("ProcessOut is already configured.") @@ -112,13 +115,7 @@ class ProcessOut private constructor( } with(instance.apiGraph) { contextGraph.configuration = configuration - POLogger.clear() - if (configuration.debug) { - POLogger.add(serviceGraph.systemLoggerService) - } - if (configuration.enableTelemetry) { - POLogger.add(serviceGraph.telemetryService) - } + configureLogger(configuration, serviceGraph) } POLogger.info("Applied new ProcessOut configuration.") } else { @@ -150,14 +147,22 @@ class ProcessOut private constructor( instance = lazy { ProcessOut(apiGraph) }.value legacyInstance = lazy { ProcessOutLegacyAccessor.configure(contextGraph) }.value - if (configuration.debug) { - POLogger.add(serviceGraph.systemLoggerService) - } - if (configuration.enableTelemetry) { - POLogger.add(serviceGraph.telemetryService) - } + configureLogger(configuration, serviceGraph) POLogger.info("ProcessOut configuration is complete.") } } + + private fun configureLogger( + configuration: ProcessOutConfiguration, + serviceGraph: ServiceGraph + ) { + POLogger.clear() + if (configuration.debug) { + POLogger.add(serviceGraph.systemLoggerService) + } + if (configuration.enableTelemetry) { + POLogger.add(serviceGraph.telemetryService) + } + } } } From 9691762a89f343595873e6ba16563ac197a6fa0e Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 11:33:47 +0300 Subject: [PATCH 22/33] AGP 8.4.2 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8fd7fd87e..f24fee4c3 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ buildscript { ext { - androidGradlePluginVersion = '8.4.1' + androidGradlePluginVersion = '8.4.2' kotlinVersion = '1.9.24' kspVersion = '1.9.24-1.0.20' dokkaVersion = '1.9.20' From 3319def1f56e5bba245064c75b24266a943411fe Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 11:48:36 +0300 Subject: [PATCH 23/33] testProductionDebug --- .../com/processout/sdk/AlternativePaymentMethodsServiceTests.kt | 0 .../kotlin/com/processout/sdk/CardsRepositoryTests.kt | 0 .../kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt | 0 .../com/processout/sdk/GatewayConfigurationsRepositoryTests.kt | 0 .../kotlin/com/processout/sdk/InvoicesRepositoryTests.kt | 0 .../kotlin/com/processout/sdk/config/SetupRule.kt | 0 .../kotlin/com/processout/sdk/config/TestApplication.kt | 0 .../kotlin/com/processout/sdk/config/TestConfiguration.kt | 0 .../kotlin/com/processout/sdk/config/TestConstants.kt | 0 .../kotlin/com/processout/sdk/config/TestExtensions.kt | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/CardsRepositoryTests.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/config/SetupRule.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/config/TestApplication.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/config/TestConfiguration.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/config/TestConstants.kt (100%) rename sdk/src/{test => testProductionDebug}/kotlin/com/processout/sdk/config/TestExtensions.kt (100%) diff --git a/sdk/src/test/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/CardsRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/CardsRepositoryTests.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/config/SetupRule.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/SetupRule.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/config/SetupRule.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/SetupRule.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/config/TestApplication.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestApplication.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/config/TestApplication.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestApplication.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/config/TestConfiguration.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConfiguration.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/config/TestConfiguration.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConfiguration.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/config/TestConstants.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConstants.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/config/TestConstants.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConstants.kt diff --git a/sdk/src/test/kotlin/com/processout/sdk/config/TestExtensions.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestExtensions.kt similarity index 100% rename from sdk/src/test/kotlin/com/processout/sdk/config/TestExtensions.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestExtensions.kt From c9f774f0f94dced859962a9c0dd0acdd9ffcd8fd Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 12:17:52 +0300 Subject: [PATCH 24/33] Test 'configuration' package --- .../sdk/AlternativePaymentMethodsServiceTests.kt | 6 +++--- .../kotlin/com/processout/sdk/CardsRepositoryTests.kt | 6 +++--- .../com/processout/sdk/CustomerTokensRepositoryTests.kt | 6 +++--- .../sdk/GatewayConfigurationsRepositoryTests.kt | 8 ++++---- .../kotlin/com/processout/sdk/InvoicesRepositoryTests.kt | 8 ++++---- .../processout/sdk/{config => configuration}/SetupRule.kt | 2 +- .../sdk/{config => configuration}/TestApplication.kt | 2 +- .../sdk/{config => configuration}/TestConfiguration.kt | 2 +- .../sdk/{config => configuration}/TestConstants.kt | 2 +- .../sdk/{config => configuration}/TestExtensions.kt | 2 +- 10 files changed, 22 insertions(+), 22 deletions(-) rename sdk/src/testProductionDebug/kotlin/com/processout/sdk/{config => configuration}/SetupRule.kt (92%) rename sdk/src/testProductionDebug/kotlin/com/processout/sdk/{config => configuration}/TestApplication.kt (63%) rename sdk/src/testProductionDebug/kotlin/com/processout/sdk/{config => configuration}/TestConfiguration.kt (92%) rename sdk/src/testProductionDebug/kotlin/com/processout/sdk/{config => configuration}/TestConstants.kt (71%) rename sdk/src/testProductionDebug/kotlin/com/processout/sdk/{config => configuration}/TestExtensions.kt (89%) diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt index 80e3454f9..c5266f27b 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt @@ -6,9 +6,9 @@ import com.processout.sdk.api.model.request.POAlternativePaymentMethodRequest import com.processout.sdk.api.model.response.POAlternativePaymentMethodResponse import com.processout.sdk.api.network.ApiConstants import com.processout.sdk.api.service.POAlternativePaymentMethodsService -import com.processout.sdk.config.SetupRule -import com.processout.sdk.config.TestApplication -import com.processout.sdk.config.assertFailure +import com.processout.sdk.configuration.SetupRule +import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess import org.junit.Before import org.junit.Rule diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt index 3c66e9498..7b40c9854 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt @@ -5,9 +5,9 @@ import com.processout.sdk.api.model.request.POCardTokenizationRequest import com.processout.sdk.api.model.request.POCardUpdateCVCRequest import com.processout.sdk.api.model.request.POCardUpdateRequest import com.processout.sdk.api.repository.POCardsRepository -import com.processout.sdk.config.SetupRule -import com.processout.sdk.config.TestApplication -import com.processout.sdk.config.assertFailure +import com.processout.sdk.configuration.SetupRule +import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess import kotlinx.coroutines.runBlocking import org.junit.Before diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt index d89931ba6..30b50f567 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt @@ -5,9 +5,9 @@ import com.processout.sdk.api.model.request.* import com.processout.sdk.api.repository.CustomerTokensRepository import com.processout.sdk.api.repository.InvoicesRepository import com.processout.sdk.api.repository.POCardsRepository -import com.processout.sdk.config.SetupRule -import com.processout.sdk.config.TestApplication -import com.processout.sdk.config.assertFailure +import com.processout.sdk.configuration.SetupRule +import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess import kotlinx.coroutines.runBlocking import org.junit.Before diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt index 4ee83a2b5..8cf5a3512 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt @@ -4,10 +4,10 @@ import com.processout.sdk.api.ProcessOut import com.processout.sdk.api.model.request.POAllGatewayConfigurationsRequest import com.processout.sdk.api.model.request.POGatewayConfigurationRequest import com.processout.sdk.api.repository.POGatewayConfigurationsRepository -import com.processout.sdk.config.PROCESSOUT_GATEWAY_CONFIGURATION_ID -import com.processout.sdk.config.SetupRule -import com.processout.sdk.config.TestApplication -import com.processout.sdk.config.assertFailure +import com.processout.sdk.configuration.PROCESSOUT_GATEWAY_CONFIGURATION_ID +import com.processout.sdk.configuration.SetupRule +import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.assertFailure import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Rule diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt index 9213fcae0..d6af72040 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt @@ -5,10 +5,10 @@ import com.processout.sdk.api.model.request.* import com.processout.sdk.api.model.response.CustomerAction import com.processout.sdk.api.repository.InvoicesRepository import com.processout.sdk.api.repository.POCardsRepository -import com.processout.sdk.config.PROCESSOUT_GATEWAY_CONFIGURATION_ID -import com.processout.sdk.config.SetupRule -import com.processout.sdk.config.TestApplication -import com.processout.sdk.config.assertFailure +import com.processout.sdk.configuration.PROCESSOUT_GATEWAY_CONFIGURATION_ID +import com.processout.sdk.configuration.SetupRule +import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.POFailure import com.processout.sdk.core.onFailure import com.processout.sdk.core.onSuccess diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/SetupRule.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/SetupRule.kt similarity index 92% rename from sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/SetupRule.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/SetupRule.kt index cb6d66826..2fc205607 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/SetupRule.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/SetupRule.kt @@ -1,4 +1,4 @@ -package com.processout.sdk.config +package com.processout.sdk.configuration import androidx.test.core.app.ApplicationProvider import org.junit.rules.TestRule diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestApplication.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestApplication.kt similarity index 63% rename from sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestApplication.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestApplication.kt index 9f560d4a6..c6ea28755 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestApplication.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestApplication.kt @@ -1,4 +1,4 @@ -package com.processout.sdk.config +package com.processout.sdk.configuration import android.app.Application diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConfiguration.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt similarity index 92% rename from sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConfiguration.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt index 76542a3b1..53ee0e4c5 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConfiguration.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt @@ -1,4 +1,4 @@ -package com.processout.sdk.config +package com.processout.sdk.configuration import com.processout.sdk.BuildConfig import com.processout.sdk.api.ProcessOut diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConstants.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConstants.kt similarity index 71% rename from sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConstants.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConstants.kt index 837fd3bf1..f41739150 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestConstants.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConstants.kt @@ -1,3 +1,3 @@ -package com.processout.sdk.config +package com.processout.sdk.configuration internal const val PROCESSOUT_GATEWAY_CONFIGURATION_ID = "gway_conf_VJEp8Y6ZCqiiwkSa3JioJrwdVM3bVgJd" diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestExtensions.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestExtensions.kt similarity index 89% rename from sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestExtensions.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestExtensions.kt index c7d21b5c5..6c03a1f55 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/config/TestExtensions.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestExtensions.kt @@ -1,4 +1,4 @@ -package com.processout.sdk.config +package com.processout.sdk.configuration import com.processout.sdk.core.ProcessOutResult import com.processout.sdk.core.onFailure From 3e2ff77f991cfb7d75cf6898fc3c700811192ca6 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 12:19:09 +0300 Subject: [PATCH 25/33] TestSetupRule --- .../sdk/AlternativePaymentMethodsServiceTests.kt | 4 ++-- .../kotlin/com/processout/sdk/CardsRepositoryTests.kt | 4 ++-- .../com/processout/sdk/CustomerTokensRepositoryTests.kt | 4 ++-- .../sdk/GatewayConfigurationsRepositoryTests.kt | 4 ++-- .../kotlin/com/processout/sdk/InvoicesRepositoryTests.kt | 9 ++++++--- .../sdk/configuration/{SetupRule.kt => TestSetupRule.kt} | 2 +- 6 files changed, 15 insertions(+), 12 deletions(-) rename sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/{SetupRule.kt => TestSetupRule.kt} (94%) diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt index c5266f27b..96f7e9f40 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt @@ -6,7 +6,7 @@ import com.processout.sdk.api.model.request.POAlternativePaymentMethodRequest import com.processout.sdk.api.model.response.POAlternativePaymentMethodResponse import com.processout.sdk.api.network.ApiConstants import com.processout.sdk.api.service.POAlternativePaymentMethodsService -import com.processout.sdk.configuration.SetupRule +import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.TestApplication import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess @@ -23,7 +23,7 @@ class AlternativePaymentMethodsServiceTests { @Rule @JvmField - val setupRule = SetupRule() + val setupRule = TestSetupRule() private lateinit var apmService: POAlternativePaymentMethodsService diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt index 7b40c9854..e41ea581e 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CardsRepositoryTests.kt @@ -5,8 +5,8 @@ import com.processout.sdk.api.model.request.POCardTokenizationRequest import com.processout.sdk.api.model.request.POCardUpdateCVCRequest import com.processout.sdk.api.model.request.POCardUpdateRequest import com.processout.sdk.api.repository.POCardsRepository -import com.processout.sdk.configuration.SetupRule import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess import kotlinx.coroutines.runBlocking @@ -23,7 +23,7 @@ class CardsRepositoryTests { @Rule @JvmField - val setupRule = SetupRule() + val setupRule = TestSetupRule() private lateinit var cards: POCardsRepository diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt index 30b50f567..ba8de68bb 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/CustomerTokensRepositoryTests.kt @@ -5,8 +5,8 @@ import com.processout.sdk.api.model.request.* import com.processout.sdk.api.repository.CustomerTokensRepository import com.processout.sdk.api.repository.InvoicesRepository import com.processout.sdk.api.repository.POCardsRepository -import com.processout.sdk.configuration.SetupRule import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess import kotlinx.coroutines.runBlocking @@ -23,7 +23,7 @@ class CustomerTokensRepositoryTests { @Rule @JvmField - val setupRule = SetupRule() + val setupRule = TestSetupRule() private lateinit var customerTokens: CustomerTokensRepository private lateinit var invoices: InvoicesRepository diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt index 8cf5a3512..3754947a8 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/GatewayConfigurationsRepositoryTests.kt @@ -5,8 +5,8 @@ import com.processout.sdk.api.model.request.POAllGatewayConfigurationsRequest import com.processout.sdk.api.model.request.POGatewayConfigurationRequest import com.processout.sdk.api.repository.POGatewayConfigurationsRepository import com.processout.sdk.configuration.PROCESSOUT_GATEWAY_CONFIGURATION_ID -import com.processout.sdk.configuration.SetupRule import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.assertFailure import kotlinx.coroutines.runBlocking import org.junit.Before @@ -22,7 +22,7 @@ class GatewayConfigurationsRepositoryTests { @Rule @JvmField - val setupRule = SetupRule() + val setupRule = TestSetupRule() private lateinit var gatewayConfigurations: POGatewayConfigurationsRepository diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt index d6af72040..75fc4431c 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/InvoicesRepositoryTests.kt @@ -1,13 +1,16 @@ package com.processout.sdk import com.processout.sdk.api.ProcessOut -import com.processout.sdk.api.model.request.* +import com.processout.sdk.api.model.request.POCardTokenizationRequest +import com.processout.sdk.api.model.request.POCreateInvoiceRequest +import com.processout.sdk.api.model.request.POInvoiceAuthorizationRequest +import com.processout.sdk.api.model.request.PONativeAlternativePaymentMethodRequest import com.processout.sdk.api.model.response.CustomerAction import com.processout.sdk.api.repository.InvoicesRepository import com.processout.sdk.api.repository.POCardsRepository import com.processout.sdk.configuration.PROCESSOUT_GATEWAY_CONFIGURATION_ID -import com.processout.sdk.configuration.SetupRule import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.POFailure import com.processout.sdk.core.onFailure @@ -27,7 +30,7 @@ class InvoicesRepositoryTests { @Rule @JvmField - val setupRule = SetupRule() + val setupRule = TestSetupRule() private lateinit var invoices: InvoicesRepository private lateinit var cards: POCardsRepository diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/SetupRule.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestSetupRule.kt similarity index 94% rename from sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/SetupRule.kt rename to sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestSetupRule.kt index 2fc205607..252f95dbb 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/SetupRule.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestSetupRule.kt @@ -5,7 +5,7 @@ import org.junit.rules.TestRule import org.junit.runner.Description import org.junit.runners.model.Statement -class SetupRule : TestRule { +class TestSetupRule : TestRule { override fun apply(base: Statement, description: Description) = object : Statement() { From 33ce903b7eaeb1e514b2bc2ff3d828ca354385cb Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 12:23:25 +0300 Subject: [PATCH 26/33] Suppress 'privateKey' usage in tests --- .../com/processout/sdk/configuration/TestConfiguration.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt index 53ee0e4c5..5220f602b 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/configuration/TestConfiguration.kt @@ -1,3 +1,5 @@ +@file:Suppress("RestrictedApi") + package com.processout.sdk.configuration import com.processout.sdk.BuildConfig From f411753a0530cebad3f6629bf31333f5e23c1773 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 12:25:20 +0300 Subject: [PATCH 27/33] Imports in tests --- .../com/processout/sdk/AlternativePaymentMethodsServiceTests.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt index 96f7e9f40..e36123b30 100644 --- a/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt +++ b/sdk/src/testProductionDebug/kotlin/com/processout/sdk/AlternativePaymentMethodsServiceTests.kt @@ -6,8 +6,8 @@ import com.processout.sdk.api.model.request.POAlternativePaymentMethodRequest import com.processout.sdk.api.model.response.POAlternativePaymentMethodResponse import com.processout.sdk.api.network.ApiConstants import com.processout.sdk.api.service.POAlternativePaymentMethodsService -import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.TestApplication +import com.processout.sdk.configuration.TestSetupRule import com.processout.sdk.configuration.assertFailure import com.processout.sdk.core.onSuccess import org.junit.Before From 46e14f8c719080780d23281ac5e8898a9111b586 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 13:08:28 +0300 Subject: [PATCH 28/33] Kotlin 2.0.0 & Compose compiler plugin --- .gitignore | 3 +++ .idea/kotlinc.xml | 2 +- build.gradle | 6 +++--- ui-core/build.gradle | 4 +--- ui/build.gradle | 4 +--- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index eb5751cfb..02923dd7b 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,6 @@ lint/reports/ # Sandbox stuff _sandbox + +# Since Kotlin 2.0.0 +.kotlin/ diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 148fdd246..6d0ee1c2a 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/build.gradle b/build.gradle index f24fee4c3..cee473304 100644 --- a/build.gradle +++ b/build.gradle @@ -3,8 +3,8 @@ buildscript { ext { androidGradlePluginVersion = '8.4.2' - kotlinVersion = '1.9.24' - kspVersion = '1.9.24-1.0.20' + kotlinVersion = '2.0.0' + kspVersion = '2.0.0-1.0.22' dokkaVersion = '1.9.20' androidxNavigationVersion = '2.7.7' nexusPublishPluginVersion = '2.0.0' @@ -18,6 +18,7 @@ plugins { id 'com.android.application' version "$androidGradlePluginVersion" apply false id 'com.android.library' version "$androidGradlePluginVersion" apply false id 'org.jetbrains.kotlin.android' version "$kotlinVersion" apply false + id 'org.jetbrains.kotlin.plugin.compose' version "$kotlinVersion" apply false id 'org.jetbrains.dokka' version "$dokkaVersion" apply true id 'com.google.devtools.ksp' version "$kspVersion" apply false id 'io.github.gradle-nexus.publish-plugin' version "$nexusPublishPluginVersion" apply true @@ -46,7 +47,6 @@ ext { androidxBrowserVersion = '1.8.0' androidxComposeBOMVersion = '2024.05.00' - androidxComposeCompilerVersion = '1.5.14' materialVersion = '1.12.0' diff --git a/ui-core/build.gradle b/ui-core/build.gradle index 139cd060c..124aaf73c 100644 --- a/ui-core/build.gradle +++ b/ui-core/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' + id 'org.jetbrains.kotlin.plugin.compose' id 'kotlin-parcelize' } @@ -62,9 +63,6 @@ android { buildConfig true compose true } - composeOptions { - kotlinCompilerExtensionVersion = rootProject.ext.androidxComposeCompilerVersion - } publishing { singleVariant("productionRelease") { diff --git a/ui/build.gradle b/ui/build.gradle index 06c58be10..ad4ff7fba 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -1,6 +1,7 @@ plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' + id 'org.jetbrains.kotlin.plugin.compose' id 'org.jetbrains.dokka' id 'kotlin-parcelize' id 'com.google.devtools.ksp' @@ -65,9 +66,6 @@ android { buildConfig true compose true } - composeOptions { - kotlinCompilerExtensionVersion = rootProject.ext.androidxComposeCompilerVersion - } publishing { singleVariant("productionRelease") { From 6b11fc8dbacb3d3a75a89308e12bfcdcfbcfc37e Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 13:49:05 +0300 Subject: [PATCH 29/33] =?UTF-8?q?Compose=20reportsDestination=EF=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui-core/build.gradle | 10 ++++------ ui/build.gradle | 10 ++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/ui-core/build.gradle b/ui-core/build.gradle index 124aaf73c..e07c02b10 100644 --- a/ui-core/build.gradle +++ b/ui-core/build.gradle @@ -51,12 +51,6 @@ android { kotlinOptions { jvmTarget = '17' freeCompilerArgs += '-opt-in=com.processout.sdk.ui.core.annotation.ProcessOutInternalApi' - if (project.findProperty("composeCompilerReports") == "true") { - freeCompilerArgs += [ - "-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + - project.buildDir.absolutePath + "/compose" - ] - } } buildFeatures { @@ -72,6 +66,10 @@ android { } } +composeCompiler { + reportsDestination = layout.buildDirectory.dir("compose") +} + @SuppressWarnings('GrMethodMayBeStatic') def setBuildConfig(buildType) { buildType.buildConfigField("String", "LIBRARY_NAME", "\"ProcessOut Android SDK - UI Core\"") diff --git a/ui/build.gradle b/ui/build.gradle index ad4ff7fba..bdc5f0857 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -54,12 +54,6 @@ android { jvmTarget = '17' freeCompilerArgs += '-opt-in=com.processout.sdk.core.annotation.ProcessOutInternalApi' freeCompilerArgs += '-opt-in=com.processout.sdk.ui.core.annotation.ProcessOutInternalApi' - if (project.findProperty("composeCompilerReports") == "true") { - freeCompilerArgs += [ - "-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + - project.buildDir.absolutePath + "/compose" - ] - } } buildFeatures { @@ -77,6 +71,10 @@ android { } } +composeCompiler { + reportsDestination = layout.buildDirectory.dir("compose") +} + @SuppressWarnings('GrMethodMayBeStatic') def setBuildConfig(buildType) { buildType.buildConfigField("String", "LIBRARY_NAME", "\"ProcessOut Android SDK - UI\"") From 363b5b110622c95b5e873fa7b1097666852bde44 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 15:15:36 +0300 Subject: [PATCH 30/33] Migrate from 'android.kotlinOptions' to 'kotlin.compilerOptions' --- checkout-3ds/build.gradle | 13 +++++++++---- example/build.gradle | 13 +++++++++---- sdk/build.gradle | 13 +++++++++---- ui-core/build.gradle | 13 +++++++++---- ui/build.gradle | 15 ++++++++++----- 5 files changed, 46 insertions(+), 21 deletions(-) diff --git a/checkout-3ds/build.gradle b/checkout-3ds/build.gradle index 255120470..bae7ef0bd 100644 --- a/checkout-3ds/build.gradle +++ b/checkout-3ds/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' @@ -51,10 +53,6 @@ android { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '17' - freeCompilerArgs += '-opt-in=com.processout.sdk.core.annotation.ProcessOutInternalApi' - } publishing { singleVariant("productionRelease") { @@ -66,6 +64,13 @@ android { } } +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + optIn.add("com.processout.sdk.core.annotation.ProcessOutInternalApi") + } +} + @SuppressWarnings('GrMethodMayBeStatic') def setBuildConfig(buildType) { buildType.buildConfigField("String", "LIBRARY_NAME", "\"ProcessOut Android SDK - Checkout 3DS\"") diff --git a/example/build.gradle b/example/build.gradle index b7abc4600..fad795f47 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' @@ -52,10 +54,13 @@ android { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '17' - freeCompilerArgs += '-opt-in=com.processout.sdk.core.annotation.ProcessOutInternalApi' - freeCompilerArgs += '-opt-in=com.processout.sdk.ui.core.annotation.ProcessOutInternalApi' +} + +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + optIn.add("com.processout.sdk.core.annotation.ProcessOutInternalApi") + optIn.add("com.processout.sdk.ui.core.annotation.ProcessOutInternalApi") } } diff --git a/sdk/build.gradle b/sdk/build.gradle index 808f4f837..bd07057e7 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' @@ -63,10 +65,6 @@ android { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '17' - freeCompilerArgs += '-opt-in=com.processout.sdk.core.annotation.ProcessOutInternalApi' - } testOptions { unitTests { @@ -88,6 +86,13 @@ android { } } +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + optIn.add("com.processout.sdk.core.annotation.ProcessOutInternalApi") + } +} + @SuppressWarnings('GrMethodMayBeStatic') def setBuildConfig(buildType) { buildType.buildConfigField("String", "LIBRARY_NAME", "\"ProcessOut Android SDK\"") diff --git a/ui-core/build.gradle b/ui-core/build.gradle index e07c02b10..4634128d2 100644 --- a/ui-core/build.gradle +++ b/ui-core/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' @@ -48,10 +50,6 @@ android { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '17' - freeCompilerArgs += '-opt-in=com.processout.sdk.ui.core.annotation.ProcessOutInternalApi' - } buildFeatures { buildConfig true @@ -66,6 +64,13 @@ android { } } +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + optIn.add("com.processout.sdk.ui.core.annotation.ProcessOutInternalApi") + } +} + composeCompiler { reportsDestination = layout.buildDirectory.dir("compose") } diff --git a/ui/build.gradle b/ui/build.gradle index bdc5f0857..f37cc7709 100644 --- a/ui/build.gradle +++ b/ui/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' @@ -50,11 +52,6 @@ android { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '17' - freeCompilerArgs += '-opt-in=com.processout.sdk.core.annotation.ProcessOutInternalApi' - freeCompilerArgs += '-opt-in=com.processout.sdk.ui.core.annotation.ProcessOutInternalApi' - } buildFeatures { buildConfig true @@ -71,6 +68,14 @@ android { } } +kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + optIn.add("com.processout.sdk.core.annotation.ProcessOutInternalApi") + optIn.add("com.processout.sdk.ui.core.annotation.ProcessOutInternalApi") + } +} + composeCompiler { reportsDestination = layout.buildDirectory.dir("compose") } From ecba886d9384acb4ee9ac5e0994a76c6b3d9ae42 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 15:25:27 +0300 Subject: [PATCH 31/33] Gradle 8.8 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1f3e86b56..8dda536a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Oct 05 19:43:19 EEST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 886e3bea1d3af7a01ea836923ea49931e39bd19e Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 15:32:49 +0300 Subject: [PATCH 32/33] Updated dependencies --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index cee473304..55cd0a206 100644 --- a/build.gradle +++ b/build.gradle @@ -37,7 +37,7 @@ ext { publishVersion = file('version.resolved').getText().trim() androidxCoreVersion = '1.13.1' - androidxAppCompatVersion = '1.6.1' + androidxAppCompatVersion = '1.7.0' androidxConstraintLayoutVersion = '2.1.4' androidxActivityVersion = '1.9.0' androidxFragmentVersion = '1.7.1' @@ -50,7 +50,7 @@ ext { materialVersion = '1.12.0' - gmsWalletVersion = '19.3.0' + gmsWalletVersion = '19.4.0' kotlinxCoroutinesPlayServicesVersion = '1.8.1' retrofitVersion = '2.11.0' From 6e13f7df24453a33d7c44cf41038f19fcae82f17 Mon Sep 17 00:00:00 2001 From: Vitalii Vanziak Date: Wed, 12 Jun 2024 15:39:46 +0300 Subject: [PATCH 33/33] libphonenumberVersion = '8.13.38' --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 55cd0a206..dfe216554 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,7 @@ ext { okioVersion = '3.9.0' coilVersion = '2.6.0' commonMarkVersion = '0.22.0' - libphonenumberVersion = '8.13.37' + libphonenumberVersion = '8.13.38' checkout3dsSdkVersion = '3.2.2' adyen3dsSdkVersion = '2.2.15'