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

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 (122) hide show
  1. package/android/gradle.properties +1 -1
  2. package/android/src/main/java/com/smileidentity/react/SmileIdModule.kt +59 -9
  3. package/android/src/main/java/com/smileidentity/react/SmileIdPackage.kt +4 -2
  4. package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +16 -10
  5. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +38 -9
  6. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +77 -0
  7. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +43 -9
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +75 -0
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +35 -9
  10. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +35 -9
  11. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +54 -0
  12. package/android/src/main/java/com/smileidentity/react/views/SmileIDConsentView.kt +60 -0
  13. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerificationView.kt +69 -0
  14. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +63 -0
  15. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthenticationView.kt +50 -0
  16. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +49 -0
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +2 -27
  18. package/android/src/oldarch/SmileIdSpec.kt +4 -1
  19. package/ios/RNDelegates/SmileIDUIViewDelegate.swift +4 -0
  20. package/ios/RNDelegates/SmileIDViewDelegate.swift +5 -0
  21. package/ios/RNSmileID.mm +7 -0
  22. package/ios/RNSmileID.swift +147 -0
  23. package/ios/SmileId.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  24. package/ios/SmileId.xcodeproj/project.xcworkspace/xcuserdata/japhetndhlovu.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  25. package/ios/SmileId.xcodeproj/xcuserdata/japhetndhlovu.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  26. package/ios/Utils/SmileIDDictExt.swift +50 -0
  27. package/ios/Utils/SmileIDUtils.swift +10 -0
  28. package/ios/View/BaseSmileIDView.swift +35 -0
  29. package/ios/View/SmileIDBiometricKYCView.swift +44 -0
  30. package/ios/View/SmileIDConsentView.swift +35 -0
  31. package/ios/View/SmileIDDocumentVerificationView.swift +53 -0
  32. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +53 -0
  33. package/ios/View/SmileIDSmartSelfieAuthView.swift +39 -0
  34. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +39 -0
  35. package/ios/ViewManagers/SmileIDBaseViewManager.swift +17 -0
  36. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.m +6 -0
  37. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +33 -0
  38. package/ios/ViewManagers/SmileIDConsentViewManager.m +6 -0
  39. package/ios/ViewManagers/SmileIDConsentViewManager.swift +47 -0
  40. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.m +6 -0
  41. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +48 -0
  42. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.m +6 -0
  43. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +48 -0
  44. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.m +6 -0
  45. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +26 -0
  46. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.m +6 -0
  47. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +26 -0
  48. package/ios/ViewModels/SmileIDProductModel.swift +29 -0
  49. package/ios/react-native-smile-id-Bridging-Header.h +8 -0
  50. package/lib/commonjs/NativeSmileId.js +1 -1
  51. package/lib/commonjs/NativeSmileId.js.map +1 -1
  52. package/lib/commonjs/SmileIDBiometricKYCView.js +40 -0
  53. package/lib/commonjs/SmileIDBiometricKYCView.js.map +1 -0
  54. package/lib/commonjs/SmileIDConsentView.js +40 -0
  55. package/lib/commonjs/SmileIDConsentView.js.map +1 -0
  56. package/lib/commonjs/SmileIDDocumentVerificationView.js +40 -0
  57. package/lib/commonjs/SmileIDDocumentVerificationView.js.map +1 -0
  58. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js +40 -0
  59. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js.map +1 -0
  60. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js +40 -0
  61. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js.map +1 -0
  62. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js +40 -0
  63. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js.map +1 -0
  64. package/lib/commonjs/index.js +98 -27
  65. package/lib/commonjs/index.js.map +1 -1
  66. package/lib/commonjs/types.js +6 -0
  67. package/lib/commonjs/types.js.map +1 -0
  68. package/lib/module/NativeSmileId.js +1 -1
  69. package/lib/module/NativeSmileId.js.map +1 -1
  70. package/lib/module/SmileIDBiometricKYCView.js +30 -0
  71. package/lib/module/SmileIDBiometricKYCView.js.map +1 -0
  72. package/lib/module/SmileIDConsentView.js +30 -0
  73. package/lib/module/SmileIDConsentView.js.map +1 -0
  74. package/lib/module/SmileIDDocumentVerificationView.js +30 -0
  75. package/lib/module/SmileIDDocumentVerificationView.js.map +1 -0
  76. package/lib/module/SmileIDEnhancedDocumentVerificationView.js +30 -0
  77. package/lib/module/SmileIDEnhancedDocumentVerificationView.js.map +1 -0
  78. package/lib/module/SmileIDSmartSelfieAuthenticationView.js +30 -0
  79. package/lib/module/SmileIDSmartSelfieAuthenticationView.js.map +1 -0
  80. package/lib/module/SmileIDSmartSelfieEnrollmentView.js +30 -0
  81. package/lib/module/SmileIDSmartSelfieEnrollmentView.js.map +1 -0
  82. package/lib/module/index.js +33 -21
  83. package/lib/module/index.js.map +1 -1
  84. package/lib/module/types.js +2 -0
  85. package/lib/module/types.js.map +1 -0
  86. package/lib/typescript/NativeSmileId.d.ts +16 -1
  87. package/lib/typescript/NativeSmileId.d.ts.map +1 -1
  88. package/lib/typescript/SmileIDBiometricKYCView.d.ts +8 -0
  89. package/lib/typescript/SmileIDBiometricKYCView.d.ts.map +1 -0
  90. package/lib/typescript/SmileIDConsentView.d.ts +8 -0
  91. package/lib/typescript/SmileIDConsentView.d.ts.map +1 -0
  92. package/lib/typescript/SmileIDDocumentVerificationView.d.ts +8 -0
  93. package/lib/typescript/SmileIDDocumentVerificationView.d.ts.map +1 -0
  94. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts +8 -0
  95. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts.map +1 -0
  96. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts +8 -0
  97. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts.map +1 -0
  98. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts +8 -0
  99. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts.map +1 -0
  100. package/lib/typescript/index.d.ts +24 -86
  101. package/lib/typescript/index.d.ts.map +1 -1
  102. package/lib/typescript/types.d.ts +182 -0
  103. package/lib/typescript/types.d.ts.map +1 -0
  104. package/package.json +1 -2
  105. package/react-native-smile-id.podspec +2 -2
  106. package/src/NativeSmileId.ts +17 -5
  107. package/src/SmileIDBiometricKYCView.tsx +45 -0
  108. package/src/SmileIDConsentView.tsx +44 -0
  109. package/src/SmileIDDocumentVerificationView.tsx +51 -0
  110. package/src/SmileIDEnhancedDocumentVerificationView.tsx +51 -0
  111. package/src/SmileIDSmartSelfieAuthenticationView.tsx +51 -0
  112. package/src/SmileIDSmartSelfieEnrollmentView.tsx +51 -0
  113. package/src/index.tsx +54 -122
  114. package/src/types.ts +189 -0
  115. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBVNConsentViewManager.kt +0 -42
  116. package/android/src/main/java/com/smileidentity/react/views/SmileIDBVNConsentScreen.kt +0 -54
  117. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYC.kt +0 -89
  118. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerification.kt +0 -59
  119. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthentication.kt +0 -47
  120. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollment.kt +0 -48
  121. package/ios/SmileId.h +0 -12
  122. package/ios/SmileId.mm +0 -27
@@ -0,0 +1,54 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import androidx.compose.runtime.saveable.rememberSaveable
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.smileidentity.SmileID
6
+ import com.smileidentity.compose.BiometricKYC
7
+ import com.smileidentity.models.IdInfo
8
+ import com.smileidentity.results.BiometricKycResult
9
+ import com.smileidentity.results.SmileIDResult
10
+ import com.smileidentity.util.randomJobId
11
+ import com.smileidentity.util.randomUserId
12
+ import timber.log.Timber
13
+
14
+ class SmileIDBiometricKYCView(context: ReactApplicationContext) : SmileIDView(context) {
15
+ var idInfo: IdInfo? = null
16
+ override fun renderContent() {
17
+ idInfo ?: run {
18
+ emitFailure(IllegalArgumentException("idInfo is required for BiometricKYC"))
19
+ return
20
+ }
21
+
22
+ composeView.apply {
23
+ setContent {
24
+ SmileID.BiometricKYC(
25
+ idInfo = idInfo!!,
26
+ userId = userId ?: rememberSaveable { randomUserId() },
27
+ jobId = jobId ?: rememberSaveable { randomJobId() },
28
+ allowAgentMode = allowAgentMode ?: false,
29
+ showAttribution = showInstructions ?: true,
30
+ ) { result ->
31
+ when (result) {
32
+ is SmileIDResult.Success -> {
33
+ val json = try {
34
+ SmileID.moshi
35
+ .adapter(BiometricKycResult::class.java)
36
+ .toJson(result.data)
37
+ } catch (e: Exception) {
38
+ Timber.w(e)
39
+ "null"
40
+ }
41
+ emitSuccess(json)
42
+ }
43
+
44
+ is SmileIDResult.Error -> {
45
+ result.throwable.printStackTrace()
46
+ emitFailure(result.throwable)
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ }
@@ -0,0 +1,60 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import android.webkit.URLUtil
4
+ import androidx.compose.ui.res.painterResource
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.smileidentity.SmileID
7
+ import com.smileidentity.compose.ConsentScreen
8
+ import java.net.URL
9
+
10
+ class SmileIDConsentView(context: ReactApplicationContext) : SmileIDView(context) {
11
+ var partnerName : String? = null
12
+ var partnerPrivacyPolicy : String? = null
13
+ var logoResName : String? = null
14
+ var productName : String? = null
15
+ override fun renderContent() {
16
+ partnerName ?: run {
17
+ emitFailure(IllegalArgumentException("partnerName is required for BiometricKYC"))
18
+ return
19
+ }
20
+ partnerPrivacyPolicy?: run {
21
+ emitFailure(IllegalArgumentException("partnerPrivacyPolicy is required for BiometricKYC"))
22
+ return
23
+ }
24
+ if (!URLUtil.isValidUrl(partnerPrivacyPolicy)) {
25
+ emitFailure(IllegalArgumentException("a valid url for partnerPrivacyPolicy is required for BiometricKYC"))
26
+ return
27
+ }
28
+ logoResName ?: run {
29
+ emitFailure(IllegalArgumentException("partnerIcon is required for BiometricKYC"))
30
+ return
31
+ }
32
+ productName ?: run {
33
+ emitFailure(IllegalArgumentException("productName is required for BiometricKYC"))
34
+ return
35
+ }
36
+ val partnerIcon = context.resources.getIdentifier(
37
+ logoResName,
38
+ "drawable",
39
+ (context as? ReactApplicationContext)?.currentActivity?.packageName
40
+ )
41
+ composeView.apply {
42
+ setContent {
43
+ SmileID.ConsentScreen(
44
+ partnerIcon = painterResource(
45
+ id = partnerIcon
46
+ ),
47
+ partnerName = partnerName!!,
48
+ productName = productName!!,
49
+ partnerPrivacyPolicy = URL(partnerPrivacyPolicy),
50
+ onConsentDenied = {
51
+ emitSuccess("denied")
52
+ },
53
+ onConsentGranted = {
54
+ emitSuccess("accepted")
55
+ },
56
+ )
57
+ }
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,69 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import androidx.compose.runtime.saveable.rememberSaveable
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.smileidentity.SmileID
6
+ import com.smileidentity.compose.DocumentVerification
7
+ import com.smileidentity.results.DocumentVerificationResult
8
+ import com.smileidentity.results.SmileIDResult
9
+ import com.smileidentity.util.randomJobId
10
+ import com.smileidentity.util.randomUserId
11
+ import kotlinx.collections.immutable.toImmutableMap
12
+ import timber.log.Timber
13
+ import java.io.File
14
+
15
+ class SmileIDDocumentVerificationView(context: ReactApplicationContext) : SmileIDView(context) {
16
+ var countryCode: String? = null
17
+ var allowGalleryUpload: Boolean = false
18
+ var captureBothSides: Boolean = true
19
+ var bypassSelfieCaptureWithFilePath: String? = null
20
+ var documentType: String? = null
21
+ var idAspectRatio: Float? = null
22
+
23
+ override fun renderContent() {
24
+ countryCode ?: run {
25
+ emitFailure(IllegalArgumentException("countryCode is required for DocumentVerification"))
26
+ return
27
+ }
28
+ var bypassSelfieCaptureWithFile: File? = null
29
+ bypassSelfieCaptureWithFilePath?.let {
30
+ bypassSelfieCaptureWithFile = File(it)
31
+ }
32
+ composeView.apply {
33
+ setContent {
34
+ SmileID.DocumentVerification(
35
+ userId = userId ?: rememberSaveable { randomUserId() },
36
+ jobId = jobId ?: rememberSaveable { randomJobId() },
37
+ countryCode = countryCode!!,
38
+ documentType = documentType,
39
+ idAspectRatio = idAspectRatio,
40
+ showAttribution = showAttribution ?: true,
41
+ showInstructions = showInstructions ?: true,
42
+ allowGalleryUpload = allowGalleryUpload,
43
+ captureBothSides = captureBothSides,
44
+ bypassSelfieCaptureWithFile = bypassSelfieCaptureWithFile,
45
+ extraPartnerParams = (extraPartnerParams ?: mapOf()).toImmutableMap(),
46
+ ) { result ->
47
+ when (result) {
48
+ is SmileIDResult.Success -> {
49
+ val json = try {
50
+ SmileID.moshi
51
+ .adapter(DocumentVerificationResult::class.java)
52
+ .toJson(result.data)
53
+ } catch (e: Exception) {
54
+ Timber.w(e)
55
+ "null"
56
+ }
57
+ emitSuccess(json)
58
+ }
59
+
60
+ is SmileIDResult.Error -> {
61
+ result.throwable.printStackTrace()
62
+ emitFailure(result.throwable)
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,63 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import androidx.compose.runtime.saveable.rememberSaveable
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.smileidentity.SmileID
6
+ import com.smileidentity.compose.EnhancedDocumentVerificationScreen
7
+ import com.smileidentity.results.EnhancedDocumentVerificationResult
8
+ import com.smileidentity.results.SmileIDResult
9
+ import com.smileidentity.util.randomJobId
10
+ import com.smileidentity.util.randomUserId
11
+ import kotlinx.collections.immutable.toImmutableMap
12
+ import timber.log.Timber
13
+
14
+ class SmileIDEnhancedDocumentVerificationView(context: ReactApplicationContext) :
15
+ SmileIDView(context) {
16
+ var countryCode: String? = null
17
+ var allowGalleryUpload: Boolean = false
18
+ var captureBothSides: Boolean = true
19
+ var documentType: String? = null
20
+ var idAspectRatio: Float? = null
21
+
22
+ override fun renderContent() {
23
+ countryCode ?: run {
24
+ emitFailure(IllegalArgumentException("countryCode is required for DocumentVerification"))
25
+ return;
26
+ }
27
+ composeView.apply {
28
+ setContent {
29
+ SmileID.EnhancedDocumentVerificationScreen(
30
+ userId = userId ?: rememberSaveable { randomUserId() },
31
+ jobId = jobId ?: rememberSaveable { randomJobId() },
32
+ countryCode = countryCode!!,
33
+ documentType = documentType,
34
+ idAspectRatio = idAspectRatio,
35
+ showAttribution = showAttribution ?: true,
36
+ showInstructions = showInstructions ?: true,
37
+ allowGalleryUpload = allowGalleryUpload,
38
+ captureBothSides = captureBothSides,
39
+ extraPartnerParams = (extraPartnerParams ?: mapOf()).toImmutableMap(),
40
+ ) { result ->
41
+ when (result) {
42
+ is SmileIDResult.Success -> {
43
+ val json = try {
44
+ SmileID.moshi
45
+ .adapter(EnhancedDocumentVerificationResult::class.java)
46
+ .toJson(result.data)
47
+ } catch (e: Exception) {
48
+ Timber.w(e)
49
+ "null"
50
+ }
51
+ emitSuccess(json)
52
+ }
53
+
54
+ is SmileIDResult.Error -> {
55
+ result.throwable.printStackTrace()
56
+ emitFailure(result.throwable)
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,50 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import androidx.compose.runtime.saveable.rememberSaveable
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.smileidentity.SmileID
6
+ import com.smileidentity.compose.SmartSelfieAuthentication
7
+ import com.smileidentity.results.SmartSelfieResult
8
+ import com.smileidentity.results.SmileIDResult
9
+ import com.smileidentity.util.randomJobId
10
+ import com.smileidentity.util.randomUserId
11
+ import kotlinx.collections.immutable.toImmutableMap
12
+ import timber.log.Timber
13
+
14
+ class SmileIDSmartSelfieAuthenticationView(context: ReactApplicationContext) :
15
+ SmileIDView(context) {
16
+
17
+ override fun renderContent() {
18
+ composeView.apply {
19
+ setContent {
20
+ SmileID.SmartSelfieAuthentication(
21
+ userId = userId ?: rememberSaveable { randomUserId() },
22
+ jobId = jobId ?: rememberSaveable { randomJobId() },
23
+ allowAgentMode = allowAgentMode ?: false,
24
+ showAttribution = showAttribution ?: true,
25
+ showInstructions = showInstructions ?: true,
26
+ extraPartnerParams = (extraPartnerParams ?: mapOf()).toImmutableMap(),
27
+ ) { result ->
28
+ when (result) {
29
+ is SmileIDResult.Success -> {
30
+ val json = try {
31
+ SmileID.moshi
32
+ .adapter(SmartSelfieResult::class.java)
33
+ .toJson(result.data)
34
+ } catch (e: Exception) {
35
+ Timber.w(e)
36
+ "null"
37
+ }
38
+ emitSuccess(json)
39
+ }
40
+
41
+ is SmileIDResult.Error -> {
42
+ result.throwable.printStackTrace()
43
+ emitFailure(result.throwable)
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
@@ -0,0 +1,49 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import androidx.compose.runtime.saveable.rememberSaveable
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.smileidentity.SmileID
6
+ import com.smileidentity.compose.SmartSelfieEnrollment
7
+ import com.smileidentity.results.SmartSelfieResult
8
+ import com.smileidentity.results.SmileIDResult
9
+ import com.smileidentity.util.randomJobId
10
+ import com.smileidentity.util.randomUserId
11
+ import kotlinx.collections.immutable.toImmutableMap
12
+ import timber.log.Timber
13
+
14
+ class SmileIDSmartSelfieEnrollmentView(context: ReactApplicationContext) : SmileIDView(context) {
15
+
16
+ override fun renderContent() {
17
+ composeView.apply {
18
+ setContent {
19
+ SmileID.SmartSelfieEnrollment(
20
+ userId = userId ?: rememberSaveable { randomUserId() },
21
+ jobId = jobId ?: rememberSaveable { randomJobId() },
22
+ allowAgentMode = allowAgentMode ?: false,
23
+ showAttribution = showAttribution ?: true,
24
+ showInstructions = showInstructions ?: true,
25
+ extraPartnerParams = (extraPartnerParams ?: mapOf()).toImmutableMap(),
26
+ ) { result ->
27
+ when (result) {
28
+ is SmileIDResult.Success -> {
29
+ val json = try {
30
+ SmileID.moshi
31
+ .adapter(SmartSelfieResult::class.java)
32
+ .toJson(result.data)
33
+ } catch (e: Exception) {
34
+ Timber.w(e)
35
+ "null"
36
+ }
37
+ emitSuccess(json)
38
+ }
39
+
40
+ is SmileIDResult.Error -> {
41
+ result.throwable.printStackTrace()
42
+ emitFailure(result.throwable)
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
@@ -7,12 +7,9 @@ import androidx.compose.ui.platform.ComposeView
7
7
  import com.facebook.react.bridge.Arguments
8
8
  import com.facebook.react.bridge.ReactApplicationContext
9
9
  import com.facebook.react.bridge.ReactContext
10
- import com.facebook.react.bridge.ReadableMap
11
10
  import com.facebook.react.bridge.WritableMap
12
11
  import com.facebook.react.uimanager.events.RCTEventEmitter
13
12
  import com.smileidentity.models.JobType
14
- import com.smileidentity.react.utils.getBoolOrDefault
15
- import com.smileidentity.react.utils.getIntOrDefault
16
13
  import timber.log.Timber
17
14
 
18
15
  abstract class SmileIDView(context: ReactApplicationContext) : LinearLayout(context) {
@@ -22,13 +19,10 @@ abstract class SmileIDView(context: ReactApplicationContext) : LinearLayout(cont
22
19
  private var jobType: JobType? = null
23
20
  var allowAgentMode: Boolean? = false
24
21
  var showInstructions: Boolean? = true
22
+ var showAttribution: Boolean? = true
23
+ var extraPartnerParams: Map<String, String>? = null
25
24
  private var eventEmitter: RCTEventEmitter
26
25
  private var productThrowable: Throwable? = null
27
- var product: ReadableMap? = null
28
- set(value) {
29
- field = value
30
- render()
31
- }
32
26
 
33
27
  init {
34
28
  val layoutParams = ViewGroup.LayoutParams(
@@ -50,28 +44,9 @@ abstract class SmileIDView(context: ReactApplicationContext) : LinearLayout(cont
50
44
  manuallyLayoutChildren()
51
45
  }
52
46
 
53
- private fun checkCommonArgs() {
54
- if (product == null) {
55
- productThrowable = IllegalArgumentException("Product is null")
56
- emitFailure(productThrowable!!)
57
- return;
58
- }
59
- userId = product?.getString("userId")
60
- jobId = product?.getString("userId")
61
-
62
- allowAgentMode = product?.getBoolOrDefault("allowAgentMode", false)
63
- showInstructions = product?.getBoolOrDefault("showInstructions", true)
64
- val setJobType = product?.getIntOrDefault("jobType", null)
65
- setJobType?.let { jobTypeValue ->
66
- jobType = JobType.fromValue(jobTypeValue)
67
- }
68
- }
69
-
70
47
  abstract fun renderContent()
71
48
 
72
49
  open fun render() {
73
- checkCommonArgs();
74
- checkCommonArgs();
75
50
  renderContent()
76
51
  }
77
52
 
@@ -8,6 +8,9 @@ import com.facebook.react.bridge.ReadableMap
8
8
  abstract class SmileIdSpec internal constructor(context: ReactApplicationContext) :
9
9
  ReactContextBaseJavaModule(context) {
10
10
 
11
- abstract fun initialize(enableCrashReporting: Boolean,useSandBox: Boolean ,promise: Promise)
11
+ abstract fun initialize(useSandBox: Boolean ,promise: Promise)
12
+
13
+ abstract fun disableCrashReporting(promise: Promise)
12
14
  abstract fun doEnhancedKycAsync(request: ReadableMap, promise: Promise)
15
+ abstract fun doEnhancedKyc(request: ReadableMap, promise: Promise)
13
16
  }
@@ -0,0 +1,4 @@
1
+ import UIKit
2
+ protocol SmileIDUIViewDelegate {
3
+ func getView() -> UIView
4
+ }
@@ -0,0 +1,5 @@
1
+ import SwiftUI
2
+ protocol SmileIDViewDelegate {
3
+ associatedtype ContentView: View
4
+ func getView() -> ContentView
5
+ }
@@ -0,0 +1,7 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ @interface RCT_EXTERN_MODULE(RNSmileID, NSObject)
4
+ RCT_EXTERN_METHOD(initialize:(BOOL)useSandBox withResolver:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject)
5
+ RCT_EXTERN_METHOD(doEnhancedKyc:(NSDictionary *)request withResolver:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject)
6
+ RCT_EXTERN_METHOD(doEnhancedKycAsync:(NSDictionary *)request withResolver:(RCTPromiseResolveBlock)resolve withRejecter:(RCTPromiseRejectBlock)reject)
7
+ @end
@@ -0,0 +1,147 @@
1
+ import Combine
2
+ import SmileID
3
+
4
+ @objc(RNSmileID)
5
+ class RNSmileID: NSObject {
6
+ private var cancellables = Set<AnyCancellable>()
7
+
8
+ @objc(initialize:withResolver:withRejecter:)
9
+ func initialize(useSandBox: Bool, resolve: @escaping RCTPromiseResolveBlock, reject _: @escaping RCTPromiseRejectBlock) {
10
+ SmileID.initialize(useSandbox: useSandBox)
11
+ resolve(nil)
12
+ }
13
+
14
+ @objc(doEnhancedKyc:withResolver:withRejecter:)
15
+ func doEnhancedKyc(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
16
+ guard let partnerParamsDict = request["partnerParams"] as? NSDictionary else {
17
+ reject("doEnhancedKyc", "partnerParams is required", nil)
18
+ return
19
+ }
20
+ guard let partnerParams = partnerParamsDict.toPartnerParams() else {
21
+ reject("doEnhancedKyc", "partnerParams is missing required data", nil)
22
+ return
23
+ }
24
+ guard let country = request["country"] as? String else {
25
+ reject("doEnhancedKyc", "country is required", nil)
26
+ return
27
+ }
28
+ guard let idType = request["idType"] as? String else {
29
+ reject("doEnhancedKyc", "idType is required", nil)
30
+ return
31
+ }
32
+ guard let idNumber = request["idNumber"] as? String else {
33
+ reject("doEnhancedKyc", "idNumber is required", nil)
34
+ return
35
+ }
36
+ guard let timestamp = request["timestamp"] as? String else {
37
+ reject("doEnhancedKyc", "timestamp is required", nil)
38
+ return
39
+ }
40
+ guard let signature = request["signature"] as? String else {
41
+ reject("doEnhancedKyc", "signature is required", nil)
42
+ return
43
+ }
44
+
45
+ let request = EnhancedKycRequest(
46
+ country: country,
47
+ idType: idType,
48
+ idNumber: idNumber,
49
+ firstName: request["firstName"] as? String,
50
+ middleName: request["middleName"] as? String,
51
+ lastName: request["lastName"] as? String,
52
+ dob: request["dob"] as? String,
53
+ phoneNumber: request["phoneNumber"] as? String,
54
+ bankCode: request["bankCode"] as? String,
55
+ callbackUrl: request["callbackUrl"] as? String,
56
+ partnerParams: partnerParams,
57
+ sourceSdk: "ios (react-native)",
58
+ timestamp: timestamp,
59
+ signature: signature
60
+ )
61
+
62
+ SmileID.api.doEnhancedKyc(request: request)
63
+ .sink(receiveCompletion: { completion in
64
+ switch completion {
65
+ case let .failure(error):
66
+ reject("Error", error.localizedDescription, error)
67
+ case .finished:
68
+ break
69
+ }
70
+ }, receiveValue: { response in
71
+ let encoder = JSONEncoder()
72
+ guard let jsonData = try? encoder.encode(response) else {
73
+ reject("Error", "doEnhancedKyc encoding error ",
74
+ SmileIDError.unknown("doEnhancedKyc encoding error "))
75
+ return
76
+ }
77
+ resolve(["result": String(data: jsonData, encoding: .utf8)!]) // Assuming you have a method to convert response to a dictionary
78
+ }).store(in: &cancellables)
79
+ }
80
+
81
+ @objc(doEnhancedKycAsync:withResolver:withRejecter:)
82
+ func doEnhancedKycAsync(request: NSDictionary, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
83
+ guard let partnerParamsDict = request["partnerParams"] as? NSDictionary else {
84
+ reject("doEnhancedKyc", "partnerParams is required", nil)
85
+ return
86
+ }
87
+ guard let partnerParams = partnerParamsDict.toPartnerParams() else {
88
+ reject("doEnhancedKyc", "partnerParams is missing required data", nil)
89
+ return
90
+ }
91
+ guard let country = request["country"] as? String else {
92
+ reject("doEnhancedKyc", "country is required", nil)
93
+ return
94
+ }
95
+ guard let idType = request["idType"] as? String else {
96
+ reject("doEnhancedKyc", "idType is required", nil)
97
+ return
98
+ }
99
+ guard let idNumber = request["idNumber"] as? String else {
100
+ reject("doEnhancedKyc", "idNumber is required", nil)
101
+ return
102
+ }
103
+ guard let timestamp = request["timestamp"] as? String else {
104
+ reject("doEnhancedKyc", "timestamp is required", nil)
105
+ return
106
+ }
107
+ guard let signature = request["signature"] as? String else {
108
+ reject("doEnhancedKyc", "signature is required", nil)
109
+ return
110
+ }
111
+
112
+ let request = EnhancedKycRequest(
113
+ country: country,
114
+ idType: idType,
115
+ idNumber: idNumber,
116
+ firstName: request["firstName"] as? String,
117
+ middleName: request["middleName"] as? String,
118
+ lastName: request["lastName"] as? String,
119
+ dob: request["dob"] as? String,
120
+ phoneNumber: request["phoneNumber"] as? String,
121
+ bankCode: request["bankCode"] as? String,
122
+ callbackUrl: request["callbackUrl"] as? String,
123
+ partnerParams: partnerParams,
124
+ sourceSdk: "ios (react-native)",
125
+ timestamp: timestamp,
126
+ signature: signature
127
+ )
128
+
129
+ SmileID.api.doEnhancedKycAsync(request: request)
130
+ .sink(receiveCompletion: { completion in
131
+ switch completion {
132
+ case let .failure(error):
133
+ reject("Error", error.localizedDescription, error)
134
+ case .finished:
135
+ break
136
+ }
137
+ }, receiveValue: { response in
138
+ let encoder = JSONEncoder()
139
+ guard let jsonData = try? encoder.encode(response) else {
140
+ reject("Error", "doEnhancedKyc encoding error ",
141
+ SmileIDError.unknown("doEnhancedKyc encoding error "))
142
+ return
143
+ }
144
+ resolve(["result": String(data: jsonData, encoding: .utf8)!]) // Assuming you have a method to convert response to a dictionary
145
+ }).store(in: &cancellables)
146
+ }
147
+ }
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>IDEDidComputeMac32BitWarning</key>
6
+ <true/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>SchemeUserState</key>
6
+ <dict>
7
+ <key>SmileId.xcscheme_^#shared#^_</key>
8
+ <dict>
9
+ <key>orderHint</key>
10
+ <integer>0</integer>
11
+ </dict>
12
+ </dict>
13
+ </dict>
14
+ </plist>
@@ -0,0 +1,50 @@
1
+ import Foundation
2
+ import SmileID
3
+
4
+ extension NSDictionary {
5
+ func toIdInfo() -> IdInfo? {
6
+ guard let country = self["country"] as? String else {
7
+ return nil
8
+ }
9
+
10
+ let idType = self["id_type"] as? String
11
+ let idNumber = self["id_number"] as? String
12
+ let firstName = self["first_name"] as? String
13
+ let middleName = self["middle_name"] as? String
14
+ let lastName = self["last_name"] as? String
15
+ let dob = self["dob"] as? String
16
+ let bankCode = self["bank_code"] as? String
17
+ let entered = self["entered"] as? Bool
18
+
19
+ return IdInfo(
20
+ country: country,
21
+ idType: idType,
22
+ idNumber: idNumber,
23
+ firstName: firstName,
24
+ middleName: middleName,
25
+ lastName: lastName,
26
+ dob: dob,
27
+ bankCode: bankCode,
28
+ entered: entered
29
+ )
30
+ }
31
+
32
+ func toPartnerParams() -> PartnerParams? {
33
+ guard let country = self["country"] as? String else {
34
+ return nil
35
+ }
36
+ var jobType: JobType?
37
+ let jobId = self["jobId"] as? String
38
+ let userId = self["userId"] as? String
39
+ if let jobTypeValue = self["jobType"] as? Int {
40
+ jobType = JobType(rawValue: jobTypeValue)
41
+ }
42
+ let extras = self["extras"] as? [String: String] ?? [:]
43
+ return PartnerParams(
44
+ jobId: jobId ?? generateJobId(),
45
+ userId: userId ?? generateUserId(),
46
+ jobType: jobType,
47
+ extras: extras
48
+ )
49
+ }
50
+ }
@@ -0,0 +1,10 @@
1
+ import Foundation
2
+
3
+ extension String {
4
+ func isValidUrl() -> Bool {
5
+ if let url = URL(string: self) {
6
+ return UIApplication.shared.canOpenURL(url)
7
+ }
8
+ return false
9
+ }
10
+ }