@smile_identity/react-native 10.2.3 → 10.2.4

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 (139) hide show
  1. package/android/build.gradle +4 -1
  2. package/android/gradle.properties +1 -1
  3. package/android/src/main/java/com/smileidentity/react/Mapper.kt +19 -2
  4. package/android/src/main/java/com/smileidentity/react/fragments/SmileCaptureFragment.kt +56 -0
  5. package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +16 -0
  6. package/android/src/main/java/com/smileidentity/react/viewmanagers/BaseSmileIDViewManager.kt +130 -0
  7. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +22 -46
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +27 -52
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentCaptureViewManager.kt +15 -40
  10. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +23 -49
  11. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +28 -47
  12. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.kt +12 -37
  13. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +16 -40
  14. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt +15 -38
  15. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.kt +13 -38
  16. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +15 -44
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +7 -0
  18. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +8 -0
  19. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +38 -25
  20. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentEnhancedView.kt +29 -21
  21. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +35 -28
  22. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +11 -10
  23. package/android/src/main/res/values/colors.xml +14 -0
  24. package/android/src/main/res/values/strings.xml +91 -0
  25. package/ios/RNDelegates/SmileIDUIViewDelegate.swift +2 -0
  26. package/ios/RNSmileID.swift +470 -471
  27. package/ios/Utils/FileUtils.swift +17 -17
  28. package/ios/Utils/SmileIDDictExt.swift +14 -9
  29. package/ios/View/BaseSmileIDView.swift +6 -5
  30. package/ios/View/SmileIDBiometricKYCView.swift +54 -54
  31. package/ios/View/SmileIDConsentView.swift +2 -1
  32. package/ios/View/SmileIDDocumentCaptureView.swift +64 -64
  33. package/ios/View/SmileIDDocumentVerificationView.swift +51 -51
  34. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +51 -50
  35. package/ios/View/SmileIDSmartSelfieAuthEnhancedView.swift +34 -33
  36. package/ios/View/SmileIDSmartSelfieAuthView.swift +35 -34
  37. package/ios/View/SmileIDSmartSelfieCaptureView.swift +55 -55
  38. package/ios/View/SmileIDSmartSelfieEnrollmentEnhancedView.swift +35 -34
  39. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +37 -36
  40. package/ios/ViewManagers/SmileIDBaseViewManager.swift +22 -5
  41. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.m +4 -1
  42. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +2 -2
  43. package/ios/ViewManagers/SmileIDConsentViewManager.m +4 -1
  44. package/ios/ViewManagers/SmileIDConsentViewManager.swift +2 -2
  45. package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.m +4 -1
  46. package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.swift +19 -19
  47. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.m +4 -1
  48. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +40 -40
  49. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.m +4 -1
  50. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +40 -40
  51. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.m +4 -1
  52. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.swift +16 -16
  53. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.m +4 -1
  54. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +20 -20
  55. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.m +4 -1
  56. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +27 -26
  57. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.m +4 -1
  58. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.swift +16 -16
  59. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.m +4 -1
  60. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +20 -20
  61. package/ios/ViewModels/SmileIDProductModel.swift +5 -5
  62. package/lib/commonjs/SmileIDBiometricKYCView.js +18 -29
  63. package/lib/commonjs/SmileIDBiometricKYCView.js.map +1 -1
  64. package/lib/commonjs/SmileIDConsentView.js +9 -29
  65. package/lib/commonjs/SmileIDConsentView.js.map +1 -1
  66. package/lib/commonjs/SmileIDDocumentCaptureView.js +9 -29
  67. package/lib/commonjs/SmileIDDocumentCaptureView.js.map +1 -1
  68. package/lib/commonjs/SmileIDDocumentVerificationView.js +9 -29
  69. package/lib/commonjs/SmileIDDocumentVerificationView.js.map +1 -1
  70. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js +17 -28
  71. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  72. package/lib/commonjs/SmileIDSmartSelfieAuthenticationEnhancedView.js +9 -29
  73. package/lib/commonjs/SmileIDSmartSelfieAuthenticationEnhancedView.js.map +1 -1
  74. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js +9 -29
  75. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js.map +1 -1
  76. package/lib/commonjs/SmileIDSmartSelfieCaptureView.js +9 -29
  77. package/lib/commonjs/SmileIDSmartSelfieCaptureView.js.map +1 -1
  78. package/lib/commonjs/SmileIDSmartSelfieEnrollmentEnhancedView.js +9 -29
  79. package/lib/commonjs/SmileIDSmartSelfieEnrollmentEnhancedView.js.map +1 -1
  80. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js +9 -29
  81. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js.map +1 -1
  82. package/lib/commonjs/useSmileIDView.js +65 -0
  83. package/lib/commonjs/useSmileIDView.js.map +1 -0
  84. package/lib/module/SmileIDBiometricKYCView.js +18 -26
  85. package/lib/module/SmileIDBiometricKYCView.js.map +1 -1
  86. package/lib/module/SmileIDConsentView.js +9 -26
  87. package/lib/module/SmileIDConsentView.js.map +1 -1
  88. package/lib/module/SmileIDDocumentCaptureView.js +9 -26
  89. package/lib/module/SmileIDDocumentCaptureView.js.map +1 -1
  90. package/lib/module/SmileIDDocumentVerificationView.js +9 -26
  91. package/lib/module/SmileIDDocumentVerificationView.js.map +1 -1
  92. package/lib/module/SmileIDEnhancedDocumentVerificationView.js +17 -25
  93. package/lib/module/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  94. package/lib/module/SmileIDSmartSelfieAuthenticationEnhancedView.js +9 -26
  95. package/lib/module/SmileIDSmartSelfieAuthenticationEnhancedView.js.map +1 -1
  96. package/lib/module/SmileIDSmartSelfieAuthenticationView.js +9 -26
  97. package/lib/module/SmileIDSmartSelfieAuthenticationView.js.map +1 -1
  98. package/lib/module/SmileIDSmartSelfieCaptureView.js +9 -26
  99. package/lib/module/SmileIDSmartSelfieCaptureView.js.map +1 -1
  100. package/lib/module/SmileIDSmartSelfieEnrollmentEnhancedView.js +9 -26
  101. package/lib/module/SmileIDSmartSelfieEnrollmentEnhancedView.js.map +1 -1
  102. package/lib/module/SmileIDSmartSelfieEnrollmentView.js +9 -26
  103. package/lib/module/SmileIDSmartSelfieEnrollmentView.js.map +1 -1
  104. package/lib/module/useSmileIDView.js +58 -0
  105. package/lib/module/useSmileIDView.js.map +1 -0
  106. package/lib/typescript/SmileIDBiometricKYCView.d.ts +3 -6
  107. package/lib/typescript/SmileIDBiometricKYCView.d.ts.map +1 -1
  108. package/lib/typescript/SmileIDConsentView.d.ts +3 -6
  109. package/lib/typescript/SmileIDConsentView.d.ts.map +1 -1
  110. package/lib/typescript/SmileIDDocumentCaptureView.d.ts +3 -6
  111. package/lib/typescript/SmileIDDocumentCaptureView.d.ts.map +1 -1
  112. package/lib/typescript/SmileIDDocumentVerificationView.d.ts +3 -6
  113. package/lib/typescript/SmileIDDocumentVerificationView.d.ts.map +1 -1
  114. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts +3 -6
  115. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts.map +1 -1
  116. package/lib/typescript/SmileIDSmartSelfieAuthenticationEnhancedView.d.ts +3 -6
  117. package/lib/typescript/SmileIDSmartSelfieAuthenticationEnhancedView.d.ts.map +1 -1
  118. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts +3 -6
  119. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts.map +1 -1
  120. package/lib/typescript/SmileIDSmartSelfieCaptureView.d.ts +3 -6
  121. package/lib/typescript/SmileIDSmartSelfieCaptureView.d.ts.map +1 -1
  122. package/lib/typescript/SmileIDSmartSelfieEnrollmentEnhancedView.d.ts +3 -6
  123. package/lib/typescript/SmileIDSmartSelfieEnrollmentEnhancedView.d.ts.map +1 -1
  124. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts +3 -6
  125. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts.map +1 -1
  126. package/lib/typescript/useSmileIDView.d.ts +12 -0
  127. package/lib/typescript/useSmileIDView.d.ts.map +1 -0
  128. package/package.json +1 -1
  129. package/src/SmileIDBiometricKYCView.tsx +14 -30
  130. package/src/SmileIDConsentView.tsx +7 -30
  131. package/src/SmileIDDocumentCaptureView.tsx +9 -33
  132. package/src/SmileIDDocumentVerificationView.tsx +9 -36
  133. package/src/SmileIDEnhancedDocumentVerificationView.tsx +23 -35
  134. package/src/SmileIDSmartSelfieAuthenticationEnhancedView.tsx +17 -36
  135. package/src/SmileIDSmartSelfieAuthenticationView.tsx +10 -37
  136. package/src/SmileIDSmartSelfieCaptureView.tsx +9 -33
  137. package/src/SmileIDSmartSelfieEnrollmentEnhancedView.tsx +14 -36
  138. package/src/SmileIDSmartSelfieEnrollmentView.tsx +10 -37
  139. package/src/useSmileIDView.tsx +88 -0
@@ -1,24 +1,24 @@
1
1
  protocol SmileIDFileUtilsProtocol {
2
- var fileManager: FileManager { get set }
3
- func getFilePath(fileName: String) -> String?
2
+ var fileManager: FileManager { get set }
3
+ func getFilePath(fileName: String) -> String?
4
4
  }
5
5
 
6
6
  extension SmileIDFileUtilsProtocol {
7
- func getSmileIDDirectory() -> String? {
8
- guard let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
9
- print("Unable to access documents directory")
10
- return nil
7
+ func getSmileIDDirectory() -> String? {
8
+ guard let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else {
9
+ print("Unable to access documents directory")
10
+ return nil
11
+ }
12
+
13
+ let smileIDDirectory = documentsDirectory.appendingPathComponent("SmileID")
14
+ return smileIDDirectory.absoluteURL.absoluteString
11
15
  }
12
-
13
- let smileIDDirectory = documentsDirectory.appendingPathComponent("SmileID")
14
- return smileIDDirectory.absoluteURL.absoluteString
15
- }
16
-
17
- func getFilePath(fileName: String) -> String? {
18
- guard let smileIDDirectory = getSmileIDDirectory() else {
19
- return nil
16
+
17
+ func getFilePath(fileName: String) -> String? {
18
+ guard let smileIDDirectory = getSmileIDDirectory() else {
19
+ return nil
20
+ }
21
+
22
+ return (smileIDDirectory as NSString).appendingPathComponent(fileName)
20
23
  }
21
-
22
- return (smileIDDirectory as NSString).appendingPathComponent(fileName)
23
- }
24
24
  }
@@ -2,21 +2,21 @@ import Foundation
2
2
  import SmileID
3
3
 
4
4
  extension NSDictionary {
5
-
6
5
  func toConfig() -> Config {
7
- return Config (
6
+ return Config(
8
7
  partnerId: (self["partnerId"] as? String)!,
9
8
  authToken: (self["authToken"] as? String)!,
10
9
  prodLambdaUrl: (self["prodLambdaUrl"] as? String)!,
11
10
  testLambdaUrl: (self["testLambdaUrl"] as? String)!
12
11
  )
13
12
  }
14
-
13
+
15
14
  func toAuthenticationRequest() -> AuthenticationRequest? {
16
15
  guard let jobTypeValue = self["jobType"] as? Int,
17
16
  let jobType = JobType(rawValue: jobTypeValue),
18
17
  let jobId = self["jobId"] as? String,
19
- let userId = self["userId"] as? String else {
18
+ let userId = self["userId"] as? String
19
+ else {
20
20
  return nil
21
21
  }
22
22
 
@@ -40,7 +40,8 @@ extension NSDictionary {
40
40
  let callbackUrl = self["callbackUrl"] as? String,
41
41
  let partnerId = self["partnerId"] as? String,
42
42
  let timestamp = self["timestamp"] as? String,
43
- let signature = self["signature"] as? String else {
43
+ let signature = self["signature"] as? String
44
+ else {
44
45
  return nil
45
46
  }
46
47
 
@@ -70,7 +71,8 @@ extension NSDictionary {
70
71
  func toUploadImageInfo() -> UploadImageInfo? {
71
72
  guard let imageTypeIdValue = self["imageTypeId"] as? String,
72
73
  let imageTypeId = ImageType(rawValue: imageTypeIdValue),
73
- let imageName = self["imageName"] as? String else {
74
+ let imageName = self["imageName"] as? String
75
+ else {
74
76
  return nil
75
77
  }
76
78
 
@@ -121,7 +123,8 @@ extension NSDictionary {
121
123
  let partnerParamsDict = self["partnerParams"] as? NSDictionary,
122
124
  let partnerParams = partnerParamsDict.toPartnerParams(),
123
125
  let timestamp = self["timestamp"] as? String,
124
- let signature = self["signature"] as? String else {
126
+ let signature = self["signature"] as? String
127
+ else {
125
128
  return nil
126
129
  }
127
130
 
@@ -150,7 +153,8 @@ extension NSDictionary {
150
153
  let includeHistory = self["includeHistory"] as? Bool,
151
154
  let partnerId = self["partnerId"] as? String,
152
155
  let timestamp = self["timestamp"] as? String,
153
- let signature = self["signature"] as? String else {
156
+ let signature = self["signature"] as? String
157
+ else {
154
158
  return nil
155
159
  }
156
160
 
@@ -168,7 +172,8 @@ extension NSDictionary {
168
172
  func toProductsConfigRequest() -> ProductsConfigRequest? {
169
173
  guard let partnerId = self["partnerId"] as? String,
170
174
  let timestamp = self["timestamp"] as? String,
171
- let signature = self["signature"] as? String else {
175
+ let signature = self["signature"] as? String
176
+ else {
172
177
  return nil
173
178
  }
174
179
 
@@ -3,9 +3,9 @@ import SwiftUI
3
3
 
4
4
  class BaseSmileIDView: UIView {
5
5
  typealias ContentView = AnyView
6
- var contentView : AnyView?
6
+ var contentView: AnyView?
7
7
  private var _onResult: RCTBubblingEventBlock?
8
- var product : SmileIDProductModel?
8
+ var product: SmileIDProductModel?
9
9
 
10
10
  @objc var onResult: RCTBubblingEventBlock? {
11
11
  get {
@@ -19,7 +19,7 @@ class BaseSmileIDView: UIView {
19
19
  }
20
20
  }
21
21
 
22
- init(frame: CGRect,contentView:AnyView,product:SmileIDProductModel) {
22
+ init(frame: CGRect, contentView: AnyView, product: SmileIDProductModel) {
23
23
  self.contentView = contentView
24
24
  self.product = product
25
25
  super.init(frame: frame)
@@ -34,7 +34,7 @@ class BaseSmileIDView: UIView {
34
34
  private func commonInit() {
35
35
  // Perform initialization tasks here
36
36
  // For example, setup subviews, add constraints, configure appearance
37
- let hostingController = UIHostingController(rootView:contentView)
37
+ let hostingController = UIHostingController(rootView: contentView)
38
38
  let hostingView = hostingController.view!
39
39
  hostingView.translatesAutoresizingMaskIntoConstraints = false
40
40
  addSubview(hostingView)
@@ -42,9 +42,10 @@ class BaseSmileIDView: UIView {
42
42
  hostingView.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
43
43
  hostingView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
44
44
  hostingView.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
45
+ hostingView.overrideUserInterfaceStyle = .light
45
46
  }
46
47
 
47
- func getView(product:SmileIDProductModel) -> AnyView {
48
+ func getView(product _: SmileIDProductModel) -> AnyView {
48
49
  fatalError("Must be implemented by subclass")
49
50
  }
50
51
  }
@@ -2,62 +2,62 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDBiometricKYCView: View ,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body: some View{
9
- NavigationView {
10
- if let idInfo = product.idInfo {
11
- SmileID.biometricKycScreen(
12
- idInfo: idInfo, // already validated in the SmileIDBiometricKYCViewManager
13
- userId: product.userId ?? generateUserId(),
14
- jobId: product.jobId ?? generateJobId(),
15
- allowNewEnroll: product.allowNewEnroll,
16
- allowAgentMode: product.allowAgentMode,
17
- showAttribution: product.showAttribution,
18
- showInstructions: product.showInstructions,
19
- extraPartnerParams: product.extraPartnerParams as [String: String],
20
- delegate: self
21
- )
22
- } else {
23
- // This exists for debugging purposes and will show in extreme cases
24
- // when the params were not set NB: setParams in the viewmanager will always
25
- // return an error if the required data is missing
26
- Text("An error has occured")
27
- }
28
- }.navigationViewStyle(StackNavigationViewStyle())
29
- }
5
+ struct SmileIDBiometricKYCView: View, SmileIDFileUtilsProtocol {
6
+ var fileManager: FileManager = Foundation.FileManager.default
7
+ @ObservedObject var product: SmileIDProductModel
8
+ var smileIDUIViewDelegate: SmileIDUIViewDelegate
9
+ var body: some View {
10
+ NavigationView {
11
+ if let idInfo = product.idInfo {
12
+ SmileID.biometricKycScreen(
13
+ idInfo: idInfo, // already validated in the SmileIDBiometricKYCViewManager
14
+ userId: product.userId ?? generateUserId(),
15
+ jobId: product.jobId ?? generateJobId(),
16
+ allowNewEnroll: product.allowNewEnroll,
17
+ allowAgentMode: product.allowAgentMode,
18
+ showAttribution: product.showAttribution,
19
+ showInstructions: product.showInstructions,
20
+ extraPartnerParams: product.extraPartnerParams as [String: String],
21
+ delegate: self
22
+ )
23
+ } else {
24
+ // This exists for debugging purposes and will show in extreme cases
25
+ // when the params were not set NB: setParams in the viewmanager will always
26
+ // return an error if the required data is missing
27
+ Text("An error has occured")
28
+ }
29
+ }.navigationViewStyle(StackNavigationViewStyle())
30
+ }
30
31
  }
31
32
 
32
33
  extension SmileIDBiometricKYCView: BiometricKycResultDelegate {
33
- func didSucceed(selfieImage: URL, livenessImages: [URL], didSubmitBiometricJob: Bool) {
34
-
35
- let params: [String: Any] = [
36
- "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
37
- "livenessFiles": livenessImages.map {
38
- getFilePath(fileName: $0.absoluteString)
39
- },
40
- "didSubmitBiometricKycJob": didSubmitBiometricJob,
41
- ]
42
-
43
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
44
- product.onResult?(["error": SmileIDError.unknown("SmileIDBiometricKYCView encoding error")])
45
- return
34
+ func didSucceed(selfieImage: URL, livenessImages: [URL], didSubmitBiometricJob: Bool) {
35
+ let params: [String: Any] = [
36
+ "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
37
+ "livenessFiles": livenessImages.map {
38
+ getFilePath(fileName: $0.absoluteString)
39
+ },
40
+ "didSubmitBiometricKycJob": didSubmitBiometricJob,
41
+ ]
42
+
43
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
44
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDBiometricKYCView encoding error"))
45
+ return
46
+ }
47
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
48
+ }
49
+
50
+ func didSucceed(
51
+ selfieImage _: URL,
52
+ livenessImages _: [URL],
53
+ jobStatusResponse: BiometricKycJobStatusResponse
54
+ ) {
55
+ let encoder = JSONEncoder()
56
+ let jsonData = try! encoder.encode(jobStatusResponse)
57
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
58
+ }
59
+
60
+ func didError(error: Error) {
61
+ smileIDUIViewDelegate.onError(error: error.localizedDescription)
46
62
  }
47
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
48
- }
49
-
50
- func didSucceed(
51
- selfieImage _: URL,
52
- livenessImages _: [URL],
53
- jobStatusResponse: BiometricKycJobStatusResponse
54
- ) {
55
- let encoder = JSONEncoder()
56
- let jsonData = try! encoder.encode(jobStatusResponse)
57
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
58
- }
59
-
60
- func didError(error: Error) {
61
- product.onResult?(["error": error.localizedDescription])
62
- }
63
63
  }
@@ -3,8 +3,9 @@ import SmileID
3
3
  import SwiftUI
4
4
 
5
5
  struct SmileIDConsentView: View {
6
- @ObservedObject var product : SmileIDProductModel
6
+ @ObservedObject var product: SmileIDProductModel
7
7
  var onResult: RCTBubblingEventBlock?
8
+ var smileIDUIViewDelegate: SmileIDUIViewDelegate
8
9
  var body: some View {
9
10
  NavigationView {
10
11
  if let partnerIcon = product.partnerIcon,
@@ -3,80 +3,80 @@ import SmileID
3
3
  import SwiftUI
4
4
 
5
5
  struct DocumentCaptureResult {
6
- let documentFile: URL? // Using URL to represent file paths in Swift
6
+ let documentFile: URL? // Using URL to represent file paths in Swift
7
7
 
8
- init(documentFile: URL?) {
9
- self.documentFile = documentFile
10
- }
8
+ init(documentFile: URL?) {
9
+ self.documentFile = documentFile
10
+ }
11
11
  }
12
12
 
13
13
  struct SmileIDDocumentCaptureView: View {
14
- @ObservedObject var product : SmileIDProductModel
15
- @State private var localMetadata = LocalMetadata()
16
- var body: some View {
17
- NavigationView {
18
- DocumentCaptureScreen(
19
- side: self.product.front ? .front : .back,
20
- showInstructions: self.product.showInstructions,
21
- showAttribution: self.product.showAttribution,
22
- allowGallerySelection: self.product.allowGalleryUpload,
23
- showSkipButton: false,
24
- instructionsHeroImage: self.product.front ? SmileIDResourcesHelper.DocVFrontHero : SmileIDResourcesHelper.DocVBackHero,
25
- instructionsTitleText: SmileIDResourcesHelper.localizedString(
26
- for: self.product.front ? "Instructions.Document.Front.Header": "Instructions.Document.Back.Header"
27
- ),
28
- instructionsSubtitleText: SmileIDResourcesHelper.localizedString(
29
- for: self.product.front ? "Instructions.Document.Front.Callout": "Instructions.Document.Back.Callout"
30
- ),
31
- captureTitleText: SmileIDResourcesHelper.localizedString(for: "Action.TakePhoto"),
32
- knownIdAspectRatio: self.product.idAspectRatio,
33
- showConfirmation:self.product.showConfirmation,
34
- onConfirm: onConfirmed,
35
- onError: onError,
36
- onSkip: onSkip
37
- )
38
- }.navigationViewStyle(StackNavigationViewStyle()).environmentObject(localMetadata)
39
- }
40
-
41
- func onConfirmed(data: Data) {
42
- do {
43
- // Attempt to create the document file
44
- let url = try LocalStorage.createDocumentFile(
45
- jobId: self.product.jobId ?? generateJobId(),
46
- fileType: self.product.front ? FileType.documentFront : FileType.documentBack,
47
- document: data
48
- )
14
+ @ObservedObject var product: SmileIDProductModel
15
+ @State private var localMetadata = LocalMetadata()
16
+ var smileIDUIViewDelegate: SmileIDUIViewDelegate
17
+ var body: some View {
18
+ NavigationView {
19
+ DocumentCaptureScreen(
20
+ side: self.product.front ? .front : .back,
21
+ showInstructions: self.product.showInstructions,
22
+ showAttribution: self.product.showAttribution,
23
+ allowGallerySelection: self.product.allowGalleryUpload,
24
+ showSkipButton: false,
25
+ instructionsHeroImage: self.product.front ? SmileIDResourcesHelper.DocVFrontHero : SmileIDResourcesHelper.DocVBackHero,
26
+ instructionsTitleText: SmileIDResourcesHelper.localizedString(
27
+ for: self.product.front ? "Instructions.Document.Front.Header" : "Instructions.Document.Back.Header"
28
+ ),
29
+ instructionsSubtitleText: SmileIDResourcesHelper.localizedString(
30
+ for: self.product.front ? "Instructions.Document.Front.Callout" : "Instructions.Document.Back.Callout"
31
+ ),
32
+ captureTitleText: SmileIDResourcesHelper.localizedString(for: "Action.TakePhoto"),
33
+ knownIdAspectRatio: self.product.idAspectRatio,
34
+ showConfirmation: self.product.showConfirmation,
35
+ onConfirm: onConfirmed,
36
+ onError: onError,
37
+ onSkip: onSkip
38
+ )
39
+ }.navigationViewStyle(StackNavigationViewStyle()).environmentObject(localMetadata)
40
+ }
49
41
 
42
+ func onConfirmed(data: Data) {
43
+ do {
44
+ // Attempt to create the document file
45
+ let url = try LocalStorage.createDocumentFile(
46
+ jobId: product.jobId ?? generateJobId(),
47
+ fileType: product.front ? FileType.documentFront : FileType.documentBack,
48
+ document: data
49
+ )
50
50
 
51
- // Create params dictionary
52
- var params: [String: Any] = [
53
- "documentFrontImage": product.front ? url.absoluteString : nil ,
54
- "documentBackImage": product.front ? nil : url.absoluteString
55
- ]
51
+ // Create params dictionary
52
+ var params: [String: Any] = [
53
+ "documentFrontImage": product.front ? url.absoluteString : nil,
54
+ "documentBackImage": product.front ? nil : url.absoluteString,
55
+ ]
56
56
 
57
- // Convert params to JSON-compatible dictionary and serialize to JSON
58
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted),
59
- let jsonString = String(data: jsonData, encoding: .utf8) else {
60
- // If serialization fails, call the error handler
61
- product.onResult?(["error": SmileIDError.unknown("SmileIDDocumentCaptureView encoding error")])
62
- return
63
- }
57
+ // Convert params to JSON-compatible dictionary and serialize to JSON
58
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted),
59
+ let jsonString = String(data: jsonData, encoding: .utf8)
60
+ else {
61
+ // If serialization fails, call the error handler
62
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDDocumentCaptureView encoding error"))
63
+ return
64
+ }
64
65
 
65
- // Send the result as a JSON string
66
- product.onResult?(["result": jsonString])
66
+ // Send the result as a JSON string
67
+ smileIDUIViewDelegate.onResult(smileResult: jsonString)
67
68
 
68
- } catch {
69
- // Handle file creation error
70
- product.onResult?(["error": SmileIDError.unknown("Error creating document file: \(error.localizedDescription)")])
69
+ } catch {
70
+ // Handle file creation error
71
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("Error creating document file: \(error.localizedDescription)"))
72
+ }
71
73
  }
72
- }
73
74
 
74
- func onError(error: Error) {
75
- product.onResult?(["error": error.localizedDescription])
76
- }
75
+ func onError(error: Error) {
76
+ smileIDUIViewDelegate.onError(error: error.localizedDescription)
77
+ }
77
78
 
78
- func onSkip() {
79
- product.onResult?(["error": SmileIDError.unknown("SmileIDDocumentCaptureView skipped")])
80
- }
79
+ func onSkip() {
80
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDDocumentCaptureView skipped"))
81
+ }
81
82
  }
82
-
@@ -2,60 +2,60 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDDocumentVerificationView: View ,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body : some View {
9
- AnyView(NavigationView {
10
- if let countryCode = product.countryCode {
11
- SmileID.documentVerificationScreen(
12
- userId: product.userId ?? generateUserId(),
13
- jobId: product.jobId ?? generateJobId(),
14
- allowNewEnroll: product.allowNewEnroll,
15
- countryCode: countryCode, // already validated in SmileIDDocumentVerificationViewManager
16
- documentType: product.documentType,
17
- idAspectRatio: product.idAspectRatio,
18
- bypassSelfieCaptureWithFile: product.bypassSelfieCaptureWithFilePath,
19
- captureBothSides: product.captureBothSides,
20
- allowAgentMode: product.allowAgentMode,
21
- allowGalleryUpload: product.allowGalleryUpload,
22
- showInstructions: product.showInstructions,
23
- showAttribution: product.showAttribution,
24
- skipApiSubmission: product.skipApiSubmission,
25
- extraPartnerParams: product.extraPartnerParams as [String: String],
26
- delegate: self
27
- )
28
- } else {
29
- // This exists for debugging purposes and will show in extreme cases
30
- // when the params were not set NB: setParams in the viewmanager will always
31
- // return an error if the required data is missing
32
- Text("An error has occured")
33
- }
34
- }.navigationViewStyle(StackNavigationViewStyle()))
35
- }
5
+ struct SmileIDDocumentVerificationView: View, SmileIDFileUtilsProtocol {
6
+ var fileManager: FileManager = Foundation.FileManager.default
7
+ @ObservedObject var product: SmileIDProductModel
8
+ var smileIDUIViewDelegate: SmileIDUIViewDelegate
9
+ var body: some View {
10
+ AnyView(NavigationView {
11
+ if let countryCode = product.countryCode {
12
+ SmileID.documentVerificationScreen(
13
+ userId: product.userId ?? generateUserId(),
14
+ jobId: product.jobId ?? generateJobId(),
15
+ allowNewEnroll: product.allowNewEnroll,
16
+ countryCode: countryCode, // already validated in SmileIDDocumentVerificationViewManager
17
+ documentType: product.documentType,
18
+ idAspectRatio: product.idAspectRatio,
19
+ bypassSelfieCaptureWithFile: product.bypassSelfieCaptureWithFilePath,
20
+ captureBothSides: product.captureBothSides,
21
+ allowAgentMode: product.allowAgentMode,
22
+ allowGalleryUpload: product.allowGalleryUpload,
23
+ showInstructions: product.showInstructions,
24
+ showAttribution: product.showAttribution,
25
+ skipApiSubmission: product.skipApiSubmission,
26
+ extraPartnerParams: product.extraPartnerParams as [String: String],
27
+ delegate: self
28
+ )
29
+ } else {
30
+ // This exists for debugging purposes and will show in extreme cases
31
+ // when the params were not set NB: setParams in the viewmanager will always
32
+ // return an error if the required data is missing
33
+ Text("An error has occured")
34
+ }
35
+ }.navigationViewStyle(StackNavigationViewStyle()))
36
+ }
36
37
  }
37
38
 
38
39
  extension SmileIDDocumentVerificationView: DocumentVerificationResultDelegate {
39
- func didSucceed(selfie: URL, documentFrontImage: URL, documentBackImage: URL?, didSubmitDocumentVerificationJob: Bool) {
40
-
41
- var params: [String: Any] = [
42
- "selfieFile": getFilePath(fileName: selfie.absoluteString),
43
- "documentFrontFile": getFilePath(fileName: documentFrontImage.absoluteString),
44
- "didSubmitDocumentVerificationJob": didSubmitDocumentVerificationJob
45
- ]
46
-
47
- if let documentBackImage = documentBackImage {
48
- params["documentBackFile"] = getFilePath(fileName: documentBackImage.absoluteString)
40
+ func didSucceed(selfie: URL, documentFrontImage: URL, documentBackImage: URL?, didSubmitDocumentVerificationJob: Bool) {
41
+ var params: [String: Any] = [
42
+ "selfieFile": getFilePath(fileName: selfie.absoluteString),
43
+ "documentFrontFile": getFilePath(fileName: documentFrontImage.absoluteString),
44
+ "didSubmitDocumentVerificationJob": didSubmitDocumentVerificationJob,
45
+ ]
46
+
47
+ if let documentBackImage = documentBackImage {
48
+ params["documentBackFile"] = getFilePath(fileName: documentBackImage.absoluteString)
49
+ }
50
+
51
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
52
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDDocumentVerificationView encoding error"))
53
+ return
54
+ }
55
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
49
56
  }
50
-
51
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
52
- product.onResult?(["error": SmileIDError.unknown("SmileIDDocumentVerificationView encoding error")])
53
- return
57
+
58
+ func didError(error: Error) {
59
+ smileIDUIViewDelegate.onError(error: error.localizedDescription)
54
60
  }
55
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
56
- }
57
-
58
- func didError(error: Error) {
59
- product.onResult?(["error": error.localizedDescription])
60
- }
61
61
  }