@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.
Files changed (66) hide show
  1. package/android/build.gradle +2 -1
  2. package/android/gradle.properties +1 -1
  3. package/android/src/main/java/com/smileidentity/react/Mapper.kt +7 -2
  4. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +10 -3
  5. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +1 -1
  6. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +13 -5
  7. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.kt +1 -0
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt +1 -0
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.kt +1 -0
  10. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +2 -0
  11. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +2 -0
  12. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +2 -0
  13. package/android/src/main/java/com/smileidentity/react/views/SmileIDSelfieView.kt +48 -0
  14. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationEnhancedView.kt +5 -30
  15. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +7 -32
  16. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +30 -189
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentEnhancedView.kt +5 -35
  18. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +7 -40
  19. package/ios/RNSmileID.swift +19 -0
  20. package/ios/Utils/SmileIDDictExt.swift +242 -216
  21. package/ios/Utils/SmileIDUtils.swift +9 -0
  22. package/ios/View/SmileIDBiometricKYCView.swift +4 -2
  23. package/ios/View/SmileIDConsentView.swift +1 -1
  24. package/ios/View/SmileIDDocumentCaptureView.swift +2 -2
  25. package/ios/View/SmileIDDocumentVerificationView.swift +2 -1
  26. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +3 -1
  27. package/ios/View/SmileIDSmartSelfieAuthEnhancedView.swift +35 -34
  28. package/ios/View/SmileIDSmartSelfieAuthView.swift +3 -1
  29. package/ios/View/SmileIDSmartSelfieCaptureView.swift +28 -34
  30. package/ios/View/SmileIDSmartSelfieEnrollmentEnhancedView.swift +2 -1
  31. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +1 -1
  32. package/ios/ViewManagers/SmileIDBaseViewManager.swift +1 -1
  33. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +35 -24
  34. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +1 -0
  35. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +52 -40
  36. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.swift +7 -2
  37. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +1 -0
  38. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.swift +1 -0
  39. package/ios/ViewModels/SmileIDProductModel.swift +29 -22
  40. package/lib/commonjs/SmileIDBiometricKYCView.js +2 -11
  41. package/lib/commonjs/SmileIDBiometricKYCView.js.map +1 -1
  42. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js +2 -11
  43. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  44. package/lib/commonjs/index.js.map +1 -1
  45. package/lib/commonjs/types.js +33 -2
  46. package/lib/commonjs/types.js.map +1 -1
  47. package/lib/module/SmileIDBiometricKYCView.js +2 -11
  48. package/lib/module/SmileIDBiometricKYCView.js.map +1 -1
  49. package/lib/module/SmileIDEnhancedDocumentVerificationView.js +2 -11
  50. package/lib/module/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  51. package/lib/module/index.js.map +1 -1
  52. package/lib/module/types.js +31 -1
  53. package/lib/module/types.js.map +1 -1
  54. package/lib/typescript/SmileIDBiometricKYCView.d.ts.map +1 -1
  55. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts +2 -2
  56. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts.map +1 -1
  57. package/lib/typescript/index.d.ts +2 -2
  58. package/lib/typescript/index.d.ts.map +1 -1
  59. package/lib/typescript/types.d.ts +19 -4
  60. package/lib/typescript/types.d.ts.map +1 -1
  61. package/package.json +1 -1
  62. package/react-native-smile-id.podspec +1 -1
  63. package/src/SmileIDBiometricKYCView.tsx +2 -9
  64. package/src/SmileIDEnhancedDocumentVerificationView.tsx +6 -16
  65. package/src/index.tsx +2 -0
  66. 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) : SmileIDView(context) {
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
- ) {res ->
32
- viewScope.launch {
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
  }
@@ -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) : SmileIDView(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
- ) { res ->
34
- viewScope.launch {
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
  }
@@ -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
- 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
- )
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
- 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
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
- )
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
- 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
46
- }
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
- )
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
- func toUploadRequest() -> UploadRequest? {
59
- guard let imagesArray = self["images"] as? [NSDictionary] else {
60
- return nil
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
- )
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
- 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
77
- }
78
-
79
- return UploadImageInfo(
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
- func toIdInfo() -> IdInfo? {
86
- guard let country = self["country"] as? String else {
87
- return nil
88
- }
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
- )
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
- func toEnhancedKycRequest() -> EnhancedKycRequest? {
113
- guard let country = self["country"] as? String,
114
- let idType = self["idType"] as? String,
115
- let idNumber = self["idNumber"] as? String,
116
- let firstName = self["firstName"] as? String,
117
- let middleName = self["middleName"] as? String,
118
- let lastName = self["lastName"] as? String,
119
- let dob = self["dob"] as? String,
120
- let phoneNumber = self["phoneNumber"] as? String,
121
- let bankCode = self["bankCode"] as? String,
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
- func toJobStatusRequest() -> JobStatusRequest? {
150
- guard let userId = self["userId"] as? String,
151
- let jobId = self["jobId"] as? String,
152
- let includeImageLinks = self["includeImageLinks"] as? Bool,
153
- let includeHistory = self["includeHistory"] as? Bool,
154
- let partnerId = self["partnerId"] as? String,
155
- let timestamp = self["timestamp"] as? String,
156
- let signature = self["signature"] as? String
157
- else {
158
- return nil
159
- }
160
-
161
- return JobStatusRequest(
162
- userId: userId,
163
- jobId: jobId,
164
- includeImageLinks: includeImageLinks,
165
- includeHistory: includeHistory,
166
- partnerId: partnerId,
167
- timestamp: timestamp,
168
- signature: signature
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
- func toProductsConfigRequest() -> ProductsConfigRequest? {
173
- guard let partnerId = self["partnerId"] as? String,
174
- let timestamp = self["timestamp"] as? String,
175
- let signature = self["signature"] as? String
176
- else {
177
- return nil
178
- }
179
-
180
- return ProductsConfigRequest(
181
- timestamp: timestamp,
182
- signature: signature,
183
- partnerId: partnerId
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
- func toPartnerParams() -> PartnerParams? {
188
- guard let country = self["country"] as? String else {
189
- return nil
190
- }
191
- var jobType: JobType?
192
- let jobId = self["jobId"] as? String
193
- let userId = self["userId"] as? String
194
- if let jobTypeValue = self["jobType"] as? Int {
195
- jobType = JobType(rawValue: jobTypeValue)
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
- func toJSONCompatibleDictionary() -> [String: Any] {
209
- var jsonCompatibleDict = [String: Any]()
210
- for (key, value) in self {
211
- if let arrayValue = value as? [Any] {
212
- jsonCompatibleDict[key] = arrayValue.map { convertToJSONCompatible($0) }
213
- } else {
214
- jsonCompatibleDict[key] = convertToJSONCompatible(value)
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
- private func convertToJSONCompatible(_ value: Any) -> Any {
221
- switch value {
222
- case let url as URL:
223
- return url.absoluteString
224
- case let bool as Bool:
225
- return bool
226
- case let string as String:
227
- return string
228
- case let number as NSNumber:
229
- return number
230
- case let dict as [String: Any]:
231
- return dict.toJSONCompatibleDictionary()
232
- default:
233
- return String(describing: value)
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
  }