@smile_identity/react-native 10.2.5 → 10.3.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/android/gradle.properties +1 -1
- package/android/src/main/java/com/smileidentity/react/Mapper.kt +7 -3
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +9 -3
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +0 -1
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +12 -5
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.kt +1 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSelfieView.kt +48 -0
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationEnhancedView.kt +5 -30
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +7 -32
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +30 -189
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentEnhancedView.kt +5 -35
- package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +7 -40
- package/ios/RNSmileID.swift +11 -4
- package/ios/Utils/SmileIDDictExt.swift +233 -220
- package/ios/View/SmileIDBiometricKYCView.swift +2 -2
- package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +2 -2
- package/ios/View/SmileIDSmartSelfieAuthEnhancedView.swift +35 -34
- package/ios/View/SmileIDSmartSelfieAuthView.swift +2 -0
- package/ios/View/SmileIDSmartSelfieCaptureView.swift +27 -33
- package/ios/View/SmileIDSmartSelfieEnrollmentEnhancedView.swift +1 -0
- package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +35 -30
- package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +52 -47
- package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.swift +7 -2
- package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +1 -0
- package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.swift +1 -0
- package/ios/ViewModels/SmileIDProductModel.swift +29 -24
- package/lib/commonjs/types.js +4 -2
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/types.js +4 -2
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/types.d.ts +7 -5
- 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 +11 -5
package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package com.smileidentity.react.views
|
|
2
2
|
|
|
3
3
|
import android.content.Context
|
|
4
|
-
import android.util.Log
|
|
5
4
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
6
5
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
7
6
|
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
|
|
@@ -9,15 +8,12 @@ import com.smileidentity.SmileID
|
|
|
9
8
|
import com.smileidentity.compose.SmartSelfieEnrollment
|
|
10
9
|
import com.smileidentity.react.results.SmartSelfieCaptureResult
|
|
11
10
|
import com.smileidentity.react.utils.SelfieCaptureResultAdapter
|
|
11
|
+
import com.smileidentity.results.SmartSelfieResult
|
|
12
12
|
import com.smileidentity.results.SmileIDResult
|
|
13
|
+
import com.smileidentity.util.randomJobId
|
|
13
14
|
import com.smileidentity.util.randomUserId
|
|
14
|
-
import kotlinx.coroutines.CoroutineScope
|
|
15
|
-
import kotlinx.coroutines.Dispatchers
|
|
16
|
-
import kotlinx.coroutines.Job
|
|
17
|
-
import kotlinx.coroutines.launch
|
|
18
15
|
|
|
19
|
-
class SmileIDSmartSelfieEnrollmentView(context: Context) :
|
|
20
|
-
private val viewScope = CoroutineScope(Dispatchers.Main + Job())
|
|
16
|
+
class SmileIDSmartSelfieEnrollmentView(context: Context) : SmileIDSelfieView(context) {
|
|
21
17
|
override fun renderContent() {
|
|
22
18
|
composeView.apply {
|
|
23
19
|
setContent {
|
|
@@ -25,44 +21,15 @@ class SmileIDSmartSelfieEnrollmentView(context: Context) : SmileIDView(context)
|
|
|
25
21
|
CompositionLocalProvider(LocalViewModelStoreOwner provides customViewModelStoreOwner) {
|
|
26
22
|
SmileID.SmartSelfieEnrollment(
|
|
27
23
|
userId = userId ?: rememberSaveable { randomUserId() },
|
|
24
|
+
jobId = jobId ?: rememberSaveable { randomJobId() },
|
|
28
25
|
allowAgentMode = allowAgentMode ?: false,
|
|
29
26
|
allowNewEnroll = allowNewEnroll ?: false,
|
|
30
27
|
showAttribution = showAttribution,
|
|
31
28
|
showInstructions = showInstructions,
|
|
29
|
+
skipApiSubmission = skipApiSubmission,
|
|
32
30
|
extraPartnerParams = extraPartnerParams,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
when (res) {
|
|
36
|
-
is SmileIDResult.Success -> {
|
|
37
|
-
val result =
|
|
38
|
-
SmartSelfieCaptureResult(
|
|
39
|
-
selfieFile = res.data.selfieFile,
|
|
40
|
-
livenessFiles = res.data.livenessFiles,
|
|
41
|
-
apiResponse = res.data.apiResponse,
|
|
42
|
-
)
|
|
43
|
-
val newMoshi =
|
|
44
|
-
SmileID.moshi
|
|
45
|
-
.newBuilder()
|
|
46
|
-
.add(SelfieCaptureResultAdapter.FACTORY)
|
|
47
|
-
.build()
|
|
48
|
-
val json =
|
|
49
|
-
try {
|
|
50
|
-
newMoshi
|
|
51
|
-
.adapter(SmartSelfieCaptureResult::class.java)
|
|
52
|
-
.toJson(result)
|
|
53
|
-
} catch (e: Exception) {
|
|
54
|
-
emitFailure(e)
|
|
55
|
-
return@launch
|
|
56
|
-
}
|
|
57
|
-
json?.let { js ->
|
|
58
|
-
emitSuccess(js)
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
is SmileIDResult.Error -> emitFailure(res.throwable)
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
31
|
+
onResult = { res -> handleResultCallback(res)},
|
|
32
|
+
)
|
|
66
33
|
}
|
|
67
34
|
}
|
|
68
35
|
}
|
package/ios/RNSmileID.swift
CHANGED
|
@@ -171,16 +171,23 @@ class RNSmileID: NSObject {
|
|
|
171
171
|
return
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
174
|
+
let consentInfo: ConsentInformation
|
|
175
|
+
if let consentInformation = request["consentInformation"] as? NSDictionary{
|
|
176
|
+
consentInfo = consentInformation.toConsentInfo()
|
|
177
|
+
} else {
|
|
178
|
+
consentInfo = ConsentInformation(
|
|
179
|
+
consentGrantedDate: getCurrentIsoTimestamp(),
|
|
180
|
+
personalDetailsConsentGranted: false,
|
|
181
|
+
contactInformationConsentGranted: false,
|
|
182
|
+
documentInformationConsentGranted: false
|
|
183
|
+
)
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
let request = EnhancedKycRequest(
|
|
180
187
|
country: country,
|
|
181
188
|
idType: idType,
|
|
182
189
|
idNumber: idNumber,
|
|
183
|
-
consentInformation:
|
|
190
|
+
consentInformation: consentInfo,
|
|
184
191
|
firstName: request["firstName"] as? String,
|
|
185
192
|
middleName: request["middleName"] as? String,
|
|
186
193
|
lastName: request["lastName"] as? String,
|
|
@@ -2,250 +2,263 @@ import Foundation
|
|
|
2
2
|
import SmileID
|
|
3
3
|
|
|
4
4
|
extension NSDictionary {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
func toConfig() -> Config {
|
|
6
|
+
return Config(
|
|
7
|
+
partnerId: (self["partnerId"] as? String)!,
|
|
8
|
+
authToken: (self["authToken"] as? String)!,
|
|
9
|
+
prodLambdaUrl: (self["prodLambdaUrl"] as? String)!,
|
|
10
|
+
testLambdaUrl: (self["testLambdaUrl"] as? String)!
|
|
11
|
+
)
|
|
12
|
+
}
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let country = self["country"] as? String
|
|
24
|
-
let idType = self["idType"] as? String
|
|
25
|
-
let updateEnrolledImage = self["updateEnrolledImage"] as? Bool
|
|
26
|
-
|
|
27
|
-
return AuthenticationRequest(
|
|
28
|
-
jobType: jobType,
|
|
29
|
-
updateEnrolledImage: updateEnrolledImage,
|
|
30
|
-
jobId: jobId,
|
|
31
|
-
userId: userId,
|
|
32
|
-
country: country,
|
|
33
|
-
idType: idType
|
|
34
|
-
)
|
|
14
|
+
func toAuthenticationRequest() -> AuthenticationRequest? {
|
|
15
|
+
guard let jobTypeValue = self["jobType"] as? Int,
|
|
16
|
+
let jobType = JobType(rawValue: jobTypeValue),
|
|
17
|
+
let jobId = self["jobId"] as? String,
|
|
18
|
+
let userId = self["userId"] as? String
|
|
19
|
+
else {
|
|
20
|
+
return nil
|
|
35
21
|
}
|
|
36
22
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
23
|
+
let country = self["country"] as? String
|
|
24
|
+
let idType = self["idType"] as? String
|
|
25
|
+
let updateEnrolledImage = self["updateEnrolledImage"] as? Bool
|
|
26
|
+
|
|
27
|
+
return AuthenticationRequest(
|
|
28
|
+
jobType: jobType,
|
|
29
|
+
updateEnrolledImage: updateEnrolledImage,
|
|
30
|
+
jobId: jobId,
|
|
31
|
+
userId: userId,
|
|
32
|
+
country: country,
|
|
33
|
+
idType: idType
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
func toPrepUploadRequest() -> PrepUploadRequest? {
|
|
38
|
+
guard let partnerParamsDict = self["partnerParams"] as? NSDictionary,
|
|
39
|
+
let partnerParams = partnerParamsDict.toPartnerParams(),
|
|
40
|
+
let callbackUrl = self["callbackUrl"] as? String,
|
|
41
|
+
let partnerId = self["partnerId"] as? String,
|
|
42
|
+
let timestamp = self["timestamp"] as? String,
|
|
43
|
+
let signature = self["signature"] as? String
|
|
44
|
+
else {
|
|
45
|
+
return nil
|
|
56
46
|
}
|
|
47
|
+
let allowNewEnroll = self["allowNewEnroll"] as? Bool ?? false
|
|
48
|
+
|
|
49
|
+
return PrepUploadRequest(
|
|
50
|
+
partnerParams: partnerParams,
|
|
51
|
+
callbackUrl: callbackUrl,
|
|
52
|
+
allowNewEnroll: allowNewEnroll,
|
|
53
|
+
partnerId: partnerId,
|
|
54
|
+
sourceSdk: self["sourceSdk"] as? String ?? "ios (react-native)",
|
|
55
|
+
timestamp: timestamp,
|
|
56
|
+
signature: signature
|
|
57
|
+
)
|
|
58
|
+
}
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
let images = imagesArray.compactMap { $0.toUploadImageInfo() }
|
|
63
|
-
let idInfo = (self["idInfo"] as? NSDictionary)?.toIdInfo()
|
|
64
|
-
|
|
65
|
-
return UploadRequest(
|
|
66
|
-
images: images,
|
|
67
|
-
idInfo: idInfo
|
|
68
|
-
)
|
|
60
|
+
func toUploadRequest() -> UploadRequest? {
|
|
61
|
+
guard let imagesArray = self["images"] as? [NSDictionary] else {
|
|
62
|
+
return nil
|
|
69
63
|
}
|
|
64
|
+
let images = imagesArray.compactMap { $0.toUploadImageInfo() }
|
|
65
|
+
let idInfo = (self["idInfo"] as? NSDictionary)?.toIdInfo()
|
|
70
66
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
67
|
+
return UploadRequest(
|
|
68
|
+
images: images,
|
|
69
|
+
idInfo: idInfo
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
func toUploadImageInfo() -> UploadImageInfo? {
|
|
74
|
+
guard let imageTypeIdValue = self["imageTypeId"] as? String,
|
|
75
|
+
let imageTypeId = ImageType(rawValue: imageTypeIdValue),
|
|
76
|
+
let imageName = self["imageName"] as? String
|
|
77
|
+
else {
|
|
78
|
+
return nil
|
|
83
79
|
}
|
|
84
80
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
let lastName = self["lastName"] as? String
|
|
95
|
-
let dob = self["dob"] as? String
|
|
96
|
-
let bankCode = self["bankCode"] as? String
|
|
97
|
-
let entered = self["entered"] as? Bool
|
|
98
|
-
|
|
99
|
-
return IdInfo(
|
|
100
|
-
country: country,
|
|
101
|
-
idType: idType,
|
|
102
|
-
idNumber: idNumber,
|
|
103
|
-
firstName: firstName,
|
|
104
|
-
middleName: middleName,
|
|
105
|
-
lastName: lastName,
|
|
106
|
-
dob: dob,
|
|
107
|
-
bankCode: bankCode,
|
|
108
|
-
entered: entered
|
|
109
|
-
)
|
|
81
|
+
return UploadImageInfo(
|
|
82
|
+
imageTypeId: imageTypeId,
|
|
83
|
+
fileName: imageName
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
func toIdInfo() -> IdInfo? {
|
|
88
|
+
guard let country = self["country"] as? String else {
|
|
89
|
+
return nil
|
|
110
90
|
}
|
|
111
91
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
92
|
+
let idType = self["idType"] as? String
|
|
93
|
+
let idNumber = self["idNumber"] as? String
|
|
94
|
+
let firstName = self["firstName"] as? String
|
|
95
|
+
let middleName = self["middleName"] as? String
|
|
96
|
+
let lastName = self["lastName"] as? String
|
|
97
|
+
let dob = self["dob"] as? String
|
|
98
|
+
let bankCode = self["bankCode"] as? String
|
|
99
|
+
let entered = self["entered"] as? Bool
|
|
100
|
+
|
|
101
|
+
return IdInfo(
|
|
102
|
+
country: country,
|
|
103
|
+
idType: idType,
|
|
104
|
+
idNumber: idNumber,
|
|
105
|
+
firstName: firstName,
|
|
106
|
+
middleName: middleName,
|
|
107
|
+
lastName: lastName,
|
|
108
|
+
dob: dob,
|
|
109
|
+
bankCode: bankCode,
|
|
110
|
+
entered: entered
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
func toConsentInfo() -> ConsentInformation {
|
|
115
|
+
let consentGrantedDate = self["consentGrantedDate"] as? String ?? getCurrentIsoTimestamp()
|
|
116
|
+
let personalDetailsConsentGranted = self["personalDetailsConsentGranted"] as? Bool ?? false
|
|
117
|
+
let contactInfoConsentGranted = self["contactInfoConsentGranted"] as? Bool ?? false
|
|
118
|
+
let documentInfoConsentGranted = self["documentInfoConsentGranted"] as? Bool ?? false
|
|
119
|
+
return ConsentInformation(
|
|
120
|
+
consentGrantedDate: consentGrantedDate,
|
|
121
|
+
personalDetailsConsentGranted: personalDetailsConsentGranted,
|
|
122
|
+
contactInformationConsentGranted: contactInfoConsentGranted,
|
|
123
|
+
documentInformationConsentGranted: documentInfoConsentGranted
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
func toEnhancedKycRequest() -> EnhancedKycRequest? {
|
|
128
|
+
guard let country = self["country"] as? String,
|
|
129
|
+
let idType = self["idType"] as? String,
|
|
130
|
+
let idNumber = self["idNumber"] as? String,
|
|
131
|
+
let firstName = self["firstName"] as? String,
|
|
132
|
+
let middleName = self["middleName"] as? String,
|
|
133
|
+
let lastName = self["lastName"] as? String,
|
|
134
|
+
let dob = self["dob"] as? String,
|
|
135
|
+
let phoneNumber = self["phoneNumber"] as? String,
|
|
136
|
+
let bankCode = self["bankCode"] as? String,
|
|
137
|
+
let callbackUrl = self["callbackUrl"] as? String,
|
|
138
|
+
let partnerParamsDict = self["partnerParams"] as? NSDictionary,
|
|
139
|
+
let partnerParams = partnerParamsDict.toPartnerParams(),
|
|
140
|
+
let timestamp = self["timestamp"] as? String,
|
|
141
|
+
let signature = self["signature"] as? String
|
|
142
|
+
else {
|
|
143
|
+
return nil
|
|
123
144
|
}
|
|
124
145
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
let callbackUrl = self["callbackUrl"] as? String,
|
|
136
|
-
let partnerParamsDict = self["partnerParams"] as? NSDictionary,
|
|
137
|
-
let consentInformation = self["consentInformation"] as? NSDictionary,
|
|
138
|
-
let partnerParams = partnerParamsDict.toPartnerParams(),
|
|
139
|
-
let timestamp = self["timestamp"] as? String,
|
|
140
|
-
let signature = self["signature"] as? String
|
|
141
|
-
else {
|
|
142
|
-
return nil
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return EnhancedKycRequest(
|
|
146
|
-
country: country,
|
|
147
|
-
idType: idType,
|
|
148
|
-
idNumber: idNumber,
|
|
149
|
-
consentInformation: consentInformation.toConsentInfo(),
|
|
150
|
-
firstName: firstName,
|
|
151
|
-
middleName: middleName,
|
|
152
|
-
lastName: lastName,
|
|
153
|
-
dob: dob,
|
|
154
|
-
phoneNumber: phoneNumber,
|
|
155
|
-
bankCode: bankCode,
|
|
156
|
-
callbackUrl: callbackUrl,
|
|
157
|
-
partnerParams: partnerParams,
|
|
158
|
-
sourceSdk: self["sourceSdk"] as? String ?? "ios (react-native)",
|
|
159
|
-
timestamp: timestamp,
|
|
160
|
-
signature: signature
|
|
161
|
-
)
|
|
146
|
+
let consentInfo: ConsentInformation
|
|
147
|
+
if let consentInformation = self["consentInformation"] as? NSDictionary{
|
|
148
|
+
consentInfo = consentInformation.toConsentInfo()
|
|
149
|
+
} else {
|
|
150
|
+
consentInfo = ConsentInformation(
|
|
151
|
+
consentGrantedDate: getCurrentIsoTimestamp(),
|
|
152
|
+
personalDetailsConsentGranted: false,
|
|
153
|
+
contactInformationConsentGranted: false,
|
|
154
|
+
documentInformationConsentGranted: false
|
|
155
|
+
)
|
|
162
156
|
}
|
|
163
157
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
158
|
+
return EnhancedKycRequest(
|
|
159
|
+
country: country,
|
|
160
|
+
idType: idType,
|
|
161
|
+
idNumber: idNumber,
|
|
162
|
+
consentInformation: consentInfo,
|
|
163
|
+
firstName: firstName,
|
|
164
|
+
middleName: middleName,
|
|
165
|
+
lastName: lastName,
|
|
166
|
+
dob: dob,
|
|
167
|
+
phoneNumber: phoneNumber,
|
|
168
|
+
bankCode: bankCode,
|
|
169
|
+
callbackUrl: callbackUrl,
|
|
170
|
+
partnerParams: partnerParams,
|
|
171
|
+
sourceSdk: self["sourceSdk"] as? String ?? "ios (react-native)",
|
|
172
|
+
timestamp: timestamp,
|
|
173
|
+
signature: signature
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
func toJobStatusRequest() -> JobStatusRequest? {
|
|
178
|
+
guard let userId = self["userId"] as? String,
|
|
179
|
+
let jobId = self["jobId"] as? String,
|
|
180
|
+
let includeImageLinks = self["includeImageLinks"] as? Bool,
|
|
181
|
+
let includeHistory = self["includeHistory"] as? Bool,
|
|
182
|
+
let partnerId = self["partnerId"] as? String,
|
|
183
|
+
let timestamp = self["timestamp"] as? String,
|
|
184
|
+
let signature = self["signature"] as? String
|
|
185
|
+
else {
|
|
186
|
+
return nil
|
|
185
187
|
}
|
|
186
188
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
189
|
+
return JobStatusRequest(
|
|
190
|
+
userId: userId,
|
|
191
|
+
jobId: jobId,
|
|
192
|
+
includeImageLinks: includeImageLinks,
|
|
193
|
+
includeHistory: includeHistory,
|
|
194
|
+
partnerId: partnerId,
|
|
195
|
+
timestamp: timestamp,
|
|
196
|
+
signature: signature
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
func toProductsConfigRequest() -> ProductsConfigRequest? {
|
|
201
|
+
guard let partnerId = self["partnerId"] as? String,
|
|
202
|
+
let timestamp = self["timestamp"] as? String,
|
|
203
|
+
let signature = self["signature"] as? String
|
|
204
|
+
else {
|
|
205
|
+
return nil
|
|
200
206
|
}
|
|
201
207
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
)
|
|
208
|
+
return ProductsConfigRequest(
|
|
209
|
+
timestamp: timestamp,
|
|
210
|
+
signature: signature,
|
|
211
|
+
partnerId: partnerId
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
func toPartnerParams() -> PartnerParams? {
|
|
216
|
+
guard let country = self["country"] as? String else {
|
|
217
|
+
return nil
|
|
218
|
+
}
|
|
219
|
+
var jobType: JobType?
|
|
220
|
+
let jobId = self["jobId"] as? String
|
|
221
|
+
let userId = self["userId"] as? String
|
|
222
|
+
if let jobTypeValue = self["jobType"] as? Int {
|
|
223
|
+
jobType = JobType(rawValue: jobTypeValue)
|
|
219
224
|
}
|
|
225
|
+
let extras = self["extras"] as? [String: String] ?? [:]
|
|
226
|
+
return PartnerParams(
|
|
227
|
+
jobId: jobId ?? generateJobId(),
|
|
228
|
+
userId: userId ?? generateUserId(),
|
|
229
|
+
jobType: jobType,
|
|
230
|
+
extras: extras
|
|
231
|
+
)
|
|
232
|
+
}
|
|
220
233
|
}
|
|
221
234
|
|
|
222
235
|
extension Dictionary where Key == String, Value == Any {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
return jsonCompatibleDict
|
|
236
|
+
func toJSONCompatibleDictionary() -> [String: Any] {
|
|
237
|
+
var jsonCompatibleDict = [String: Any]()
|
|
238
|
+
for (key, value) in self {
|
|
239
|
+
if let arrayValue = value as? [Any] {
|
|
240
|
+
jsonCompatibleDict[key] = arrayValue.map { convertToJSONCompatible($0) }
|
|
241
|
+
} else {
|
|
242
|
+
jsonCompatibleDict[key] = convertToJSONCompatible(value)
|
|
243
|
+
}
|
|
233
244
|
}
|
|
245
|
+
return jsonCompatibleDict
|
|
246
|
+
}
|
|
234
247
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
248
|
+
private func convertToJSONCompatible(_ value: Any) -> Any {
|
|
249
|
+
switch value {
|
|
250
|
+
case let url as URL:
|
|
251
|
+
return url.absoluteString
|
|
252
|
+
case let bool as Bool:
|
|
253
|
+
return bool
|
|
254
|
+
case let string as String:
|
|
255
|
+
return string
|
|
256
|
+
case let number as NSNumber:
|
|
257
|
+
return number
|
|
258
|
+
case let dict as [String: Any]:
|
|
259
|
+
return dict.toJSONCompatibleDictionary()
|
|
260
|
+
default:
|
|
261
|
+
return String(describing: value)
|
|
250
262
|
}
|
|
263
|
+
}
|
|
251
264
|
}
|
|
@@ -8,10 +8,9 @@ struct SmileIDBiometricKYCView: View, SmileIDFileUtilsProtocol {
|
|
|
8
8
|
var smileIDUIViewDelegate: SmileIDUIViewDelegate
|
|
9
9
|
var body: some View {
|
|
10
10
|
NavigationView {
|
|
11
|
-
if let idInfo = product.idInfo
|
|
11
|
+
if let idInfo = product.idInfo {
|
|
12
12
|
SmileID.biometricKycScreen(
|
|
13
13
|
idInfo: idInfo,
|
|
14
|
-
consentInformation: consentInformation, // already validated in the SmileIDBiometricKYCViewManager
|
|
15
14
|
userId: product.userId ?? generateUserId(),
|
|
16
15
|
jobId: product.jobId ?? generateJobId(),
|
|
17
16
|
allowNewEnroll: product.allowNewEnroll,
|
|
@@ -20,6 +19,7 @@ struct SmileIDBiometricKYCView: View, SmileIDFileUtilsProtocol {
|
|
|
20
19
|
showInstructions: product.showInstructions,
|
|
21
20
|
useStrictMode: product.useStrictMode,
|
|
22
21
|
extraPartnerParams: product.extraPartnerParams as [String: String],
|
|
22
|
+
consentInformation: product.consentInformation, // already validated in the SmileIDBiometricKYCViewManager
|
|
23
23
|
delegate: self
|
|
24
24
|
)
|
|
25
25
|
} else {
|
|
@@ -8,11 +8,10 @@ struct SmileIDEnhancedDocumentVerificationView: View, SmileIDFileUtilsProtocol {
|
|
|
8
8
|
var smileIDUIViewDelegate: SmileIDUIViewDelegate
|
|
9
9
|
var body: some View {
|
|
10
10
|
NavigationView {
|
|
11
|
-
if let countryCode = product.countryCode
|
|
11
|
+
if let countryCode = product.countryCode {
|
|
12
12
|
SmileID.enhancedDocumentVerificationScreen(
|
|
13
13
|
userId: product.userId ?? generateUserId(),
|
|
14
14
|
jobId: product.jobId ?? generateJobId(),
|
|
15
|
-
consentInformation: consentInformation,
|
|
16
15
|
allowNewEnroll: product.allowNewEnroll,
|
|
17
16
|
countryCode: countryCode, // already validated in the view manager
|
|
18
17
|
documentType: product.documentType,
|
|
@@ -26,6 +25,7 @@ struct SmileIDEnhancedDocumentVerificationView: View, SmileIDFileUtilsProtocol {
|
|
|
26
25
|
showAttribution: product.showAttribution,
|
|
27
26
|
useStrictMode: product.useStrictMode,
|
|
28
27
|
extraPartnerParams: product.extraPartnerParams as [String: String],
|
|
28
|
+
consentInformation: product.consentInformation,
|
|
29
29
|
delegate: self
|
|
30
30
|
)
|
|
31
31
|
} else {
|