@smile_identity/react-native 10.2.4-beta.1 → 10.2.5

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 (70) 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 +1 -1
  4. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +1 -0
  5. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +1 -0
  6. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +1 -0
  7. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +2 -0
  8. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +2 -0
  9. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +2 -0
  10. package/ios/RNDelegates/SmileIDUIViewDelegate.swift +2 -0
  11. package/ios/RNSmileID.swift +482 -471
  12. package/ios/Utils/FileUtils.swift +17 -17
  13. package/ios/Utils/SmileIDDictExt.swift +29 -9
  14. package/ios/Utils/SmileIDUtils.swift +9 -0
  15. package/ios/View/BaseSmileIDView.swift +6 -5
  16. package/ios/View/SmileIDBiometricKYCView.swift +56 -54
  17. package/ios/View/SmileIDConsentView.swift +3 -2
  18. package/ios/View/SmileIDDocumentCaptureView.swift +64 -64
  19. package/ios/View/SmileIDDocumentVerificationView.swift +52 -51
  20. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +53 -50
  21. package/ios/View/SmileIDSmartSelfieAuthEnhancedView.swift +34 -33
  22. package/ios/View/SmileIDSmartSelfieAuthView.swift +35 -34
  23. package/ios/View/SmileIDSmartSelfieCaptureView.swift +55 -55
  24. package/ios/View/SmileIDSmartSelfieEnrollmentEnhancedView.swift +35 -34
  25. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +37 -36
  26. package/ios/ViewManagers/SmileIDBaseViewManager.swift +38 -25
  27. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +30 -24
  28. package/ios/ViewManagers/SmileIDConsentViewManager.swift +2 -2
  29. package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.swift +19 -19
  30. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +41 -40
  31. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +47 -40
  32. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.swift +16 -16
  33. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +20 -20
  34. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +27 -26
  35. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.swift +16 -16
  36. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +20 -20
  37. package/ios/ViewModels/SmileIDProductModel.swift +7 -5
  38. package/lib/commonjs/SmileIDBiometricKYCView.js +2 -11
  39. package/lib/commonjs/SmileIDBiometricKYCView.js.map +1 -1
  40. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js +2 -11
  41. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  42. package/lib/commonjs/index.js.map +1 -1
  43. package/lib/commonjs/types.js +31 -1
  44. package/lib/commonjs/types.js.map +1 -1
  45. package/lib/commonjs/useSmileIDView.js +16 -6
  46. package/lib/commonjs/useSmileIDView.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 +29 -0
  53. package/lib/module/types.js.map +1 -1
  54. package/lib/module/useSmileIDView.js +17 -7
  55. package/lib/module/useSmileIDView.js.map +1 -1
  56. package/lib/typescript/SmileIDBiometricKYCView.d.ts.map +1 -1
  57. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts +2 -2
  58. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts.map +1 -1
  59. package/lib/typescript/index.d.ts +2 -2
  60. package/lib/typescript/index.d.ts.map +1 -1
  61. package/lib/typescript/types.d.ts +17 -3
  62. package/lib/typescript/types.d.ts.map +1 -1
  63. package/lib/typescript/useSmileIDView.d.ts.map +1 -1
  64. package/package.json +1 -1
  65. package/react-native-smile-id.podspec +1 -1
  66. package/src/SmileIDBiometricKYCView.tsx +2 -9
  67. package/src/SmileIDEnhancedDocumentVerificationView.tsx +6 -16
  68. package/src/index.tsx +2 -0
  69. package/src/types.ts +62 -3
  70. package/src/useSmileIDView.tsx +17 -9
@@ -2,59 +2,62 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDEnhancedDocumentVerificationView: View,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body: some View {
9
- NavigationView {
10
- if let countryCode = product.countryCode {
11
- SmileID.enhancedDocumentVerificationScreen(
12
- userId: product.userId ?? generateUserId(),
13
- jobId: product.jobId ?? generateJobId(),
14
- allowNewEnroll: product.allowNewEnroll,
15
- countryCode: countryCode, // already validated in the view manager
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
- skipApiSubmission: product.skipApiSubmission,
24
- showAttribution: product.showAttribution,
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 SmileIDEnhancedDocumentVerificationView: 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 countryCode = product.countryCode, let consentInformation = product.consentInformation {
12
+ SmileID.enhancedDocumentVerificationScreen(
13
+ userId: product.userId ?? generateUserId(),
14
+ jobId: product.jobId ?? generateJobId(),
15
+ consentInformation: consentInformation,
16
+ allowNewEnroll: product.allowNewEnroll,
17
+ countryCode: countryCode, // already validated in the view manager
18
+ documentType: product.documentType,
19
+ idAspectRatio: product.idAspectRatio,
20
+ bypassSelfieCaptureWithFile: product.bypassSelfieCaptureWithFilePath,
21
+ captureBothSides: product.captureBothSides,
22
+ allowAgentMode: product.allowAgentMode,
23
+ allowGalleryUpload: product.allowGalleryUpload,
24
+ showInstructions: product.showInstructions,
25
+ skipApiSubmission: product.skipApiSubmission,
26
+ showAttribution: product.showAttribution,
27
+ useStrictMode: product.useStrictMode,
28
+ extraPartnerParams: product.extraPartnerParams as [String: String],
29
+ delegate: self
30
+ )
31
+ } else {
32
+ // This exists for debugging purposes and will show in extreme cases
33
+ // when the params were not set NB: setParams in the viewmanager will always
34
+ // return an error if the required data is missing
35
+ Text("An error has occured")
36
+ }
37
+ }.navigationViewStyle(StackNavigationViewStyle())
38
+ }
36
39
  }
37
40
 
38
41
  extension SmileIDEnhancedDocumentVerificationView: EnhancedDocumentVerificationResultDelegate {
39
- func didSucceed(selfie: URL, documentFrontImage: URL, documentBackImage: URL?, didSubmitEnhancedDocVJob: Bool) {
40
- var params: [String: Any] = [
41
- "selfieFile": getFilePath(fileName: selfie.absoluteString),
42
- "documentFrontFile": getFilePath(fileName: documentFrontImage.absoluteString),
43
- "didSubmitEnhancedDocVJob": didSubmitEnhancedDocVJob
44
- ]
45
-
46
- if let documentBackImage = documentBackImage {
47
- params["documentBackFile"] = getFilePath(fileName: documentBackImage.absoluteString)
42
+ func didSucceed(selfie: URL, documentFrontImage: URL, documentBackImage: URL?, didSubmitEnhancedDocVJob: Bool) {
43
+ var params: [String: Any] = [
44
+ "selfieFile": getFilePath(fileName: selfie.absoluteString),
45
+ "documentFrontFile": getFilePath(fileName: documentFrontImage.absoluteString),
46
+ "didSubmitEnhancedDocVJob": didSubmitEnhancedDocVJob,
47
+ ]
48
+
49
+ if let documentBackImage = documentBackImage {
50
+ params["documentBackFile"] = getFilePath(fileName: documentBackImage.absoluteString)
51
+ }
52
+
53
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
54
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDEnhancedDocumentVerificationView encoding error"))
55
+ return
56
+ }
57
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
48
58
  }
49
-
50
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
51
- product.onResult?(["error": SmileIDError.unknown("SmileIDEnhancedDocumentVerificationView encoding error")])
52
- return
59
+
60
+ func didError(error: Error) {
61
+ smileIDUIViewDelegate.onError(error: error)
53
62
  }
54
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
55
- }
56
-
57
- func didError(error: Error) {
58
- product.onResult?(["error": error.localizedDescription])
59
- }
60
63
  }
@@ -2,43 +2,44 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDSmartSelfieAuthEnhancedView: View,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body: some View {
9
- NavigationView {
10
- SmileID.smartSelfieAuthenticationScreenEnhanced(
11
- userId: product.userId ?? generateUserId(),
12
- allowNewEnroll: product.allowNewEnroll,
13
- showAttribution: product.showAttribution,
14
- showInstructions: product.showInstructions,
15
- extraPartnerParams: product.extraPartnerParams as [String: String],
16
- delegate: self
17
- )
18
- }.navigationViewStyle(StackNavigationViewStyle())
19
- }
5
+ struct SmileIDSmartSelfieAuthEnhancedView: 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
+ SmileID.smartSelfieAuthenticationScreenEnhanced(
12
+ userId: product.userId ?? generateUserId(),
13
+ allowNewEnroll: product.allowNewEnroll,
14
+ showAttribution: product.showAttribution,
15
+ showInstructions: product.showInstructions,
16
+ extraPartnerParams: product.extraPartnerParams as [String: String],
17
+ delegate: self
18
+ )
19
+ }.navigationViewStyle(StackNavigationViewStyle())
20
+ }
20
21
  }
21
22
 
22
23
  extension SmileIDSmartSelfieAuthEnhancedView: SmartSelfieResultDelegate {
23
- func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
24
- var params: [String: Any] = [
25
- "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
26
- "livenessFiles": livenessImages.map {
27
- getFilePath(fileName: $0.absoluteString)
28
- }
29
- ]
30
- if let apiResponse = apiResponse {
31
- params["apiResponse"] = apiResponse
32
- }
24
+ func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
25
+ var params: [String: Any] = [
26
+ "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
27
+ "livenessFiles": livenessImages.map {
28
+ getFilePath(fileName: $0.absoluteString)
29
+ },
30
+ ]
31
+ if let apiResponse = apiResponse {
32
+ params["apiResponse"] = apiResponse
33
+ }
33
34
 
34
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
35
- product.onResult?(["error": SmileIDError.unknown("SmileIDSmartSelfieAuthView encoding error")])
36
- return
35
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
36
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDSmartSelfieAuthView encoding error"))
37
+ return
38
+ }
39
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
37
40
  }
38
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
39
- }
40
41
 
41
- func didError(error: Error) {
42
- product.onResult?(["error": error.localizedDescription])
43
- }
42
+ func didError(error: Error) {
43
+ smileIDUIViewDelegate.onError(error: error)
44
+ }
44
45
  }
@@ -2,44 +2,45 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDSmartSelfieAuthView: View,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body: some View {
9
- NavigationView {
10
- SmileID.smartSelfieAuthenticationScreen(
11
- userId: product.userId ?? generateUserId(),
12
- allowNewEnroll: product.allowNewEnroll,
13
- allowAgentMode: product.allowAgentMode,
14
- showAttribution: product.showAttribution,
15
- showInstructions: product.showInstructions,
16
- extraPartnerParams: product.extraPartnerParams as [String: String],
17
- delegate: self
18
- )
19
- }.navigationViewStyle(StackNavigationViewStyle())
20
- }
5
+ struct SmileIDSmartSelfieAuthView: 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
+ SmileID.smartSelfieAuthenticationScreen(
12
+ userId: product.userId ?? generateUserId(),
13
+ allowNewEnroll: product.allowNewEnroll,
14
+ allowAgentMode: product.allowAgentMode,
15
+ showAttribution: product.showAttribution,
16
+ showInstructions: product.showInstructions,
17
+ extraPartnerParams: product.extraPartnerParams as [String: String],
18
+ delegate: self
19
+ )
20
+ }.navigationViewStyle(StackNavigationViewStyle())
21
+ }
21
22
  }
22
23
 
23
24
  extension SmileIDSmartSelfieAuthView: SmartSelfieResultDelegate {
24
- func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
25
- var params: [String: Any] = [
26
- "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
27
- "livenessFiles": livenessImages.map {
28
- getFilePath(fileName: $0.absoluteString)
29
- }
30
- ]
31
- if let apiResponse = apiResponse {
32
- params["apiResponse"] = apiResponse
33
- }
25
+ func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
26
+ var params: [String: Any] = [
27
+ "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
28
+ "livenessFiles": livenessImages.map {
29
+ getFilePath(fileName: $0.absoluteString)
30
+ },
31
+ ]
32
+ if let apiResponse = apiResponse {
33
+ params["apiResponse"] = apiResponse
34
+ }
34
35
 
35
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
36
- product.onResult?(["error": SmileIDError.unknown("SmileIDSmartSelfieAuthView encoding error")])
37
- return
36
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
37
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDSmartSelfieAuthView encoding error"))
38
+ return
39
+ }
40
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
38
41
  }
39
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
40
- }
41
42
 
42
- func didError(error: Error) {
43
- product.onResult?(["error": error.localizedDescription])
44
- }
43
+ func didError(error: Error) {
44
+ smileIDUIViewDelegate.onError(error: error)
45
+ }
45
46
  }
@@ -2,70 +2,70 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
-
6
5
  struct SmileIDSmartSelfieCaptureView: View, SmileIDFileUtilsProtocol {
7
- var fileManager: FileManager = Foundation.FileManager.default
8
- @ObservedObject var viewModel: SelfieViewModel
9
- @ObservedObject var product: SmileIDProductModel
10
- @State private var acknowledgedInstructions = false
6
+ var fileManager: FileManager = Foundation.FileManager.default
7
+ @ObservedObject var viewModel: SelfieViewModel
8
+ @ObservedObject var product: SmileIDProductModel
9
+ @State private var acknowledgedInstructions = false
10
+ var smileIDUIViewDelegate: SmileIDUIViewDelegate
11
11
 
12
- var body: some View {
13
- NavigationView {
14
- Group {
15
- if product.showInstructions, !acknowledgedInstructions {
16
- SmartSelfieInstructionsScreen(showAttribution: product.showAttribution) {
17
- acknowledgedInstructions = true
18
- }
19
- } else if viewModel.processingState != nil {
20
- Color.clear.onAppear {
21
- self.viewModel.onFinished(callback: self)
22
- }
23
- } else if let selfieToConfirm = viewModel.selfieToConfirm {
24
- if (self.product.showConfirmation) {
25
- ImageCaptureConfirmationDialog(
26
- title: SmileIDResourcesHelper.localizedString(for: "Confirmation.GoodSelfie"),
27
- subtitle: SmileIDResourcesHelper.localizedString(for: "Confirmation.FaceClear"),
28
- image: UIImage(data: selfieToConfirm)!,
29
- confirmationButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.YesUse"),
30
- onConfirm: viewModel.submitJob,
31
- retakeButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.Retake"),
32
- onRetake: viewModel.onSelfieRejected,
33
- scaleFactor: 1.25
34
- ).preferredColorScheme(.light)
35
- } else {
36
- Color.clear.onAppear {
37
- self.viewModel.submitJob()
12
+ var body: some View {
13
+ NavigationView {
14
+ Group {
15
+ if product.showInstructions, !acknowledgedInstructions {
16
+ SmartSelfieInstructionsScreen(showAttribution: product.showAttribution) {
17
+ acknowledgedInstructions = true
18
+ }
19
+ } else if viewModel.processingState != nil {
20
+ Color.clear.onAppear {
21
+ self.viewModel.onFinished(callback: self)
22
+ }
23
+ } else if let selfieToConfirm = viewModel.selfieToConfirm {
24
+ if self.product.showConfirmation {
25
+ ImageCaptureConfirmationDialog(
26
+ title: SmileIDResourcesHelper.localizedString(for: "Confirmation.GoodSelfie"),
27
+ subtitle: SmileIDResourcesHelper.localizedString(for: "Confirmation.FaceClear"),
28
+ image: UIImage(data: selfieToConfirm)!,
29
+ confirmationButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.YesUse"),
30
+ onConfirm: viewModel.submitJob,
31
+ retakeButtonText: SmileIDResourcesHelper.localizedString(for: "Confirmation.Retake"),
32
+ onRetake: viewModel.onSelfieRejected,
33
+ scaleFactor: 1.25
34
+ ).preferredColorScheme(.light)
35
+ } else {
36
+ Color.clear.onAppear {
37
+ self.viewModel.submitJob()
38
+ }
39
+ }
40
+ } else {
41
+ SelfieCaptureScreen(
42
+ viewModel: viewModel,
43
+ allowAgentMode: self.product.allowAgentMode
44
+ ).preferredColorScheme(.light)
45
+ }
38
46
  }
39
- }
40
- } else {
41
- SelfieCaptureScreen(
42
- viewModel: viewModel,
43
- allowAgentMode: self.product.allowAgentMode
44
- ).preferredColorScheme(.light)
45
47
  }
46
- }
48
+ .navigationViewStyle(StackNavigationViewStyle()).padding()
47
49
  }
48
- .navigationViewStyle(StackNavigationViewStyle()).padding()
49
- }
50
50
  }
51
51
 
52
52
  extension SmileIDSmartSelfieCaptureView: SmartSelfieResultDelegate {
53
- func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
54
- let params: [String: Any] = [
55
- "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
56
- "livenessFiles": livenessImages.map {
57
- getFilePath(fileName: $0.absoluteString)
58
- }
59
- ]
53
+ func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse _: SmartSelfieResponse?) {
54
+ let params: [String: Any] = [
55
+ "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
56
+ "livenessFiles": livenessImages.map {
57
+ getFilePath(fileName: $0.absoluteString)
58
+ },
59
+ ]
60
60
 
61
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
62
- product.onResult?(["error": SmileIDError.unknown("SmileIDSmartSelfieCaptureView encoding error")])
63
- return
61
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
62
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDSmartSelfieCaptureView encoding error"))
63
+ return
64
+ }
65
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
64
66
  }
65
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
66
- }
67
67
 
68
- func didError(error: Error) {
69
- product.onResult?(["error": error.localizedDescription])
70
- }
68
+ func didError(error: Error) {
69
+ smileIDUIViewDelegate.onError(error: error)
70
+ }
71
71
  }
@@ -2,43 +2,44 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDSmartSelfieEnrollmentEnhancedView: View,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body: some View {
9
- NavigationView {
10
- SmileID.smartSelfieEnrollmentScreenEnhanced(
11
- userId: product.userId ?? generateUserId(),
12
- allowNewEnroll: product.allowNewEnroll,
13
- showAttribution: product.showAttribution,
14
- showInstructions: product.showInstructions,
15
- extraPartnerParams: product.extraPartnerParams as [String: String],
16
- delegate: self
17
- )
18
- }.navigationViewStyle(StackNavigationViewStyle())
19
- }
5
+ struct SmileIDSmartSelfieEnrollmentEnhancedView: 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
+ SmileID.smartSelfieEnrollmentScreenEnhanced(
12
+ userId: product.userId ?? generateUserId(),
13
+ allowNewEnroll: product.allowNewEnroll,
14
+ showAttribution: product.showAttribution,
15
+ showInstructions: product.showInstructions,
16
+ extraPartnerParams: product.extraPartnerParams as [String: String],
17
+ delegate: self
18
+ )
19
+ }.navigationViewStyle(StackNavigationViewStyle())
20
+ }
20
21
  }
21
22
 
22
23
  extension SmileIDSmartSelfieEnrollmentEnhancedView: SmartSelfieResultDelegate {
23
- func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
24
- var params: [String: Any] = [
25
- "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
26
- "livenessFiles": livenessImages.map {
27
- getFilePath(fileName: $0.absoluteString)
28
- },
29
- ]
30
- if let apiResponse = apiResponse {
31
- params["apiResponse"] = apiResponse
24
+ func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
25
+ var params: [String: Any] = [
26
+ "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
27
+ "livenessFiles": livenessImages.map {
28
+ getFilePath(fileName: $0.absoluteString)
29
+ },
30
+ ]
31
+ if let apiResponse = apiResponse {
32
+ params["apiResponse"] = apiResponse
33
+ }
34
+
35
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
36
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDSmartSelfieEnrollmentView encoding error"))
37
+ return
38
+ }
39
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
32
40
  }
33
-
34
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
35
- product.onResult?(["error": SmileIDError.unknown("SmileIDSmartSelfieEnrollmentView encoding error")])
36
- return
41
+
42
+ func didError(error: Error) {
43
+ smileIDUIViewDelegate.onError(error: error)
37
44
  }
38
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
39
- }
40
-
41
- func didError(error: Error) {
42
- product.onResult?(["error": error.localizedDescription])
43
- }
44
45
  }
@@ -2,45 +2,46 @@ import Foundation
2
2
  import SmileID
3
3
  import SwiftUI
4
4
 
5
- struct SmileIDSmartSelfieEnrollmentView: View,SmileIDFileUtilsProtocol {
6
- var fileManager: FileManager = Foundation.FileManager.default
7
- @ObservedObject var product : SmileIDProductModel
8
- var body: some View {
9
- NavigationView {
10
- SmileID.smartSelfieEnrollmentScreen(
11
- userId: product.userId ?? generateUserId(),
12
- allowNewEnroll: product.allowNewEnroll,
13
- allowAgentMode: product.allowAgentMode,
14
- showAttribution: product.showAttribution,
15
- showInstructions: product.showInstructions,
16
- skipApiSubmission: product.skipApiSubmission,
17
- extraPartnerParams: product.extraPartnerParams as [String: String],
18
- delegate: self
19
- )
20
- }.navigationViewStyle(StackNavigationViewStyle())
21
- }
5
+ struct SmileIDSmartSelfieEnrollmentView: 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
+ SmileID.smartSelfieEnrollmentScreen(
12
+ userId: product.userId ?? generateUserId(),
13
+ allowNewEnroll: product.allowNewEnroll,
14
+ allowAgentMode: product.allowAgentMode,
15
+ showAttribution: product.showAttribution,
16
+ showInstructions: product.showInstructions,
17
+ skipApiSubmission: product.skipApiSubmission,
18
+ extraPartnerParams: product.extraPartnerParams as [String: String],
19
+ delegate: self
20
+ )
21
+ }.navigationViewStyle(StackNavigationViewStyle())
22
+ }
22
23
  }
23
24
 
24
25
  extension SmileIDSmartSelfieEnrollmentView: SmartSelfieResultDelegate {
25
- func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
26
- var params: [String: Any] = [
27
- "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
28
- "livenessFiles": livenessImages.map {
29
- getFilePath(fileName: $0.absoluteString)
30
- },
31
- ]
32
- if let apiResponse = apiResponse {
33
- params["apiResponse"] = apiResponse
26
+ func didSucceed(selfieImage: URL, livenessImages: [URL], apiResponse: SmartSelfieResponse?) {
27
+ var params: [String: Any] = [
28
+ "selfieFile": getFilePath(fileName: selfieImage.absoluteString),
29
+ "livenessFiles": livenessImages.map {
30
+ getFilePath(fileName: $0.absoluteString)
31
+ },
32
+ ]
33
+ if let apiResponse = apiResponse {
34
+ params["apiResponse"] = apiResponse
35
+ }
36
+
37
+ guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
38
+ smileIDUIViewDelegate.onError(error: SmileIDError.unknown("SmileIDSmartSelfieEnrollmentView encoding error"))
39
+ return
40
+ }
41
+ smileIDUIViewDelegate.onResult(smileResult: String(data: jsonData, encoding: .utf8)!)
34
42
  }
35
-
36
- guard let jsonData = try? JSONSerialization.data(withJSONObject: params.toJSONCompatibleDictionary(), options: .prettyPrinted) else {
37
- product.onResult?(["error": SmileIDError.unknown("SmileIDSmartSelfieEnrollmentView encoding error")])
38
- return
43
+
44
+ func didError(error: Error) {
45
+ smileIDUIViewDelegate.onError(error: error)
39
46
  }
40
- product.onResult?(["result": String(data: jsonData, encoding: .utf8)!])
41
- }
42
-
43
- func didError(error: Error) {
44
- product.onResult?(["error": error.localizedDescription])
45
- }
46
47
  }
@@ -3,29 +3,42 @@ import React
3
3
  import SwiftUI
4
4
 
5
5
  class SmileIDBaseViewManager: RCTViewManager, SmileIDUIViewDelegate {
6
- var product = SmileIDProductModel()
7
- @objc var onResult: RCTDirectEventBlock?
8
- func getView() -> UIView {
9
- fatalError("Must be implemented by subclass")
10
- }
11
-
12
- @objc open func create(_ node: NSNumber, params: NSDictionary) {
13
-
14
- }
15
-
16
- override func view() -> UIView! {
17
- getView()
18
- }
19
-
20
- override func customBubblingEventTypes() -> [String]! {
21
- return ["onResult"]
22
- }
23
-
24
- @objc override func constantsToExport() -> [AnyHashable : Any]! {
25
- return ["onResult": "onResult"]
26
- }
27
-
28
- override static func requiresMainQueueSetup() -> Bool {
29
- return true
30
- }
6
+ var product = SmileIDProductModel()
7
+ @objc var onResult: RCTDirectEventBlock?
8
+ @objc var currentNode: NSNumber?
9
+ func getView() -> UIView {
10
+ fatalError("Must be implemented by subclass")
11
+ }
12
+
13
+ @objc open func create(_: NSNumber, params _: NSDictionary) {}
14
+
15
+ func onResult(smileResult: String) {
16
+ bridge.eventDispatcher().sendDeviceEvent(
17
+ withName: "onSmileResult",
18
+ body: ["result": smileResult]
19
+ )
20
+ }
21
+
22
+ func onError(error: any Error) {
23
+ bridge.eventDispatcher().sendDeviceEvent(
24
+ withName: "onSmileResult",
25
+ body: ["error": error.localizedDescription]
26
+ )
27
+ }
28
+
29
+ override func view() -> UIView! {
30
+ getView()
31
+ }
32
+
33
+ override func customBubblingEventTypes() -> [String]! {
34
+ return ["onResult"]
35
+ }
36
+
37
+ @objc override func constantsToExport() -> [AnyHashable: Any]! {
38
+ return ["onResult": "onResult"]
39
+ }
40
+
41
+ override static func requiresMainQueueSetup() -> Bool {
42
+ return true
43
+ }
31
44
  }