Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
35c2f9a
PONetcetera3DS2Service & PONetcetera3DS2ServiceDelegate
vitalii-vanziak-cko Aug 11, 2025
b0e8436
Netcetera3DS2ServiceState
vitalii-vanziak-cko Aug 11, 2025
cf90e28
ComponentActivity in PONetcetera3DS2ServiceDelegate
vitalii-vanziak-cko Aug 11, 2025
03e08c3
po_logo_placeholder.xml
vitalii-vanziak-cko Aug 13, 2025
9ff58d8
JJWT
vitalii-vanziak-cko Aug 18, 2025
cdadaf9
Updated Netcetera3DS2ServiceContext
vitalii-vanziak-cko Aug 18, 2025
3138dde
PONetcetera3DS2ServiceConfiguration
vitalii-vanziak-cko Aug 18, 2025
f7c6918
Updated Netcetera3DS2ServiceState
vitalii-vanziak-cko Aug 18, 2025
5569f4d
AGP 8.12.1
vitalii-vanziak-cko Aug 19, 2025
bc7e1b0
PONetcetera3DS2ServiceDelegate
vitalii-vanziak-cko Aug 19, 2025
4745ccc
Netcetera3DS2ServiceState
vitalii-vanziak-cko Aug 19, 2025
67d97d5
Update Netcetera3DS2ServiceState
vitalii-vanziak-cko Aug 20, 2025
43c2f0d
Update PONetcetera3DS2ServiceDelegate
vitalii-vanziak-cko Aug 20, 2025
d76e8cb
PONetcetera3DS2Service
vitalii-vanziak-cko Aug 21, 2025
a029e8f
Validate 'transactionId'
vitalii-vanziak-cko Aug 21, 2025
c15ce41
Log transaction status
vitalii-vanziak-cko Aug 21, 2025
58fa8ab
isVerified
vitalii-vanziak-cko Aug 21, 2025
80274a2
log
vitalii-vanziak-cko Aug 21, 2025
4e2e569
Logs
vitalii-vanziak-cko Aug 22, 2025
ef7d4c9
JJWT '0.13.0'
vitalii-vanziak-cko Aug 22, 2025
65dc1c1
Log level
vitalii-vanziak-cko Aug 22, 2025
02f26fa
consumer-rules.pro
vitalii-vanziak-cko Aug 22, 2025
d3957b8
dexguard.txt
vitalii-vanziak-cko Aug 22, 2025
ea9065f
Gradle 8.14.3
vitalii-vanziak-cko Aug 22, 2025
817ca40
checkout3dsSdkVersion = '3.2.7'
vitalii-vanziak-cko Aug 22, 2025
ad633ce
Fix deprecated 'compileSdk' declaration
vitalii-vanziak-cko Aug 22, 2025
8f04d4f
Updated dependencies
vitalii-vanziak-cko Aug 22, 2025
c26707b
Fix publication gradle config
vitalii-vanziak-cko Aug 22, 2025
73944be
androidxNavigationVersion = '2.9.3'
vitalii-vanziak-cko Aug 22, 2025
5db0ee4
Comment
vitalii-vanziak-cko Aug 22, 2025
7ed5514
KDoc
vitalii-vanziak-cko Aug 22, 2025
d254829
Suppress "unused"
vitalii-vanziak-cko Aug 22, 2025
872e132
Update create-release-and-publish.yml
vitalii-vanziak-cko Aug 22, 2025
ffe8c56
keep.xml in example app
vitalii-vanziak-cko Aug 26, 2025
c010a27
Update workflow actions
vitalii-vanziak-cko Aug 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/create-release-and-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Create Release
run: |
Expand All @@ -20,7 +20,7 @@ jobs:
GH_TOKEN: ${{ secrets.PO_GITHUB_TOKEN }}

- name: Setup JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
Expand All @@ -29,13 +29,15 @@ jobs:
- name: Build
run: |
./gradlew :sdk:assembleProductionRelease
./gradlew :netcetera-3ds:assembleProductionRelease
./gradlew :checkout-3ds:assembleProductionRelease
./gradlew :ui-core:assembleProductionRelease
./gradlew :ui:assembleProductionRelease

- name: Publish To Maven Central
run: |
./gradlew :sdk:publishProductionReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository --max-workers=1
./gradlew :netcetera-3ds:publishProductionReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository --max-workers=1
./gradlew :checkout-3ds:publishProductionReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository --max-workers=1
./gradlew :ui-core:publishProductionReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository --max-workers=1
./gradlew :ui:publishProductionReleasePublicationToSonatypeRepository closeAndReleaseSonatypeStagingRepository --max-workers=1
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/create-release-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Update Version
run: |
source scripts/update-version.sh --${{ inputs.release_type }}
echo "UPDATED_VERSION=$(cat version.resolved)" >> $GITHUB_ENV

- name: Create Pull Request
uses: peter-evans/create-pull-request@v5
uses: peter-evans/create-pull-request@v5.0.0
with:
token: ${{ secrets.PO_GITHUB_TOKEN }}
add-paths: version.resolved
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup JDK 17
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
Expand Down
23 changes: 12 additions & 11 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension

buildscript {
ext {
androidGradlePluginVersion = '8.12.0'
androidGradlePluginVersion = '8.12.1'
kotlinVersion = '2.1.20'
kspVersion = '2.1.20-1.0.32'
dokkaVersion = '1.9.20'
androidxNavigationVersion = '2.9.2'
androidxNavigationVersion = '2.9.3'
secretsVaultPluginVersion = '0.1.3'
nexusPublishPluginVersion = '2.0.0'
}
Expand Down Expand Up @@ -57,15 +57,15 @@ ext {

kotlinxCoroutinesVersion = '1.10.2'

androidxCoreVersion = '1.16.0'
androidxCoreVersion = '1.17.0'
androidxAppCompatVersion = '1.7.1'
androidxConstraintLayoutVersion = '2.2.1'
androidxActivityVersion = '1.10.1'
androidxFragmentVersion = '1.8.8'
androidxFragmentVersion = '1.8.9'
androidxLifecycleVersion = '2.9.0'
androidxRecyclerViewVersion = '1.4.0'
androidxSwipeRefreshLayoutVersion = '1.1.0'
androidxBrowserVersion = '1.8.0'
androidxBrowserVersion = '1.9.0'
androidxCameraVersion = '1.4.2'

androidxComposeBOMVersion = '2025.04.00'
Expand All @@ -81,22 +81,23 @@ ext {
okhttpVersion = '4.12.0'
okioVersion = '3.10.2'
coilVersion = '2.7.0'
commonMarkVersion = '0.25.0'
libphonenumberVersion = '9.0.10'
commonMarkVersion = '0.25.1'
libphonenumberVersion = '9.0.12'
zxingVersion = '3.5.3'
jjwtVersion = '0.13.0'
bouncyCastleVersion = '1.79'
slf4jVersion = '1.7.36'

netcetera3dsSdkVersion = '2.5.3.1'
checkout3dsSdkVersion = '3.2.6'
adyen3dsSdkVersion = '2.2.15'
checkout3dsSdkVersion = '3.2.7'
adyen3dsSdkVersion = '2.2.15' // This is a max supported version. Higher versions use unsupported certificates format.

junitVersion = '4.13.2'
mockitoVersion = '5.18.0'
mockitoVersion = '5.19.0'
mockitoInlineVersion = '5.2.0'
mockitoKotlinVersion = '6.0.0'
robolectricVersion = '4.15.1'
androidxTestCoreVersion = '1.6.1'
androidxTestCoreVersion = '1.7.0'

// Legacy
volleyVersion = '1.2.1'
Expand Down
2 changes: 1 addition & 1 deletion checkout-3ds/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ apply from: "${rootProject.projectDir}/scripts/publish-module.gradle"

android {
namespace 'com.processout.sdk.checkout.threeds'
compileSdk rootProject.ext.compileSdkVersion
compileSdk = rootProject.ext.compileSdkVersion

defaultConfig {
minSdk rootProject.ext.minSdkVersion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import com.processout.sdk.core.ProcessOutResult
import com.processout.sdk.core.logger.POLogger

/**
* Service that handles 3DS challenges with Checkout3DS SDK.
* A service that integrates the Checkout 3DS SDK.
*/
class POCheckout3DSService private constructor(
private val activity: Activity,
Expand Down
2 changes: 1 addition & 1 deletion example/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ plugins {

android {
namespace 'com.processout.example'
compileSdk rootProject.ext.compileSdkVersion
compileSdk = rootProject.ext.compileSdkVersion

defaultConfig {
applicationId "com.processout.example"
Expand Down
2 changes: 2 additions & 0 deletions example/src/main/res/raw/keep.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@style/*" />
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Wed Oct 05 19:43:19 EEST 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
2 changes: 1 addition & 1 deletion netcetera-3ds-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ apply from: "${rootProject.projectDir}/scripts/publish-module.gradle"

android {
namespace 'com.processout.sdk.netcetera.threeds.core'
compileSdk rootProject.ext.compileSdkVersion
compileSdk = rootProject.ext.compileSdkVersion

ndkVersion rootProject.ext.ndkVersion
externalNativeBuild {
Expand Down
2 changes: 2 additions & 0 deletions netcetera-3ds-core/dexguard.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-stripnativelibrarysections !jni/arm64-v8a/libbefd.so,!jni/armeabi-v7a/libbefd.so,!jni/x86/libbefd.so,!jni/x86_64/libbefd.so,!lib/arm64-v8a/libbefd.so,!lib/armeabi-v7a/libbefd.so,!lib/x86/libbefd.so,!lib/x86_64/libbefd.so,dummyfile
-keepresourcefiles assets/com/netcetera/threeds/sdk/infrastructure/4b317ef76b833737b-,assets/com/netcetera/threeds/sdk/infrastructure/8c73a458ff85fdf3a-,jni/arm64-v8a/libbefd.so,jni/armeabi-v7a/libbefd.so,jni/x86/libbefd.so,jni/x86_64/libbefd.so,lib/arm64-v8a/libbefd.so,lib/armeabi-v7a/libbefd.so,lib/x86/libbefd.so,lib/x86_64/libbefd.so
12 changes: 10 additions & 2 deletions netcetera-3ds/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ apply from: "${rootProject.projectDir}/scripts/publish-module.gradle"

android {
namespace 'com.processout.sdk.netcetera.threeds'
compileSdk rootProject.ext.compileSdkVersion
compileSdk = rootProject.ext.compileSdkVersion

defaultConfig {
minSdk rootProject.ext.minSdkVersion
Expand Down Expand Up @@ -57,7 +57,9 @@ android {
publishing {
singleVariant('productionRelease') {
withSourcesJar()
withJavadocJar()
// FIXME: This fails build with error "PermittedSubclasses requires ASM9" while publishing to Maven Central.
// Test by running: ./gradlew :netcetera-3ds:publishProductionReleasePublicationToMavenLocal
// withJavadocJar()
}
}
}
Expand All @@ -79,4 +81,10 @@ def setBuildConfig(buildType) {
dependencies {
api project(path: ':sdk')
api "com.processout:processout-android-netcetera-3ds-core:$netcetera3dsSdkVersion"

implementation "io.jsonwebtoken:jjwt-api:$jjwtVersion"
runtimeOnly "io.jsonwebtoken:jjwt-impl:$jjwtVersion"
runtimeOnly("io.jsonwebtoken:jjwt-orgjson:$jjwtVersion") {
exclude(group: 'org.json', module: 'json') // Provided by Android natively.
}
}
5 changes: 5 additions & 0 deletions netcetera-3ds/consumer-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-keepattributes InnerClasses

-keep class io.jsonwebtoken.** { *; }
-keepnames class io.jsonwebtoken.* { *; }
-keepnames interface io.jsonwebtoken.* { *; }
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.processout.sdk.netcetera.threeds

import android.content.Context
import com.netcetera.threeds.sdk.api.ThreeDS2Service
import com.netcetera.threeds.sdk.api.transaction.Transaction
import com.processout.sdk.netcetera.threeds.Netcetera3DS2ServiceState.Fingerprinted

internal sealed interface Netcetera3DS2ServiceState {

data object Idle : Netcetera3DS2ServiceState

data object Starting : Netcetera3DS2ServiceState

data class Started(
val serviceContext: Netcetera3DS2ServiceContext
) : Netcetera3DS2ServiceState

data class Fingerprinting(
val serviceContext: Netcetera3DS2ServiceContext
) : Netcetera3DS2ServiceState

data class Fingerprinted(
val serviceContext: Netcetera3DS2ServiceContext
) : Netcetera3DS2ServiceState

data class Challenging(
val serviceContext: Netcetera3DS2ServiceContext
) : Netcetera3DS2ServiceState
}

internal data class Netcetera3DS2ServiceContext(
val applicationContext: Context,
val threeDS2Service: ThreeDS2Service,
val transaction: Transaction? = null,
val transactionId: String? = null
)

internal inline fun Netcetera3DS2ServiceState.whenFingerprinted(
crossinline block: (serviceContext: Netcetera3DS2ServiceContext) -> Unit
) {
if (this is Fingerprinted) {
block(serviceContext)
}
}
Loading