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 +30 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/otplessheadlessrn/OtplessReactNativeModule.kt +19 -2
- package/ios/OtplessHeadlessRN.m +2 -4
- package/ios/OtplessHeadlessRN.swift +19 -4
- package/lib/commonjs/index.js +24 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/version.js +24 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/index.js +24 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/version.js +18 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/index.d.ts +2 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models.d.ts +10 -0
- package/lib/typescript/models.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +18 -0
- package/lib/typescript/version.d.ts.map +1 -0
- package/otpless-headless-rn.podspec +1 -1
- package/package.json +5 -2
- package/src/index.tsx +34 -3
- package/src/models.tsx +12 -0
- package/src/version.ts +17 -0
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
|
-
|
|
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": {
|
package/android/build.gradle
CHANGED
|
@@ -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.
|
|
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
|
|
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
|
}
|
package/ios/OtplessHeadlessRN.m
CHANGED
|
@@ -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.
|
|
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.
|
|
210
|
+
Otpless.shared.setBuildPlatform(buildPlatformToken)
|
|
211
|
+
Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: windowSceneVC, sslKind: sslKind)
|
|
197
212
|
}
|
|
198
213
|
}
|
|
199
214
|
}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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
|
-
|
|
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","
|
|
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":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/lib/module/index.js.map
CHANGED
|
@@ -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","
|
|
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:
|
|
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,
|
|
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', '
|
|
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": "
|
|
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":
|
|
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(
|
|
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
|
-
|
|
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';
|