Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,28 +1,29 @@
buildscript {
// Buildscript is evaluated before everything else so we can't use getExtOrDefault
def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['HyperswitchNetcetera3ds_kotlinVersion']
ext.getExtOrDefault = {name ->
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['HyperswitchNetcetera3ds_' + name]
}

repositories {
google()
mavenCentral()
google()
mavenCentral()
}

dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
classpath "com.android.tools.build:gradle:8.7.2"
// noinspection DifferentKotlinGradleVersion
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
}
}

def isNewArchitectureEnabled() {
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
}

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: "com.android.library"
apply plugin: "kotlin-android"

if (isNewArchitectureEnabled()) {
apply plugin: 'com.facebook.react'
apply plugin: "com.facebook.react"
}

def getExtOrDefault(name) {
Expand All @@ -33,111 +34,76 @@ def getExtOrIntegerDefault(name) {
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties['HyperswitchNetcetera3ds_' + name]).toInteger()
}

def supportsNamespace() {
def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')
def major = parsed[0].toInteger()
def minor = parsed[1].toInteger()

// Namespace support was added in 7.3.0
return (major == 7 && minor >= 3) || major >= 8
}

android {
compileSdkVersion getExtOrIntegerDefault('compileSdkVersion')
if (supportsNamespace()) {
namespace "com.reactnativehyperswitchnetcetera3ds"

sourceSets {
main {
manifest.srcFile "src/main/AndroidManifestNew.xml"
}
}
}

compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")

defaultConfig {
minSdkVersion getExtOrIntegerDefault('minSdkVersion')
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
}

buildFeatures {
buildConfig true
}

buildTypes {
release {
minifyEnabled false
}
}

lintOptions {
disable 'GradleCompatible'
disable "GradleCompatible"
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}

sourceSets {
main {
if (isNewArchitectureEnabled()) {
java.srcDirs += ["src/newarch"]
} else {
java.srcDirs += ["src/oldarch"]
}
}
}
}

repositories {
mavenCentral()
google()

def found = false
def defaultDir = null
def androidSourcesName = 'React Native sources'

if (rootProject.ext.has('reactNativeAndroidRoot')) {
defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
} else {
defaultDir = new File(
projectDir,
'/../../../node_modules/react-native/android'
)
}

if (defaultDir.exists()) {
maven {
url defaultDir.toString()
name androidSourcesName
}

logger.info(":${project.name}:reactNativeAndroidRoot ${defaultDir.canonicalPath}")
found = true
} else {
def parentDir = rootProject.projectDir

1.upto(5, {
if (found) return true
parentDir = parentDir.parentFile

def androidSourcesDir = new File(
parentDir,
'node_modules/react-native'
)

def androidPrebuiltBinaryDir = new File(
parentDir,
'node_modules/react-native/android'
)

if (androidPrebuiltBinaryDir.exists()) {
maven {
url androidPrebuiltBinaryDir.toString()
name androidSourcesName
}

logger.info(":${project.name}:reactNativeAndroidRoot ${androidPrebuiltBinaryDir.canonicalPath}")
found = true
} else if (androidSourcesDir.exists()) {
maven {
url androidSourcesDir.toString()
name androidSourcesName
}

logger.info(":${project.name}:reactNativeAndroidRoot ${androidSourcesDir.canonicalPath}")
found = true
}
})
}

if (!found) {
throw new GradleException(
"${project.name}: unable to locate React Native android sources. " +
"Ensure you have you installed React Native as a dependency in your project and try again."
)
}
}

def kotlin_version = getExtOrDefault('kotlinVersion')
def kotlin_version = getExtOrDefault("kotlinVersion")

dependencies {
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+"
implementation "com.facebook.react:react-android"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'io.hyperswitch:netcetra-3ds:2.5.2.0'
// TODO remove this
implementation "io.hyperswitch:netcetra-3ds:2.5.2.0"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.0"

// From node_modules
}

if (isNewArchitectureEnabled()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
HyperswitchNetcetera3ds_kotlinVersion=1.7.0
HyperswitchNetcetera3ds_kotlinVersion=1.9.22
HyperswitchNetcetera3ds_minSdkVersion=21
HyperswitchNetcetera3ds_targetSdkVersion=31
HyperswitchNetcetera3ds_compileSdkVersion=31
HyperswitchNetcetera3ds_ndkversion=21.4.7075529
HyperswitchNetcetera3ds_targetSdkVersion=34
HyperswitchNetcetera3ds_compileSdkVersion=35
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,24 @@ package com.reactnativehyperswitchnetcetera3ds

import android.app.Activity
import android.app.Application
import androidx.annotation.Nullable
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.Callback
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod

class HyperswitchNetcetera3dsModule(reactContext: ReactApplicationContext) :
ReactContextBaseJavaModule(reactContext) {
HyperswitchNetcetera3dsSpec(reactContext) {
val hsNetceteraUtils = HsNetceteraUtils()
val applicationContext = reactApplicationContext.applicationContext as Application
private fun getActivity(): Activity? {
return currentActivity ?: reactApplicationContext.currentActivity
}
override fun getName(): String {
return "HyperswitchNetcetera3ds"
return NAME
}

@ReactMethod
fun initialiseNetceteraSDK(
override fun initialiseNetceteraSDK(
apiKey: String, hsSDKEnvironment: String, callback: Callback
) {

Expand All @@ -40,18 +38,18 @@ class HyperswitchNetcetera3dsModule(reactContext: ReactApplicationContext) :
}

@ReactMethod
fun generateAReqParams(
override fun generateAReqParams(
messageVersion: String, directoryServerId: String, callback: Callback
) {
hsNetceteraUtils.generateAReqParams(getActivity(), messageVersion, directoryServerId, callback)
}

@ReactMethod
fun recieveChallengeParamsFromRN(
override fun recieveChallengeParamsFromRN(
acsSignedContent: String,
acsRefNumber: String,
acsTransactionId: String,
@Nullable threeDSRequestorAppURL: String?,
threeDSRequestorAppURL: String?,
threeDSServerTransId: String,
callback: Callback
) {
Expand All @@ -66,7 +64,11 @@ class HyperswitchNetcetera3dsModule(reactContext: ReactApplicationContext) :
}

@ReactMethod
fun generateChallenge(callback: Callback) {
override fun generateChallenge(callback: Callback) {
hsNetceteraUtils.generateChallenge(getActivity(), 5, callback)
}

companion object {
const val NAME = "HyperswitchNetcetera3ds"
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,34 @@
package com.reactnativehyperswitchnetcetera3ds

import com.facebook.react.ReactPackage
import com.facebook.react.TurboReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ViewManager
import com.facebook.react.module.model.ReactModuleInfo
import com.facebook.react.module.model.ReactModuleInfoProvider

class HyperswitchNetcetera3dsPackage : ReactPackage {
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
return listOf(HyperswitchNetcetera3dsModule(reactContext))
class HyperswitchNetcetera3dsPackage : TurboReactPackage() {
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
return if (name == HyperswitchNetcetera3dsModule.NAME) {
HyperswitchNetcetera3dsModule(reactContext)
} else {
null
}
}

override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
return emptyList()
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
return ReactModuleInfoProvider {
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
val isTurboModule: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
moduleInfos[HyperswitchNetcetera3dsModule.NAME] = ReactModuleInfo(
HyperswitchNetcetera3dsModule.NAME,
HyperswitchNetcetera3dsModule.NAME,
false, // canOverrideExistingModule
false, // needsEagerInit
true, // hasConstants
false, // isCxxModule
isTurboModule
)
moduleInfos
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.reactnativehyperswitchnetcetera3ds

import com.facebook.react.bridge.ReactApplicationContext

abstract class HyperswitchNetcetera3dsSpec internal constructor(context: ReactApplicationContext) :
NativeHyperswitchNetcetera3dsSpec(context)
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.reactnativehyperswitchnetcetera3ds

import com.facebook.react.bridge.Callback
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule

abstract class HyperswitchNetcetera3dsSpec internal constructor(context: ReactApplicationContext) :
ReactContextBaseJavaModule(context) {

abstract fun initialiseNetceteraSDK(
apiKey: String,
hsSDKEnvironment: String,
callback: Callback
)

abstract fun generateAReqParams(
messageVersion: String,
directoryServerId: String,
callback: Callback
)

abstract fun recieveChallengeParamsFromRN(
acsSignedContent: String,
acsRefNumber: String,
acsTransactionId: String,
threeDSRequestorAppURL: String?,
threeDSServerTransId: String,
callback: Callback
)

abstract fun generateChallenge(callback: Callback)
}
Loading
Loading