otpless-headless-rn 2.3.0 → 3.0.0

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
@@ -44,6 +44,24 @@ useEffect(() => {
44
44
  }, []);
45
45
  ```
46
46
 
47
+ ### SSL pinning (optional)
48
+
49
+ SSL pinning is **off by default**; the two-argument `initialize` call above behaves exactly as before. To opt in, pass a third `options` argument:
50
+
51
+ ```javascript
52
+ headlessModule.initialize("YOUR_APPID", null, { sslPinning: 'enabled' });
53
+ ```
54
+
55
+ ```ts
56
+ type OtplessSslPinning = 'enabled' | 'disabled';
57
+ interface OtplessInitOptions { sslPinning?: OtplessSslPinning }
58
+ initialize(appId: string, loginUri?: string | null, options?: OtplessInitOptions): void
59
+ ```
60
+
61
+ When enabled, the native SDK pins the TLS certificate of `sigma.otpless.app` on both Android and iOS. If the pin does not match (for example behind an intercepting proxy such as Charles or Proxyman), the SDK **fails closed**: no request leaves the device and you receive `FAILED` with `statusCode` `5004` (see [Response Handling](#response-handling)). If your organisation runs a corporate proxy or a network allowlist, make sure `sigma.otpless.app` is reachable directly with its original certificate.
62
+
63
+ Requires `io.github.otpless-tech:otpless-headless-sdk` >= 2.0.1 on Android and `OtplessBM/Core` >= 3.0.1 on iOS (both pulled in automatically by this package).
64
+
47
65
  # Initiate Authentication
48
66
 
49
67
  ## Phone Auth
@@ -86,8 +104,19 @@ const onHeadlessResult = (result: any) => {
86
104
  break;
87
105
  }
88
106
  case "FAILED": {
107
+ if (result.statusCode == 5003) {
108
+ // SDK initialization failed (e.g. invalid appId or network unavailable)
89
109
  console.log("SDK initialization failed");
90
- // Handle SDK initialization failure
110
+ } else if (result.statusCode == 5004) {
111
+ // SSL pin validation failed. Only emitted when `initialize` was called
112
+ // with `{ sslPinning: 'enabled' }`. The SDK sent nothing to the server;
113
+ // the connection to sigma.otpless.app is being intercepted or its
114
+ // certificate does not match the expected pin.
115
+ // result.response = { errorCode: "5004", errorMessage: "SSL pin validation failed" }
116
+ console.log("SSL pin validation failed");
117
+ } else {
118
+ console.log("SDK failed", result.statusCode);
119
+ }
91
120
  break;
92
121
  }
93
122
  case "INITIATE": {
@@ -74,7 +74,7 @@ dependencies {
74
74
  //noinspection GradleDynamicVersion
75
75
  implementation "com.facebook.react:react-native:+"
76
76
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
77
- implementation ("io.github.otpless-tech:otpless-headless-sdk:0.9.0")
77
+ implementation ("io.github.otpless-tech:otpless-headless-sdk:2.0.1")
78
78
  }
79
79
 
80
80
  if (isNewArchitectureEnabled()) {
@@ -13,7 +13,9 @@ import com.facebook.react.bridge.ReadableMap
13
13
  import com.facebook.react.modules.core.DeviceEventManagerModule
14
14
  import com.otpless.longclaw.tc.OTScopeRequest
15
15
  import com.otpless.v2.android.sdk.dto.OtplessResponse
16
+ import com.otpless.v2.android.sdk.dto.OtplessSslKind
16
17
  import com.otpless.v2.android.sdk.main.OtplessSDK
18
+ import com.otpless.v2.android.sdk.utils.BuildPlatform
17
19
  import com.otpless.v2.android.sdk.utils.OtplessUtils
18
20
  import kotlinx.coroutines.CoroutineExceptionHandler
19
21
  import kotlinx.coroutines.CoroutineScope
@@ -72,13 +74,28 @@ class OtplessHeadlessRNModule(private val reactContext: ReactApplicationContext)
72
74
  }
73
75
 
74
76
  @ReactMethod
75
- fun initialize(appId: String, loginUri: String? = null) {
77
+ fun initialize(appId: String, loginUri: String?, sslPinning: String?, buildPlatform: String?) {
76
78
  val activity = currentActivity ?: return
79
+ val sslKind: OtplessSslKind =
80
+ if (sslPinning == "enabled") OtplessSslKind.SslEnabled else OtplessSslKind.SslDisabled
81
+ // Wrapper attribution, computed in JS (which owns the single source of
82
+ // truth for the package version) and arriving as
83
+ // "react-native-android-<packageVersion>". This bridge is a dumb forwarder;
84
+ // the literal fallback covers an older JS layer that does not send the
85
+ // argument, so the token can never be blank.
86
+ val buildPlatformToken = buildPlatform?.trim()?.takeIf { it.isNotEmpty() } ?: "react-native-android"
77
87
  ioScope.launch {
78
88
  lifecycleMutex.withLock {
89
+ // Tells the native SDK this session came through the React Native
90
+ // wrapper, so device telemetry reports
91
+ // platform = "otpless-headless-sdk(react-native-android-<version>)"
92
+ // instead of the default "otpless-headless-sdk(android)". Must be set
93
+ // before initialize, which is what emits the event.
94
+ OtplessSDK.buildPlatform = BuildPlatform(buildPlatformToken)
79
95
  OtplessSDK.initialize(
80
96
  appId = appId, activity = activity,
81
- loginUri = loginUri, callback = this@OtplessHeadlessRNModule::sendHeadlessEventCallback
97
+ loginUri = loginUri, callback = this@OtplessHeadlessRNModule::sendHeadlessEventCallback,
98
+ sslKind = sslKind
82
99
  )
83
100
  }
84
101
  }
@@ -5,6 +5,8 @@
5
5
 
6
6
  RCT_EXTERN_METHOD(initialize:(NSString *)appId
7
7
  loginUri: (nullable NSString *) loginUri
8
+ sslPinning: (nullable NSString *) sslPinning
9
+ buildPlatform: (nullable NSString *) buildPlatform
8
10
  )
9
11
 
10
12
  RCT_EXTERN_METHOD(start:(NSDictionary *)request)
@@ -15,10 +17,6 @@ RCT_EXTERN_METHOD(cleanup)
15
17
 
16
18
  RCT_EXTERN_METHOD(decimateAll)
17
19
 
18
- RCT_EXTERN_METHOD(setOneTapDataCallback)
19
-
20
- RCT_EXTERN_METHOD(performOneTap: (NSDictionary *)request)
21
-
22
20
  RCT_EXTERN_METHOD(authorizeViaPasskey: (NSDictionary *)request)
23
21
 
24
22
  RCT_EXTERN_METHOD(setDevLogging:(BOOL)enable)
@@ -180,20 +180,35 @@ class OtplessHeadlessRN: RCTEventEmitter, OtplessResponseDelegate {
180
180
  resolve(Otpless.shared.isSdkReady())
181
181
  }
182
182
 
183
- @objc(initialize:loginUri:)
184
- func initialize(appId: String, loginUri: String?) {
183
+ @objc(initialize:loginUri:sslPinning:buildPlatform:)
184
+ func initialize(appId: String, loginUri: String?, sslPinning: String?, buildPlatform: String?) {
185
+ let sslKind: OtplessSslKind = sslPinning == "enabled" ? .sslEnabled : .sslDisabled
186
+ // Wrapper attribution, computed in JS (which owns the single source of
187
+ // truth for the package version) and arriving as
188
+ // "react-native-ios-<packageVersion>". This bridge is a dumb forwarder; the
189
+ // literal fallback covers an older JS layer that does not send the
190
+ // argument, so the token can never be blank.
191
+ let trimmedBuildPlatform = buildPlatform?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
192
+ let buildPlatformToken = trimmedBuildPlatform.isEmpty ? "react-native-ios" : trimmedBuildPlatform
185
193
  DispatchQueue.main.async {
194
+ // Tells the native SDK this session came through the React Native
195
+ // wrapper, so device telemetry reports
196
+ // platform = "otpless-headless(react-native-ios-<version>)" instead of
197
+ // the default "otpless-headless(ios)". Must be set before initialise,
198
+ // which is what emits the event.
186
199
  let rootViewController = UIApplication.shared.delegate?.window??.rootViewController
187
200
  if let rvc = rootViewController {
188
201
  Otpless.shared.setResponseDelegate(self)
189
- Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: rvc)
202
+ Otpless.shared.setBuildPlatform(buildPlatformToken)
203
+ Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: rvc, sslKind: sslKind)
190
204
  return
191
205
  }
192
206
 
193
207
  if #available(iOS 13.0, *) {
194
208
  if let windowSceneVC = self.getRootViewControllerFromWindowScene() {
195
209
  Otpless.shared.setResponseDelegate(self)
196
- Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: windowSceneVC)
210
+ Otpless.shared.setBuildPlatform(buildPlatformToken)
211
+ Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: windowSceneVC, sslKind: sslKind)
197
212
  }
198
213
  }
199
214
  }
@@ -8,6 +8,7 @@ var _exportNames = {
8
8
  };
9
9
  exports.OtplessHeadlessModule = void 0;
10
10
  var _reactNative = require("react-native");
11
+ var _version = require("./version");
11
12
  var _models = require("./models");
12
13
  Object.keys(_models).forEach(function (key) {
13
14
  if (key === "default" || key === "__esModule") return;
@@ -29,6 +30,23 @@ const OtplessHeadlessRN = _reactNative.NativeModules.OtplessHeadlessRN ? _reactN
29
30
  throw new Error(LINKING_ERROR);
30
31
  }
31
32
  });
33
+
34
+ /**
35
+ * Wrapper-attribution token sent to the native SDKs at `initialize`.
36
+ *
37
+ * Computed here, in JS, so `otplessRnVersion` is the single source of truth:
38
+ * the Kotlin and Swift bridges only forward whatever arrives over the bridge,
39
+ * instead of each hardcoding a version that would drift on every release.
40
+ *
41
+ * Emitted by the native device-telemetry event as:
42
+ * - Android - `otpless-headless-sdk(react-native-android-<version>)`
43
+ * - iOS - `otpless-headless(react-native-ios-<version>)`
44
+ *
45
+ * The `react-native-` prefix distinguishes this package from the sibling
46
+ * wrappers (`react-native-lite-*`, `react-native-turbo-*`), which share the
47
+ * same iOS telemetry prefix.
48
+ */
49
+ const BUILD_PLATFORM = `react-native-${_reactNative.Platform.OS}-${_version.otplessRnVersion}`;
32
50
  class OtplessHeadlessModule {
33
51
  eventEmitter = null;
34
52
  constructor() {
@@ -38,12 +56,15 @@ class OtplessHeadlessModule {
38
56
  var _this$eventEmitter;
39
57
  (_this$eventEmitter = this.eventEmitter) === null || _this$eventEmitter === void 0 || _this$eventEmitter.removeAllListeners('OTPlessEventResult');
40
58
  }
41
- initialize(appId, loginUri = null) {
59
+ initialize(appId, loginUri = null, options = null) {
42
60
  if (this.eventEmitter == null) {
43
61
  this.eventEmitter = new _reactNative.NativeEventEmitter(OtplessHeadlessRN);
44
62
  }
45
- // call the native method
46
- OtplessHeadlessRN.initialize(appId, loginUri);
63
+ // call the native method; sslPinning is a plain string so an older
64
+ // native module degrades to pinning disabled. buildPlatform is internal
65
+ // wrapper attribution, not a merchant-facing parameter; the native bridges
66
+ // fall back to a bare "react-native-<platform>" if it ever arrives blank.
67
+ OtplessHeadlessRN.initialize(appId, loginUri, (options === null || options === void 0 ? void 0 : options.sslPinning) ?? 'disabled', BUILD_PLATFORM);
47
68
  }
48
69
  setResponseCallback(callback) {
49
70
  var _this$eventEmitter2;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_models","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","LINKING_ERROR","Platform","select","ios","default","OtplessHeadlessRN","NativeModules","Proxy","Error","OtplessHeadlessModule","eventEmitter","constructor","clearListener","_this$eventEmitter","removeAllListeners","initialize","appId","loginUri","NativeEventEmitter","setResponseCallback","callback","_this$eventEmitter2","addListener","start","input","commitResponse","response","isWhatsappInstalledForAndroid","OS","isWhatsappInstalled","cleanup","decimateAll","toLowerCase","setDevLogging","enable","setMfaEnabled","enabled","startBackgroundAuth","config","startInBackground","setSimBindingEnabled","checkSimBindingStatus","clearSimBinding","isSdkReady","initTrueCaller","requestMap","userAuthEvent","event","providerType","fallback","providerInfo"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_version","_models","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","LINKING_ERROR","Platform","select","ios","default","OtplessHeadlessRN","NativeModules","Proxy","Error","BUILD_PLATFORM","OS","otplessRnVersion","OtplessHeadlessModule","eventEmitter","constructor","clearListener","_this$eventEmitter","removeAllListeners","initialize","appId","loginUri","options","NativeEventEmitter","sslPinning","setResponseCallback","callback","_this$eventEmitter2","addListener","start","input","commitResponse","response","isWhatsappInstalledForAndroid","isWhatsappInstalled","cleanup","decimateAll","toLowerCase","setDevLogging","enable","setMfaEnabled","enabled","startBackgroundAuth","config","startInBackground","setSimBindingEnabled","checkSimBindingStatus","clearSimBinding","isSdkReady","initTrueCaller","requestMap","userAuthEvent","event","providerType","fallback","providerInfo"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.otplessRnVersion = void 0;
7
+ /**
8
+ * This package's own version, kept in lock-step with `version` in
9
+ * `package.json`.
10
+ *
11
+ * Internal only: this module is deliberately **not** re-exported from
12
+ * `src/index.tsx` (which exports `OtplessHeadlessModule` and `./models`), so it
13
+ * never becomes merchant-facing API. It exists so the wrapper-attribution token
14
+ * sent to the native SDKs at `initialize`
15
+ * (`react-native-android-<version>` / `react-native-ios-<version>`) has a
16
+ * single source of truth in TypeScript instead of being duplicated in Kotlin
17
+ * and Swift, where it would silently drift on every release.
18
+ *
19
+ * `src/__tests__/version.test.ts` reads `package.json` and fails if this
20
+ * constant falls out of sync, so a forgotten bump breaks CI rather than
21
+ * shipping a wrong token.
22
+ */
23
+ const otplessRnVersion = exports.otplessRnVersion = '3.0.0';
24
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["otplessRnVersion","exports"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,OAAO","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  import { NativeModules, Platform, NativeEventEmitter } from 'react-native';
2
+ import { otplessRnVersion } from './version';
2
3
  const LINKING_ERROR = `The package 'otpless-headless-rn' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
3
4
  ios: "- You have run 'pod install'\n",
4
5
  default: ''
@@ -8,6 +9,23 @@ const OtplessHeadlessRN = NativeModules.OtplessHeadlessRN ? NativeModules.Otples
8
9
  throw new Error(LINKING_ERROR);
9
10
  }
10
11
  });
12
+
13
+ /**
14
+ * Wrapper-attribution token sent to the native SDKs at `initialize`.
15
+ *
16
+ * Computed here, in JS, so `otplessRnVersion` is the single source of truth:
17
+ * the Kotlin and Swift bridges only forward whatever arrives over the bridge,
18
+ * instead of each hardcoding a version that would drift on every release.
19
+ *
20
+ * Emitted by the native device-telemetry event as:
21
+ * - Android - `otpless-headless-sdk(react-native-android-<version>)`
22
+ * - iOS - `otpless-headless(react-native-ios-<version>)`
23
+ *
24
+ * The `react-native-` prefix distinguishes this package from the sibling
25
+ * wrappers (`react-native-lite-*`, `react-native-turbo-*`), which share the
26
+ * same iOS telemetry prefix.
27
+ */
28
+ const BUILD_PLATFORM = `react-native-${Platform.OS}-${otplessRnVersion}`;
11
29
  class OtplessHeadlessModule {
12
30
  eventEmitter = null;
13
31
  constructor() {
@@ -17,12 +35,15 @@ class OtplessHeadlessModule {
17
35
  var _this$eventEmitter;
18
36
  (_this$eventEmitter = this.eventEmitter) === null || _this$eventEmitter === void 0 || _this$eventEmitter.removeAllListeners('OTPlessEventResult');
19
37
  }
20
- initialize(appId, loginUri = null) {
38
+ initialize(appId, loginUri = null, options = null) {
21
39
  if (this.eventEmitter == null) {
22
40
  this.eventEmitter = new NativeEventEmitter(OtplessHeadlessRN);
23
41
  }
24
- // call the native method
25
- OtplessHeadlessRN.initialize(appId, loginUri);
42
+ // call the native method; sslPinning is a plain string so an older
43
+ // native module degrades to pinning disabled. buildPlatform is internal
44
+ // wrapper attribution, not a merchant-facing parameter; the native bridges
45
+ // fall back to a bare "react-native-<platform>" if it ever arrives blank.
46
+ OtplessHeadlessRN.initialize(appId, loginUri, (options === null || options === void 0 ? void 0 : options.sslPinning) ?? 'disabled', BUILD_PLATFORM);
26
47
  }
27
48
  setResponseCallback(callback) {
28
49
  var _this$eventEmitter2;
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","NativeEventEmitter","LINKING_ERROR","select","ios","default","OtplessHeadlessRN","Proxy","get","Error","OtplessHeadlessModule","eventEmitter","constructor","clearListener","_this$eventEmitter","removeAllListeners","initialize","appId","loginUri","setResponseCallback","callback","_this$eventEmitter2","addListener","start","input","commitResponse","response","isWhatsappInstalledForAndroid","OS","isWhatsappInstalled","cleanup","decimateAll","toLowerCase","setDevLogging","enable","setMfaEnabled","enabled","startBackgroundAuth","config","startInBackground","setSimBindingEnabled","checkSimBindingStatus","clearSimBinding","isSdkReady","initTrueCaller","requestMap","userAuthEvent","event","providerType","fallback","providerInfo"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","NativeEventEmitter","otplessRnVersion","LINKING_ERROR","select","ios","default","OtplessHeadlessRN","Proxy","get","Error","BUILD_PLATFORM","OS","OtplessHeadlessModule","eventEmitter","constructor","clearListener","_this$eventEmitter","removeAllListeners","initialize","appId","loginUri","options","sslPinning","setResponseCallback","callback","_this$eventEmitter2","addListener","start","input","commitResponse","response","isWhatsappInstalledForAndroid","isWhatsappInstalled","cleanup","decimateAll","toLowerCase","setDevLogging","enable","setMfaEnabled","enabled","startBackgroundAuth","config","startInBackground","setSimBindingEnabled","checkSimBindingStatus","clearSimBinding","isSdkReady","initTrueCaller","requestMap","userAuthEvent","event","providerType","fallback","providerInfo"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This package's own version, kept in lock-step with `version` in
3
+ * `package.json`.
4
+ *
5
+ * Internal only: this module is deliberately **not** re-exported from
6
+ * `src/index.tsx` (which exports `OtplessHeadlessModule` and `./models`), so it
7
+ * never becomes merchant-facing API. It exists so the wrapper-attribution token
8
+ * sent to the native SDKs at `initialize`
9
+ * (`react-native-android-<version>` / `react-native-ios-<version>`) has a
10
+ * single source of truth in TypeScript instead of being duplicated in Kotlin
11
+ * and Swift, where it would silently drift on every release.
12
+ *
13
+ * `src/__tests__/version.test.ts` reads `package.json` and fails if this
14
+ * constant falls out of sync, so a forgotten bump breaks CI rather than
15
+ * shipping a wrong token.
16
+ */
17
+ export const otplessRnVersion = '3.0.0';
18
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["otplessRnVersion"],"sourceRoot":"../../src","sources":["version.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,gBAAgB,GAAG,OAAO","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { OtplessTruecallerRequest, OtplessAuthEvent, OtplessProviderType, OtplessRequestInput, OtplessBackgroundAuthConfig } from './models';
1
+ import type { OtplessTruecallerRequest, OtplessAuthEvent, OtplessProviderType, OtplessRequestInput, OtplessBackgroundAuthConfig, OtplessInitOptions } from './models';
2
2
  interface OtplessResultCallback {
3
3
  (result: any): void;
4
4
  }
@@ -6,7 +6,7 @@ declare class OtplessHeadlessModule {
6
6
  private eventEmitter;
7
7
  constructor();
8
8
  clearListener(): void;
9
- initialize(appId: String, loginUri?: string | null): void;
9
+ initialize(appId: string, loginUri?: string | null, options?: OtplessInitOptions | null): void;
10
10
  setResponseCallback(callback: OtplessResultCallback): void;
11
11
  start(input: OtplessRequestInput): void;
12
12
  commitResponse(response: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAmBlB,UAAU,qBAAqB;IAC7B,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;CACrB;AAED,cAAM,qBAAqB;IACzB,OAAO,CAAC,YAAY,CAAmC;;IAMvD,aAAa;IAIb,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,IAAW;IAQxD,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB;IAInD,KAAK,CAAC,KAAK,EAAE,mBAAmB;IAIhC,cAAc,CAAC,QAAQ,EAAE,GAAG;IAKtB,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IASvD,OAAO;IAIP,WAAW;IAMX,aAAa,CAAC,MAAM,EAAE,OAAO;IAI7B,aAAa,CAAC,OAAO,EAAE,OAAO;IAIxB,mBAAmB,CACvB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,OAAO,CAAC;IAInB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB;IAM5C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAM/B,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAOzC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,cAAc,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5E,aAAa,CACX,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,GAAE,OAAe,EACzB,YAAY,GAAE,GAAQ;CASzB;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACjC,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAqClB,UAAU,qBAAqB;IAC7B,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;CACrB;AAED,cAAM,qBAAqB;IACzB,OAAO,CAAC,YAAY,CAAmC;;IAMvD,aAAa;IAIb,UAAU,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,OAAO,GAAE,kBAAkB,GAAG,IAAW;IAiB3C,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB;IAInD,KAAK,CAAC,KAAK,EAAE,mBAAmB;IAIhC,cAAc,CAAC,QAAQ,EAAE,GAAG;IAKtB,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IASvD,OAAO;IAIP,WAAW;IAMX,aAAa,CAAC,MAAM,EAAE,OAAO;IAI7B,aAAa,CAAC,OAAO,EAAE,OAAO;IAIxB,mBAAmB,CACvB,MAAM,EAAE,2BAA2B,GAClC,OAAO,CAAC,OAAO,CAAC;IAInB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB;IAM5C,oBAAoB,CAAC,OAAO,EAAE,OAAO;IAM/B,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;IAOzC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAMhC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,cAAc,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5E,aAAa,CACX,KAAK,EAAE,gBAAgB,EACvB,YAAY,EAAE,mBAAmB,EACjC,QAAQ,GAAE,OAAe,EACzB,YAAY,GAAE,GAAQ;CASzB;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACjC,cAAc,UAAU,CAAC"}
@@ -46,4 +46,14 @@ export interface OtplessBackgroundAuthConfig {
46
46
  }
47
47
  export type OtplessChannelType = 'WHATSAPP' | 'GOOGLE_SDK' | 'FACEBOOK_SDK' | 'APPLE' | 'APPLE_SDK' | 'GMAIL' | 'TWITTER' | 'DISCORD' | 'SLACK' | 'FACEBOOK' | 'LINKEDIN' | 'MICROSOFT' | 'LINE' | 'LINEAR' | 'NOTION' | 'TWITCH' | 'GITHUB' | 'BITBUCKET' | 'ATLASSIAN' | 'GITLAB' | 'TRUE_CALLER';
48
48
  export type OtplessDeviceFingerprintMode = 'NONE' | 'ASYNC' | 'SYNC';
49
+ /**
50
+ * SSL pinning mode for `initialize`. `'disabled'` (default) keeps the
51
+ * 2.3.x behaviour. `'enabled'` pins `sigma.otpless.app`; a pin mismatch
52
+ * (e.g. an intercepting proxy) fails closed with `FAILED` / statusCode `5004`.
53
+ */
54
+ export type OtplessSslPinning = 'enabled' | 'disabled';
55
+ export interface OtplessInitOptions {
56
+ /** Defaults to `'disabled'`. */
57
+ sslPinning?: OtplessSslPinning;
58
+ }
49
59
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This package's own version, kept in lock-step with `version` in
3
+ * `package.json`.
4
+ *
5
+ * Internal only: this module is deliberately **not** re-exported from
6
+ * `src/index.tsx` (which exports `OtplessHeadlessModule` and `./models`), so it
7
+ * never becomes merchant-facing API. It exists so the wrapper-attribution token
8
+ * sent to the native SDKs at `initialize`
9
+ * (`react-native-android-<version>` / `react-native-ios-<version>`) has a
10
+ * single source of truth in TypeScript instead of being duplicated in Kotlin
11
+ * and Swift, where it would silently drift on every release.
12
+ *
13
+ * `src/__tests__/version.test.ts` reads `package.json` and fails if this
14
+ * constant falls out of sync, so a forgotten bump breaks CI rather than
15
+ * shipping a wrong token.
16
+ */
17
+ export declare const otplessRnVersion = "3.0.0";
18
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,UAAU,CAAC"}
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
19
  s.dependency "React-Core"
20
- s.dependency 'OtplessBM/Core', '2.4.0'
20
+ s.dependency 'OtplessBM/Core', '3.0.1'
21
21
  s.swift_versions = ['5.5']
22
22
 
23
23
  # Don't install the dependencies when we run `pod install` in the old architecture.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "otpless-headless-rn",
3
- "version": "2.3.0",
3
+ "version": "3.0.0",
4
4
  "description": "react native plugin for otpless headless android and ios",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -41,7 +41,10 @@
41
41
  "ios",
42
42
  "android"
43
43
  ],
44
- "repository": "https://github.com/otpless-tech/react-native-headless-sdk",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/otpless-tech/react-native-headless-sdk.git"
47
+ },
45
48
  "author": "https://github.com/sparsh-otpless",
46
49
  "license": "MIT",
47
50
  "bugs": {
package/src/index.tsx CHANGED
@@ -5,7 +5,9 @@ import type {
5
5
  OtplessProviderType,
6
6
  OtplessRequestInput,
7
7
  OtplessBackgroundAuthConfig,
8
+ OtplessInitOptions,
8
9
  } from './models';
10
+ import { otplessRnVersion } from './version';
9
11
 
10
12
  const LINKING_ERROR =
11
13
  `The package 'otpless-headless-rn' doesn't seem to be linked. Make sure: \n\n` +
@@ -24,6 +26,23 @@ const OtplessHeadlessRN = NativeModules.OtplessHeadlessRN
24
26
  }
25
27
  );
26
28
 
29
+ /**
30
+ * Wrapper-attribution token sent to the native SDKs at `initialize`.
31
+ *
32
+ * Computed here, in JS, so `otplessRnVersion` is the single source of truth:
33
+ * the Kotlin and Swift bridges only forward whatever arrives over the bridge,
34
+ * instead of each hardcoding a version that would drift on every release.
35
+ *
36
+ * Emitted by the native device-telemetry event as:
37
+ * - Android - `otpless-headless-sdk(react-native-android-<version>)`
38
+ * - iOS - `otpless-headless(react-native-ios-<version>)`
39
+ *
40
+ * The `react-native-` prefix distinguishes this package from the sibling
41
+ * wrappers (`react-native-lite-*`, `react-native-turbo-*`), which share the
42
+ * same iOS telemetry prefix.
43
+ */
44
+ const BUILD_PLATFORM = `react-native-${Platform.OS}-${otplessRnVersion}`;
45
+
27
46
  interface OtplessResultCallback {
28
47
  (result: any): void;
29
48
  }
@@ -39,12 +58,24 @@ class OtplessHeadlessModule {
39
58
  this.eventEmitter?.removeAllListeners('OTPlessEventResult');
40
59
  }
41
60
 
42
- initialize(appId: String, loginUri: string | null = null) {
61
+ initialize(
62
+ appId: string,
63
+ loginUri: string | null = null,
64
+ options: OtplessInitOptions | null = null
65
+ ) {
43
66
  if (this.eventEmitter == null) {
44
67
  this.eventEmitter = new NativeEventEmitter(OtplessHeadlessRN);
45
68
  }
46
- // call the native method
47
- OtplessHeadlessRN.initialize(appId, loginUri);
69
+ // call the native method; sslPinning is a plain string so an older
70
+ // native module degrades to pinning disabled. buildPlatform is internal
71
+ // wrapper attribution, not a merchant-facing parameter; the native bridges
72
+ // fall back to a bare "react-native-<platform>" if it ever arrives blank.
73
+ OtplessHeadlessRN.initialize(
74
+ appId,
75
+ loginUri,
76
+ options?.sslPinning ?? 'disabled',
77
+ BUILD_PLATFORM
78
+ );
48
79
  }
49
80
 
50
81
  setResponseCallback(callback: OtplessResultCallback) {
package/src/models.tsx CHANGED
@@ -142,3 +142,15 @@ export type OtplessChannelType =
142
142
  | 'TRUE_CALLER';
143
143
 
144
144
  export type OtplessDeviceFingerprintMode = 'NONE' | 'ASYNC' | 'SYNC';
145
+
146
+ /**
147
+ * SSL pinning mode for `initialize`. `'disabled'` (default) keeps the
148
+ * 2.3.x behaviour. `'enabled'` pins `sigma.otpless.app`; a pin mismatch
149
+ * (e.g. an intercepting proxy) fails closed with `FAILED` / statusCode `5004`.
150
+ */
151
+ export type OtplessSslPinning = 'enabled' | 'disabled';
152
+
153
+ export interface OtplessInitOptions {
154
+ /** Defaults to `'disabled'`. */
155
+ sslPinning?: OtplessSslPinning;
156
+ }
package/src/version.ts ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This package's own version, kept in lock-step with `version` in
3
+ * `package.json`.
4
+ *
5
+ * Internal only: this module is deliberately **not** re-exported from
6
+ * `src/index.tsx` (which exports `OtplessHeadlessModule` and `./models`), so it
7
+ * never becomes merchant-facing API. It exists so the wrapper-attribution token
8
+ * sent to the native SDKs at `initialize`
9
+ * (`react-native-android-<version>` / `react-native-ios-<version>`) has a
10
+ * single source of truth in TypeScript instead of being duplicated in Kotlin
11
+ * and Swift, where it would silently drift on every release.
12
+ *
13
+ * `src/__tests__/version.test.ts` reads `package.json` and fails if this
14
+ * constant falls out of sync, so a forgotten bump breaks CI rather than
15
+ * shipping a wrong token.
16
+ */
17
+ export const otplessRnVersion = '3.0.0';