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