@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.
Files changed (40) hide show
  1. package/android/build.gradle +12 -6
  2. package/android/gradle.properties +1 -1
  3. package/android/src/main/java/com/smileidentity/react/results/DocumentCaptureResult.kt +12 -0
  4. package/android/src/main/java/com/smileidentity/react/results/SmartSelfieCaptureResult.kt +11 -0
  5. package/android/src/main/java/com/smileidentity/react/utils/DocumentCaptureResultAdapter.kt +46 -2
  6. package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +19 -0
  7. package/android/src/main/java/com/smileidentity/react/utils/SelfieCaptureResultAdapter.kt +28 -17
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +2 -2
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +2 -3
  10. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +3 -3
  11. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +3 -3
  12. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +3 -3
  13. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +3 -3
  14. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +27 -17
  15. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentCaptureView.kt +1 -17
  16. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +30 -16
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +30 -16
  18. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +30 -20
  19. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +1 -5
  20. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +31 -21
  21. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +5 -3
  22. package/ios/Utils/FileUtils.swift +24 -0
  23. package/ios/View/SmileIDBiometricKYCView.swift +54 -51
  24. package/ios/View/SmileIDDocumentVerificationView.swift +51 -47
  25. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +50 -47
  26. package/ios/View/SmileIDSmartSelfieAuthView.swift +36 -33
  27. package/ios/View/SmileIDSmartSelfieCaptureView.swift +4 -41
  28. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +36 -33
  29. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +40 -39
  30. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +40 -39
  31. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +20 -19
  32. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +20 -19
  33. package/ios/ViewModels/SmileIDProductModel.swift +1 -0
  34. package/lib/commonjs/types.js.map +1 -1
  35. package/lib/module/types.js.map +1 -1
  36. package/lib/typescript/types.d.ts +9 -2
  37. package/lib/typescript/types.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/react-native-smile-id.podspec +1 -1
  40. package/src/types.ts +16 -2
@@ -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
- java.srcDirs += ["src/oldarch"]
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.1")
123
- implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.6")
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.09.02')
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'
@@ -3,4 +3,4 @@ SmileId_minSdkVersion=21
3
3
  SmileId_targetSdkVersion=34
4
4
  SmileId_compileSdkVersion=34
5
5
  SmileId_ndkversion=21.4.7075529
6
- SmileId_androidVersion=10.3.1
6
+ SmileId_androidVersion=10.3.7
@@ -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.views.DocumentCaptureResult
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
- return DocumentCaptureResult(frontFile, backFile)
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.react.views.SmartSelfieCaptureResult
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
- reader.beginArray()
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(selfieFile, livenessFiles)
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 { file ->
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 = object : 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
  }
@@ -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.getMap("extraPartnerParams")?.toMap()
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
@@ -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.getMapOrDefault
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.getMapOrDefault("extraPartnerParams")?.toMap()
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.getMapOrDefault
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.getMapOrDefault("extraPartnerParams")?.toMap()
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.getMapOrDefault
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.getMapOrDefault("extraPartnerParams")?.toMap()
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.getMapOrDefault
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.getMapOrDefault("extraPartnerParams")?.toMap()
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.getMapOrDefault
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.getMapOrDefault("extraPartnerParams")?.toMap()
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.BiometricKycResult
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 = (extraPartnerParams ?: mapOf()).toImmutableMap(),
38
- ) { result ->
39
- when (result) {
36
+ extraPartnerParams = extraPartnerParams,
37
+ ) { res ->
38
+ when (res) {
40
39
  is SmileIDResult.Success -> {
41
- val json = try {
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
- .adapter(BiometricKycResult::class.java)
44
- .toJson(result.data)
45
- } catch (e: Exception) {
46
- Timber.w(e)
47
- "null"
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
 
@@ -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.DocumentVerificationResult
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 = (extraPartnerParams ?: mapOf()).toImmutableMap(),
52
- ) { result ->
53
- when (result) {
52
+ extraPartnerParams = extraPartnerParams,
53
+ ) { res ->
54
+ when (res) {
54
55
  is SmileIDResult.Success -> {
55
- val json = try {
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
- .adapter(DocumentVerificationResult::class.java)
58
- .toJson(result.data)
59
- } catch (e: Exception) {
60
- Timber.w(e)
61
- "null"
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
  }