@veryai/react-native-sdk 1.0.28 → 1.0.32

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.
package/README.md CHANGED
@@ -23,6 +23,92 @@ Add camera permission to `Info.plist`:
23
23
 
24
24
  Published on [npm](https://www.npmjs.com/package/@veryai/react-native-sdk).
25
25
 
26
+ ## Asset Loading: Bundled vs Slim
27
+
28
+ The SDK ships with the palm-recognition native asset bundled inside it by default — your app works offline, no first-scan download wait. If you'd rather keep your binary small and have the SDK fetch the asset from CDN on first scan, you can opt into slim mode per platform.
29
+
30
+ | Mode | Adds to app size | First-scan UX | Works offline |
31
+ | ------ | ----------------------------------------- | ---------------------------- | ------------- |
32
+ | Bundled (default) | ~18 MB per ABI (Android), ~8 MB (iOS) | instant | yes |
33
+ | Slim | nothing | one-time download (5–15 s) | no (first scan only) |
34
+
35
+ Cached assets persist across app launches; the download only happens once.
36
+
37
+ ### iOS — switching to slim
38
+
39
+ Step 1 — disable RN auto-linking for this package only. Add or edit `react-native.config.js` at your project root:
40
+
41
+ ```js
42
+ module.exports = {
43
+ dependencies: {
44
+ '@veryai/react-native-sdk': {
45
+ platforms: { ios: null },
46
+ },
47
+ },
48
+ };
49
+ ```
50
+
51
+ Step 2 — declare the slim subspec explicitly in `ios/Podfile` inside your app target:
52
+
53
+ ```ruby
54
+ target 'YourApp' do
55
+ config = use_native_modules!
56
+ use_react_native!(...)
57
+
58
+ pod 'veryai-react-native-sdk/Core',
59
+ :path => '../node_modules/@veryai/react-native-sdk'
60
+ end
61
+ ```
62
+
63
+ Step 3:
64
+
65
+ ```bash
66
+ cd ios && pod install
67
+ ```
68
+
69
+ To go back to bundled, delete the `react-native.config.js` entry and the `pod 'veryai-react-native-sdk/Core'` line, then `pod install` again.
70
+
71
+ ### Android — switching to slim
72
+
73
+ In `android/app/build.gradle` (the **app** module, not the project root), add:
74
+
75
+ ```gradle
76
+ android {
77
+ packaging {
78
+ jniLibs {
79
+ excludes += '**/libPalmAPISaas.so'
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ This filters the bundled `.so` out at packaging time. The runtime falls through to CDN download.
86
+
87
+ ### Verifying which mode you're in
88
+
89
+ iOS — after `pod install`:
90
+
91
+ ```bash
92
+ grep -c "VerySDK_BundledModel\|packed_data" ios/Pods/Pods.xcodeproj/project.pbxproj
93
+ # > 0 → bundled, 0 → slim
94
+ ```
95
+
96
+ Android — after a build:
97
+
98
+ ```bash
99
+ unzip -l android/app/build/outputs/apk/debug/app-debug.apk | grep libPalmAPISaas
100
+ # matches → bundled, no output → slim
101
+ ```
102
+
103
+ ### CDN endpoints (slim mode)
104
+
105
+ The SDK tries the primary CDN first and falls back automatically. Allowlist both hostnames if your network has egress restrictions.
106
+
107
+ | Asset | Primary | Backup |
108
+ | -------------------------------- | ------------------------------------------------ | ------------------------------------------------------- |
109
+ | Android `libPalmAPISaas.so` (per ABI) | `assets.very.org/sdk/data/<abi>/...` | `r2.assets.very.org/sdk/v1/<abi>/...` |
110
+ | iOS `packed_data.bin` | `assets.very.org/sdk/data/packed_data.bin` | `r2.assets.very.org/sdk/v1/packed_data.bin` |
111
+
26
112
  ## Getting an SDK Key
27
113
 
28
114
  Native SDK keys are not yet available via the Developer Portal. Contact [support@very.org](mailto:support@very.org) to get your SDK key and client credentials.
@@ -125,7 +211,6 @@ Decode the `id_token` JWT to get the user's identity:
125
211
  | `userId` | String? | undefined | Undefined for enrollment, user ID for verification |
126
212
  | `language` | String? | device | Locale code (e.g. `"en"`, `"es"`, `"ja"`). 35 languages supported. |
127
213
  | `themeMode` | String | `"dark"` | `"dark"` or `"light"` |
128
- | `baseUrl` | String? | production | Override API endpoint (for staging/testing) |
129
214
  | `presentationStyle` | String | `"fullScreen"` | `"fullScreen"` or `"bottomSheet"` |
130
215
 
131
216
  ### VeryResult
@@ -142,8 +227,16 @@ Decode the `id_token` JWT to get the user's identity:
142
227
  ## Requirements
143
228
 
144
229
  - React Native 0.73+
145
- - iOS 16.4+ / Android 10 (API 29)+
230
+ - iOS 13.0+ / Android 6 (API 23)+
146
231
  - Physical device (no simulator)
147
232
  - Camera permission
148
233
 
234
+ ## Error Codes
235
+
236
+ The full list lives in the [top-level README](../README.md#error-codes). One slim-mode-specific code worth calling out:
237
+
238
+ | Code | Name | Meaning |
239
+ |------|-------------------------------|------------------------------------------------------------------------|
240
+ | 6106 | `NATIVE_LIB_DOWNLOAD_FAILED` | Slim-mode partner: the SDK couldn't fetch the palm asset from CDN. Check internet, CDN allowlist, or revert to bundled mode. |
241
+
149
242
  Use `VerySDK.isSupported()` to check device compatibility at runtime before showing the verification UI.
@@ -9,9 +9,17 @@ buildscript {
9
9
  }
10
10
  }
11
11
 
12
+ def isNewArchitectureEnabled() {
13
+ return rootProject.hasProperty("newArchEnabled") && rootProject.newArchEnabled == "true"
14
+ }
15
+
12
16
  apply plugin: 'com.android.library'
13
17
  apply plugin: 'kotlin-android'
14
18
 
19
+ if (isNewArchitectureEnabled()) {
20
+ apply plugin: 'com.facebook.react'
21
+ }
22
+
15
23
  android {
16
24
  if (project.android.hasProperty("namespace")) {
17
25
  namespace 'com.verysdk.rn'
@@ -22,6 +30,11 @@ android {
22
30
  defaultConfig {
23
31
  minSdkVersion 23
24
32
  targetSdkVersion 34
33
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
34
+ }
35
+
36
+ buildFeatures {
37
+ buildConfig = true
25
38
  }
26
39
 
27
40
  compileOptions {
@@ -36,6 +49,11 @@ android {
36
49
  sourceSets {
37
50
  main {
38
51
  java.srcDirs += 'src/main/kotlin'
52
+ if (isNewArchitectureEnabled()) {
53
+ java.srcDirs += ['src/newarch/kotlin']
54
+ } else {
55
+ java.srcDirs += ['src/oldarch/kotlin']
56
+ }
39
57
  }
40
58
  }
41
59
  }
@@ -54,6 +72,14 @@ dependencies {
54
72
  if (findProject(':very-sdk') != null) {
55
73
  implementation project(':very-sdk')
56
74
  } else {
57
- implementation "org.very:sdk:${project.findProperty('verySDKVersion') ?: '1.0.28'}"
75
+ implementation "org.very:sdk:${project.findProperty('verySDKVersion') ?: '1.0.32'}"
76
+ }
77
+ }
78
+
79
+ if (isNewArchitectureEnabled()) {
80
+ react {
81
+ jsRootDir = file("../src/")
82
+ libraryName = "RNVerySDKSpec"
83
+ codegenJavaPackageName = "com.verysdk.rn"
58
84
  }
59
85
  }
@@ -1,18 +1,17 @@
1
1
  package com.verysdk.rn
2
2
 
3
- import com.facebook.react.bridge.*
3
+ import com.facebook.react.bridge.Arguments
4
+ import com.facebook.react.bridge.Promise
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.bridge.ReadableMap
4
7
  import org.very.sdk.VeryConfig
5
8
  import org.very.sdk.VerySDK
6
9
  import org.very.sdk.VeryPresentationStyle
7
10
 
8
- class VerySDKModule(reactContext: ReactApplicationContext) :
9
- ReactContextBaseJavaModule(reactContext) {
11
+ class VerySDKModuleImpl(private val reactContext: ReactApplicationContext) {
10
12
 
11
- override fun getName(): String = "VerySDKRN"
12
-
13
- @ReactMethod
14
13
  fun authenticate(configMap: ReadableMap, promise: Promise) {
15
- val activity = currentActivity
14
+ val activity = reactContext.currentActivity
16
15
  if (activity == null) {
17
16
  promise.reject("NO_ACTIVITY", "No current activity")
18
17
  return
@@ -22,8 +21,7 @@ class VerySDKModule(reactContext: ReactApplicationContext) :
22
21
  sdkKey = configMap.getString("sdkKey") ?: "",
23
22
  userId = if (configMap.hasKey("userId") && !configMap.isNull("userId")) configMap.getString("userId") else null,
24
23
  language = if (configMap.hasKey("language") && !configMap.isNull("language")) configMap.getString("language") else null,
25
- themeMode = configMap.getString("themeMode") ?: "dark",
26
- baseUrl = if (configMap.hasKey("baseUrl") && !configMap.isNull("baseUrl")) configMap.getString("baseUrl") else null
24
+ themeMode = configMap.getString("themeMode") ?: "dark"
27
25
  )
28
26
 
29
27
  val style = when (configMap.getString("presentationStyle")) {
@@ -44,9 +42,12 @@ class VerySDKModule(reactContext: ReactApplicationContext) :
44
42
  }
45
43
  }
46
44
 
47
- @ReactMethod
48
45
  fun isSupported(promise: Promise) {
49
- val context = currentActivity ?: reactApplicationContext
46
+ val context = reactContext.currentActivity ?: reactContext
50
47
  promise.resolve(VerySDK.isSupport(context))
51
48
  }
49
+
50
+ companion object {
51
+ const val NAME = "VerySDKRN"
52
+ }
52
53
  }
@@ -1,16 +1,26 @@
1
1
  package com.verysdk.rn
2
2
 
3
- import com.facebook.react.ReactPackage
3
+ import com.facebook.react.TurboReactPackage
4
4
  import com.facebook.react.bridge.NativeModule
5
5
  import com.facebook.react.bridge.ReactApplicationContext
6
- import com.facebook.react.uimanager.ViewManager
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
7
8
 
8
- class VerySDKPackage : ReactPackage {
9
- override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
10
- return listOf(VerySDKModule(reactContext))
11
- }
9
+ class VerySDKPackage : TurboReactPackage() {
10
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? =
11
+ if (name == VerySDKModuleImpl.NAME) VerySDKModule(reactContext) else null
12
12
 
13
- override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
14
- return emptyList()
13
+ override fun getReactModuleInfoProvider() = ReactModuleInfoProvider {
14
+ mapOf(
15
+ VerySDKModuleImpl.NAME to ReactModuleInfo(
16
+ VerySDKModuleImpl.NAME,
17
+ VerySDKModule::class.java.name,
18
+ false, // canOverrideExistingModule
19
+ false, // needsEagerInit
20
+ false, // hasConstants
21
+ false, // isCxxModule
22
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED // isTurboModule
23
+ )
24
+ )
15
25
  }
16
26
  }
@@ -0,0 +1,21 @@
1
+ package com.verysdk.rn
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReadableMap
6
+
7
+ class VerySDKModule(reactContext: ReactApplicationContext) :
8
+ NativeVerySDKSpec(reactContext) {
9
+
10
+ private val impl = VerySDKModuleImpl(reactContext)
11
+
12
+ override fun getName(): String = VerySDKModuleImpl.NAME
13
+
14
+ override fun authenticate(config: ReadableMap, promise: Promise) {
15
+ impl.authenticate(config, promise)
16
+ }
17
+
18
+ override fun isSupported(promise: Promise) {
19
+ impl.isSupported(promise)
20
+ }
21
+ }
@@ -0,0 +1,25 @@
1
+ package com.verysdk.rn
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.ReactMethod
7
+ import com.facebook.react.bridge.ReadableMap
8
+
9
+ class VerySDKModule(reactContext: ReactApplicationContext) :
10
+ ReactContextBaseJavaModule(reactContext) {
11
+
12
+ private val impl = VerySDKModuleImpl(reactContext)
13
+
14
+ override fun getName(): String = VerySDKModuleImpl.NAME
15
+
16
+ @ReactMethod
17
+ fun authenticate(config: ReadableMap, promise: Promise) {
18
+ impl.authenticate(config, promise)
19
+ }
20
+
21
+ @ReactMethod
22
+ fun isSupported(promise: Promise) {
23
+ impl.isSupported(promise)
24
+ }
25
+ }
@@ -0,0 +1,31 @@
1
+ #import <React/RCTBridgeModule.h>
2
+
3
+ #ifdef RCT_NEW_ARCH_ENABLED
4
+ #import <RNVerySDKSpec/RNVerySDKSpec.h>
5
+ #endif
6
+
7
+ @interface RCT_EXTERN_MODULE(VerySDKRN, NSObject)
8
+
9
+ RCT_EXTERN_METHOD(authenticate:(NSDictionary *)config
10
+ resolve:(RCTPromiseResolveBlock)resolve
11
+ reject:(RCTPromiseRejectBlock)reject)
12
+
13
+ RCT_EXTERN_METHOD(isSupported:(RCTPromiseResolveBlock)resolve
14
+ reject:(RCTPromiseRejectBlock)reject)
15
+
16
+ @end
17
+
18
+ #ifdef RCT_NEW_ARCH_ENABLED
19
+ @interface VerySDKRN (TurboModule) <NativeVerySDKSpec>
20
+ @end
21
+
22
+ @implementation VerySDKRN (TurboModule)
23
+
24
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
25
+ (const facebook::react::ObjCTurboModule::InitParams &)params
26
+ {
27
+ return std::make_shared<facebook::react::NativeVerySDKSpecJSI>(params);
28
+ }
29
+
30
+ @end
31
+ #endif
@@ -6,9 +6,10 @@ class VerySDKRN: NSObject {
6
6
 
7
7
  @objc static func requiresMainQueueSetup() -> Bool { return false }
8
8
 
9
- @objc func authenticate(_ config: NSDictionary,
10
- resolver resolve: @escaping RCTPromiseResolveBlock,
11
- rejecter reject: @escaping RCTPromiseRejectBlock) {
9
+ @objc(authenticate:resolve:reject:)
10
+ func authenticate(_ config: NSDictionary,
11
+ resolve: @escaping RCTPromiseResolveBlock,
12
+ reject: @escaping RCTPromiseRejectBlock) {
12
13
  DispatchQueue.main.async {
13
14
  guard let rootVC = Self.topViewController() else {
14
15
  reject("NO_VC", "No root view controller found", nil)
@@ -27,7 +28,6 @@ class VerySDKRN: NSObject {
27
28
  userId: config["userId"] as? String,
28
29
  language: config["language"] as? String,
29
30
  themeMode: config["themeMode"] as? String ?? "dark",
30
- baseUrl: config["baseUrl"] as? String,
31
31
  livenessMode: livenessMode
32
32
  )
33
33
 
@@ -53,8 +53,9 @@ class VerySDKRN: NSObject {
53
53
  }
54
54
  }
55
55
 
56
- @objc func isSupported(_ resolve: RCTPromiseResolveBlock,
57
- rejecter reject: RCTPromiseRejectBlock) {
56
+ @objc(isSupported:reject:)
57
+ func isSupported(_ resolve: RCTPromiseResolveBlock,
58
+ reject: RCTPromiseRejectBlock) {
58
59
  resolve(VerySDK.isSupport())
59
60
  }
60
61
 
@@ -5,14 +5,5 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _reactNative = require("react-native");
8
- const LINKING_ERROR = `The package '@veryai/react-native-sdk' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
9
- ios: "- You have run 'pod install'\n",
10
- default: ''
11
- }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
12
- const VerySDKRN = _reactNative.NativeModules.VerySDKRN ? _reactNative.NativeModules.VerySDKRN : new Proxy({}, {
13
- get() {
14
- throw new Error(LINKING_ERROR);
15
- }
16
- });
17
- var _default = exports.default = VerySDKRN;
8
+ var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('VerySDKRN');
18
9
  //# sourceMappingURL=NativeVerySDK.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","VerySDKRN","NativeModules","Proxy","get","Error","_default","exports"],"sourceRoot":"../../src","sources":["NativeVerySDK.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEA,MAAMC,aAAa,GACjB,mFAAmF,GACnFC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,SAAS,GAAGC,0BAAa,CAACD,SAAS,GACrCC,0BAAa,CAACD,SAAS,GACvB,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAAC,IAAAU,QAAA,GAAAC,OAAA,CAAAP,OAAA,GAOSC,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeVerySDK.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAOpCC,gCAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
@@ -13,7 +13,6 @@ const VerySDK = exports.VerySDK = {
13
13
  userId: config.userId ?? null,
14
14
  language: config.language ?? null,
15
15
  themeMode: config.themeMode ?? 'dark',
16
- baseUrl: config.baseUrl ?? null,
17
16
  presentationStyle: config.presentationStyle ?? 'fullScreen'
18
17
  });
19
18
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["_NativeVerySDK","_interopRequireDefault","require","e","__esModule","default","VerySDK","exports","authenticate","config","raw","NativeModule","sdkKey","userId","language","themeMode","baseUrl","presentationStyle","code","signedToken","undefined","error","errorMessage","isSuccess","isSupported"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAKpC,MAAMG,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG;EACrB,MAAME,YAAYA,CAACC,MAAkB,EAAuB;IAC1D,MAAMC,GAAG,GAAG,MAAMC,sBAAY,CAACH,YAAY,CAAC;MAC1CI,MAAM,EAAEH,MAAM,CAACG,MAAM;MACrBC,MAAM,EAAEJ,MAAM,CAACI,MAAM,IAAI,IAAI;MAC7BC,QAAQ,EAAEL,MAAM,CAACK,QAAQ,IAAI,IAAI;MACjCC,SAAS,EAAEN,MAAM,CAACM,SAAS,IAAI,MAAM;MACrCC,OAAO,EAAEP,MAAM,CAACO,OAAO,IAAI,IAAI;MAC/BC,iBAAiB,EAAER,MAAM,CAACQ,iBAAiB,IAAI;IACjD,CAAC,CAAC;IACF,OAAO;MACLC,IAAI,EAAER,GAAG,CAACQ,IAAc;MACxBL,MAAM,EAAEH,GAAG,CAACG,MAAgB;MAC5BM,WAAW,EAAGT,GAAG,CAACS,WAAW,IAAeC,SAAS;MACrDC,KAAK,EAAGX,GAAG,CAACW,KAAK,IAAeD,SAAS;MACzCE,YAAY,EAAGZ,GAAG,CAACY,YAAY,IAAeF,SAAS;MACvDG,SAAS,EAAEb,GAAG,CAACa;IACjB,CAAC;EACH,CAAC;EAED,MAAMC,WAAWA,CAAA,EAAqB;IACpC,OAAOb,sBAAY,CAACa,WAAW,CAAC,CAAC;EACnC;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_NativeVerySDK","_interopRequireDefault","require","e","__esModule","default","VerySDK","exports","authenticate","config","raw","NativeModule","sdkKey","userId","language","themeMode","presentationStyle","code","signedToken","undefined","error","errorMessage","isSuccess","isSupported"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA2C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAKpC,MAAMG,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG;EACrB,MAAME,YAAYA,CAACC,MAAkB,EAAuB;IAC1D,MAAMC,GAAG,GAAI,MAAMC,sBAAY,CAACH,YAAY,CAAC;MAC3CI,MAAM,EAAEH,MAAM,CAACG,MAAM;MACrBC,MAAM,EAAEJ,MAAM,CAACI,MAAM,IAAI,IAAI;MAC7BC,QAAQ,EAAEL,MAAM,CAACK,QAAQ,IAAI,IAAI;MACjCC,SAAS,EAAEN,MAAM,CAACM,SAAS,IAAI,MAAM;MACrCC,iBAAiB,EAAEP,MAAM,CAACO,iBAAiB,IAAI;IACjD,CAAC,CAA6B;IAC9B,OAAO;MACLC,IAAI,EAAEP,GAAG,CAACO,IAAc;MACxBJ,MAAM,EAAEH,GAAG,CAACG,MAAgB;MAC5BK,WAAW,EAAGR,GAAG,CAACQ,WAAW,IAAeC,SAAS;MACrDC,KAAK,EAAGV,GAAG,CAACU,KAAK,IAAeD,SAAS;MACzCE,YAAY,EAAGX,GAAG,CAACW,YAAY,IAAeF,SAAS;MACvDG,SAAS,EAAEZ,GAAG,CAACY;IACjB,CAAC;EACH,CAAC;EAED,MAAMC,WAAWA,CAAA,EAAqB;IACpC,OAAOZ,sBAAY,CAACY,WAAW,CAAC,CAAC;EACnC;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -1,12 +1,5 @@
1
- import { NativeModules, Platform } from 'react-native';
2
- const LINKING_ERROR = `The package '@veryai/react-native-sdk' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
3
- ios: "- You have run 'pod install'\n",
4
- default: ''
5
- }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
6
- const VerySDKRN = NativeModules.VerySDKRN ? NativeModules.VerySDKRN : new Proxy({}, {
7
- get() {
8
- throw new Error(LINKING_ERROR);
9
- }
10
- });
11
- export default VerySDKRN;
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.getEnforcing('VerySDKRN');
12
5
  //# sourceMappingURL=NativeVerySDK.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","LINKING_ERROR","select","ios","default","VerySDKRN","Proxy","get","Error"],"sourceRoot":"../../src","sources":["NativeVerySDK.ts"],"mappings":"AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AAEtD,MAAMC,aAAa,GACjB,mFAAmF,GACnFD,QAAQ,CAACE,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,SAAS,GAAGN,aAAa,CAACM,SAAS,GACrCN,aAAa,CAACM,SAAS,GACvB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAOL,eAAeI,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeVerySDK.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAOlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,WAAW,CAAC","ignoreList":[]}
@@ -1,3 +1,5 @@
1
+ "use strict";
2
+
1
3
  import NativeModule from './NativeVerySDK';
2
4
  export const VerySDK = {
3
5
  async authenticate(config) {
@@ -6,7 +8,6 @@ export const VerySDK = {
6
8
  userId: config.userId ?? null,
7
9
  language: config.language ?? null,
8
10
  themeMode: config.themeMode ?? 'dark',
9
- baseUrl: config.baseUrl ?? null,
10
11
  presentationStyle: config.presentationStyle ?? 'fullScreen'
11
12
  });
12
13
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModule","VerySDK","authenticate","config","raw","sdkKey","userId","language","themeMode","baseUrl","presentationStyle","code","signedToken","undefined","error","errorMessage","isSuccess","isSupported"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,YAAY,MAAM,iBAAiB;AAK1C,OAAO,MAAMC,OAAO,GAAG;EACrB,MAAMC,YAAYA,CAACC,MAAkB,EAAuB;IAC1D,MAAMC,GAAG,GAAG,MAAMJ,YAAY,CAACE,YAAY,CAAC;MAC1CG,MAAM,EAAEF,MAAM,CAACE,MAAM;MACrBC,MAAM,EAAEH,MAAM,CAACG,MAAM,IAAI,IAAI;MAC7BC,QAAQ,EAAEJ,MAAM,CAACI,QAAQ,IAAI,IAAI;MACjCC,SAAS,EAAEL,MAAM,CAACK,SAAS,IAAI,MAAM;MACrCC,OAAO,EAAEN,MAAM,CAACM,OAAO,IAAI,IAAI;MAC/BC,iBAAiB,EAAEP,MAAM,CAACO,iBAAiB,IAAI;IACjD,CAAC,CAAC;IACF,OAAO;MACLC,IAAI,EAAEP,GAAG,CAACO,IAAc;MACxBL,MAAM,EAAEF,GAAG,CAACE,MAAgB;MAC5BM,WAAW,EAAGR,GAAG,CAACQ,WAAW,IAAeC,SAAS;MACrDC,KAAK,EAAGV,GAAG,CAACU,KAAK,IAAeD,SAAS;MACzCE,YAAY,EAAGX,GAAG,CAACW,YAAY,IAAeF,SAAS;MACvDG,SAAS,EAAEZ,GAAG,CAACY;IACjB,CAAC;EACH,CAAC;EAED,MAAMC,WAAWA,CAAA,EAAqB;IACpC,OAAOjB,YAAY,CAACiB,WAAW,CAAC,CAAC;EACnC;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NativeModule","VerySDK","authenticate","config","raw","sdkKey","userId","language","themeMode","presentationStyle","code","signedToken","undefined","error","errorMessage","isSuccess","isSupported"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,YAAY,MAAM,iBAAiB;AAK1C,OAAO,MAAMC,OAAO,GAAG;EACrB,MAAMC,YAAYA,CAACC,MAAkB,EAAuB;IAC1D,MAAMC,GAAG,GAAI,MAAMJ,YAAY,CAACE,YAAY,CAAC;MAC3CG,MAAM,EAAEF,MAAM,CAACE,MAAM;MACrBC,MAAM,EAAEH,MAAM,CAACG,MAAM,IAAI,IAAI;MAC7BC,QAAQ,EAAEJ,MAAM,CAACI,QAAQ,IAAI,IAAI;MACjCC,SAAS,EAAEL,MAAM,CAACK,SAAS,IAAI,MAAM;MACrCC,iBAAiB,EAAEN,MAAM,CAACM,iBAAiB,IAAI;IACjD,CAAC,CAA6B;IAC9B,OAAO;MACLC,IAAI,EAAEN,GAAG,CAACM,IAAc;MACxBJ,MAAM,EAAEF,GAAG,CAACE,MAAgB;MAC5BK,WAAW,EAAGP,GAAG,CAACO,WAAW,IAAeC,SAAS;MACrDC,KAAK,EAAGT,GAAG,CAACS,KAAK,IAAeD,SAAS;MACzCE,YAAY,EAAGV,GAAG,CAACU,YAAY,IAAeF,SAAS;MACvDG,SAAS,EAAEX,GAAG,CAACW;IACjB,CAAC;EACH,CAAC;EAED,MAAMC,WAAWA,CAAA,EAAqB;IACpC,OAAOhB,YAAY,CAACgB,WAAW,CAAC,CAAC;EACnC;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -1,2 +1,2 @@
1
-
1
+ "use strict";
2
2
  //# sourceMappingURL=types.js.map
@@ -1,7 +1,8 @@
1
- export interface NativeVerySDKSpec {
2
- authenticate(config: Record<string, any>): Promise<Record<string, any>>;
1
+ import type { TurboModule } from 'react-native';
2
+ export interface Spec extends TurboModule {
3
+ authenticate(config: Object): Promise<Object>;
3
4
  isSupported(): Promise<boolean>;
4
5
  }
5
- declare const _default: NativeVerySDKSpec;
6
+ declare const _default: Spec;
6
7
  export default _default;
7
8
  //# sourceMappingURL=NativeVerySDK.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NativeVerySDK.d.ts","sourceRoot":"","sources":["../../src/NativeVerySDK.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;wBAE2B,iBAAiB;AAA7C,wBAA8C"}
1
+ {"version":3,"file":"NativeVerySDK.d.ts","sourceRoot":"","sources":["../../src/NativeVerySDK.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;;AAED,wBAAmE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEtD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAEvC,eAAO,MAAM,OAAO;yBACS,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;mBAmBtC,OAAO,CAAC,OAAO,CAAC;CAGtC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEtD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAEvC,eAAO,MAAM,OAAO;yBACS,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;mBAkBtC,OAAO,CAAC,OAAO,CAAC;CAGtC,CAAC"}
@@ -3,7 +3,6 @@ export interface VeryConfig {
3
3
  userId?: string;
4
4
  language?: string;
5
5
  themeMode?: 'dark' | 'light';
6
- baseUrl?: string;
7
6
  presentationStyle?: 'fullScreen' | 'bottomSheet';
8
7
  }
9
8
  export interface VeryResult {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC;CAClD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,iBAAiB,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC;CAClD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veryai/react-native-sdk",
3
- "version": "1.0.28",
3
+ "version": "1.0.32",
4
4
  "description": "React Native wrapper for Very SDK - Palm biometrics verification",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -37,9 +37,9 @@
37
37
  "react-native": "*"
38
38
  },
39
39
  "devDependencies": {
40
- "react": "18.2.0",
41
- "react-native": "0.73.4",
42
- "react-native-builder-bob": "^0.23.0",
40
+ "react": "18.3.1",
41
+ "react-native": "0.76.5",
42
+ "react-native-builder-bob": "^0.30.0",
43
43
  "typescript": "^5.0.0"
44
44
  },
45
45
  "react-native-builder-bob": {
@@ -55,5 +55,13 @@
55
55
  }
56
56
  ]
57
57
  ]
58
+ },
59
+ "codegenConfig": {
60
+ "name": "RNVerySDKSpec",
61
+ "type": "modules",
62
+ "jsSrcsDir": "src",
63
+ "android": {
64
+ "javaPackageName": "com.verysdk.rn"
65
+ }
58
66
  }
59
67
  }
@@ -1,25 +1,9 @@
1
- import { NativeModules, Platform } from 'react-native';
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
2
3
 
3
- const LINKING_ERROR =
4
- `The package '@veryai/react-native-sdk' doesn't seem to be linked. Make sure: \n\n` +
5
- Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
6
- '- You rebuilt the app after installing the package\n' +
7
- '- You are not using Expo Go\n';
8
-
9
- const VerySDKRN = NativeModules.VerySDKRN
10
- ? NativeModules.VerySDKRN
11
- : new Proxy(
12
- {},
13
- {
14
- get() {
15
- throw new Error(LINKING_ERROR);
16
- },
17
- }
18
- );
19
-
20
- export interface NativeVerySDKSpec {
21
- authenticate(config: Record<string, any>): Promise<Record<string, any>>;
4
+ export interface Spec extends TurboModule {
5
+ authenticate(config: Object): Promise<Object>;
22
6
  isSupported(): Promise<boolean>;
23
7
  }
24
8
 
25
- export default VerySDKRN as NativeVerySDKSpec;
9
+ export default TurboModuleRegistry.getEnforcing<Spec>('VerySDKRN');
package/src/index.tsx CHANGED
@@ -5,14 +5,13 @@ export type { VeryConfig, VeryResult };
5
5
 
6
6
  export const VerySDK = {
7
7
  async authenticate(config: VeryConfig): Promise<VeryResult> {
8
- const raw = await NativeModule.authenticate({
8
+ const raw = (await NativeModule.authenticate({
9
9
  sdkKey: config.sdkKey,
10
10
  userId: config.userId ?? null,
11
11
  language: config.language ?? null,
12
12
  themeMode: config.themeMode ?? 'dark',
13
- baseUrl: config.baseUrl ?? null,
14
13
  presentationStyle: config.presentationStyle ?? 'fullScreen',
15
- });
14
+ })) as Record<string, unknown>;
16
15
  return {
17
16
  code: raw.code as string,
18
17
  userId: raw.userId as string,
package/src/types.ts CHANGED
@@ -3,7 +3,6 @@ export interface VeryConfig {
3
3
  userId?: string;
4
4
  language?: string;
5
5
  themeMode?: 'dark' | 'light';
6
- baseUrl?: string;
7
6
  presentationStyle?: 'fullScreen' | 'bottomSheet';
8
7
  }
9
8
 
@@ -10,9 +10,32 @@ Pod::Spec.new do |s|
10
10
  s.author = { "Very Mobile Inc." => "mail@very.org" }
11
11
  s.source = { :git => "https://github.com/veroslabs/very-sdk.git", :tag => s.version }
12
12
  s.platform = :ios, "13.0"
13
-
14
- s.source_files = "ios/**/*.{swift,h,m}"
15
- s.dependency "React-Core"
16
- s.dependency "VerySDK", "1.0.28"
17
13
  s.swift_version = "5.0"
14
+
15
+ # Mirror VerySDK's Core + Bundled subspecs so RN partners can pick
16
+ # the same way native iOS partners do:
17
+ # pod 'veryai-react-native-sdk' # → Bundled (default)
18
+ # pod 'veryai-react-native-sdk/Core' # → slim, CDN download
19
+ #
20
+ # Without this, the wrapper's `s.dependency "VerySDK"` would always
21
+ # resolve VerySDK's default_subspecs = ['Bundled'], and a partner
22
+ # adding `pod 'VerySDK/Core'` to their app Podfile would just get
23
+ # the union (= Bundled wins), defeating the slim option.
24
+ s.default_subspecs = ['Bundled']
25
+
26
+ s.subspec 'Core' do |core|
27
+ core.source_files = "ios/**/*.{swift,h,m,mm}"
28
+ core.dependency "VerySDK/Core", "1.0.32"
29
+
30
+ if respond_to?(:install_modules_dependencies, true)
31
+ install_modules_dependencies(core)
32
+ else
33
+ core.dependency "React-Core"
34
+ end
35
+ end
36
+
37
+ s.subspec 'Bundled' do |bundled|
38
+ bundled.dependency 'veryai-react-native-sdk/Core'
39
+ bundled.dependency 'VerySDK/Bundled', "1.0.32"
40
+ end
18
41
  end
package/ios/VerySDKRN.m DELETED
@@ -1,12 +0,0 @@
1
- #import <React/RCTBridgeModule.h>
2
-
3
- @interface RCT_EXTERN_MODULE(VerySDKRN, NSObject)
4
-
5
- RCT_EXTERN_METHOD(authenticate:(NSDictionary *)config
6
- resolver:(RCTPromiseResolveBlock)resolve
7
- rejecter:(RCTPromiseRejectBlock)reject)
8
-
9
- RCT_EXTERN_METHOD(isSupported:(RCTPromiseResolveBlock)resolve
10
- rejecter:(RCTPromiseRejectBlock)reject)
11
-
12
- @end