judokit-react-native 3.4.9 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/JudoPay.tsx +41 -26
- package/RNJudopay.podspec +1 -1
- package/android/build.gradle +113 -124
- package/android/src/main/java/com/reactlibrary/Extensions.kt +187 -5
- package/android/src/main/java/com/reactlibrary/Helpers.kt +177 -16
- package/android/src/main/java/com/reactlibrary/JudoReactNativeModule.kt +54 -1
- package/ios/.xcode.env +11 -0
- package/ios/Classes/RNJudo.m +22 -6
- package/ios/Classes/Wrappers/RNWrappers.m +448 -79
- package/ios/Podfile +28 -56
- package/ios/Podfile.lock +418 -208
- package/ios/RNJudo.xcodeproj/project.pbxproj +21 -16
- package/ios/RNJudo.xcodeproj/xcshareddata/xcschemes/RNJudo.xcscheme +1 -1
- package/package.json +31 -25
- package/types/JudoTypes.tsx +80 -23
package/JudoPay.tsx
CHANGED
|
@@ -13,7 +13,10 @@ export {
|
|
|
13
13
|
JudoTransactionType,
|
|
14
14
|
JudoTransactionMode,
|
|
15
15
|
JudoPaymentMethod,
|
|
16
|
-
JudoCardNetwork
|
|
16
|
+
JudoCardNetwork,
|
|
17
|
+
ChallengeRequestIndicator,
|
|
18
|
+
JudoThreeDSButtonType,
|
|
19
|
+
ScaExemption
|
|
17
20
|
} from './types/JudoTypes'
|
|
18
21
|
|
|
19
22
|
export type {
|
|
@@ -25,7 +28,13 @@ export type {
|
|
|
25
28
|
JudoTheme,
|
|
26
29
|
JudoResponse,
|
|
27
30
|
JudoConfiguration,
|
|
28
|
-
JudoAuthorization
|
|
31
|
+
JudoAuthorization,
|
|
32
|
+
NetworkTimeout,
|
|
33
|
+
JudoThreeDSButtonCustomization,
|
|
34
|
+
JudoThreeDSLabelCustomization,
|
|
35
|
+
JudoThreeDSTextBoxCustomization,
|
|
36
|
+
JudoThreeDSToolbarCustomization,
|
|
37
|
+
JudoThreeDSUIConfiguration
|
|
29
38
|
} from './types/JudoTypes'
|
|
30
39
|
|
|
31
40
|
export {
|
|
@@ -58,7 +67,6 @@ export type { JudoPBBAConfiguration } from './types/JudoPBBATypes'
|
|
|
58
67
|
export { JudoPBBAButton }
|
|
59
68
|
|
|
60
69
|
class JudoPay {
|
|
61
|
-
|
|
62
70
|
//------------------------------------------------------------------
|
|
63
71
|
// Private properties
|
|
64
72
|
//------------------------------------------------------------------
|
|
@@ -114,7 +122,9 @@ class JudoPay {
|
|
|
114
122
|
*
|
|
115
123
|
* @returns an asynchronous boolean value that indicates if ApplePay is available.
|
|
116
124
|
*/
|
|
117
|
-
public isApplePayAvailableWithConfiguration(
|
|
125
|
+
public isApplePayAvailableWithConfiguration(
|
|
126
|
+
configuration: JudoConfiguration
|
|
127
|
+
): Promise<boolean> {
|
|
118
128
|
const params = this.generateJudoParameters(configuration)
|
|
119
129
|
return NativeModules.RNJudo.isApplePayAvailableWithConfiguration(params)
|
|
120
130
|
}
|
|
@@ -139,6 +149,18 @@ class JudoPay {
|
|
|
139
149
|
return NativeModules.RNJudo.invokeTransaction(params)
|
|
140
150
|
}
|
|
141
151
|
|
|
152
|
+
public async fetchTransactionDetails(
|
|
153
|
+
receiptId: string
|
|
154
|
+
): Promise<JudoResponse> {
|
|
155
|
+
const params = {
|
|
156
|
+
authorization: this.generateAuthorizationParameters(),
|
|
157
|
+
sandboxed: this.isSandboxed,
|
|
158
|
+
receiptId
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return NativeModules.RNJudo.fetchTransactionDetails(params)
|
|
162
|
+
}
|
|
163
|
+
|
|
142
164
|
/**
|
|
143
165
|
* A method for completing a payment/pre-auth transaction using a saved card token.
|
|
144
166
|
*
|
|
@@ -155,19 +177,19 @@ class JudoPay {
|
|
|
155
177
|
mode: JudoTransactionMode,
|
|
156
178
|
configuration: JudoConfiguration,
|
|
157
179
|
cardToken: string,
|
|
158
|
-
securityCode: string,
|
|
159
|
-
cardholderName: string,
|
|
180
|
+
securityCode: string | undefined | null,
|
|
181
|
+
cardholderName: string | undefined | null,
|
|
160
182
|
cardScheme: string
|
|
161
183
|
): Promise<JudoResponse> {
|
|
162
|
-
const params =
|
|
163
|
-
mode,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
184
|
+
const params = {
|
|
185
|
+
...this.generateTransactionModeParameters(mode, configuration),
|
|
186
|
+
...{
|
|
187
|
+
cardToken,
|
|
188
|
+
securityCode,
|
|
189
|
+
cardholderName,
|
|
190
|
+
cardScheme
|
|
191
|
+
}
|
|
192
|
+
}
|
|
171
193
|
return NativeModules.RNJudo.performTokenTransaction(params)
|
|
172
194
|
}
|
|
173
195
|
|
|
@@ -285,17 +307,10 @@ class JudoPay {
|
|
|
285
307
|
}
|
|
286
308
|
}
|
|
287
309
|
|
|
288
|
-
private readonly
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
authorization: this.generateAuthorizationParameters(),
|
|
293
|
-
sandboxed: this.isSandboxed,
|
|
294
|
-
receiptId: receiptId
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
private readonly generateAuthorizationParameters = (): Record<string, any> => {
|
|
310
|
+
private readonly generateAuthorizationParameters = (): Record<
|
|
311
|
+
string,
|
|
312
|
+
any
|
|
313
|
+
> => {
|
|
299
314
|
if (this.authorization.secret) {
|
|
300
315
|
return {
|
|
301
316
|
token: this.authorization.token,
|
package/RNJudopay.podspec
CHANGED
|
@@ -15,7 +15,7 @@ Pod::Spec.new do |s|
|
|
|
15
15
|
s.source_files = "ios/Classes/**/*.{h,m}"
|
|
16
16
|
s.requires_arc = true
|
|
17
17
|
s.dependency "React"
|
|
18
|
-
s.dependency "JudoKit-iOS", "3.1.
|
|
18
|
+
s.dependency "JudoKit-iOS", "3.1.11"
|
|
19
19
|
|
|
20
20
|
s.test_spec 'RNJudoTests' do |test_spec|
|
|
21
21
|
test_spec.source_files = 'ios/RNJudoTests/**/*.{h,m}'
|
package/android/build.gradle
CHANGED
|
@@ -1,76 +1,65 @@
|
|
|
1
1
|
apply plugin: 'com.android.library'
|
|
2
|
-
apply plugin: 'jacoco'
|
|
3
|
-
apply plugin: 'maven'
|
|
4
2
|
apply plugin: 'kotlin-android'
|
|
5
|
-
apply plugin: 'kotlin-android-extensions'
|
|
6
3
|
apply plugin: 'de.mannodermaus.android-junit5'
|
|
4
|
+
apply plugin: 'jacoco'
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def DEFAULT_COMPILE_SDK_VERSION = 31
|
|
11
|
-
def DEFAULT_BUILD_TOOLS_VERSION = "30.0.3"
|
|
6
|
+
def DEFAULT_COMPILE_SDK_VERSION = 33
|
|
12
7
|
def DEFAULT_MIN_SDK_VERSION = 21
|
|
13
|
-
def DEFAULT_TARGET_SDK_VERSION =
|
|
8
|
+
def DEFAULT_TARGET_SDK_VERSION = 33
|
|
9
|
+
|
|
10
|
+
def isNewArchitectureEnabled() {
|
|
11
|
+
return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true"
|
|
12
|
+
}
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
if (isNewArchitectureEnabled()) {
|
|
15
|
+
apply plugin: 'com.facebook.react'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def getExtOrIntegerDefault(name, fallback) {
|
|
19
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (fallback).toInteger()
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
buildscript {
|
|
20
|
-
ext.kotlin_version = '1.
|
|
21
|
-
ext.junit5_version = '5.
|
|
23
|
+
ext.kotlin_version = '1.7.20'
|
|
24
|
+
ext.junit5_version = '5.9.1'
|
|
22
25
|
|
|
23
26
|
repositories {
|
|
24
27
|
maven { url 'https://plugins.gradle.org/m2/' }
|
|
25
|
-
|
|
26
|
-
mavenCentral()
|
|
27
28
|
google()
|
|
29
|
+
mavenCentral()
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
dependencies {
|
|
31
|
-
classpath 'com.android.tools.build:gradle:3.
|
|
33
|
+
classpath 'com.android.tools.build:gradle:7.3.1'
|
|
32
34
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
33
|
-
classpath
|
|
34
|
-
classpath 'de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1'
|
|
35
|
+
classpath 'de.mannodermaus.gradle.plugins:android-junit5:1.8.2.1'
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
android {
|
|
39
|
-
compileSdkVersion
|
|
40
|
-
buildToolsVersion safeExtGet('buildToolsVersion', DEFAULT_BUILD_TOOLS_VERSION)
|
|
41
|
-
|
|
42
|
-
compileOptions {
|
|
43
|
-
sourceCompatibility JavaVersion.VERSION_1_8
|
|
44
|
-
targetCompatibility JavaVersion.VERSION_1_8
|
|
45
|
-
}
|
|
40
|
+
compileSdkVersion getExtOrIntegerDefault('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
|
|
46
41
|
|
|
47
42
|
defaultConfig {
|
|
48
|
-
minSdkVersion
|
|
49
|
-
targetSdkVersion
|
|
50
|
-
|
|
51
|
-
versionName "1.0"
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
lintOptions {
|
|
55
|
-
abortOnError false
|
|
43
|
+
minSdkVersion getExtOrIntegerDefault('minSdkVersion', DEFAULT_MIN_SDK_VERSION)
|
|
44
|
+
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION)
|
|
45
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
56
46
|
}
|
|
57
|
-
|
|
58
|
-
testOptions {
|
|
59
|
-
unitTests.returnDefaultValues = true
|
|
60
|
-
}
|
|
61
|
-
packagingOptions {
|
|
62
|
-
exclude 'META-INF/AL2.0'
|
|
63
|
-
exclude 'META-INF/LGPL2.1'
|
|
64
|
-
}
|
|
65
|
-
|
|
66
47
|
buildTypes {
|
|
48
|
+
release {
|
|
49
|
+
minifyEnabled false
|
|
50
|
+
}
|
|
67
51
|
debug {
|
|
68
52
|
testCoverageEnabled true
|
|
69
53
|
}
|
|
70
54
|
}
|
|
71
|
-
|
|
55
|
+
|
|
56
|
+
lintOptions {
|
|
57
|
+
disable 'GradleCompatible'
|
|
58
|
+
}
|
|
59
|
+
|
|
72
60
|
testOptions {
|
|
73
61
|
animationsDisabled = true
|
|
62
|
+
unitTests.returnDefaultValues = true
|
|
74
63
|
unitTests.all {
|
|
75
64
|
jacoco {
|
|
76
65
|
includeNoLocationClasses = true
|
|
@@ -82,26 +71,89 @@ android {
|
|
|
82
71
|
|
|
83
72
|
repositories {
|
|
84
73
|
mavenLocal()
|
|
85
|
-
|
|
86
74
|
mavenCentral()
|
|
87
75
|
google()
|
|
88
76
|
|
|
89
77
|
maven { url 'https://vocalinkzapp.jfrog.io/artifactory/merchant-library-maven/' }
|
|
90
78
|
|
|
91
|
-
|
|
79
|
+
def found = false
|
|
80
|
+
def defaultDir = null
|
|
81
|
+
def androidSourcesName = 'React Native sources'
|
|
82
|
+
|
|
83
|
+
if (rootProject.ext.has('reactNativeAndroidRoot')) {
|
|
84
|
+
defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
|
|
85
|
+
} else {
|
|
86
|
+
defaultDir = new File(
|
|
87
|
+
projectDir,
|
|
88
|
+
'/../../../node_modules/react-native/android'
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (defaultDir.exists()) {
|
|
93
|
+
maven {
|
|
94
|
+
url defaultDir.toString()
|
|
95
|
+
name androidSourcesName
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
logger.info(":${project.name}:reactNativeAndroidRoot ${defaultDir.canonicalPath}")
|
|
99
|
+
found = true
|
|
100
|
+
} else {
|
|
101
|
+
def parentDir = rootProject.projectDir
|
|
102
|
+
|
|
103
|
+
1.upto(5, {
|
|
104
|
+
if (found) return true
|
|
105
|
+
parentDir = parentDir.parentFile
|
|
106
|
+
|
|
107
|
+
def androidSourcesDir = new File(
|
|
108
|
+
parentDir,
|
|
109
|
+
'node_modules/react-native'
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def androidPrebuiltBinaryDir = new File(
|
|
113
|
+
parentDir,
|
|
114
|
+
'node_modules/react-native/android'
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
if (androidPrebuiltBinaryDir.exists()) {
|
|
118
|
+
maven {
|
|
119
|
+
url androidPrebuiltBinaryDir.toString()
|
|
120
|
+
name androidSourcesName
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
logger.info(":${project.name}:reactNativeAndroidRoot ${androidPrebuiltBinaryDir.canonicalPath}")
|
|
124
|
+
found = true
|
|
125
|
+
} else if (androidSourcesDir.exists()) {
|
|
126
|
+
maven {
|
|
127
|
+
url androidSourcesDir.toString()
|
|
128
|
+
name androidSourcesName
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
logger.info(":${project.name}:reactNativeAndroidRoot ${androidSourcesDir.canonicalPath}")
|
|
132
|
+
found = true
|
|
133
|
+
}
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (!found) {
|
|
138
|
+
throw new GradleException(
|
|
139
|
+
"${project.name}: unable to locate React Native android sources. " +
|
|
140
|
+
"Ensure you have you installed React Native as a dependency in your project and try again."
|
|
141
|
+
)
|
|
142
|
+
}
|
|
92
143
|
}
|
|
93
144
|
|
|
94
145
|
dependencies {
|
|
95
146
|
//noinspection GradleDynamicVersion
|
|
96
147
|
implementation 'com.facebook.react:react-native:+'
|
|
97
|
-
implementation
|
|
98
|
-
|
|
99
|
-
implementation '
|
|
100
|
-
implementation 'androidx.
|
|
101
|
-
implementation
|
|
148
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
149
|
+
|
|
150
|
+
implementation 'androidx.appcompat:appcompat:1.5.1'
|
|
151
|
+
implementation 'androidx.appcompat:appcompat-resources:1.5.1'
|
|
152
|
+
implementation 'com.google.android.gms:play-services-wallet:19.1.0'
|
|
153
|
+
implementation 'androidx.core:core-ktx:1.9.0'
|
|
102
154
|
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0'
|
|
103
155
|
|
|
104
|
-
implementation 'com.judopay:judokit-android:
|
|
156
|
+
implementation 'com.judopay:judokit-android:4.0.1'
|
|
105
157
|
|
|
106
158
|
//JUnit 5
|
|
107
159
|
testImplementation "org.junit.jupiter:junit-jupiter-api:$junit5_version"
|
|
@@ -109,11 +161,19 @@ dependencies {
|
|
|
109
161
|
testImplementation "org.junit.jupiter:junit-jupiter-params:$junit5_version"
|
|
110
162
|
testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junit5_version"
|
|
111
163
|
|
|
112
|
-
testImplementation 'androidx.test:core:1.
|
|
113
|
-
testImplementation 'io.mockk:mockk:1.
|
|
164
|
+
testImplementation 'androidx.test:core:1.5.0'
|
|
165
|
+
testImplementation 'io.mockk:mockk:1.13.3'
|
|
114
166
|
testImplementation 'android.arch.core:core-testing:1.1.1'
|
|
115
167
|
}
|
|
116
168
|
|
|
169
|
+
if (isNewArchitectureEnabled()) {
|
|
170
|
+
react {
|
|
171
|
+
jsRootDir = file("../src/")
|
|
172
|
+
libraryName = "JudoKit-ReactNative"
|
|
173
|
+
codegenJavaPackageName = "com.reactlibrary"
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
117
177
|
task generateCodeAnalysisReport {
|
|
118
178
|
group 'Reporting'
|
|
119
179
|
description 'Start reporting code analysis tasks (Jacoco)'
|
|
@@ -122,77 +182,6 @@ task generateCodeAnalysisReport {
|
|
|
122
182
|
|
|
123
183
|
task jacocoTestReport(type: JacocoReport, group: 'verification', description: 'Generate Jacoco Reports for all android variants')
|
|
124
184
|
|
|
125
|
-
def configureReactNativePom(def pom) {
|
|
126
|
-
def packageJson = new JsonSlurper().parseText(file('../package.json').text)
|
|
127
|
-
|
|
128
|
-
pom.project {
|
|
129
|
-
name packageJson.title
|
|
130
|
-
artifactId packageJson.name
|
|
131
|
-
version = packageJson.version
|
|
132
|
-
group = "com.reactlibrary"
|
|
133
|
-
description packageJson.description
|
|
134
|
-
url packageJson.repository.baseUrl
|
|
135
|
-
|
|
136
|
-
licenses {
|
|
137
|
-
license {
|
|
138
|
-
name packageJson.license
|
|
139
|
-
url packageJson.repository.baseUrl + '/blob/master/' + packageJson.licenseFilename
|
|
140
|
-
distribution 'repo'
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
developers {
|
|
145
|
-
developer {
|
|
146
|
-
id packageJson.author.username
|
|
147
|
-
name packageJson.author.name
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
afterEvaluate { project ->
|
|
154
|
-
|
|
155
|
-
task androidJavadoc(type: Javadoc) {
|
|
156
|
-
source = android.sourceSets.main.java.srcDirs
|
|
157
|
-
classpath += files(android.bootClasspath)
|
|
158
|
-
classpath += files(project.getConfigurations().getByName('compile').asList())
|
|
159
|
-
include '**/*.java'
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
task androidJavadocJar(type: Jar, dependsOn: androidJavadoc) {
|
|
163
|
-
classifier = 'javadoc'
|
|
164
|
-
from androidJavadoc.destinationDir
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
task androidSourcesJar(type: Jar) {
|
|
168
|
-
classifier = 'sources'
|
|
169
|
-
from android.sourceSets.main.java.srcDirs
|
|
170
|
-
include '**/*.java'
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
android.libraryVariants.all { variant ->
|
|
174
|
-
def name = variant.name.capitalize()
|
|
175
|
-
task "jar${name}"(type: Jar, dependsOn: variant.javaCompileProvider.get()) {
|
|
176
|
-
from variant.javaCompileProvider.get().destinationDir
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
artifacts {
|
|
181
|
-
archives androidSourcesJar
|
|
182
|
-
archives androidJavadocJar
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
task installArchives(type: Upload) {
|
|
186
|
-
configuration = configurations.archives
|
|
187
|
-
repositories.mavenDeployer {
|
|
188
|
-
// Deploy to react-native-event-bridge/maven, ready to publish to npm
|
|
189
|
-
repository url: "file://${projectDir}/../android/maven"
|
|
190
|
-
|
|
191
|
-
configureReactNativePom pom
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
185
|
project.afterEvaluate {
|
|
197
186
|
def variants = android.hasProperty('libraryVariants') ? android.libraryVariants : android.applicationVariants
|
|
198
187
|
variants.forEach {
|
|
@@ -235,7 +224,7 @@ def addJacocoTask(variant) {
|
|
|
235
224
|
sourceDirectories.from(files(variant.sourceSets.kotlin.srcDirs.flatten()))
|
|
236
225
|
def kotlinTask = tasks.getByName("compile${variantName}Kotlin")
|
|
237
226
|
if (kotlinTask) {
|
|
238
|
-
classDirectories += fileTree(dir: kotlinTask.
|
|
227
|
+
classDirectories += fileTree(dir: kotlinTask.destinationDirectory, excludes: excludedFiles)
|
|
239
228
|
}
|
|
240
229
|
}
|
|
241
230
|
|
|
@@ -54,15 +54,15 @@ internal val ReadableMap.cardholderName: String?
|
|
|
54
54
|
internal val ReadableMap.cardType: CardNetwork
|
|
55
55
|
get() {
|
|
56
56
|
val cardScheme = if (hasKey("cardScheme")) {
|
|
57
|
-
getString("cardScheme") ?: ""
|
|
57
|
+
getString("cardScheme")?.lowercase() ?: ""
|
|
58
58
|
} else {
|
|
59
59
|
""
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
return when
|
|
63
|
-
CARD_SCHEME_VISA
|
|
64
|
-
CARD_SCHEME_MASTERCARD -> CardNetwork.MASTERCARD
|
|
65
|
-
CARD_SCHEME_AMEX -> CardNetwork.AMEX
|
|
62
|
+
return when {
|
|
63
|
+
cardScheme.contains(CARD_SCHEME_VISA) -> CardNetwork.VISA
|
|
64
|
+
cardScheme.contains(CARD_SCHEME_MASTERCARD) -> CardNetwork.MASTERCARD
|
|
65
|
+
cardScheme.contains(CARD_SCHEME_AMEX) -> CardNetwork.AMEX
|
|
66
66
|
else -> CardNetwork.OTHER
|
|
67
67
|
}
|
|
68
68
|
}
|
|
@@ -70,6 +70,9 @@ internal val ReadableMap.cardType: CardNetwork
|
|
|
70
70
|
internal val ReadableMap.judoId: String?
|
|
71
71
|
get() = configuration?.getString("judoId")
|
|
72
72
|
|
|
73
|
+
internal val ReadableMap.receiptId: String?
|
|
74
|
+
get() = getString("receiptId")
|
|
75
|
+
|
|
73
76
|
internal val ReadableMap.token: String?
|
|
74
77
|
get() = authorization?.getString("token")
|
|
75
78
|
|
|
@@ -100,6 +103,9 @@ internal val ReadableMap.paymentReference: String?
|
|
|
100
103
|
internal val ReadableMap.isInitialRecurringPayment: Boolean?
|
|
101
104
|
get() = configuration?.getBoolean("isInitialRecurringPayment")
|
|
102
105
|
|
|
106
|
+
internal val ReadableMap.isDelayedAuthorisation: Boolean?
|
|
107
|
+
get() = configuration?.getBoolean("isDelayedAuthorisation")
|
|
108
|
+
|
|
103
109
|
internal val ReadableMap.networkTimeout: ReadableMap?
|
|
104
110
|
get() {
|
|
105
111
|
if (configuration.hasKey("networkTimeout")) {
|
|
@@ -276,6 +282,182 @@ internal val ReadableMap.uiConfiguration: ReadableMap?
|
|
|
276
282
|
return null
|
|
277
283
|
}
|
|
278
284
|
|
|
285
|
+
internal val ReadableMap.threeDSUIConfiguration: ReadableMap?
|
|
286
|
+
get() {
|
|
287
|
+
if (uiConfiguration.hasKey("threeDSUIConfiguration")) {
|
|
288
|
+
return uiConfiguration?.getMap("threeDSUIConfiguration")
|
|
289
|
+
}
|
|
290
|
+
return null
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
internal val ReadableMap.threeDSUITextBoxCustomization: ReadableMap?
|
|
294
|
+
get() {
|
|
295
|
+
if (threeDSUIConfiguration.hasKey("textBoxCustomization")) {
|
|
296
|
+
return threeDSUIConfiguration?.getMap("textBoxCustomization")
|
|
297
|
+
}
|
|
298
|
+
return null
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
internal val ReadableMap.threeDSUIButtonCustomizations: ReadableMap?
|
|
302
|
+
get() {
|
|
303
|
+
if (threeDSUIConfiguration.hasKey("buttonCustomizations")) {
|
|
304
|
+
return threeDSUIConfiguration?.getMap("buttonCustomizations")
|
|
305
|
+
}
|
|
306
|
+
return null
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
internal val ReadableMap.threeDSUISubmitButtonCustomization: ReadableMap?
|
|
310
|
+
get() {
|
|
311
|
+
if (threeDSUIButtonCustomizations.hasKey("SUBMIT")) {
|
|
312
|
+
return threeDSUIButtonCustomizations?.getMap("SUBMIT")
|
|
313
|
+
}
|
|
314
|
+
return null
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
internal val ReadableMap.threeDSUIContinueButtonCustomization: ReadableMap?
|
|
318
|
+
get() {
|
|
319
|
+
if (threeDSUIButtonCustomizations.hasKey("CONTINUE")) {
|
|
320
|
+
return threeDSUIButtonCustomizations?.getMap("CONTINUE")
|
|
321
|
+
}
|
|
322
|
+
return null
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
internal val ReadableMap.threeDSUINextButtonCustomization: ReadableMap?
|
|
326
|
+
get() {
|
|
327
|
+
if (threeDSUIButtonCustomizations.hasKey("NEXT")) {
|
|
328
|
+
return threeDSUIButtonCustomizations?.getMap("NEXT")
|
|
329
|
+
}
|
|
330
|
+
return null
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
internal val ReadableMap.threeDSUICancelButtonCustomization: ReadableMap?
|
|
334
|
+
get() {
|
|
335
|
+
if (threeDSUIButtonCustomizations.hasKey("CANCEL")) {
|
|
336
|
+
return threeDSUIButtonCustomizations?.getMap("CANCEL")
|
|
337
|
+
}
|
|
338
|
+
return null
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
internal val ReadableMap.threeDSUIResendButtonCustomization: ReadableMap?
|
|
342
|
+
get() {
|
|
343
|
+
if (threeDSUIButtonCustomizations.hasKey("RESEND")) {
|
|
344
|
+
return threeDSUIButtonCustomizations?.getMap("RESEND")
|
|
345
|
+
}
|
|
346
|
+
return null
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
internal val ReadableMap.threeDSUIToolbarCustomization: ReadableMap?
|
|
350
|
+
get() {
|
|
351
|
+
if (threeDSUIConfiguration.hasKey("toolbarCustomization")) {
|
|
352
|
+
return threeDSUIConfiguration?.getMap("toolbarCustomization")
|
|
353
|
+
}
|
|
354
|
+
return null
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
internal val ReadableMap.threeDSUILabelCustomization: ReadableMap?
|
|
358
|
+
get() {
|
|
359
|
+
if (threeDSUIConfiguration.hasKey("labelCustomization")) {
|
|
360
|
+
return threeDSUIConfiguration?.getMap("labelCustomization")
|
|
361
|
+
}
|
|
362
|
+
return null
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
internal val ReadableMap.textFontName: String?
|
|
366
|
+
get() {
|
|
367
|
+
if (hasKey("textFontName")) {
|
|
368
|
+
return getString("textFontName")
|
|
369
|
+
}
|
|
370
|
+
return null
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
internal val ReadableMap.textColor: String?
|
|
374
|
+
get() {
|
|
375
|
+
if (hasKey("textColor")) {
|
|
376
|
+
return getString("textColor")
|
|
377
|
+
}
|
|
378
|
+
return null
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
internal val ReadableMap.backgroundColor: String?
|
|
382
|
+
get() {
|
|
383
|
+
if (hasKey("backgroundColor")) {
|
|
384
|
+
return getString("backgroundColor")
|
|
385
|
+
}
|
|
386
|
+
return null
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
internal val ReadableMap.headerText: String?
|
|
390
|
+
get() {
|
|
391
|
+
if (hasKey("headerText")) {
|
|
392
|
+
return getString("headerText")
|
|
393
|
+
}
|
|
394
|
+
return null
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
internal val ReadableMap.buttonText: String?
|
|
398
|
+
get() {
|
|
399
|
+
if (hasKey("buttonText")) {
|
|
400
|
+
return getString("buttonText")
|
|
401
|
+
}
|
|
402
|
+
return null
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
internal val ReadableMap.headingTextFontName: String?
|
|
406
|
+
get() {
|
|
407
|
+
if (hasKey("headingTextFontName")) {
|
|
408
|
+
return getString("headingTextFontName")
|
|
409
|
+
}
|
|
410
|
+
return null
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
internal val ReadableMap.headingTextColor: String?
|
|
414
|
+
get() {
|
|
415
|
+
if (hasKey("headingTextColor")) {
|
|
416
|
+
return getString("headingTextColor")
|
|
417
|
+
}
|
|
418
|
+
return null
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
internal val ReadableMap.borderColor: String?
|
|
422
|
+
get() {
|
|
423
|
+
if (hasKey("borderColor")) {
|
|
424
|
+
return getString("borderColor")
|
|
425
|
+
}
|
|
426
|
+
return null
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
internal val ReadableMap.textFontSize: Int?
|
|
430
|
+
get() {
|
|
431
|
+
if (hasKey("textFontSize")) {
|
|
432
|
+
return getInt("textFontSize")
|
|
433
|
+
}
|
|
434
|
+
return null
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
internal val ReadableMap.cornerRadius: Int?
|
|
438
|
+
get() {
|
|
439
|
+
if (hasKey("cornerRadius")) {
|
|
440
|
+
return getInt("cornerRadius")
|
|
441
|
+
}
|
|
442
|
+
return null
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
internal val ReadableMap.headingTextFontSize: Int?
|
|
446
|
+
get() {
|
|
447
|
+
if (hasKey("headingTextFontSize")) {
|
|
448
|
+
return getInt("headingTextFontSize")
|
|
449
|
+
}
|
|
450
|
+
return null
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
internal val ReadableMap.borderWidth: Int?
|
|
454
|
+
get() {
|
|
455
|
+
if (hasKey("borderWidth")) {
|
|
456
|
+
return getInt("borderWidth")
|
|
457
|
+
}
|
|
458
|
+
return null
|
|
459
|
+
}
|
|
460
|
+
|
|
279
461
|
internal val ReadableMap.isAVSEnabled: Boolean?
|
|
280
462
|
get() = uiConfiguration?.getBoolean("isAVSEnabled")
|
|
281
463
|
|