@smile_identity/react-native 10.0.0-beta01 → 10.0.0-beta03

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 (123) hide show
  1. package/README.md +1 -1
  2. package/android/gradle.properties +1 -1
  3. package/android/src/main/java/com/smileidentity/react/Mapper.kt +179 -0
  4. package/android/src/main/java/com/smileidentity/react/SmileIdModule.kt +76 -49
  5. package/android/src/main/java/com/smileidentity/react/SmileIdPackage.kt +4 -2
  6. package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +9 -38
  7. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +41 -9
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +83 -0
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +45 -9
  10. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +77 -0
  11. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +36 -9
  12. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +36 -9
  13. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +64 -0
  14. package/android/src/main/java/com/smileidentity/react/views/SmileIDConsentView.kt +67 -0
  15. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +77 -0
  16. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +71 -0
  17. package/android/src/main/java/com/smileidentity/react/views/{SmileIDSmartSelfieAuthentication.kt → SmileIDSmartSelfieAuthenticationView.kt} +15 -4
  18. package/android/src/main/java/com/smileidentity/react/views/{SmileIDSmartSelfieEnrollment.kt → SmileIDSmartSelfieEnrollmentView.kt} +14 -5
  19. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +3 -27
  20. package/android/src/oldarch/SmileIdSpec.kt +26 -1
  21. package/ios/RNDelegates/SmileIDUIViewDelegate.swift +4 -0
  22. package/ios/RNDelegates/SmileIDViewDelegate.swift +5 -0
  23. package/ios/RNSmileID.mm +7 -0
  24. package/ios/RNSmileID.swift +147 -0
  25. package/ios/SmileId.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  26. package/ios/SmileId.xcodeproj/project.xcworkspace/xcuserdata/japhetndhlovu.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  27. package/ios/SmileId.xcodeproj/xcuserdata/japhetndhlovu.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  28. package/ios/Utils/SmileIDDictExt.swift +50 -0
  29. package/ios/Utils/SmileIDUtils.swift +10 -0
  30. package/ios/View/BaseSmileIDView.swift +35 -0
  31. package/ios/View/SmileIDBiometricKYCView.swift +46 -0
  32. package/ios/View/SmileIDConsentView.swift +36 -0
  33. package/ios/View/SmileIDDocumentVerificationView.swift +55 -0
  34. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +55 -0
  35. package/ios/View/SmileIDSmartSelfieAuthView.swift +41 -0
  36. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +41 -0
  37. package/ios/ViewManagers/SmileIDBaseViewManager.swift +18 -0
  38. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.m +6 -0
  39. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +34 -0
  40. package/ios/ViewManagers/SmileIDConsentViewManager.m +6 -0
  41. package/ios/ViewManagers/SmileIDConsentViewManager.swift +47 -0
  42. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.m +6 -0
  43. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +49 -0
  44. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.m +6 -0
  45. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +49 -0
  46. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.m +6 -0
  47. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +27 -0
  48. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.m +6 -0
  49. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +27 -0
  50. package/ios/ViewModels/SmileIDProductModel.swift +30 -0
  51. package/ios/react-native-smile-id-Bridging-Header.h +8 -0
  52. package/lib/commonjs/NativeSmileId.js +1 -1
  53. package/lib/commonjs/NativeSmileId.js.map +1 -1
  54. package/lib/commonjs/SmileIDBiometricKYCView.js +40 -0
  55. package/lib/commonjs/SmileIDBiometricKYCView.js.map +1 -0
  56. package/lib/commonjs/SmileIDConsentView.js +40 -0
  57. package/lib/commonjs/SmileIDConsentView.js.map +1 -0
  58. package/lib/commonjs/SmileIDDocumentVerificationView.js +40 -0
  59. package/lib/commonjs/SmileIDDocumentVerificationView.js.map +1 -0
  60. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js +40 -0
  61. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js.map +1 -0
  62. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js +40 -0
  63. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js.map +1 -0
  64. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js +40 -0
  65. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js.map +1 -0
  66. package/lib/commonjs/index.js +194 -27
  67. package/lib/commonjs/index.js.map +1 -1
  68. package/lib/commonjs/types.js +517 -0
  69. package/lib/commonjs/types.js.map +1 -0
  70. package/lib/module/NativeSmileId.js +1 -1
  71. package/lib/module/NativeSmileId.js.map +1 -1
  72. package/lib/module/SmileIDBiometricKYCView.js +30 -0
  73. package/lib/module/SmileIDBiometricKYCView.js.map +1 -0
  74. package/lib/module/SmileIDConsentView.js +30 -0
  75. package/lib/module/SmileIDConsentView.js.map +1 -0
  76. package/lib/module/SmileIDDocumentVerificationView.js +30 -0
  77. package/lib/module/SmileIDDocumentVerificationView.js.map +1 -0
  78. package/lib/module/SmileIDEnhancedDocumentVerificationView.js +30 -0
  79. package/lib/module/SmileIDEnhancedDocumentVerificationView.js.map +1 -0
  80. package/lib/module/SmileIDSmartSelfieAuthenticationView.js +30 -0
  81. package/lib/module/SmileIDSmartSelfieAuthenticationView.js.map +1 -0
  82. package/lib/module/SmileIDSmartSelfieEnrollmentView.js +30 -0
  83. package/lib/module/SmileIDSmartSelfieEnrollmentView.js.map +1 -0
  84. package/lib/module/index.js +33 -21
  85. package/lib/module/index.js.map +1 -1
  86. package/lib/module/types.js +472 -0
  87. package/lib/module/types.js.map +1 -0
  88. package/lib/typescript/NativeSmileId.d.ts +22 -3
  89. package/lib/typescript/NativeSmileId.d.ts.map +1 -1
  90. package/lib/typescript/SmileIDBiometricKYCView.d.ts +8 -0
  91. package/lib/typescript/SmileIDBiometricKYCView.d.ts.map +1 -0
  92. package/lib/typescript/SmileIDConsentView.d.ts +8 -0
  93. package/lib/typescript/SmileIDConsentView.d.ts.map +1 -0
  94. package/lib/typescript/SmileIDDocumentVerificationView.d.ts +8 -0
  95. package/lib/typescript/SmileIDDocumentVerificationView.d.ts.map +1 -0
  96. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts +8 -0
  97. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts.map +1 -0
  98. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts +8 -0
  99. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts.map +1 -0
  100. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts +8 -0
  101. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts.map +1 -0
  102. package/lib/typescript/index.d.ts +24 -86
  103. package/lib/typescript/index.d.ts.map +1 -1
  104. package/lib/typescript/types.d.ts +504 -0
  105. package/lib/typescript/types.d.ts.map +1 -0
  106. package/package.json +3 -4
  107. package/react-native-smile-id.podspec +2 -2
  108. package/src/NativeSmileId.ts +68 -9
  109. package/src/SmileIDBiometricKYCView.tsx +45 -0
  110. package/src/SmileIDConsentView.tsx +44 -0
  111. package/src/SmileIDDocumentVerificationView.tsx +51 -0
  112. package/src/SmileIDEnhancedDocumentVerificationView.tsx +51 -0
  113. package/src/SmileIDSmartSelfieAuthenticationView.tsx +51 -0
  114. package/src/SmileIDSmartSelfieEnrollmentView.tsx +51 -0
  115. package/src/index.tsx +86 -122
  116. package/src/types.ts +1084 -0
  117. package/android/src/main/assets/smile_config.json +0 -9
  118. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBVNConsentViewManager.kt +0 -42
  119. package/android/src/main/java/com/smileidentity/react/views/SmileIDBVNConsentScreen.kt +0 -54
  120. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYC.kt +0 -89
  121. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerification.kt +0 -59
  122. package/ios/SmileId.h +0 -12
  123. package/ios/SmileId.mm +0 -27
package/README.md CHANGED
@@ -27,7 +27,7 @@ Add the dependency to your `package.json`:
27
27
  ```json
28
28
  {
29
29
  "dependencies": {
30
- "rn-smile-id": "<latest-version>"
30
+ "@smile_identity/react-native": "<latest-version>"
31
31
  }
32
32
  }
33
33
  ```
@@ -3,4 +3,4 @@ SmileId_minSdkVersion=21
3
3
  SmileId_targetSdkVersion=34
4
4
  SmileId_compileSdkVersion=34
5
5
  SmileId_ndkversion=21.4.7075529
6
- SmileId_androidVersion=10.0.0-beta09
6
+ SmileId_androidVersion=10.0.2
@@ -0,0 +1,179 @@
1
+ package com.smileidentity.react
2
+
3
+ import com.facebook.react.bridge.ReadableMap
4
+ import com.smileidentity.models.AuthenticationRequest
5
+ import com.smileidentity.models.ConsentInfo
6
+ import com.smileidentity.models.EnhancedKycRequest
7
+ import com.smileidentity.models.IdInfo
8
+ import com.smileidentity.models.ImageType
9
+ import com.smileidentity.models.JobStatusRequest
10
+ import com.smileidentity.models.JobType
11
+ import com.smileidentity.models.PartnerParams
12
+ import com.smileidentity.models.PrepUploadRequest
13
+ import com.smileidentity.models.ProductsConfigRequest
14
+ import com.smileidentity.models.UploadImageInfo
15
+ import com.smileidentity.models.UploadRequest
16
+ import com.smileidentity.react.utils.getBoolOrDefault
17
+ import com.smileidentity.react.utils.getIntOrDefault
18
+ import com.smileidentity.react.utils.getMapOrDefault
19
+ import com.smileidentity.react.utils.getStringOrDefault
20
+ import com.smileidentity.react.utils.toMap
21
+ import com.smileidentity.util.randomJobId
22
+ import com.smileidentity.util.randomUserId
23
+ import java.io.File
24
+
25
+ fun ReadableMap.toAuthenticationRequest(): AuthenticationRequest {
26
+ return AuthenticationRequest(
27
+ jobType = getIntOrDefault("jobType")?.let { JobType.fromValue(it) } ?: run {
28
+ throw IllegalArgumentException("jobType is required")
29
+ },
30
+ country = getStringOrDefault("country"),
31
+ idType = getStringOrDefault("idType"),
32
+ updateEnrolledImage = getBoolOrDefault("updateEnrolledImage", false),
33
+ jobId = getStringOrDefault("jobId"),
34
+ userId = getStringOrDefault("userId"),
35
+ )
36
+ }
37
+
38
+ fun ReadableMap.toPartnerParams(): PartnerParams {
39
+ return PartnerParams(
40
+ jobType = getIntOrDefault("jobType")?.let { JobType.fromValue(it) } ?: run {
41
+ throw IllegalArgumentException("jobType is required")
42
+ },
43
+ jobId = getStringOrDefault("jobId") ?: randomJobId(),
44
+ userId = getStringOrDefault("userId") ?: randomUserId(),
45
+ extras = getMapOrDefault("extras")?.toMap() ?: emptyMap()
46
+ )
47
+ }
48
+
49
+ fun ReadableMap.toConsentInfo(): ConsentInfo {
50
+ return ConsentInfo(
51
+ canAccess = getBoolOrDefault("canAccess", false),
52
+ consentRequired = getBoolOrDefault("consentRequired", true)
53
+ )
54
+ }
55
+
56
+ fun ReadableMap.toPrepUploadRequest(): PrepUploadRequest {
57
+ return PrepUploadRequest(
58
+ partnerParams = getMapOrDefault("partnerParams")?.toPartnerParams() ?: run {
59
+ throw IllegalArgumentException("partnerParams is required")
60
+ },
61
+ callbackUrl = getStringOrDefault("callbackUrl"),
62
+ partnerId = getStringOrDefault("partnerId") ?: run {
63
+ throw IllegalArgumentException("partnerId is required")
64
+ },
65
+ sourceSdk = getStringOrDefault("sourceSdk") ?: "react-native",
66
+ timestamp = getStringOrDefault("timestamp") ?: run {
67
+ throw IllegalArgumentException("timestamp is required")
68
+ },
69
+ //TODO: Remove this and use strings once the backend is updated
70
+ allowNewEnroll = getBoolOrDefault("allowNewEnroll", false).toString(),
71
+ signature = getStringOrDefault("signature") ?: run {
72
+ throw IllegalArgumentException("signature is required")
73
+ },
74
+ )
75
+ }
76
+
77
+ fun ReadableMap.toUploadRequest(): UploadRequest {
78
+ val imagesArray = getArray("images")?.toArrayList()?.map {
79
+ (it as ReadableMap).toUploadImageInfo()
80
+ }
81
+ return UploadRequest(
82
+ images = imagesArray ?: emptyList(),
83
+ idInfo = getMapOrDefault("idInfo")?.toIdInfo()
84
+ )
85
+ }
86
+
87
+ fun ReadableMap.toUploadImageInfo(): UploadImageInfo {
88
+ return UploadImageInfo(
89
+ imageTypeId = getStringOrDefault("imageTypeId")?.let { ImageType.valueOf(it) } ?: run {
90
+ throw IllegalArgumentException("imageTypeId is required")
91
+ },
92
+ image = File(getStringOrDefault("imageName") ?: run {
93
+ throw IllegalArgumentException("imageName is required")
94
+ }),
95
+ )
96
+ }
97
+
98
+ fun ReadableMap.toIdInfo(): IdInfo {
99
+ return IdInfo(
100
+ country = getStringOrDefault("country") ?: run {
101
+ throw IllegalArgumentException("country is required")
102
+ },
103
+ idType = getStringOrDefault("idType"),
104
+ idNumber = getStringOrDefault("idNumber"),
105
+ firstName = getStringOrDefault("firstName"),
106
+ middleName = getStringOrDefault("middleName"),
107
+ lastName = getStringOrDefault("lastName"),
108
+ dob = getStringOrDefault("dob"),
109
+ bankCode = getStringOrDefault("bankCode"),
110
+ entered = getBoolean("entered")
111
+ )
112
+ }
113
+
114
+ fun ReadableMap.toEnhancedKycRequest(): EnhancedKycRequest {
115
+ return EnhancedKycRequest(
116
+ country = getStringOrDefault("country") ?: run {
117
+ throw IllegalArgumentException("country is required")
118
+ },
119
+ idType = getStringOrDefault("idType") ?: run {
120
+ throw IllegalArgumentException("idType is required")
121
+ },
122
+ idNumber = getStringOrDefault("idNumber") ?: run {
123
+ throw IllegalArgumentException("idNumber is required")
124
+ },
125
+ firstName = getStringOrDefault("firstName"),
126
+ middleName = getStringOrDefault("middleName"),
127
+ lastName = getStringOrDefault("lastName"),
128
+ dob = getStringOrDefault("dob"),
129
+ phoneNumber = getStringOrDefault("phoneNumber"),
130
+ bankCode = getStringOrDefault("bankCode"),
131
+ callbackUrl = getStringOrDefault("callbackUrl"),
132
+ partnerParams = getMapOrDefault("partnerParams")?.toPartnerParams() ?: run {
133
+ throw IllegalArgumentException("partnerParams is required")
134
+ },
135
+ sourceSdk = getStringOrDefault("sourceSdk") ?: "react-native",
136
+ timestamp = getStringOrDefault("timestamp") ?: run {
137
+ throw IllegalArgumentException("timestamp is required")
138
+ },
139
+ signature = getStringOrDefault("signature") ?: run {
140
+ throw IllegalArgumentException("signature is required")
141
+ },
142
+ )
143
+ }
144
+
145
+ fun ReadableMap.toJobStatusRequest(): JobStatusRequest {
146
+ return JobStatusRequest(
147
+ userId = getStringOrDefault("userId") ?: run {
148
+ throw IllegalArgumentException("userId is required")
149
+ },
150
+ jobId = getStringOrDefault("jobId") ?: run {
151
+ throw IllegalArgumentException("jobId is required")
152
+ },
153
+ includeImageLinks = getBoolOrDefault("includeImageLinks", false),
154
+ includeHistory = getBoolOrDefault("includeHistory", false),
155
+ partnerId = getStringOrDefault("partnerId") ?: run {
156
+ throw IllegalArgumentException("partnerId is required")
157
+ },
158
+ timestamp = getStringOrDefault("timestamp") ?: run {
159
+ throw IllegalArgumentException("timestamp is required")
160
+ },
161
+ signature = getStringOrDefault("signature") ?: run {
162
+ throw IllegalArgumentException("signature is required")
163
+ }
164
+ )
165
+ }
166
+
167
+ fun ReadableMap.toProductsConfigRequest(): ProductsConfigRequest {
168
+ return ProductsConfigRequest(
169
+ partnerId = getStringOrDefault("partnerId") ?: run {
170
+ throw IllegalArgumentException("partnerId is required")
171
+ },
172
+ timestamp = getStringOrDefault("timestamp") ?: run {
173
+ throw IllegalArgumentException("timestamp is required")
174
+ },
175
+ signature = getStringOrDefault("signature") ?: run {
176
+ throw IllegalArgumentException("signature is required")
177
+ }
178
+ )
179
+ }
@@ -5,10 +5,10 @@ import com.facebook.react.bridge.ReactApplicationContext
5
5
  import com.facebook.react.bridge.ReactMethod
6
6
  import com.facebook.react.bridge.ReadableMap
7
7
  import com.smileidentity.SmileID
8
+ import com.smileidentity.SmileIDCrashReporting
8
9
  import com.smileidentity.SmileIdSpec
9
10
  import com.smileidentity.models.EnhancedKycRequest
10
11
  import com.smileidentity.react.utils.getStringOrDefault
11
- import com.smileidentity.react.utils.partnerParams
12
12
  import kotlinx.coroutines.CoroutineExceptionHandler
13
13
  import kotlinx.coroutines.CoroutineScope
14
14
  import kotlinx.coroutines.Dispatchers
@@ -23,60 +23,87 @@ class SmileIdModule internal constructor(context: ReactApplicationContext) :
23
23
  }
24
24
 
25
25
  @ReactMethod
26
- override fun initialize(enableCrashReporting: Boolean, useSandBox: Boolean, promise: Promise) {
27
- SmileID.initialize(
28
- reactApplicationContext,
29
- enableCrashReporting = enableCrashReporting,
30
- useSandbox = useSandBox
31
- )
26
+ override fun initialize(useSandBox: Boolean, promise: Promise) {
27
+ SmileID.initialize(reactApplicationContext, useSandbox = useSandBox)
32
28
  promise.resolve(null)
33
29
  }
34
30
 
35
31
  @ReactMethod
36
- override fun doEnhancedKycAsync(product: ReadableMap, promise: Promise) = launch(
37
- work = {
38
- val partnerParams = product.partnerParams()
39
- partnerParams ?: run {
40
- throw IllegalArgumentException("partnerParams is required for enhanced kyc")
41
- }
42
- val country = product.getStringOrDefault("country",null) ?: run {
43
- throw IllegalArgumentException("country is required for enhanced kyc")
44
- }
45
- val idType = product.getStringOrDefault("idType",null) ?: run {
46
- throw IllegalArgumentException("idType is required for enhanced kyc")
47
- }
48
- val idNumber = product.getStringOrDefault("idNumber",null) ?: run {
49
- throw IllegalArgumentException("idNumber is required for enhanced kyc")
50
- }
51
-
52
- val timestamp = partnerParams?.extras?.get("timestamp") ?: run {
53
- throw IllegalArgumentException("partnerParams.timestamp is required for enhanced kyc")
54
- }
55
- val signature = partnerParams?.extras?.get("timestamp") ?: run {
56
- throw IllegalArgumentException("partnerParams.signature is required for enhanced kyc")
57
- }
58
- SmileID.api.doEnhancedKycAsync(
59
- EnhancedKycRequest(
60
- country = country,
61
- idType = idType,
62
- idNumber = idNumber,
63
- firstName = product.getString("firstName"),
64
- middleName = product.getString("middleName"),
65
- lastName = product.getString("lastName"),
66
- dob = product.getString("dob"),
67
- phoneNumber = product.getString("phoneNumber"),
68
- bankCode = product.getString("bankCode"),
69
- callbackUrl = product.getString("callbackUrl"),
70
- partnerParams = partnerParams,
71
- sourceSdk = "android (react-native)",
72
- timestamp = timestamp,
73
- signature = signature,
74
- )
75
- )
76
- },
32
+ override fun disableCrashReporting(promise: Promise) {
33
+ SmileIDCrashReporting.disable()
34
+ }
35
+
36
+ @ReactMethod
37
+ override fun authenticate(request: ReadableMap, promise: Promise) = launch(
38
+ work = { SmileID.api.authenticate(request = request.toAuthenticationRequest()) },
39
+ promise = promise
40
+ )
41
+
42
+ @ReactMethod
43
+ override fun prepUpload(request: ReadableMap, promise: Promise) = launch(
44
+ work = { SmileID.api.prepUpload(request = request.toPrepUploadRequest()) },
45
+ promise = promise
46
+ )
47
+
48
+ @ReactMethod
49
+ override fun upload(url: String, request: ReadableMap, promise: Promise) = launch(
50
+ work = { SmileID.api.upload(url, request.toUploadRequest()) },
51
+ promise = promise
52
+ )
53
+
54
+ @ReactMethod
55
+ override fun doEnhancedKyc(request: ReadableMap, promise: Promise) = launch(
56
+ work = { SmileID.api.doEnhancedKyc(request = request.toEnhancedKycRequest()) },
57
+ promise = promise
58
+ )
59
+
60
+ @ReactMethod
61
+ override fun doEnhancedKycAsync(request: ReadableMap, promise: Promise) = launch(
62
+ work = { SmileID.api.doEnhancedKycAsync(request = request.toEnhancedKycRequest()) },
63
+ promise = promise
64
+ )
65
+
66
+ @ReactMethod
67
+ override fun getSmartSelfieJobStatus(request: ReadableMap, promise: Promise) = launch(
68
+ work = { SmileID.api.getSmartSelfieJobStatus(request = request.toJobStatusRequest()) },
77
69
  promise = promise
78
70
  )
79
71
 
72
+ @ReactMethod
73
+ override fun getDocumentVerificationJobStatus(request: ReadableMap, promise: Promise) = launch(
74
+ work = { SmileID.api.getDocumentVerificationJobStatus(request = request.toJobStatusRequest()) },
75
+ promise = promise
76
+ )
77
+
78
+ @ReactMethod
79
+ override fun getBiometricKycJobStatus(request: ReadableMap, promise: Promise) = launch(
80
+ work = { SmileID.api.getBiometricKycJobStatus(request = request.toJobStatusRequest()) },
81
+ promise = promise
82
+ )
83
+
84
+ @ReactMethod
85
+ override fun getEnhancedDocumentVerificationJobStatus(request: ReadableMap, promise: Promise) = launch(
86
+ work = { SmileID.api.getEnhancedDocumentVerificationJobStatus(request = request.toJobStatusRequest()) },
87
+ promise = promise
88
+ )
89
+
90
+ @ReactMethod
91
+ override fun getProductsConfig(request: ReadableMap, promise: Promise) = launch(
92
+ work = { SmileID.api.getProductsConfig(request = request.toProductsConfigRequest()) },
93
+ promise = promise
94
+ )
95
+
96
+ @ReactMethod
97
+ override fun getValidDocuments(request: ReadableMap, promise: Promise) = launch(
98
+ work = { SmileID.api.getValidDocuments(request = request.toProductsConfigRequest()) },
99
+ promise = promise
100
+ )
101
+
102
+ @ReactMethod
103
+ override fun getServices(promise: Promise) = launch(
104
+ work = { SmileID.api.getServices() },
105
+ promise = promise
106
+ )
80
107
 
81
108
  private fun <T> launch(
82
109
  work: suspend () -> T,
@@ -92,6 +119,6 @@ class SmileIdModule internal constructor(context: ReactApplicationContext) :
92
119
  }
93
120
 
94
121
  companion object {
95
- const val NAME = "SmileID"
122
+ const val NAME = "RNSmileID"
96
123
  }
97
124
  }
@@ -6,9 +6,10 @@ import com.facebook.react.bridge.ReactApplicationContext
6
6
  import com.facebook.react.module.model.ReactModuleInfo
7
7
  import com.facebook.react.module.model.ReactModuleInfoProvider
8
8
  import com.facebook.react.uimanager.ViewManager
9
- import com.smileidentity.react.viewmanagers.SmileIDBVNConsentViewManager
10
9
  import com.smileidentity.react.viewmanagers.SmileIDBiometricKYCViewManager
10
+ import com.smileidentity.react.viewmanagers.SmileIDConsentViewManager
11
11
  import com.smileidentity.react.viewmanagers.SmileIDDocumentVerificationViewManager
12
+ import com.smileidentity.react.viewmanagers.SmileIDEnhancedDocumentVerificationViewManager
12
13
  import com.smileidentity.react.viewmanagers.SmileIDSmartSelfieAuthenticationViewManager
13
14
  import com.smileidentity.react.viewmanagers.SmileIDSmartSelfieEnrollmentViewManager
14
15
 
@@ -18,7 +19,8 @@ class SmileIdPackage : TurboReactPackage() {
18
19
  listOf(SmileIDSmartSelfieEnrollmentViewManager(reactContext),
19
20
  SmileIDSmartSelfieAuthenticationViewManager(reactContext),
20
21
  SmileIDDocumentVerificationViewManager(reactContext),
21
- SmileIDBVNConsentViewManager(reactContext),
22
+ SmileIDEnhancedDocumentVerificationViewManager(reactContext),
23
+ SmileIDConsentViewManager(reactContext),
22
24
  SmileIDBiometricKYCViewManager(reactContext),
23
25
  )
24
26
 
@@ -26,64 +26,35 @@ fun ReadableMap.toMap(): Map<String, String> {
26
26
  return map
27
27
  }
28
28
 
29
- fun ReadableMap.idInfo(): IdInfo? {
30
- val idInfoMap = getMapOrDefault("idInfo", null)
31
- val country = idInfoMap?.getStringOrDefault("country", null) ?: run {
32
- Timber.e("idInfo.country is required")
33
- return null
34
- }
35
- return IdInfo(
36
- country = country,
37
- idType = idInfoMap.getStringOrDefault("idType", null),
38
- idNumber = idInfoMap.getStringOrDefault("idNumber", null),
39
- firstName = idInfoMap.getStringOrDefault("firstName", null),
40
- middleName = idInfoMap.getStringOrDefault("middleName", null),
41
- lastName = idInfoMap.getStringOrDefault("lastName", null),
42
- dob = idInfoMap.getStringOrDefault("dob", null),
43
- bankCode = idInfoMap.getStringOrDefault("bankCode", null),
44
- entered = idInfoMap.getBoolOrDefault("entered", false),
45
- )
46
- }
47
-
48
-
49
- fun ReadableMap.partnerParams(): PartnerParams? {
50
- val partnerParams = getMapOrDefault("partnerParams", null) ?: run {
51
- Timber.w("partnerParams is required")
52
- return null
29
+ fun ReadableMap.getBoolOrDefault(key: String, defaultValue: Boolean): Boolean {
30
+ if (hasKey(key)) {
31
+ return getBoolean(key)
53
32
  }
54
- val jobTypeValue = partnerParams.getIntOrDefault("jobType", null)
55
- val jobType = if (jobTypeValue != null) JobType.fromValue(jobTypeValue) else null
56
- return PartnerParams(
57
- jobType = jobType,
58
- userId = partnerParams.getStringOrDefault("userId", null) ?: run { randomUserId() },
59
- jobId = partnerParams.getStringOrDefault("jobId", null) ?: run { randomUserId() },
60
- extras = partnerParams.getMapOrDefault("extras", null)?.toMap() ?: run { emptyMap() },
61
- )
33
+ return defaultValue
62
34
  }
63
35
 
64
-
65
- fun ReadableMap.getBoolOrDefault(key: String, defaultValue: Boolean): Boolean {
36
+ fun ReadableMap.getFloatOrDefault(key: String, defaultValue: Float? = null): Float? {
66
37
  if (hasKey(key)) {
67
- return getBoolean(key)
38
+ return getDouble(key).toFloat()
68
39
  }
69
40
  return defaultValue
70
41
  }
71
42
 
72
- fun ReadableMap.getStringOrDefault(key: String, defaultValue: String?): String? {
43
+ fun ReadableMap.getStringOrDefault(key: String, defaultValue: String? = null): String? {
73
44
  if (hasKey(key)) {
74
45
  return getString(key)
75
46
  }
76
47
  return defaultValue
77
48
  }
78
49
 
79
- fun ReadableMap.getIntOrDefault(key: String, defaultValue: Int?): Int? {
50
+ fun ReadableMap.getIntOrDefault(key: String, defaultValue: Int? = null): Int? {
80
51
  if (hasKey(key)) {
81
52
  return getInt(key)
82
53
  }
83
54
  return defaultValue
84
55
  }
85
56
 
86
- fun ReadableMap.getMapOrDefault(key: String, defaultValue: ReadableMap?): ReadableMap? {
57
+ fun ReadableMap.getMapOrDefault(key: String, defaultValue: ReadableMap? = null): ReadableMap? {
87
58
  if (hasKey(key)) {
88
59
  return getMap(key)
89
60
  }
@@ -1,17 +1,20 @@
1
1
  package com.smileidentity.react.viewmanagers
2
2
 
3
3
  import com.facebook.react.bridge.ReactApplicationContext
4
- import com.facebook.react.bridge.ReadableMap
4
+ import com.facebook.react.bridge.ReadableArray
5
5
  import com.facebook.react.module.annotations.ReactModule
6
6
  import com.facebook.react.uimanager.SimpleViewManager
7
7
  import com.facebook.react.uimanager.ThemedReactContext
8
- import com.facebook.react.uimanager.annotations.ReactProp
9
- import com.smileidentity.react.views.SmileIDBiometricKYC
8
+ import com.smileidentity.react.toIdInfo
9
+ import com.smileidentity.react.utils.getBoolOrDefault
10
+ import com.smileidentity.react.utils.getStringOrDefault
11
+ import com.smileidentity.react.utils.toMap
12
+ import com.smileidentity.react.views.SmileIDBiometricKYCView
10
13
 
11
14
 
12
15
  @ReactModule(name = SmileIDBiometricKYCViewManager.NAME)
13
16
  class SmileIDBiometricKYCViewManager(private val reactApplicationContext: ReactApplicationContext) :
14
- SimpleViewManager<SmileIDBiometricKYC>() {
17
+ SimpleViewManager<SmileIDBiometricKYCView>() {
15
18
  override fun getName(): String {
16
19
  return NAME
17
20
  }
@@ -26,17 +29,46 @@ class SmileIDBiometricKYCViewManager(private val reactApplicationContext: ReactA
26
29
  )
27
30
  }
28
31
 
29
- @ReactProp(name = "product")
30
- fun setProduct(view: SmileIDBiometricKYC, product: ReadableMap) {
31
- view.product = product
32
+ override fun getCommandsMap(): Map<String, Int> {
33
+ return mapOf("setParams" to COMMAND_SET_PARAMS)
32
34
  }
33
35
 
34
- override fun createViewInstance(p0: ThemedReactContext): SmileIDBiometricKYC {
35
- return SmileIDBiometricKYC(reactApplicationContext)
36
+ override fun receiveCommand(
37
+ view: SmileIDBiometricKYCView,
38
+ commandId: String?,
39
+ args: ReadableArray?
40
+ ) {
41
+ super.receiveCommand(view, commandId, args)
42
+ when (commandId?.toInt()) {
43
+ COMMAND_SET_PARAMS -> {
44
+ // Extract params from args and apply to view
45
+ val params = args?.getMap(0)
46
+ params?.let {
47
+ val idInfoMap = params.getMap("idInfo")
48
+ ?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
49
+ val idInfo = idInfoMap.toIdInfo()
50
+ ?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
51
+ view.extraPartnerParams = params.getMap("extraPartnerParams")?.toMap()
52
+ view.userId = params.getStringOrDefault("userId")
53
+ view.jobId = params.getStringOrDefault("jobId")
54
+ view.idInfo = idInfo
55
+ view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", false)
56
+ view.showAttribution = params.getBoolOrDefault("showAttribution", true)
57
+ view.showInstructions = params.getBoolOrDefault("showInstructions", true)
58
+ view.allowNewEnroll = params.getBoolOrDefault("allowNewEnroll", false)
59
+ view.renderContent()
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+ override fun createViewInstance(p0: ThemedReactContext): SmileIDBiometricKYCView {
66
+ return SmileIDBiometricKYCView(reactApplicationContext)
36
67
  }
37
68
 
38
69
  companion object {
39
70
  const val NAME = "SmileIDBiometricKYCView"
71
+ const val COMMAND_SET_PARAMS = 6
40
72
  }
41
73
 
42
74
  }
@@ -0,0 +1,83 @@
1
+ package com.smileidentity.react.viewmanagers
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.module.annotations.ReactModule
6
+ import com.facebook.react.uimanager.SimpleViewManager
7
+ import com.facebook.react.uimanager.ThemedReactContext
8
+ import com.smileidentity.react.utils.getBoolOrDefault
9
+ import com.smileidentity.react.utils.getMapOrDefault
10
+ import com.smileidentity.react.utils.getStringOrDefault
11
+ import com.smileidentity.react.utils.toMap
12
+ import com.smileidentity.react.views.SmileIDConsentView
13
+
14
+
15
+ @ReactModule(name = SmileIDConsentViewManager.NAME)
16
+ class SmileIDConsentViewManager(private val reactApplicationContext: ReactApplicationContext) :
17
+ SimpleViewManager<SmileIDConsentView>() {
18
+ override fun getName(): String {
19
+ return NAME
20
+ }
21
+
22
+ override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
23
+ return mapOf(
24
+ "onSmileResult" to mapOf(
25
+ "phasedRegistrationNames" to mapOf(
26
+ "bubbled" to "onResult"
27
+ )
28
+ )
29
+ )
30
+ }
31
+
32
+ override fun getCommandsMap(): Map<String, Int> {
33
+ return mapOf("setParams" to COMMAND_SET_PARAMS)
34
+ }
35
+
36
+ override fun receiveCommand(
37
+ view: SmileIDConsentView,
38
+ commandId: String?,
39
+ args: ReadableArray?
40
+ ) {
41
+ super.receiveCommand(view, commandId, args)
42
+ when (commandId?.toInt()) {
43
+ COMMAND_SET_PARAMS -> {
44
+ // Extract params from args and apply to view
45
+ val params = args?.getMap(0)
46
+ params?.let {
47
+
48
+ val partnerName = params.getString("partnerName")
49
+ ?: return view.emitFailure(IllegalArgumentException("partnerName is required to show Consent Screen"))
50
+ val partnerPrivacyPolicy = params.getString("partnerPrivacyPolicy") ?: return view.emitFailure(
51
+ IllegalArgumentException("partnerPrivacyPolicy is required to show Consent Screen")
52
+ )
53
+ val logoResName = params.getString("partnerIcon")
54
+ ?: return view.emitFailure(IllegalArgumentException("partnerIcon is required to show Consent Screen"))
55
+ val productName = params.getString("productName")
56
+ ?: return view.emitFailure(IllegalArgumentException("productName is required to show Consent Screen"))
57
+
58
+ view.extraPartnerParams = params.getMapOrDefault("extraPartnerParams")?.toMap()
59
+ view.userId = params.getStringOrDefault("userId")
60
+ view.jobId = params.getStringOrDefault("jobId")
61
+ view.partnerName = partnerName
62
+ view.partnerPrivacyPolicy = partnerPrivacyPolicy
63
+ view.logoResName = logoResName
64
+ view.productName = productName
65
+ view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", false)
66
+ view.showAttribution = params.getBoolOrDefault("showAttribution", true)
67
+ view.showInstructions = params.getBoolOrDefault("showInstructions", true)
68
+ view.renderContent()
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ override fun createViewInstance(p0: ThemedReactContext): SmileIDConsentView {
75
+ return SmileIDConsentView(reactApplicationContext)
76
+ }
77
+
78
+ companion object {
79
+ const val NAME = "SmileIDConsentView"
80
+ const val COMMAND_SET_PARAMS = 5
81
+ }
82
+
83
+ }