@smile_identity/react-native 10.0.0-beta01

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 (43) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +78 -0
  3. package/android/build.gradle +155 -0
  4. package/android/gradle.properties +6 -0
  5. package/android/src/main/AndroidManifest.xml +3 -0
  6. package/android/src/main/AndroidManifestNew.xml +2 -0
  7. package/android/src/main/assets/smile_config.json +9 -0
  8. package/android/src/main/java/com/smileidentity/react/SmileIdModule.kt +97 -0
  9. package/android/src/main/java/com/smileidentity/react/SmileIdPackage.kt +50 -0
  10. package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +91 -0
  11. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBVNConsentViewManager.kt +42 -0
  12. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +42 -0
  13. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +42 -0
  14. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +42 -0
  15. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +42 -0
  16. package/android/src/main/java/com/smileidentity/react/views/SmileIDBVNConsentScreen.kt +54 -0
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYC.kt +89 -0
  18. package/android/src/main/java/com/smileidentity/react/views/SmileIDDocumentVerification.kt +59 -0
  19. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieAuthentication.kt +47 -0
  20. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollment.kt +48 -0
  21. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +121 -0
  22. package/android/src/newarch/SmileIdSpec.kt +7 -0
  23. package/android/src/oldarch/SmileIdSpec.kt +13 -0
  24. package/ios/SmileId.h +12 -0
  25. package/ios/SmileId.mm +27 -0
  26. package/ios/SmileId.xcodeproj/project.pbxproj +274 -0
  27. package/ios/SmileId.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
  28. package/lib/commonjs/NativeSmileId.js +10 -0
  29. package/lib/commonjs/NativeSmileId.js.map +1 -0
  30. package/lib/commonjs/index.js +52 -0
  31. package/lib/commonjs/index.js.map +1 -0
  32. package/lib/module/NativeSmileId.js +3 -0
  33. package/lib/module/NativeSmileId.js.map +1 -0
  34. package/lib/module/index.js +38 -0
  35. package/lib/module/index.js.map +1 -0
  36. package/lib/typescript/NativeSmileId.d.ts +9 -0
  37. package/lib/typescript/NativeSmileId.d.ts.map +1 -0
  38. package/lib/typescript/index.d.ts +89 -0
  39. package/lib/typescript/index.d.ts.map +1 -0
  40. package/package.json +169 -0
  41. package/react-native-smile-id.podspec +42 -0
  42. package/src/NativeSmileId.ts +14 -0
  43. package/src/index.tsx +150 -0
@@ -0,0 +1,42 @@
1
+ package com.smileidentity.react.viewmanagers
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+ import com.facebook.react.bridge.ReadableMap
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.facebook.react.uimanager.annotations.ReactProp
9
+ import com.smileidentity.react.views.SmileIDSmartSelfieAuthentication
10
+
11
+
12
+ @ReactModule(name = SmileIDSmartSelfieAuthenticationViewManager.NAME)
13
+ class SmileIDSmartSelfieAuthenticationViewManager(private val reactApplicationContext: ReactApplicationContext) :
14
+ SimpleViewManager<SmileIDSmartSelfieAuthentication>() {
15
+ override fun getName(): String {
16
+ return NAME
17
+ }
18
+
19
+ override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
20
+ return mapOf(
21
+ "onSmileResult" to mapOf(
22
+ "phasedRegistrationNames" to mapOf(
23
+ "bubbled" to "onResult"
24
+ )
25
+ )
26
+ )
27
+ }
28
+
29
+ @ReactProp(name = "product")
30
+ fun setProduct(view: SmileIDSmartSelfieAuthentication, product: ReadableMap) {
31
+ view.product = product
32
+ }
33
+
34
+ override fun createViewInstance(p0: ThemedReactContext): SmileIDSmartSelfieAuthentication {
35
+ return SmileIDSmartSelfieAuthentication(reactApplicationContext)
36
+ }
37
+
38
+ companion object {
39
+ const val NAME = "SmileIDSmartSelfieAuthenticationView"
40
+ }
41
+
42
+ }
@@ -0,0 +1,42 @@
1
+ package com.smileidentity.react.viewmanagers
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+ import com.facebook.react.bridge.ReadableMap
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.facebook.react.uimanager.annotations.ReactProp
9
+ import com.smileidentity.react.views.SmileIDSmartSelfieEnrollment
10
+
11
+
12
+ @ReactModule(name = SmileIDSmartSelfieEnrollmentViewManager.NAME)
13
+ class SmileIDSmartSelfieEnrollmentViewManager(private val reactApplicationContext: ReactApplicationContext) :
14
+ SimpleViewManager<SmileIDSmartSelfieEnrollment>() {
15
+ override fun getName(): String {
16
+ return NAME
17
+ }
18
+
19
+ override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
20
+ return mapOf(
21
+ "onSmileResult" to mapOf(
22
+ "phasedRegistrationNames" to mapOf(
23
+ "bubbled" to "onResult"
24
+ )
25
+ )
26
+ )
27
+ }
28
+
29
+ @ReactProp(name = "product")
30
+ fun setProduct(view: SmileIDSmartSelfieEnrollment, product: ReadableMap) {
31
+ view.product = product
32
+ }
33
+
34
+ override fun createViewInstance(p0: ThemedReactContext): SmileIDSmartSelfieEnrollment {
35
+ return SmileIDSmartSelfieEnrollment(reactApplicationContext)
36
+ }
37
+
38
+ companion object {
39
+ const val NAME = "SmileIDSmartSelfieEnrollmentView"
40
+ }
41
+
42
+ }
@@ -0,0 +1,54 @@
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.BvnConsentScreen
8
+ import com.smileidentity.react.utils.getStringOrDefault
9
+ import java.net.URL
10
+
11
+ class SmileIDBVNConsentScreen (context: ReactApplicationContext) : SmileIDView(context) {
12
+
13
+ override fun renderContent() {
14
+ product?.let {product->
15
+ val partnerName = product.getStringOrDefault("partnerName",null) ?: run {
16
+ emitFailure(IllegalArgumentException("partnerName is required for BiometricKYC"))
17
+ return
18
+ }
19
+ val partnerPrivacyPolicy = product.getStringOrDefault("partnerPrivacyPolicy",null) ?: run {
20
+ emitFailure(IllegalArgumentException("partnerPrivacyPolicy is required for BiometricKYC"))
21
+ return
22
+ }
23
+ if(!URLUtil.isValidUrl(partnerPrivacyPolicy)){
24
+ emitFailure(IllegalArgumentException("a valid url for partnerPrivacyPolicy is required for BiometricKYC"))
25
+ return
26
+ }
27
+ val logoResName = product.getStringOrDefault("partnerIcon",null) ?: run {
28
+ emitFailure(IllegalArgumentException("partnerPrivacyPolicy is required for BiometricKYC"))
29
+ return
30
+ }
31
+ val partnerIcon = context.resources.getIdentifier(
32
+ logoResName,
33
+ "drawable",
34
+ (context as? ReactApplicationContext)?.currentActivity?.packageName
35
+ )
36
+ composeView.apply {
37
+ setContent {
38
+ SmileID.BvnConsentScreen(
39
+ partnerIcon = painterResource(
40
+ id = partnerIcon
41
+ ),
42
+ partnerName = partnerName,
43
+ partnerPrivacyPolicy = URL(partnerPrivacyPolicy),
44
+ onConsentDenied = {
45
+ emitSuccess("denied")
46
+ },
47
+ onConsentGranted = {
48
+ emitSuccess("accepted")
49
+ },
50
+ )
51
+ }}
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,89 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import android.webkit.URLUtil
4
+ import androidx.compose.runtime.saveable.rememberSaveable
5
+ import androidx.compose.ui.res.painterResource
6
+ import com.facebook.react.bridge.ReactApplicationContext
7
+ import com.smileidentity.SmileID
8
+ import com.smileidentity.compose.BiometricKYC
9
+ import com.smileidentity.react.utils.getStringOrDefault
10
+ import com.smileidentity.react.utils.idInfo
11
+ import com.smileidentity.results.BiometricKycResult
12
+ import com.smileidentity.results.SmileIDResult
13
+ import com.smileidentity.util.randomJobId
14
+ import com.smileidentity.util.randomUserId
15
+ import timber.log.Timber
16
+ import java.net.URL
17
+
18
+ class SmileIDBiometricKYC(context: ReactApplicationContext) : SmileIDView(context) {
19
+ override fun renderContent() {
20
+ product?.let { product ->
21
+ val idInfo = product.idInfo() ?: run {
22
+ emitFailure(IllegalArgumentException("idInfo is required for BiometricKYC"))
23
+ return
24
+ }
25
+ val partnerName = product.getStringOrDefault("partnerName", null) ?: run {
26
+ emitFailure(IllegalArgumentException("partnerName is required for BiometricKYC"))
27
+ return
28
+ }
29
+
30
+ val partnerPrivacyPolicy = product.getStringOrDefault("partnerPrivacyPolicy", null) ?: run {
31
+ emitFailure(IllegalArgumentException("partnerPrivacyPolicy is required for BiometricKYC"))
32
+ return
33
+ }
34
+ if (!URLUtil.isValidUrl(partnerPrivacyPolicy)) {
35
+ emitFailure(IllegalArgumentException("a valid url for partnerPrivacyPolicy is required for BiometricKYC"))
36
+ return
37
+ }
38
+ val logoResName = product.getString("partnerIcon") ?: run {
39
+ emitFailure(IllegalArgumentException("productName is required for BiometricKYC"))
40
+ return
41
+ }
42
+ val partnerIcon = context.resources.getIdentifier(
43
+ logoResName,
44
+ "drawable",
45
+ (context as? ReactApplicationContext)?.currentActivity?.packageName
46
+ )
47
+
48
+ val productName = product.getStringOrDefault("productName", null) ?: run {
49
+ emitFailure(IllegalArgumentException("productName is required for BiometricKYC"))
50
+ return
51
+ }
52
+ composeView.apply {
53
+ setContent {
54
+ SmileID.BiometricKYC(
55
+ idInfo = idInfo,
56
+ partnerIcon = painterResource(id = partnerIcon),
57
+ partnerName = partnerName,
58
+ productName = productName,
59
+ partnerPrivacyPolicy = URL(partnerPrivacyPolicy),
60
+ userId = userId ?: rememberSaveable { randomUserId() },
61
+ jobId = jobId ?: rememberSaveable { randomJobId() },
62
+ allowAgentMode = allowAgentMode ?: false,
63
+ showAttribution = showInstructions ?: true,
64
+ ) { result ->
65
+ when (result) {
66
+ is SmileIDResult.Success -> {
67
+ val json = try {
68
+ SmileID.moshi
69
+ .adapter(BiometricKycResult::class.java)
70
+ .toJson(result.data)
71
+ } catch (e: Exception) {
72
+ Timber.w(e)
73
+ "null"
74
+ }
75
+ emitSuccess(json)
76
+ }
77
+
78
+ is SmileIDResult.Error -> {
79
+ result.throwable.printStackTrace()
80
+ emitFailure(result.throwable)
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ }
@@ -0,0 +1,59 @@
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.react.utils.getBoolOrDefault
8
+ import com.smileidentity.react.utils.getStringOrDefault
9
+ import com.smileidentity.results.DocumentVerificationResult
10
+ import com.smileidentity.results.SmileIDResult
11
+ import com.smileidentity.util.randomJobId
12
+ import com.smileidentity.util.randomUserId
13
+ import timber.log.Timber
14
+
15
+ class SmileIDDocumentVerification(context: ReactApplicationContext) : SmileIDView(context) {
16
+
17
+ override fun renderContent() {
18
+ product?.let{ product ->
19
+ val countryCode = product.getStringOrDefault("countryCode",null) ?: run {
20
+ emitFailure(IllegalArgumentException("countryCode is required for DocumentVerification"))
21
+ return;
22
+ }
23
+ val allowGalleryUpload = product.getBoolOrDefault("allowGalleryUpload",false)
24
+ val captureBothSides = product.getBoolOrDefault("captureBothSides",false)
25
+ composeView.apply {
26
+ setContent {
27
+ SmileID.DocumentVerification(
28
+ userId = userId ?: rememberSaveable { randomUserId() },
29
+ jobId = jobId ?: rememberSaveable { randomJobId() },
30
+ countryCode = countryCode!!,
31
+ documentType = product.getString("documentType"),
32
+ showInstructions = showInstructions ?: true,
33
+ allowGalleryUpload = allowGalleryUpload,
34
+ captureBothSides = captureBothSides
35
+ ) { result ->
36
+ when (result) {
37
+ is SmileIDResult.Success -> {
38
+ val json = try {
39
+ SmileID.moshi
40
+ .adapter(DocumentVerificationResult::class.java)
41
+ .toJson(result.data)
42
+ } catch (e: Exception) {
43
+ Timber.w(e)
44
+ "null"
45
+ }
46
+ emitSuccess(json)
47
+ }
48
+
49
+ is SmileIDResult.Error -> {
50
+ result.throwable.printStackTrace()
51
+ emitFailure(result.throwable)
52
+ }
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,47 @@
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 timber.log.Timber
12
+
13
+ class SmileIDSmartSelfieAuthentication(context: ReactApplicationContext) : SmileIDView(context) {
14
+
15
+ override fun renderContent() {
16
+ product?.let {
17
+ composeView.apply {
18
+ setContent {
19
+ SmileID.SmartSelfieAuthentication(
20
+ userId = userId ?: rememberSaveable { randomUserId() },
21
+ jobId = jobId ?: rememberSaveable { randomJobId() },
22
+ allowAgentMode = allowAgentMode ?: false,
23
+ ) { result ->
24
+ when (result) {
25
+ is SmileIDResult.Success -> {
26
+ val json = try {
27
+ SmileID.moshi
28
+ .adapter(SmartSelfieResult::class.java)
29
+ .toJson(result.data)
30
+ } catch (e: Exception) {
31
+ Timber.w(e)
32
+ "null"
33
+ }
34
+ emitSuccess(json)
35
+ }
36
+
37
+ is SmileIDResult.Error -> {
38
+ result.throwable.printStackTrace()
39
+ emitFailure(result.throwable)
40
+ }
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,48 @@
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 timber.log.Timber
12
+
13
+ class SmileIDSmartSelfieEnrollment (context: ReactApplicationContext) : SmileIDView(context) {
14
+
15
+ override fun renderContent() {
16
+ product?.let {
17
+ composeView.apply {
18
+ setContent {
19
+ SmileID.SmartSelfieEnrollment(
20
+ userId = userId ?: rememberSaveable { randomUserId() },
21
+ jobId = jobId ?: rememberSaveable { randomJobId() },
22
+ allowAgentMode = allowAgentMode ?: false,
23
+ showInstructions = showInstructions ?: true
24
+ ) { result ->
25
+ when (result) {
26
+ is SmileIDResult.Success -> {
27
+ val json = try {
28
+ SmileID.moshi
29
+ .adapter(SmartSelfieResult::class.java)
30
+ .toJson(result.data)
31
+ } catch (e: Exception) {
32
+ Timber.w(e)
33
+ "null"
34
+ }
35
+ emitSuccess(json)
36
+ }
37
+
38
+ is SmileIDResult.Error -> {
39
+ result.throwable.printStackTrace()
40
+ emitFailure(result.throwable)
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,121 @@
1
+ package com.smileidentity.react.views
2
+
3
+ import android.view.Choreographer
4
+ import android.view.ViewGroup
5
+ import android.widget.LinearLayout
6
+ import androidx.compose.ui.platform.ComposeView
7
+ import com.facebook.react.bridge.Arguments
8
+ import com.facebook.react.bridge.ReactApplicationContext
9
+ import com.facebook.react.bridge.ReactContext
10
+ import com.facebook.react.bridge.ReadableMap
11
+ import com.facebook.react.bridge.WritableMap
12
+ import com.facebook.react.uimanager.events.RCTEventEmitter
13
+ import com.smileidentity.models.JobType
14
+ import com.smileidentity.react.utils.getBoolOrDefault
15
+ import com.smileidentity.react.utils.getIntOrDefault
16
+ import timber.log.Timber
17
+
18
+ abstract class SmileIDView(context: ReactApplicationContext) : LinearLayout(context) {
19
+ val composeView: ComposeView = ComposeView(context.currentActivity!!)
20
+ var userId: String? = null
21
+ var jobId: String? = null
22
+ private var jobType: JobType? = null
23
+ var allowAgentMode: Boolean? = false
24
+ var showInstructions: Boolean? = true
25
+ private var eventEmitter: RCTEventEmitter
26
+ private var productThrowable: Throwable? = null
27
+ var product: ReadableMap? = null
28
+ set(value) {
29
+ field = value
30
+ render()
31
+ }
32
+
33
+ init {
34
+ val layoutParams = ViewGroup.LayoutParams(
35
+ ViewGroup.LayoutParams.WRAP_CONTENT,
36
+ ViewGroup.LayoutParams.WRAP_CONTENT
37
+ )
38
+ eventEmitter = (context as ReactContext).getJSModule(RCTEventEmitter::class.java);
39
+ setLayoutParams(layoutParams)
40
+ orientation = VERTICAL
41
+ render()
42
+
43
+ composeView.layoutParams = ViewGroup.LayoutParams(
44
+ ViewGroup.LayoutParams.MATCH_PARENT,
45
+ ViewGroup.LayoutParams.MATCH_PARENT
46
+ )
47
+ addView(composeView)
48
+
49
+ setupLayoutHack()
50
+ manuallyLayoutChildren()
51
+ }
52
+
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
+ abstract fun renderContent()
71
+
72
+ open fun render() {
73
+ checkCommonArgs();
74
+ checkCommonArgs();
75
+ renderContent()
76
+ }
77
+
78
+ open fun emitSuccess(result: String) {
79
+ val map = Arguments.createMap().apply {
80
+ putString("result", result)
81
+ }
82
+ sendEvent(map)
83
+ }
84
+
85
+ open fun sendEvent(map: WritableMap) {
86
+ val reactContext = context as ReactContext
87
+ reactContext.getJSModule(RCTEventEmitter::class.java)
88
+ .receiveEvent(id, "onSmileResult", map)
89
+ }
90
+
91
+ open fun emitFailure(error: Throwable?) {
92
+ val map = Arguments.createMap()
93
+ map.putString("error", error?.message ?: "Unknown error")
94
+ sendEvent(map)
95
+ }
96
+
97
+ private fun setupLayoutHack() {
98
+ Choreographer.getInstance().postFrameCallback(object : Choreographer.FrameCallback {
99
+ override fun doFrame(frameTimeNanos: Long) {
100
+ manuallyLayoutChildren()
101
+ viewTreeObserver.dispatchOnGlobalLayout()
102
+ Choreographer.getInstance().postFrameCallback(this)
103
+ }
104
+ })
105
+ }
106
+
107
+ private fun manuallyLayoutChildren() {
108
+ try {
109
+ for (i in 0 until childCount) {
110
+ val child = getChildAt(i)
111
+ child.measure(
112
+ MeasureSpec.makeMeasureSpec(measuredWidth, MeasureSpec.EXACTLY),
113
+ MeasureSpec.makeMeasureSpec(measuredHeight, MeasureSpec.EXACTLY)
114
+ )
115
+ child.layout(0, 0, child.measuredWidth, child.measuredHeight)
116
+ }
117
+ } catch (e: Exception) {
118
+ Timber.w(e)
119
+ }
120
+ }
121
+ }
@@ -0,0 +1,7 @@
1
+ package com.smileid
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+
5
+ abstract class SmileIdSpec internal constructor(context: ReactApplicationContext) :
6
+ NativeSmileIdSpec(context) {
7
+ }
@@ -0,0 +1,13 @@
1
+ package com.smileidentity
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReadableMap
7
+
8
+ abstract class SmileIdSpec internal constructor(context: ReactApplicationContext) :
9
+ ReactContextBaseJavaModule(context) {
10
+
11
+ abstract fun initialize(enableCrashReporting: Boolean,useSandBox: Boolean ,promise: Promise)
12
+ abstract fun doEnhancedKycAsync(request: ReadableMap, promise: Promise)
13
+ }
package/ios/SmileId.h ADDED
@@ -0,0 +1,12 @@
1
+
2
+ #ifdef RCT_NEW_ARCH_ENABLED
3
+ #import "RNSmileIdSpec.h"
4
+
5
+ @interface SmileId : NSObject <NativeSmileIdSpec>
6
+ #else
7
+ #import <React/RCTBridgeModule.h>
8
+
9
+ @interface SmileId : NSObject <RCTBridgeModule>
10
+ #endif
11
+
12
+ @end
package/ios/SmileId.mm ADDED
@@ -0,0 +1,27 @@
1
+ #import "SmileId.h"
2
+
3
+ @implementation SmileId
4
+ RCT_EXPORT_MODULE()
5
+
6
+ // Example method
7
+ // See // https://reactnative.dev/docs/native-modules-ios
8
+ RCT_EXPORT_METHOD(multiply:(double)a
9
+ b:(double)b
10
+ resolve:(RCTPromiseResolveBlock)resolve
11
+ reject:(RCTPromiseRejectBlock)reject)
12
+ {
13
+ NSNumber *result = @(a * b);
14
+
15
+ resolve(result);
16
+ }
17
+
18
+ // Don't compile this code when we build for the old architecture.
19
+ #ifdef RCT_NEW_ARCH_ENABLED
20
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
21
+ (const facebook::react::ObjCTurboModule::InitParams &)params
22
+ {
23
+ return std::make_shared<facebook::react::NativeSmileIdSpecJSI>(params);
24
+ }
25
+ #endif
26
+
27
+ @end