otpless-headless-rn 2.2.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 +3 -3
- package/android/gradle.properties +2 -2
- package/android/src/main/java/com/otplessheadlessrn/OtplessReactNativeModule.kt +111 -133
- package/android/src/main/java/com/otplessheadlessrn/utils.kt +96 -0
- package/ios/OtplessHeadlessRN.m +13 -4
- package/ios/OtplessHeadlessRN.swift +128 -30
- package/lib/commonjs/index.js +53 -11
- 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 +53 -11
- 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 +9 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/models.d.ts +35 -1
- 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 +79 -15
- package/src/models.tsx +127 -65
- package/src/version.ts +17 -0
|
@@ -11,13 +11,15 @@ class OtplessHeadlessRN: RCTEventEmitter, OtplessResponseDelegate {
|
|
|
11
11
|
|
|
12
12
|
@objc(commitResponse:)
|
|
13
13
|
func commitResponse(response: [String: Any]?) {
|
|
14
|
-
guard let response = response else {
|
|
14
|
+
guard let response = response else { return }
|
|
15
|
+
guard let responseTypeString = response["responseType"] as? String,
|
|
16
|
+
let responseType = ResponseTypes(rawValue: responseTypeString) else {
|
|
17
|
+
print("OtplessHeadlessRN: commitResponse — unknown responseType, ignoring call")
|
|
15
18
|
return
|
|
16
19
|
}
|
|
17
|
-
let
|
|
18
|
-
let statusCode = response["statusCode"] as? Int ?? -25000
|
|
20
|
+
let statusCode = response["statusCode"] as? Int ?? 0
|
|
19
21
|
let responseDict = response["response"] as? [String: Any]
|
|
20
|
-
let otplessResponse = OtplessResponse(responseType:
|
|
22
|
+
let otplessResponse = OtplessResponse(responseType: responseType, response: responseDict, statusCode: statusCode)
|
|
21
23
|
Otpless.shared.commitOtplessResponse(otplessResponse)
|
|
22
24
|
}
|
|
23
25
|
|
|
@@ -34,35 +36,40 @@ class OtplessHeadlessRN: RCTEventEmitter, OtplessResponseDelegate {
|
|
|
34
36
|
|
|
35
37
|
private func createOtplessRequest(args: [String: Any]) -> OtplessRequest {
|
|
36
38
|
let otplessRequest = OtplessRequest()
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
|
|
40
|
+
if let phone = args["phone"] as? String, !phone.isEmpty {
|
|
41
|
+
let countryCode = args["countryCode"] as? String ?? ""
|
|
39
42
|
otplessRequest.set(phoneNumber: phone, withCountryCode: countryCode)
|
|
40
|
-
}
|
|
43
|
+
}
|
|
44
|
+
if let email = args["email"] as? String, !email.isEmpty {
|
|
41
45
|
otplessRequest.set(email: email)
|
|
42
|
-
}
|
|
46
|
+
}
|
|
47
|
+
if let channelType = args["channelType"] as? String, !channelType.isEmpty {
|
|
43
48
|
otplessRequest.set(channelType: OtplessChannelType.fromString(channelType))
|
|
44
49
|
}
|
|
45
|
-
if let
|
|
50
|
+
if let requestId = args["requestId"] as? String, !requestId.isEmpty {
|
|
51
|
+
otplessRequest.set(fromBackend: requestId)
|
|
52
|
+
}
|
|
53
|
+
if let otp = args["otp"] as? String, !otp.isEmpty {
|
|
46
54
|
otplessRequest.set(otp: otp)
|
|
47
55
|
}
|
|
48
|
-
if let deliveryChannel = args["deliveryChannel"] as? String,
|
|
49
|
-
|
|
50
|
-
otplessRequest.set(deliveryChannelForTransaction: deliveryChannel)
|
|
56
|
+
if let deliveryChannel = args["deliveryChannel"] as? String, !deliveryChannel.isEmpty {
|
|
57
|
+
otplessRequest.set(deliveryChannelForTransaction: deliveryChannel.uppercased())
|
|
51
58
|
}
|
|
52
|
-
if let otpExpiry = args["expiry"] as? String,
|
|
53
|
-
!otpExpiry.isEmpty {
|
|
59
|
+
if let otpExpiry = args["expiry"] as? String, !otpExpiry.isEmpty {
|
|
54
60
|
otplessRequest.set(otpExpiry: otpExpiry)
|
|
55
61
|
}
|
|
56
|
-
if let otpLength = args["otpLength"] as? String,
|
|
57
|
-
!otpLength.isEmpty {
|
|
62
|
+
if let otpLength = args["otpLength"] as? String, !otpLength.isEmpty {
|
|
58
63
|
otplessRequest.set(otpLength: otpLength)
|
|
59
64
|
}
|
|
60
|
-
|
|
61
|
-
if let tid = args["tid"] as? String,
|
|
62
|
-
!tid.isEmpty {
|
|
65
|
+
if let tid = args["tid"] as? String, !tid.isEmpty {
|
|
63
66
|
otplessRequest.set(tid: tid)
|
|
64
67
|
}
|
|
65
|
-
|
|
68
|
+
if let modeString = args["deviceFingerprintMode"] as? String,
|
|
69
|
+
let mode = fingerprintModeFromString(modeString.uppercased()) {
|
|
70
|
+
otplessRequest.set(deviceFingerprintMode: mode)
|
|
71
|
+
}
|
|
72
|
+
|
|
66
73
|
return otplessRequest
|
|
67
74
|
}
|
|
68
75
|
|
|
@@ -84,7 +91,86 @@ class OtplessHeadlessRN: RCTEventEmitter, OtplessResponseDelegate {
|
|
|
84
91
|
Otpless.shared.setLoggerDelegate(self)
|
|
85
92
|
}
|
|
86
93
|
}
|
|
94
|
+
|
|
95
|
+
@objc(setMfaEnabled:)
|
|
96
|
+
func setMfaEnabled(enabled: Bool) {
|
|
97
|
+
Otpless.shared.setMfaEnabled(enabled)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private func fingerprintModeFromString(_ name: String) -> DeviceFingerprintMode? {
|
|
101
|
+
switch name {
|
|
102
|
+
case "NONE": return .NONE
|
|
103
|
+
case "ASYNC": return .ASYNC
|
|
104
|
+
case "SYNC": return .SYNC
|
|
105
|
+
default: return nil
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@objc(startBackgroundAuth:resolver:rejecter:)
|
|
110
|
+
func startBackgroundAuth(config: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
111
|
+
let isForeground = (config["isForeground"] as? Bool) ?? true
|
|
112
|
+
let otp = config["otp"] as? String
|
|
113
|
+
let tid = config["tid"] as? String
|
|
114
|
+
let mode = (config["deviceFingerprintMode"] as? String)
|
|
115
|
+
.flatMap { fingerprintModeFromString($0.uppercased()) } ?? .NONE
|
|
116
|
+
Otpless.shared.setDeviceFingerprintMode(mode)
|
|
117
|
+
let authConfig = OtplessAuthCofig(isForeground: isForeground, otp: otp, tid: tid)
|
|
118
|
+
DispatchQueue.main.async {
|
|
119
|
+
let rvc = UIApplication.shared.delegate?.window??.rootViewController
|
|
120
|
+
?? self.getRootViewControllerFromWindowScene()
|
|
121
|
+
guard let vc = rvc else {
|
|
122
|
+
resolve(false)
|
|
123
|
+
return
|
|
124
|
+
}
|
|
125
|
+
Task(priority: .userInitiated) {
|
|
126
|
+
let result = await Otpless.shared.startAuth(parent: vc, config: authConfig)
|
|
127
|
+
resolve(result)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
87
131
|
|
|
132
|
+
private func authEventFromString(_ name: String) -> AuthEvent? {
|
|
133
|
+
switch name {
|
|
134
|
+
case "AUTH_INITIATED": return .AUTH_INITIATED
|
|
135
|
+
case "AUTH_SUCCESS": return .AUTH_SUCCESS
|
|
136
|
+
case "AUTH_FAILED": return .AUTH_FAILED
|
|
137
|
+
default: return nil
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private func providerTypeFromString(_ name: String) -> ProviderType? {
|
|
142
|
+
switch name {
|
|
143
|
+
case "CLIENT": return .CLIENT
|
|
144
|
+
case "OTPLESS": return .OTPLESS
|
|
145
|
+
default: return nil
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@objc(userAuthEvent:fallback:providerType:providerInfo:)
|
|
150
|
+
func userAuthEvent(event: String, fallback: Bool, providerType: String, providerInfo: [String: Any]?) {
|
|
151
|
+
guard let authEvent = authEventFromString(event) else { return }
|
|
152
|
+
guard let provider = providerTypeFromString(providerType) else { return }
|
|
153
|
+
var info: [String: String] = [:]
|
|
154
|
+
if let raw = providerInfo {
|
|
155
|
+
for (key, value) in raw {
|
|
156
|
+
if let s = value as? String {
|
|
157
|
+
info[key] = s
|
|
158
|
+
} else if let n = value as? NSNumber {
|
|
159
|
+
info[key] = n.stringValue
|
|
160
|
+
} else if let arr = value as? [Any],
|
|
161
|
+
let data = try? JSONSerialization.data(withJSONObject: arr),
|
|
162
|
+
let s = String(data: data, encoding: .utf8) {
|
|
163
|
+
info[key] = s
|
|
164
|
+
} else if let dict = value as? [String: Any],
|
|
165
|
+
let data = try? JSONSerialization.data(withJSONObject: dict),
|
|
166
|
+
let s = String(data: data, encoding: .utf8) {
|
|
167
|
+
info[key] = s
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
Otpless.shared.userAuthEvent(event: authEvent, fallback: fallback, providerType: provider, providerInfo: info)
|
|
172
|
+
}
|
|
173
|
+
|
|
88
174
|
override func supportedEvents() -> [String]! {
|
|
89
175
|
return ["OTPlessEventResult"]
|
|
90
176
|
}
|
|
@@ -94,23 +180,35 @@ class OtplessHeadlessRN: RCTEventEmitter, OtplessResponseDelegate {
|
|
|
94
180
|
resolve(Otpless.shared.isSdkReady())
|
|
95
181
|
}
|
|
96
182
|
|
|
97
|
-
@objc(initialize:loginUri:)
|
|
98
|
-
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
|
|
99
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.
|
|
100
199
|
let rootViewController = UIApplication.shared.delegate?.window??.rootViewController
|
|
101
|
-
if
|
|
200
|
+
if let rvc = rootViewController {
|
|
102
201
|
Otpless.shared.setResponseDelegate(self)
|
|
103
|
-
Otpless.shared.
|
|
202
|
+
Otpless.shared.setBuildPlatform(buildPlatformToken)
|
|
203
|
+
Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: rvc, sslKind: sslKind)
|
|
104
204
|
return
|
|
105
205
|
}
|
|
106
|
-
|
|
107
|
-
// Could not get an instance of RootViewController. Try to get RootViewController from `windowScene`.
|
|
206
|
+
|
|
108
207
|
if #available(iOS 13.0, *) {
|
|
109
|
-
let windowSceneVC = self.getRootViewControllerFromWindowScene()
|
|
110
|
-
if windowSceneVC != nil {
|
|
208
|
+
if let windowSceneVC = self.getRootViewControllerFromWindowScene() {
|
|
111
209
|
Otpless.shared.setResponseDelegate(self)
|
|
112
|
-
Otpless.shared.
|
|
113
|
-
|
|
210
|
+
Otpless.shared.setBuildPlatform(buildPlatformToken)
|
|
211
|
+
Otpless.shared.initialise(withAppId: appId, loginUri: loginUri, vc: windowSceneVC, sslKind: sslKind)
|
|
114
212
|
}
|
|
115
213
|
}
|
|
116
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;
|
|
@@ -76,6 +97,33 @@ class OtplessHeadlessModule {
|
|
|
76
97
|
setDevLogging(enable) {
|
|
77
98
|
OtplessHeadlessRN.setDevLogging(enable);
|
|
78
99
|
}
|
|
100
|
+
setMfaEnabled(enabled) {
|
|
101
|
+
OtplessHeadlessRN.setMfaEnabled(enabled);
|
|
102
|
+
}
|
|
103
|
+
async startBackgroundAuth(config) {
|
|
104
|
+
return await OtplessHeadlessRN.startBackgroundAuth(config);
|
|
105
|
+
}
|
|
106
|
+
startInBackground(input) {
|
|
107
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
108
|
+
OtplessHeadlessRN.startInBackground(input);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
setSimBindingEnabled(enabled) {
|
|
112
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
113
|
+
OtplessHeadlessRN.setSimBindingEnabled(enabled);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async checkSimBindingStatus() {
|
|
117
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
118
|
+
return await OtplessHeadlessRN.checkSimBindingStatus();
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
async clearSimBinding() {
|
|
123
|
+
if (_reactNative.Platform.OS === 'android') {
|
|
124
|
+
await OtplessHeadlessRN.clearSimBinding();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
79
127
|
async isSdkReady() {
|
|
80
128
|
return await OtplessHeadlessRN.isSdkReady();
|
|
81
129
|
}
|
|
@@ -85,14 +133,8 @@ class OtplessHeadlessModule {
|
|
|
85
133
|
}
|
|
86
134
|
return false;
|
|
87
135
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
userAuthEvent(event, providerType, fallback = false, providerInfo = {} // `any` avoids Record<string,string> conflicts across RN versions
|
|
91
|
-
) {
|
|
92
|
-
if (_reactNative.Platform.OS === 'android') {
|
|
93
|
-
// args reordered to match Kotlin bridge: (event, fallback, providerType, providerInfo)
|
|
94
|
-
OtplessHeadlessRN.userAuthEvent(event, fallback, providerType, providerInfo);
|
|
95
|
-
}
|
|
136
|
+
userAuthEvent(event, providerType, fallback = false, providerInfo = {}) {
|
|
137
|
+
OtplessHeadlessRN.userAuthEvent(event, fallback, providerType, providerInfo);
|
|
96
138
|
}
|
|
97
139
|
}
|
|
98
140
|
exports.OtplessHeadlessModule = OtplessHeadlessModule;
|
|
@@ -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;
|
|
@@ -55,6 +76,33 @@ class OtplessHeadlessModule {
|
|
|
55
76
|
setDevLogging(enable) {
|
|
56
77
|
OtplessHeadlessRN.setDevLogging(enable);
|
|
57
78
|
}
|
|
79
|
+
setMfaEnabled(enabled) {
|
|
80
|
+
OtplessHeadlessRN.setMfaEnabled(enabled);
|
|
81
|
+
}
|
|
82
|
+
async startBackgroundAuth(config) {
|
|
83
|
+
return await OtplessHeadlessRN.startBackgroundAuth(config);
|
|
84
|
+
}
|
|
85
|
+
startInBackground(input) {
|
|
86
|
+
if (Platform.OS === 'android') {
|
|
87
|
+
OtplessHeadlessRN.startInBackground(input);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
setSimBindingEnabled(enabled) {
|
|
91
|
+
if (Platform.OS === 'android') {
|
|
92
|
+
OtplessHeadlessRN.setSimBindingEnabled(enabled);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async checkSimBindingStatus() {
|
|
96
|
+
if (Platform.OS === 'android') {
|
|
97
|
+
return await OtplessHeadlessRN.checkSimBindingStatus();
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
async clearSimBinding() {
|
|
102
|
+
if (Platform.OS === 'android') {
|
|
103
|
+
await OtplessHeadlessRN.clearSimBinding();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
58
106
|
async isSdkReady() {
|
|
59
107
|
return await OtplessHeadlessRN.isSdkReady();
|
|
60
108
|
}
|
|
@@ -64,14 +112,8 @@ class OtplessHeadlessModule {
|
|
|
64
112
|
}
|
|
65
113
|
return false;
|
|
66
114
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
userAuthEvent(event, providerType, fallback = false, providerInfo = {} // `any` avoids Record<string,string> conflicts across RN versions
|
|
70
|
-
) {
|
|
71
|
-
if (Platform.OS === 'android') {
|
|
72
|
-
// args reordered to match Kotlin bridge: (event, fallback, providerType, providerInfo)
|
|
73
|
-
OtplessHeadlessRN.userAuthEvent(event, fallback, providerType, providerInfo);
|
|
74
|
-
}
|
|
115
|
+
userAuthEvent(event, providerType, fallback = false, providerInfo = {}) {
|
|
116
|
+
OtplessHeadlessRN.userAuthEvent(event, fallback, providerType, providerInfo);
|
|
75
117
|
}
|
|
76
118
|
}
|
|
77
119
|
export { OtplessHeadlessModule };
|
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 } 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,14 +6,20 @@ 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
|
-
start(input:
|
|
11
|
+
start(input: OtplessRequestInput): void;
|
|
12
12
|
commitResponse(response: any): void;
|
|
13
13
|
isWhatsappInstalledForAndroid(): Promise<boolean>;
|
|
14
14
|
cleanup(): void;
|
|
15
15
|
decimateAll(): void;
|
|
16
16
|
setDevLogging(enable: boolean): void;
|
|
17
|
+
setMfaEnabled(enabled: boolean): void;
|
|
18
|
+
startBackgroundAuth(config: OtplessBackgroundAuthConfig): Promise<boolean>;
|
|
19
|
+
startInBackground(input: OtplessRequestInput): void;
|
|
20
|
+
setSimBindingEnabled(enabled: boolean): void;
|
|
21
|
+
checkSimBindingStatus(): Promise<boolean>;
|
|
22
|
+
clearSimBinding(): Promise<void>;
|
|
17
23
|
isSdkReady(): Promise<boolean>;
|
|
18
24
|
initTrueCaller(requestMap: OtplessTruecallerRequest): Promise<boolean>;
|
|
19
25
|
userAuthEvent(event: OtplessAuthEvent, providerType: OtplessProviderType, fallback?: boolean, providerInfo?: 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,
|
|
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"}
|
|
@@ -13,7 +13,7 @@ export interface OtplessTruecallerConfig {
|
|
|
13
13
|
buttonColor?: number;
|
|
14
14
|
buttonTextColor?: number;
|
|
15
15
|
}
|
|
16
|
-
export type OTScope =
|
|
16
|
+
export type OTScope = 'profile' | 'phone' | 'open_id' | 'offline_access' | 'email' | 'address';
|
|
17
17
|
export type OTFooterType = 'footer_type_skip' | 'footer_type_another_mobile_no' | 'footer_type_another_method' | 'footer_type_manually' | 'footer_type_later';
|
|
18
18
|
export type OTButtonShape = 'button_shape_rounded' | 'button_shape_rectangle';
|
|
19
19
|
export type OTVerifyOption = 'option_verify_only_tc_users' | 'option_verify_all_users';
|
|
@@ -22,4 +22,38 @@ export type OTLoginPrefixText = 'login_text_prefix_to_get_started' | 'login_text
|
|
|
22
22
|
export type OTCtaText = 'cta_text_proceed' | 'cta_text_continue' | 'cta_text_accept' | 'cta_text_confirm';
|
|
23
23
|
export type OtplessAuthEvent = 'AUTH_INITIATED' | 'AUTH_SUCCESS' | 'AUTH_FAILED';
|
|
24
24
|
export type OtplessProviderType = 'CLIENT' | 'OTPLESS';
|
|
25
|
+
export interface OtplessRequestInput {
|
|
26
|
+
phone?: string;
|
|
27
|
+
/** Required together with `phone`. */
|
|
28
|
+
countryCode?: string;
|
|
29
|
+
email?: string;
|
|
30
|
+
channelType?: OtplessChannelType;
|
|
31
|
+
otp?: string;
|
|
32
|
+
expiry?: string;
|
|
33
|
+
otpLength?: string;
|
|
34
|
+
deliveryChannel?: string;
|
|
35
|
+
tid?: string;
|
|
36
|
+
/** Backend-generated or WebAuthn request ID. */
|
|
37
|
+
requestId?: string;
|
|
38
|
+
deviceFingerprintMode?: OtplessDeviceFingerprintMode;
|
|
39
|
+
}
|
|
40
|
+
export interface OtplessBackgroundAuthConfig {
|
|
41
|
+
/** Defaults to `true` — presents the OneTap bottom sheet. `false` runs in background when possible. */
|
|
42
|
+
isForeground?: boolean;
|
|
43
|
+
otp?: string;
|
|
44
|
+
tid?: string;
|
|
45
|
+
deviceFingerprintMode?: OtplessDeviceFingerprintMode;
|
|
46
|
+
}
|
|
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
|
+
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
|
+
}
|
|
25
59
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/models.tsx"],"names":[],"mappings":"
|
|
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.
|