@smile_identity/react-native 10.1.12 → 10.2.1
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/android/build.gradle +12 -6
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/smileidentity/react/results/DocumentCaptureResult.kt +12 -0
- package/android/src/main/java/com/smileidentity/react/results/SmartSelfieCaptureResult.kt +11 -0
- package/android/src/main/java/com/smileidentity/react/utils/DocumentCaptureResultAdapter.kt +46 -2
- package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +19 -0
- package/android/src/main/java/com/smileidentity/react/utils/SelfieCaptureResultAdapter.kt +28 -17
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +2 -2
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +2 -3
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +3 -3
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +3 -3
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +3 -3
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +3 -3
- package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +27 -17
- package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentCaptureView.kt +1 -17
- package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +30 -16
- package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +30 -16
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +30 -20
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +1 -5
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +31 -21
- package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +5 -3
- package/ios/Utils/FileUtils.swift +24 -0
- package/ios/View/SmileIDBiometricKYCView.swift +54 -51
- package/ios/View/SmileIDDocumentVerificationView.swift +51 -47
- package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +50 -47
- package/ios/View/SmileIDSmartSelfieAuthView.swift +36 -33
- package/ios/View/SmileIDSmartSelfieCaptureView.swift +4 -41
- package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +36 -33
- package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +40 -39
- package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +40 -39
- package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +20 -19
- package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +20 -19
- package/ios/ViewModels/SmileIDProductModel.swift +1 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/types.d.ts +9 -2
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-smile-id.podspec +1 -1
- package/src/types.ts +16 -2
package/android/build.gradle
CHANGED
|
@@ -14,6 +14,8 @@ buildscript {
|
|
|
14
14
|
dependencies {
|
|
15
15
|
classpath "com.android.tools.build:gradle:8.3.2"
|
|
16
16
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
17
|
+
classpath "org.jetbrains.kotlin:compose-compiler-gradle-plugin:$kotlin_version"
|
|
18
|
+
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
|
|
17
19
|
classpath "org.jlleitschuh.gradle:ktlint-gradle:12.1.1"
|
|
18
20
|
}
|
|
19
21
|
}
|
|
@@ -27,6 +29,8 @@ apply plugin: "com.android.library"
|
|
|
27
29
|
apply plugin: "kotlin-android"
|
|
28
30
|
apply plugin: 'kotlin-kapt'
|
|
29
31
|
apply plugin: "org.jlleitschuh.gradle.ktlint"
|
|
32
|
+
apply plugin: "org.jetbrains.kotlin.plugin.serialization"
|
|
33
|
+
apply plugin: "org.jetbrains.kotlin.plugin.compose"
|
|
30
34
|
|
|
31
35
|
def getExtOrDefault(name) {
|
|
32
36
|
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["SmileId_" + name]
|
|
@@ -97,7 +101,7 @@ android {
|
|
|
97
101
|
|
|
98
102
|
sourceSets {
|
|
99
103
|
main {
|
|
100
|
-
|
|
104
|
+
java.srcDirs += ["src/oldarch"]
|
|
101
105
|
}
|
|
102
106
|
}
|
|
103
107
|
}
|
|
@@ -108,8 +112,8 @@ repositories {
|
|
|
108
112
|
gradlePluginPortal()
|
|
109
113
|
}
|
|
110
114
|
|
|
111
|
-
def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
112
|
-
def smile_id_sdk_version = getExtOrDefault("androidVersion")
|
|
115
|
+
def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : getExtOrDefault("kotlinVersion")
|
|
116
|
+
def smile_id_sdk_version = rootProject.ext.has("androidVersion") ? rootProject.ext.get("androidVersion") : getExtOrDefault("androidVersion")
|
|
113
117
|
|
|
114
118
|
dependencies {
|
|
115
119
|
implementation "com.facebook.react:react-native:0.72"
|
|
@@ -119,14 +123,16 @@ dependencies {
|
|
|
119
123
|
implementation "com.google.mlkit:object-detection:17.0.2"
|
|
120
124
|
implementation "com.jakewharton.timber:timber"
|
|
121
125
|
implementation 'androidx.appcompat:appcompat:1.7.0'
|
|
122
|
-
implementation("androidx.navigation:navigation-compose:2.8.
|
|
123
|
-
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.
|
|
126
|
+
implementation("androidx.navigation:navigation-compose:2.8.4")
|
|
127
|
+
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
|
|
128
|
+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
|
|
129
|
+
implementation("androidx.compose.runtime:runtime:1.7.5")
|
|
124
130
|
|
|
125
131
|
testImplementation 'junit:junit:4.13.2'
|
|
126
132
|
|
|
127
133
|
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
|
128
134
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
|
|
129
|
-
androidTestImplementation platform('androidx.compose:compose-bom:2024.
|
|
135
|
+
androidTestImplementation platform('androidx.compose:compose-bom:2024.11.00')
|
|
130
136
|
androidTestImplementation 'androidx.compose.ui:ui-test-junit4'
|
|
131
137
|
|
|
132
138
|
debugImplementation 'androidx.compose.ui:ui-tooling'
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package com.smileidentity.react.results
|
|
2
|
+
|
|
3
|
+
import java.io.File
|
|
4
|
+
|
|
5
|
+
data class DocumentCaptureResult(
|
|
6
|
+
val selfieFile: File? = null,
|
|
7
|
+
val documentFrontFile: File? = null,
|
|
8
|
+
val livenessFiles: List<File>? = null,
|
|
9
|
+
val documentBackFile: File? = null,
|
|
10
|
+
val didSubmitDocumentVerificationJob: Boolean? = null,
|
|
11
|
+
val didSubmitEnhancedDocVJob: Boolean? = null
|
|
12
|
+
)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package com.smileidentity.react.results
|
|
2
|
+
|
|
3
|
+
import com.smileidentity.models.v2.SmartSelfieResponse
|
|
4
|
+
import java.io.File
|
|
5
|
+
|
|
6
|
+
data class SmartSelfieCaptureResult(
|
|
7
|
+
val selfieFile: File? = null,
|
|
8
|
+
val livenessFiles: List<File>? = null,
|
|
9
|
+
val apiResponse: SmartSelfieResponse? = null,
|
|
10
|
+
val didSubmitBiometricKycJob: Boolean? = null
|
|
11
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
package com.smileidentity.react.utils
|
|
2
2
|
|
|
3
|
-
import com.smileidentity.react.
|
|
3
|
+
import com.smileidentity.react.results.DocumentCaptureResult
|
|
4
4
|
import com.squareup.moshi.FromJson
|
|
5
5
|
import com.squareup.moshi.JsonAdapter
|
|
6
6
|
import com.squareup.moshi.JsonReader
|
|
@@ -15,17 +15,44 @@ class DocumentCaptureResultAdapter : JsonAdapter<DocumentCaptureResult>() {
|
|
|
15
15
|
@FromJson
|
|
16
16
|
override fun fromJson(reader: JsonReader): DocumentCaptureResult {
|
|
17
17
|
reader.beginObject()
|
|
18
|
+
var selfieFile: File? = null
|
|
18
19
|
var frontFile: File? = null
|
|
19
20
|
var backFile: File? = null
|
|
21
|
+
var livenessFiles: MutableList<File>? = null
|
|
22
|
+
var didSubmitDocumentVerificationJob: Boolean? = null
|
|
23
|
+
var didSubmitEnhancedDocVJob: Boolean? = null
|
|
24
|
+
|
|
20
25
|
while (reader.hasNext()) {
|
|
21
26
|
when (reader.nextName()) {
|
|
27
|
+
"selfieFile" -> selfieFile = reader.nextString()?.let { File(it) }
|
|
22
28
|
"documentFrontFile" -> frontFile = reader.nextString()?.let { File(it) }
|
|
23
29
|
"documentBackFile" -> backFile = reader.nextString()?.let { File(it) }
|
|
30
|
+
"livenessFiles" -> {
|
|
31
|
+
livenessFiles = mutableListOf()
|
|
32
|
+
reader.beginArray()
|
|
33
|
+
while (reader.hasNext()) {
|
|
34
|
+
reader.nextString()?.let { livenessFiles.add(File(it)) }
|
|
35
|
+
}
|
|
36
|
+
reader.endArray()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
"didSubmitDocumentVerificationJob" -> didSubmitDocumentVerificationJob =
|
|
40
|
+
reader.nextBoolean()
|
|
41
|
+
|
|
42
|
+
"didSubmitEnhancedDocVJob" -> didSubmitEnhancedDocVJob = reader.nextBoolean()
|
|
24
43
|
else -> reader.skipValue()
|
|
25
44
|
}
|
|
26
45
|
}
|
|
27
46
|
reader.endObject()
|
|
28
|
-
|
|
47
|
+
|
|
48
|
+
return DocumentCaptureResult(
|
|
49
|
+
selfieFile = selfieFile,
|
|
50
|
+
documentFrontFile = frontFile,
|
|
51
|
+
documentBackFile = backFile,
|
|
52
|
+
livenessFiles = livenessFiles,
|
|
53
|
+
didSubmitDocumentVerificationJob = didSubmitDocumentVerificationJob,
|
|
54
|
+
didSubmitEnhancedDocVJob = didSubmitEnhancedDocVJob
|
|
55
|
+
)
|
|
29
56
|
}
|
|
30
57
|
|
|
31
58
|
@ToJson
|
|
@@ -34,9 +61,26 @@ class DocumentCaptureResultAdapter : JsonAdapter<DocumentCaptureResult>() {
|
|
|
34
61
|
writer.nullValue()
|
|
35
62
|
return
|
|
36
63
|
}
|
|
64
|
+
|
|
37
65
|
writer.beginObject()
|
|
66
|
+
writer.name("selfieFile").value(value.selfieFile?.absolutePath)
|
|
38
67
|
writer.name("documentFrontFile").value(value.documentFrontFile?.absolutePath)
|
|
39
68
|
writer.name("documentBackFile").value(value.documentBackFile?.absolutePath)
|
|
69
|
+
|
|
70
|
+
writer.name("livenessFiles")
|
|
71
|
+
if (value.livenessFiles == null) {
|
|
72
|
+
writer.nullValue()
|
|
73
|
+
} else {
|
|
74
|
+
writer.beginArray()
|
|
75
|
+
for (file in value.livenessFiles) {
|
|
76
|
+
writer.value(file.absolutePath)
|
|
77
|
+
}
|
|
78
|
+
writer.endArray()
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
writer.name("didSubmitDocumentVerificationJob").value(value.didSubmitDocumentVerificationJob)
|
|
82
|
+
writer.name("didSubmitEnhancedDocVJob").value(value.didSubmitEnhancedDocVJob)
|
|
83
|
+
|
|
40
84
|
writer.endObject()
|
|
41
85
|
}
|
|
42
86
|
|
|
@@ -6,6 +6,11 @@ import com.smileidentity.models.IdInfo
|
|
|
6
6
|
import com.smileidentity.models.JobType
|
|
7
7
|
import com.smileidentity.models.PartnerParams
|
|
8
8
|
import com.smileidentity.util.randomUserId
|
|
9
|
+
import kotlinx.collections.immutable.ImmutableMap
|
|
10
|
+
import kotlinx.collections.immutable.PersistentMap
|
|
11
|
+
import kotlinx.collections.immutable.persistentMapOf
|
|
12
|
+
import kotlinx.collections.immutable.toImmutableMap
|
|
13
|
+
import kotlinx.collections.immutable.toPersistentMap
|
|
9
14
|
import timber.log.Timber
|
|
10
15
|
|
|
11
16
|
fun ReadableMap.toMap(): Map<String, String> {
|
|
@@ -60,3 +65,17 @@ fun ReadableMap.getMapOrDefault(key: String, defaultValue: ReadableMap? = null):
|
|
|
60
65
|
}
|
|
61
66
|
return defaultValue
|
|
62
67
|
}
|
|
68
|
+
|
|
69
|
+
fun ReadableMap.getImmutableMapOrDefault(
|
|
70
|
+
key: String,
|
|
71
|
+
defaultValue: ImmutableMap<String, String> = persistentMapOf()
|
|
72
|
+
): ImmutableMap<String, String> {
|
|
73
|
+
return if (hasKey(key)) {
|
|
74
|
+
getMap(key)?.toHashMap()
|
|
75
|
+
?.mapValues { it.value?.toString() ?: "" }
|
|
76
|
+
?.toPersistentMap()
|
|
77
|
+
?: defaultValue
|
|
78
|
+
} else {
|
|
79
|
+
defaultValue
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
package com.smileidentity.react.utils
|
|
2
2
|
|
|
3
|
-
import com.smileidentity.
|
|
3
|
+
import com.smileidentity.SmileID
|
|
4
|
+
import com.smileidentity.models.v2.SmartSelfieResponse
|
|
5
|
+
import com.smileidentity.react.results.SmartSelfieCaptureResult
|
|
4
6
|
import com.squareup.moshi.FromJson
|
|
5
7
|
import com.squareup.moshi.JsonAdapter
|
|
8
|
+
import com.squareup.moshi.JsonAdapter.Factory
|
|
6
9
|
import com.squareup.moshi.JsonReader
|
|
7
10
|
import com.squareup.moshi.JsonWriter
|
|
8
|
-
import com.squareup.moshi.Moshi
|
|
9
11
|
import com.squareup.moshi.ToJson
|
|
10
12
|
import java.io.File
|
|
11
|
-
import java.lang.reflect.Type
|
|
12
13
|
|
|
13
14
|
class SelfieCaptureResultAdapter : JsonAdapter<SmartSelfieCaptureResult>() {
|
|
14
15
|
|
|
@@ -17,23 +18,35 @@ class SelfieCaptureResultAdapter : JsonAdapter<SmartSelfieCaptureResult>() {
|
|
|
17
18
|
reader.beginObject()
|
|
18
19
|
var selfieFile: File? = null
|
|
19
20
|
var livenessFiles: List<File>? = null
|
|
21
|
+
var apiResponse: SmartSelfieResponse? = null
|
|
22
|
+
|
|
20
23
|
while (reader.hasNext()) {
|
|
21
24
|
when (reader.nextName()) {
|
|
22
25
|
"selfieFile" -> selfieFile = reader.nextString()?.let { File(it) }
|
|
23
26
|
"livenessFiles" -> {
|
|
24
|
-
|
|
27
|
+
// Assuming livenessFiles is an array of file paths in the JSON
|
|
25
28
|
val files = mutableListOf<File>()
|
|
29
|
+
reader.beginArray()
|
|
26
30
|
while (reader.hasNext()) {
|
|
27
31
|
reader.nextString()?.let { files.add(File(it)) }
|
|
28
32
|
}
|
|
29
33
|
reader.endArray()
|
|
30
34
|
livenessFiles = files
|
|
31
35
|
}
|
|
36
|
+
|
|
37
|
+
"apiResponse" -> apiResponse =
|
|
38
|
+
SmileID.moshi.adapter(SmartSelfieResponse::class.java).fromJson(reader)
|
|
39
|
+
|
|
32
40
|
else -> reader.skipValue()
|
|
33
41
|
}
|
|
34
42
|
}
|
|
43
|
+
|
|
35
44
|
reader.endObject()
|
|
36
|
-
return SmartSelfieCaptureResult(
|
|
45
|
+
return SmartSelfieCaptureResult(
|
|
46
|
+
selfieFile = selfieFile,
|
|
47
|
+
livenessFiles = livenessFiles,
|
|
48
|
+
apiResponse = apiResponse
|
|
49
|
+
)
|
|
37
50
|
}
|
|
38
51
|
|
|
39
52
|
@ToJson
|
|
@@ -44,24 +57,22 @@ class SelfieCaptureResultAdapter : JsonAdapter<SmartSelfieCaptureResult>() {
|
|
|
44
57
|
}
|
|
45
58
|
writer.beginObject()
|
|
46
59
|
writer.name("selfieFile").value(value.selfieFile?.absolutePath)
|
|
60
|
+
|
|
47
61
|
writer.name("livenessFiles")
|
|
48
62
|
writer.beginArray()
|
|
49
|
-
value.livenessFiles?.forEach {
|
|
50
|
-
writer.value(file.absolutePath)
|
|
51
|
-
}
|
|
63
|
+
value.livenessFiles?.forEach { writer.value(it.absolutePath) }
|
|
52
64
|
writer.endArray()
|
|
65
|
+
|
|
66
|
+
writer.name("apiResponse")
|
|
67
|
+
if (value.apiResponse != null) {
|
|
68
|
+
SmileID.moshi.adapter(SmartSelfieResponse::class.java).toJson(writer, value.apiResponse)
|
|
69
|
+
} else {
|
|
70
|
+
writer.nullValue()
|
|
71
|
+
}
|
|
53
72
|
writer.endObject()
|
|
54
73
|
}
|
|
55
74
|
|
|
56
75
|
companion object {
|
|
57
|
-
val FACTORY =
|
|
58
|
-
override fun create(
|
|
59
|
-
type: Type,
|
|
60
|
-
annotations: Set<Annotation>,
|
|
61
|
-
moshi: Moshi
|
|
62
|
-
): JsonAdapter<*>? {
|
|
63
|
-
return if (type == SmartSelfieCaptureResult::class.java) SelfieCaptureResultAdapter() else null
|
|
64
|
-
}
|
|
65
|
-
}
|
|
76
|
+
val FACTORY = Factory { type, annotations, moshi -> if (type == SmartSelfieCaptureResult::class.java) SelfieCaptureResultAdapter() else null }
|
|
66
77
|
}
|
|
67
78
|
}
|
package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt
CHANGED
|
@@ -7,8 +7,8 @@ import com.facebook.react.uimanager.SimpleViewManager
|
|
|
7
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
8
|
import com.smileidentity.react.toIdInfo
|
|
9
9
|
import com.smileidentity.react.utils.getBoolOrDefault
|
|
10
|
+
import com.smileidentity.react.utils.getImmutableMapOrDefault
|
|
10
11
|
import com.smileidentity.react.utils.getStringOrDefault
|
|
11
|
-
import com.smileidentity.react.utils.toMap
|
|
12
12
|
import com.smileidentity.react.views.SmileIDBiometricKYCView
|
|
13
13
|
|
|
14
14
|
@ReactModule(name = SmileIDBiometricKYCViewManager.NAME)
|
|
@@ -47,7 +47,7 @@ class SmileIDBiometricKYCViewManager(
|
|
|
47
47
|
?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
|
|
48
48
|
val idInfo = idInfoMap.toIdInfo()
|
|
49
49
|
?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
|
|
50
|
-
view.extraPartnerParams = params.
|
|
50
|
+
view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
|
|
51
51
|
view.userId = params.getStringOrDefault("userId")
|
|
52
52
|
view.jobId = params.getStringOrDefault("jobId")
|
|
53
53
|
view.idInfo = idInfo
|
package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt
CHANGED
|
@@ -6,9 +6,8 @@ import com.facebook.react.module.annotations.ReactModule
|
|
|
6
6
|
import com.facebook.react.uimanager.SimpleViewManager
|
|
7
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
8
|
import com.smileidentity.react.utils.getBoolOrDefault
|
|
9
|
-
import com.smileidentity.react.utils.
|
|
9
|
+
import com.smileidentity.react.utils.getImmutableMapOrDefault
|
|
10
10
|
import com.smileidentity.react.utils.getStringOrDefault
|
|
11
|
-
import com.smileidentity.react.utils.toMap
|
|
12
11
|
import com.smileidentity.react.views.SmileIDConsentView
|
|
13
12
|
|
|
14
13
|
@ReactModule(name = SmileIDConsentViewManager.NAME)
|
|
@@ -54,7 +53,7 @@ class SmileIDConsentViewManager(
|
|
|
54
53
|
val productName = params.getString("productName")
|
|
55
54
|
?: return view.emitFailure(IllegalArgumentException("productName is required to show Consent Screen"))
|
|
56
55
|
|
|
57
|
-
view.extraPartnerParams = params.
|
|
56
|
+
view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
|
|
58
57
|
view.userId = params.getStringOrDefault("userId")
|
|
59
58
|
view.jobId = params.getStringOrDefault("jobId")
|
|
60
59
|
view.partnerName = partnerName
|
|
@@ -7,9 +7,8 @@ import com.facebook.react.uimanager.SimpleViewManager
|
|
|
7
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
8
|
import com.smileidentity.react.utils.getBoolOrDefault
|
|
9
9
|
import com.smileidentity.react.utils.getFloatOrDefault
|
|
10
|
-
import com.smileidentity.react.utils.
|
|
10
|
+
import com.smileidentity.react.utils.getImmutableMapOrDefault
|
|
11
11
|
import com.smileidentity.react.utils.getStringOrDefault
|
|
12
|
-
import com.smileidentity.react.utils.toMap
|
|
13
12
|
import com.smileidentity.react.views.SmileIDDocumentVerificationView
|
|
14
13
|
|
|
15
14
|
@ReactModule(name = SmileIDDocumentVerificationViewManager.NAME)
|
|
@@ -46,7 +45,7 @@ class SmileIDDocumentVerificationViewManager(
|
|
|
46
45
|
params?.let {
|
|
47
46
|
val countryCode = params.getString("countryCode")
|
|
48
47
|
?: return view.emitFailure(IllegalArgumentException("countryCode is required to run Document Verification"))
|
|
49
|
-
view.extraPartnerParams = params.
|
|
48
|
+
view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
|
|
50
49
|
view.userId = params.getStringOrDefault("userId")
|
|
51
50
|
view.jobId = params.getStringOrDefault("jobId")
|
|
52
51
|
view.countryCode = countryCode
|
|
@@ -59,6 +58,7 @@ class SmileIDDocumentVerificationViewManager(
|
|
|
59
58
|
view.documentType = params.getStringOrDefault("documentType", null)
|
|
60
59
|
view.idAspectRatio = params.getFloatOrDefault("idAspectRatio")
|
|
61
60
|
view.allowNewEnroll = params.getBoolOrDefault("allowNewEnroll", false)
|
|
61
|
+
view.skipApiSubmission = params.getBoolOrDefault("skipApiSubmission", false)
|
|
62
62
|
view.renderContent()
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -7,9 +7,8 @@ import com.facebook.react.uimanager.SimpleViewManager
|
|
|
7
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
8
|
import com.smileidentity.react.utils.getBoolOrDefault
|
|
9
9
|
import com.smileidentity.react.utils.getFloatOrDefault
|
|
10
|
-
import com.smileidentity.react.utils.
|
|
10
|
+
import com.smileidentity.react.utils.getImmutableMapOrDefault
|
|
11
11
|
import com.smileidentity.react.utils.getStringOrDefault
|
|
12
|
-
import com.smileidentity.react.utils.toMap
|
|
13
12
|
import com.smileidentity.react.views.SmileIDEnhancedDocumentVerificationView
|
|
14
13
|
|
|
15
14
|
@ReactModule(name = SmileIDEnhancedDocumentVerificationViewManager.NAME)
|
|
@@ -46,7 +45,7 @@ class SmileIDEnhancedDocumentVerificationViewManager(
|
|
|
46
45
|
params?.let {
|
|
47
46
|
val countryCode = params.getString("countryCode")
|
|
48
47
|
?: return view.emitFailure(IllegalArgumentException("countryCode is required to run Enhanced Document Verification"))
|
|
49
|
-
view.extraPartnerParams = params.
|
|
48
|
+
view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
|
|
50
49
|
view.userId = params.getStringOrDefault("userId")
|
|
51
50
|
view.jobId = params.getStringOrDefault("jobId")
|
|
52
51
|
view.countryCode = countryCode
|
|
@@ -58,6 +57,7 @@ class SmileIDEnhancedDocumentVerificationViewManager(
|
|
|
58
57
|
view.documentType = params.getStringOrDefault("documentType")
|
|
59
58
|
view.idAspectRatio = params.getFloatOrDefault("idAspectRatio")
|
|
60
59
|
view.allowNewEnroll = params.getBoolOrDefault("allowNewEnroll", false)
|
|
60
|
+
view.skipApiSubmission = params.getBoolOrDefault("skipApiSubmission", false)
|
|
61
61
|
view.renderContent()
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -6,9 +6,8 @@ import com.facebook.react.module.annotations.ReactModule
|
|
|
6
6
|
import com.facebook.react.uimanager.SimpleViewManager
|
|
7
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
8
|
import com.smileidentity.react.utils.getBoolOrDefault
|
|
9
|
-
import com.smileidentity.react.utils.
|
|
9
|
+
import com.smileidentity.react.utils.getImmutableMapOrDefault
|
|
10
10
|
import com.smileidentity.react.utils.getStringOrDefault
|
|
11
|
-
import com.smileidentity.react.utils.toMap
|
|
12
11
|
import com.smileidentity.react.views.SmileIDSmartSelfieAuthenticationView
|
|
13
12
|
|
|
14
13
|
@ReactModule(name = SmileIDSmartSelfieAuthenticationViewManager.NAME)
|
|
@@ -43,13 +42,14 @@ class SmileIDSmartSelfieAuthenticationViewManager(
|
|
|
43
42
|
// Extract params from args and apply to view
|
|
44
43
|
val params = args?.getMap(0)
|
|
45
44
|
params?.let {
|
|
46
|
-
view.extraPartnerParams = params.
|
|
45
|
+
view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
|
|
47
46
|
view.userId = params.getStringOrDefault("userId")
|
|
48
47
|
view.jobId = params.getStringOrDefault("jobId")
|
|
49
48
|
view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", false)
|
|
50
49
|
view.showAttribution = params.getBoolOrDefault("showAttribution", true)
|
|
51
50
|
view.showInstructions = params.getBoolOrDefault("showInstructions", true)
|
|
52
51
|
view.allowNewEnroll = params.getBoolOrDefault("allowNewEnroll", false)
|
|
52
|
+
view.skipApiSubmission = params.getBoolOrDefault("skipApiSubmission", false)
|
|
53
53
|
view.renderContent()
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -6,9 +6,8 @@ import com.facebook.react.module.annotations.ReactModule
|
|
|
6
6
|
import com.facebook.react.uimanager.SimpleViewManager
|
|
7
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
8
8
|
import com.smileidentity.react.utils.getBoolOrDefault
|
|
9
|
-
import com.smileidentity.react.utils.
|
|
9
|
+
import com.smileidentity.react.utils.getImmutableMapOrDefault
|
|
10
10
|
import com.smileidentity.react.utils.getStringOrDefault
|
|
11
|
-
import com.smileidentity.react.utils.toMap
|
|
12
11
|
import com.smileidentity.react.views.SmileIDSmartSelfieEnrollmentView
|
|
13
12
|
|
|
14
13
|
@ReactModule(name = SmileIDSmartSelfieEnrollmentViewManager.NAME)
|
|
@@ -43,13 +42,14 @@ class SmileIDSmartSelfieEnrollmentViewManager(
|
|
|
43
42
|
// Extract params from args and apply to view
|
|
44
43
|
val params = args?.getMap(0)
|
|
45
44
|
params?.let {
|
|
46
|
-
view.extraPartnerParams = params.
|
|
45
|
+
view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
|
|
47
46
|
view.userId = params.getStringOrDefault("userId")
|
|
48
47
|
view.jobId = params.getStringOrDefault("jobId")
|
|
49
48
|
view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", false)
|
|
50
49
|
view.showAttribution = params.getBoolOrDefault("showAttribution", true)
|
|
51
50
|
view.showInstructions = params.getBoolOrDefault("showInstructions", true)
|
|
52
51
|
view.allowNewEnroll = params.getBoolOrDefault("allowNewEnroll", false)
|
|
52
|
+
view.skipApiSubmission = params.getBoolOrDefault("skipApiSubmission", false)
|
|
53
53
|
view.renderContent()
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -7,12 +7,11 @@ import com.facebook.react.bridge.ReactApplicationContext
|
|
|
7
7
|
import com.smileidentity.SmileID
|
|
8
8
|
import com.smileidentity.compose.BiometricKYC
|
|
9
9
|
import com.smileidentity.models.IdInfo
|
|
10
|
-
import com.smileidentity.results.
|
|
10
|
+
import com.smileidentity.react.results.SmartSelfieCaptureResult
|
|
11
|
+
import com.smileidentity.react.utils.SelfieCaptureResultAdapter
|
|
11
12
|
import com.smileidentity.results.SmileIDResult
|
|
12
13
|
import com.smileidentity.util.randomJobId
|
|
13
14
|
import com.smileidentity.util.randomUserId
|
|
14
|
-
import kotlinx.collections.immutable.toImmutableMap
|
|
15
|
-
import timber.log.Timber
|
|
16
15
|
|
|
17
16
|
class SmileIDBiometricKYCView(context: ReactApplicationContext) : SmileIDView(context) {
|
|
18
17
|
var idInfo: IdInfo? = null
|
|
@@ -34,25 +33,36 @@ class SmileIDBiometricKYCView(context: ReactApplicationContext) : SmileIDView(co
|
|
|
34
33
|
allowNewEnroll = allowNewEnroll ?: false,
|
|
35
34
|
showAttribution = showAttribution ?: true,
|
|
36
35
|
showInstructions = showInstructions ?: true,
|
|
37
|
-
extraPartnerParams =
|
|
38
|
-
) {
|
|
39
|
-
when (
|
|
36
|
+
extraPartnerParams = extraPartnerParams,
|
|
37
|
+
) { res ->
|
|
38
|
+
when (res) {
|
|
40
39
|
is SmileIDResult.Success -> {
|
|
41
|
-
val
|
|
40
|
+
val result =
|
|
41
|
+
SmartSelfieCaptureResult(
|
|
42
|
+
selfieFile = res.data.selfieFile,
|
|
43
|
+
livenessFiles = res.data.livenessFiles,
|
|
44
|
+
didSubmitBiometricKycJob = res.data.didSubmitBiometricKycJob,
|
|
45
|
+
)
|
|
46
|
+
val newMoshi =
|
|
42
47
|
SmileID.moshi
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
.newBuilder()
|
|
49
|
+
.add(SelfieCaptureResultAdapter.FACTORY)
|
|
50
|
+
.build()
|
|
51
|
+
val json =
|
|
52
|
+
try {
|
|
53
|
+
newMoshi
|
|
54
|
+
.adapter(SmartSelfieCaptureResult::class.java)
|
|
55
|
+
.toJson(result)
|
|
56
|
+
} catch (e: Exception) {
|
|
57
|
+
emitFailure(e)
|
|
58
|
+
return@BiometricKYC
|
|
59
|
+
}
|
|
60
|
+
json?.let { js ->
|
|
61
|
+
emitSuccess(js)
|
|
48
62
|
}
|
|
49
|
-
emitSuccess(json)
|
|
50
63
|
}
|
|
51
64
|
|
|
52
|
-
is SmileIDResult.Error ->
|
|
53
|
-
result.throwable.printStackTrace()
|
|
54
|
-
emitFailure(result.throwable)
|
|
55
|
-
}
|
|
65
|
+
is SmileIDResult.Error -> emitFailure(res.throwable)
|
|
56
66
|
}
|
|
57
67
|
}
|
|
58
68
|
}
|
|
@@ -17,22 +17,15 @@ import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
|
|
|
17
17
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
18
18
|
import com.smileidentity.R
|
|
19
19
|
import com.smileidentity.SmileID
|
|
20
|
-
import com.smileidentity.SmileIDOptIn
|
|
21
20
|
import com.smileidentity.compose.document.DocumentCaptureScreen
|
|
22
21
|
import com.smileidentity.compose.document.DocumentCaptureSide
|
|
23
22
|
import com.smileidentity.compose.theme.colorScheme
|
|
23
|
+
import com.smileidentity.react.results.DocumentCaptureResult
|
|
24
24
|
import com.smileidentity.react.utils.DocumentCaptureResultAdapter
|
|
25
25
|
import com.smileidentity.util.randomJobId
|
|
26
|
-
import com.squareup.moshi.JsonClass
|
|
27
26
|
import timber.log.Timber
|
|
28
27
|
import java.io.File
|
|
29
28
|
|
|
30
|
-
data class DocumentCaptureResult(
|
|
31
|
-
val documentFrontFile: File? = null,
|
|
32
|
-
val documentBackFile: File? = null
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
@OptIn(SmileIDOptIn::class)
|
|
36
29
|
class SmileIDDocumentCaptureView(context: ReactApplicationContext) : SmileIDView(context) {
|
|
37
30
|
var showConfirmation: Boolean = true
|
|
38
31
|
var front: Boolean = true
|
|
@@ -72,19 +65,10 @@ class SmileIDDocumentCaptureView(context: ReactApplicationContext) : SmileIDView
|
|
|
72
65
|
DocumentCaptureScreen(
|
|
73
66
|
jobId = jobId,
|
|
74
67
|
side = if (front) DocumentCaptureSide.Front else DocumentCaptureSide.Back,
|
|
75
|
-
showInstructions = showInstructions,
|
|
76
|
-
showAttribution = showAttribution,
|
|
77
|
-
allowGallerySelection = allowGalleryUpload,
|
|
78
|
-
showConfirmation = showConfirmation,
|
|
79
|
-
showSkipButton = false,
|
|
80
|
-
instructionsHeroImage = hero,
|
|
81
|
-
instructionsTitleText = stringResource(instructionTitle),
|
|
82
|
-
instructionsSubtitleText = stringResource(instructionSubTitle),
|
|
83
68
|
captureTitleText = stringResource(captureTitleText),
|
|
84
69
|
knownIdAspectRatio = idAspectRatio,
|
|
85
70
|
onConfirm = { file -> handleConfirmation(file) },
|
|
86
71
|
onError = { throwable -> emitFailure(throwable) },
|
|
87
|
-
onSkip = { }
|
|
88
72
|
)
|
|
89
73
|
}
|
|
90
74
|
|
package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt
CHANGED
|
@@ -6,12 +6,12 @@ import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
|
|
|
6
6
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
7
|
import com.smileidentity.SmileID
|
|
8
8
|
import com.smileidentity.compose.DocumentVerification
|
|
9
|
-
import com.smileidentity.results.
|
|
9
|
+
import com.smileidentity.react.results.DocumentCaptureResult
|
|
10
|
+
import com.smileidentity.react.utils.DocumentCaptureResultAdapter
|
|
10
11
|
import com.smileidentity.results.SmileIDResult
|
|
11
12
|
import com.smileidentity.util.randomJobId
|
|
12
13
|
import com.smileidentity.util.randomUserId
|
|
13
14
|
import kotlinx.collections.immutable.toImmutableMap
|
|
14
|
-
import timber.log.Timber
|
|
15
15
|
import java.io.File
|
|
16
16
|
|
|
17
17
|
class SmileIDDocumentVerificationView(context: ReactApplicationContext) : SmileIDView(context) {
|
|
@@ -47,26 +47,40 @@ class SmileIDDocumentVerificationView(context: ReactApplicationContext) : SmileI
|
|
|
47
47
|
allowGalleryUpload = allowGalleryUpload,
|
|
48
48
|
captureBothSides = captureBothSides,
|
|
49
49
|
allowNewEnroll = allowNewEnroll ?: false,
|
|
50
|
+
skipApiSubmission = skipApiSubmission,
|
|
50
51
|
bypassSelfieCaptureWithFile = bypassSelfieCaptureWithFile,
|
|
51
|
-
extraPartnerParams =
|
|
52
|
-
) {
|
|
53
|
-
when (
|
|
52
|
+
extraPartnerParams = extraPartnerParams,
|
|
53
|
+
) { res ->
|
|
54
|
+
when (res) {
|
|
54
55
|
is SmileIDResult.Success -> {
|
|
55
|
-
val
|
|
56
|
+
val result =
|
|
57
|
+
DocumentCaptureResult(
|
|
58
|
+
selfieFile = res.data.selfieFile,
|
|
59
|
+
documentFrontFile = res.data.documentFrontFile,
|
|
60
|
+
livenessFiles = res.data.livenessFiles,
|
|
61
|
+
documentBackFile = res.data.documentBackFile,
|
|
62
|
+
didSubmitDocumentVerificationJob = res.data.didSubmitDocumentVerificationJob,
|
|
63
|
+
)
|
|
64
|
+
val newMoshi =
|
|
56
65
|
SmileID.moshi
|
|
57
|
-
.
|
|
58
|
-
.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
.newBuilder()
|
|
67
|
+
.add(DocumentCaptureResultAdapter.FACTORY)
|
|
68
|
+
.build()
|
|
69
|
+
val json =
|
|
70
|
+
try {
|
|
71
|
+
newMoshi
|
|
72
|
+
.adapter(DocumentCaptureResult::class.java)
|
|
73
|
+
.toJson(result)
|
|
74
|
+
} catch (e: Exception) {
|
|
75
|
+
emitFailure(e)
|
|
76
|
+
return@DocumentVerification
|
|
77
|
+
}
|
|
78
|
+
json?.let { js ->
|
|
79
|
+
emitSuccess(js)
|
|
62
80
|
}
|
|
63
|
-
emitSuccess(json)
|
|
64
81
|
}
|
|
65
82
|
|
|
66
|
-
is SmileIDResult.Error ->
|
|
67
|
-
result.throwable.printStackTrace()
|
|
68
|
-
emitFailure(result.throwable)
|
|
69
|
-
}
|
|
83
|
+
is SmileIDResult.Error -> emitFailure(res.throwable)
|
|
70
84
|
}
|
|
71
85
|
}
|
|
72
86
|
}
|