react-native-authsignal 1.1.10 → 1.2.2
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 +1 -2
- package/android/build.gradle +1 -1
- package/android/src/main/AndroidManifest.xml +1 -2
- package/android/src/main/java/com/authsignal/react/AuthsignalDeviceModule.kt +153 -0
- package/android/src/main/java/com/authsignal/react/AuthsignalPackage.kt +1 -0
- package/ios/Authsignal.xcodeproj/project.pbxproj +4 -0
- package/ios/AuthsignalDeviceModule.m +30 -0
- package/ios/AuthsignalDeviceModule.swift +157 -0
- package/lib/commonjs/device.js +117 -0
- package/lib/commonjs/device.js.map +1 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/device.js +110 -0
- package/lib/module/device.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/device.d.ts +28 -0
- package/lib/typescript/device.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +13 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-authsignal.podspec +1 -1
- package/src/device.ts +149 -0
- package/src/index.tsx +3 -0
- package/src/types.ts +15 -0
- package/yarn.lock +926 -853
package/README.md
CHANGED
|
@@ -55,6 +55,5 @@ To see how to add push authentication to your app using Authsignal, see our [off
|
|
|
55
55
|
|
|
56
56
|
### Passkeys
|
|
57
57
|
|
|
58
|
-
You can check out [this Github repo](https://github.com/authsignal/react-native-
|
|
58
|
+
You can check out [this Github repo](https://github.com/authsignal/cognito-react-native-example) to see an example app which implements a sign-in with passkey flow using the Authsignal React Native SDK, Amazon Cognito and AWS SDK.
|
|
59
59
|
|
|
60
|
-
To see an example app which demonstrates integration with AWS Cognito + Amplify, take a look at this [this branch](https://github.com/authsignal/react-native-passkey-example/tree/with-aws-cognito).
|
package/android/build.gradle
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
<!--suppress AndroidElementNotAllowed -->
|
|
2
2
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
-
xmlns:tools="http://schemas.android.com/tools"
|
|
4
|
-
package="com.authsignal.react">
|
|
3
|
+
xmlns:tools="http://schemas.android.com/tools">
|
|
5
4
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
6
5
|
|
|
7
6
|
<application>
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
package com.authsignal.react
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
import com.authsignal.device.AuthsignalDevice
|
|
5
|
+
import com.facebook.react.bridge.Arguments
|
|
6
|
+
import com.facebook.react.bridge.Promise
|
|
7
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
8
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
9
|
+
import com.facebook.react.bridge.ReactMethod
|
|
10
|
+
import kotlinx.coroutines.CoroutineScope
|
|
11
|
+
import kotlinx.coroutines.Dispatchers
|
|
12
|
+
import kotlinx.coroutines.SupervisorJob
|
|
13
|
+
import kotlinx.coroutines.launch
|
|
14
|
+
|
|
15
|
+
class AuthsignalDeviceModule(private val reactContext: ReactApplicationContext) :
|
|
16
|
+
ReactContextBaseJavaModule(
|
|
17
|
+
reactContext
|
|
18
|
+
) {
|
|
19
|
+
private val coroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
|
|
20
|
+
private var authsignal: AuthsignalDevice? = null
|
|
21
|
+
private var defaultError = "unexpected_error"
|
|
22
|
+
|
|
23
|
+
override fun getConstants(): Map<String, Any>? {
|
|
24
|
+
val constants: MutableMap<String, Any> = HashMap()
|
|
25
|
+
constants["bundleIdentifier"] = reactContext.applicationInfo.packageName
|
|
26
|
+
return constants
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override fun getName(): String {
|
|
30
|
+
return "AuthsignalDeviceModule"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@ReactMethod
|
|
34
|
+
fun initialize(tenantID: String?, baseURL: String?, promise: Promise) {
|
|
35
|
+
Log.d("AuthsignalDeviceModule", "initialize: $tenantID, $baseURL")
|
|
36
|
+
authsignal = AuthsignalDevice(tenantID!!, baseURL!!)
|
|
37
|
+
|
|
38
|
+
promise.resolve(null)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@ReactMethod
|
|
42
|
+
fun getCredential(promise: Promise) {
|
|
43
|
+
launch(promise) {
|
|
44
|
+
val response = it.getCredential()
|
|
45
|
+
|
|
46
|
+
if (response.error != null) {
|
|
47
|
+
val errorCode = response.errorCode ?: defaultError
|
|
48
|
+
|
|
49
|
+
promise.reject(errorCode, response.error)
|
|
50
|
+
} else {
|
|
51
|
+
val credential = response.data
|
|
52
|
+
val map = Arguments.createMap()
|
|
53
|
+
map.putString("credentialId", credential!!.credentialId)
|
|
54
|
+
map.putString("createdAt", credential.createdAt)
|
|
55
|
+
map.putString("lastAuthenticatedAt", credential.lastAuthenticatedAt)
|
|
56
|
+
promise.resolve(map)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@ReactMethod
|
|
62
|
+
fun addCredential(
|
|
63
|
+
token: String?,
|
|
64
|
+
promise: Promise
|
|
65
|
+
) {
|
|
66
|
+
launch(promise) {
|
|
67
|
+
val response = it.addCredential(token, null)
|
|
68
|
+
|
|
69
|
+
if (response.error != null) {
|
|
70
|
+
val errorCode = response.errorCode ?: defaultError
|
|
71
|
+
|
|
72
|
+
promise.reject(errorCode, response.error)
|
|
73
|
+
} else {
|
|
74
|
+
promise.resolve(response.data)
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@ReactMethod
|
|
80
|
+
fun removeCredential(promise: Promise) {
|
|
81
|
+
launch(promise) {
|
|
82
|
+
val response = it.removeCredential()
|
|
83
|
+
|
|
84
|
+
if (response.error != null) {
|
|
85
|
+
val errorCode = response.errorCode ?: defaultError
|
|
86
|
+
|
|
87
|
+
promise.reject(errorCode, response.error)
|
|
88
|
+
} else {
|
|
89
|
+
promise.resolve(response.data)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@ReactMethod
|
|
95
|
+
fun getChallenge(promise: Promise) {
|
|
96
|
+
launch(promise) {
|
|
97
|
+
val response = it.getChallenge()
|
|
98
|
+
|
|
99
|
+
if (response.error != null) {
|
|
100
|
+
val errorCode = response.errorCode ?: defaultError
|
|
101
|
+
|
|
102
|
+
promise.reject(errorCode, response.error)
|
|
103
|
+
} else {
|
|
104
|
+
val challenge = response.data
|
|
105
|
+
|
|
106
|
+
if (challenge == null) {
|
|
107
|
+
promise.resolve(null)
|
|
108
|
+
} else {
|
|
109
|
+
val map = Arguments.createMap()
|
|
110
|
+
map.putString("challengeId", challenge.challengeId)
|
|
111
|
+
map.putString("actionCode", challenge.actionCode)
|
|
112
|
+
map.putString("idempotencyKey", challenge.idempotencyKey)
|
|
113
|
+
map.putString("ipAddress", challenge.ipAddress)
|
|
114
|
+
map.putString("deviceId", challenge.deviceId)
|
|
115
|
+
map.putString("userAgent", challenge.userAgent)
|
|
116
|
+
promise.resolve(map)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@ReactMethod
|
|
123
|
+
fun updateChallenge(
|
|
124
|
+
challengeId: String,
|
|
125
|
+
approved: Boolean,
|
|
126
|
+
verificationCode: String?,
|
|
127
|
+
promise: Promise
|
|
128
|
+
) {
|
|
129
|
+
launch(promise) {
|
|
130
|
+
val response = it.updateChallenge(challengeId, approved, verificationCode)
|
|
131
|
+
|
|
132
|
+
if (response.error != null) {
|
|
133
|
+
val errorCode = response.errorCode ?: defaultError
|
|
134
|
+
|
|
135
|
+
promise.reject(errorCode, response.error)
|
|
136
|
+
} else {
|
|
137
|
+
promise.resolve(response.data)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
private fun launch(promise: Promise, fn: suspend (client: AuthsignalDevice) -> Unit) {
|
|
143
|
+
coroutineScope.launch {
|
|
144
|
+
authsignal?.let {
|
|
145
|
+
fn(it)
|
|
146
|
+
} ?: run {
|
|
147
|
+
Log.w("init_error", "AuthsignalDeviceModule is not initialized.")
|
|
148
|
+
|
|
149
|
+
promise.resolve(null)
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -12,6 +12,7 @@ class AuthsignalPackage : ReactPackage {
|
|
|
12
12
|
AuthsignalEmailModule(reactContext),
|
|
13
13
|
AuthsignalPasskeyModule(reactContext),
|
|
14
14
|
AuthsignalPushModule(reactContext),
|
|
15
|
+
AuthsignalDeviceModule(reactContext),
|
|
15
16
|
AuthsignalSMSModule(reactContext),
|
|
16
17
|
AuthsignalTOTPModule(reactContext)
|
|
17
18
|
)
|
|
@@ -33,6 +33,8 @@
|
|
|
33
33
|
D8EC5CD52A4D1EE00085B442 /* AuthsignalPushModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalPushModule.m; sourceTree = "<group>"; };
|
|
34
34
|
D8EC5CD62A4D1EE00085B442 /* AuthsignalPasskeyModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalPasskeyModule.m; sourceTree = "<group>"; };
|
|
35
35
|
D8EC5CD72A4D1EE90085B442 /* Authsignal-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Authsignal-Bridging-Header.h"; sourceTree = "<group>"; };
|
|
36
|
+
DDDCE5EE2DDD8E5B0095B3F2 /* AuthsignalDeviceModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalDeviceModule.m; sourceTree = "<group>"; };
|
|
37
|
+
DDDCE5EF2DDD8E5B0095B3F2 /* AuthsignalDeviceModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalDeviceModule.swift; sourceTree = "<group>"; };
|
|
36
38
|
/* End PBXFileReference section */
|
|
37
39
|
|
|
38
40
|
/* Begin PBXFrameworksBuildPhase section */
|
|
@@ -70,6 +72,8 @@
|
|
|
70
72
|
D8EC5CD32A4D1EE00085B442 /* AuthsignalPasskeyModule.swift */,
|
|
71
73
|
D8EC5CD52A4D1EE00085B442 /* AuthsignalPushModule.m */,
|
|
72
74
|
D8EC5CD42A4D1EE00085B442 /* AuthsignalPushModule.swift */,
|
|
75
|
+
DDDCE5EE2DDD8E5B0095B3F2 /* AuthsignalDeviceModule.m */,
|
|
76
|
+
DDDCE5EF2DDD8E5B0095B3F2 /* AuthsignalDeviceModule.swift */,
|
|
73
77
|
134814211AA4EA7D00B7C361 /* Products */,
|
|
74
78
|
);
|
|
75
79
|
sourceTree = "<group>";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(AuthsignalDeviceModule, NSObject)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(initialize:(NSString)tenantID
|
|
7
|
+
withBaseURL:(NSString)baseURL
|
|
8
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
9
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
10
|
+
|
|
11
|
+
RCT_EXTERN_METHOD(getCredential:(RCTPromiseResolveBlock)resolve
|
|
12
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
13
|
+
|
|
14
|
+
RCT_EXTERN_METHOD(addCredential:(NSString)token
|
|
15
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
16
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
17
|
+
|
|
18
|
+
RCT_EXTERN_METHOD(removeCredential:(RCTPromiseResolveBlock)resolve
|
|
19
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
20
|
+
|
|
21
|
+
RCT_EXTERN_METHOD(getChallenge:(RCTPromiseResolveBlock)resolve
|
|
22
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
23
|
+
|
|
24
|
+
RCT_EXTERN_METHOD(updateChallenge:(NSString)challengeId
|
|
25
|
+
withApproval:(BOOL)approved
|
|
26
|
+
withVerificationCode:(NSString)verificationCode
|
|
27
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
28
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
29
|
+
|
|
30
|
+
@end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import Security
|
|
2
|
+
import Foundation
|
|
3
|
+
import Authsignal
|
|
4
|
+
|
|
5
|
+
@objc(AuthsignalDeviceModule)
|
|
6
|
+
class AuthsignalDeviceModule: NSObject {
|
|
7
|
+
var authsignal: AuthsignalDevice?
|
|
8
|
+
|
|
9
|
+
@objc static func requiresMainQueueSetup() -> Bool {
|
|
10
|
+
return true
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@objc func initialize(
|
|
14
|
+
_ tenantID: NSString,
|
|
15
|
+
withBaseURL baseURL: NSString,
|
|
16
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
17
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
18
|
+
) -> Void {
|
|
19
|
+
self.authsignal = AuthsignalDevice(tenantID: tenantID as String, baseURL: baseURL as String)
|
|
20
|
+
|
|
21
|
+
resolve(nil)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@objc func getCredential(
|
|
25
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
26
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
27
|
+
) -> Void {
|
|
28
|
+
guard let authsignal = authsignal else {
|
|
29
|
+
resolve(nil)
|
|
30
|
+
return
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Task.init {
|
|
34
|
+
let response = await authsignal.getCredential()
|
|
35
|
+
|
|
36
|
+
if let error = response.error {
|
|
37
|
+
reject(response.errorCode ?? "unexpected_error", error, nil)
|
|
38
|
+
} else if let data = response.data {
|
|
39
|
+
let credential: [String: String?] = [
|
|
40
|
+
"credentialId": data.credentialId,
|
|
41
|
+
"createdAt": data.createdAt,
|
|
42
|
+
"lastAuthenticatedAt": data.lastAuthenticatedAt,
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
resolve(credential)
|
|
46
|
+
} else {
|
|
47
|
+
resolve(nil)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@objc func addCredential(
|
|
53
|
+
_ token: NSString?,
|
|
54
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
55
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
56
|
+
) -> Void {
|
|
57
|
+
guard let authsignal = authsignal else {
|
|
58
|
+
resolve(nil)
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let tokenStr = token as String?
|
|
63
|
+
let keychainAccess: KeychainAccess = .whenUnlockedThisDeviceOnly
|
|
64
|
+
|
|
65
|
+
Task.init {
|
|
66
|
+
let response = await authsignal.addCredential(token: tokenStr, keychainAccess: keychainAccess)
|
|
67
|
+
|
|
68
|
+
if let error = response.error {
|
|
69
|
+
reject(response.errorCode ?? "unexpected_error", error, nil)
|
|
70
|
+
} else {
|
|
71
|
+
resolve(response.data)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@objc func removeCredential(
|
|
77
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
78
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
79
|
+
) -> Void {
|
|
80
|
+
guard let authsignal = authsignal else {
|
|
81
|
+
resolve(nil)
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
Task.init {
|
|
86
|
+
let response = await authsignal.removeCredential()
|
|
87
|
+
|
|
88
|
+
if let error = response.error {
|
|
89
|
+
reject(response.errorCode ?? "unexpected_error", error, nil)
|
|
90
|
+
} else {
|
|
91
|
+
resolve(response.data)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@objc func getChallenge(
|
|
97
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
98
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
99
|
+
) -> Void {
|
|
100
|
+
guard let authsignal = authsignal else {
|
|
101
|
+
resolve(nil)
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
Task.init {
|
|
106
|
+
let response = await authsignal.getChallenge()
|
|
107
|
+
|
|
108
|
+
if let error = response.error {
|
|
109
|
+
reject(response.errorCode ?? "unexpected_error", error, nil)
|
|
110
|
+
} else if let data = response.data as? DeviceChallenge {
|
|
111
|
+
let challenge: [String: String?] = [
|
|
112
|
+
"challengeId": data.challengeId,
|
|
113
|
+
"actionCode": data.actionCode,
|
|
114
|
+
"idempotencyKey": data.idempotencyKey,
|
|
115
|
+
"userAgent": data.userAgent,
|
|
116
|
+
"deviceId": data.deviceId,
|
|
117
|
+
"ipAddress": data.ipAddress,
|
|
118
|
+
]
|
|
119
|
+
|
|
120
|
+
resolve(challenge)
|
|
121
|
+
} else {
|
|
122
|
+
resolve(nil)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@objc func updateChallenge(
|
|
128
|
+
_ challengeId: NSString,
|
|
129
|
+
withApproval approved: Bool,
|
|
130
|
+
withVerificationCode verificationCode: NSString,
|
|
131
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
132
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
133
|
+
) -> Void {
|
|
134
|
+
guard let authsignal = authsignal else {
|
|
135
|
+
resolve(nil)
|
|
136
|
+
return
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
let challenge = challengeId as String
|
|
140
|
+
let approval = approved as Bool
|
|
141
|
+
let code = verificationCode as String?
|
|
142
|
+
|
|
143
|
+
Task.init {
|
|
144
|
+
let response = await authsignal.updateChallenge(
|
|
145
|
+
challengeId: challenge,
|
|
146
|
+
approved: approval,
|
|
147
|
+
verificationCode: code
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
if let error = response.error {
|
|
151
|
+
reject(response.errorCode ?? "unexpected_error", error, nil)
|
|
152
|
+
} else {
|
|
153
|
+
resolve(response.data)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AuthsignalDevice = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _error = require("./error");
|
|
9
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
10
|
+
let initialized = false;
|
|
11
|
+
const AuthsignalDeviceModule = _reactNative.NativeModules.AuthsignalDeviceModule ? _reactNative.NativeModules.AuthsignalDeviceModule : new Proxy({}, {
|
|
12
|
+
get() {
|
|
13
|
+
throw new Error(_error.LINKING_ERROR);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
class AuthsignalDevice {
|
|
17
|
+
constructor(_ref) {
|
|
18
|
+
let {
|
|
19
|
+
tenantID,
|
|
20
|
+
baseURL,
|
|
21
|
+
enableLogging
|
|
22
|
+
} = _ref;
|
|
23
|
+
_defineProperty(this, "tenantID", void 0);
|
|
24
|
+
_defineProperty(this, "baseURL", void 0);
|
|
25
|
+
_defineProperty(this, "enableLogging", void 0);
|
|
26
|
+
this.tenantID = tenantID;
|
|
27
|
+
this.baseURL = baseURL;
|
|
28
|
+
this.enableLogging = enableLogging;
|
|
29
|
+
}
|
|
30
|
+
async getCredential() {
|
|
31
|
+
await this.ensureModuleIsInitialized();
|
|
32
|
+
try {
|
|
33
|
+
const data = await AuthsignalDeviceModule.getCredential();
|
|
34
|
+
return {
|
|
35
|
+
data
|
|
36
|
+
};
|
|
37
|
+
} catch (ex) {
|
|
38
|
+
if (this.enableLogging) {
|
|
39
|
+
console.log(ex);
|
|
40
|
+
}
|
|
41
|
+
return (0, _error.handleErrorCodes)(ex);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async addCredential() {
|
|
45
|
+
let {
|
|
46
|
+
token
|
|
47
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
48
|
+
await this.ensureModuleIsInitialized();
|
|
49
|
+
try {
|
|
50
|
+
const data = await AuthsignalDeviceModule.addCredential(token);
|
|
51
|
+
return {
|
|
52
|
+
data
|
|
53
|
+
};
|
|
54
|
+
} catch (ex) {
|
|
55
|
+
if (this.enableLogging) {
|
|
56
|
+
console.log(ex);
|
|
57
|
+
}
|
|
58
|
+
return (0, _error.handleErrorCodes)(ex);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async removeCredential() {
|
|
62
|
+
await this.ensureModuleIsInitialized();
|
|
63
|
+
try {
|
|
64
|
+
const data = await AuthsignalDeviceModule.removeCredential();
|
|
65
|
+
return {
|
|
66
|
+
data
|
|
67
|
+
};
|
|
68
|
+
} catch (ex) {
|
|
69
|
+
if (this.enableLogging) {
|
|
70
|
+
console.log(ex);
|
|
71
|
+
}
|
|
72
|
+
return (0, _error.handleErrorCodes)(ex);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async getChallenge() {
|
|
76
|
+
await this.ensureModuleIsInitialized();
|
|
77
|
+
try {
|
|
78
|
+
const data = await AuthsignalDeviceModule.getChallenge();
|
|
79
|
+
return {
|
|
80
|
+
data
|
|
81
|
+
};
|
|
82
|
+
} catch (ex) {
|
|
83
|
+
if (this.enableLogging) {
|
|
84
|
+
console.log(ex);
|
|
85
|
+
}
|
|
86
|
+
return (0, _error.handleErrorCodes)(ex);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async updateChallenge(_ref2) {
|
|
90
|
+
let {
|
|
91
|
+
challengeId,
|
|
92
|
+
approved,
|
|
93
|
+
verificationCode = null
|
|
94
|
+
} = _ref2;
|
|
95
|
+
await this.ensureModuleIsInitialized();
|
|
96
|
+
try {
|
|
97
|
+
const data = await AuthsignalDeviceModule.updateChallenge(challengeId, approved, verificationCode);
|
|
98
|
+
return {
|
|
99
|
+
data
|
|
100
|
+
};
|
|
101
|
+
} catch (ex) {
|
|
102
|
+
if (this.enableLogging) {
|
|
103
|
+
console.log(ex);
|
|
104
|
+
}
|
|
105
|
+
return (0, _error.handleErrorCodes)(ex);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async ensureModuleIsInitialized() {
|
|
109
|
+
if (initialized) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
await AuthsignalDeviceModule.initialize(this.tenantID, this.baseURL);
|
|
113
|
+
initialized = true;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.AuthsignalDevice = AuthsignalDevice;
|
|
117
|
+
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["initialized","AuthsignalDeviceModule","NativeModules","Proxy","get","Error","LINKING_ERROR","AuthsignalDevice","constructor","tenantID","baseURL","enableLogging","getCredential","ensureModuleIsInitialized","data","ex","console","log","handleErrorCodes","addCredential","token","removeCredential","getChallenge","updateChallenge","challengeId","approved","verificationCode","initialize"],"sourceRoot":"../../src","sources":["device.ts"],"mappings":"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"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -23,6 +23,7 @@ var _passkey = require("./passkey");
|
|
|
23
23
|
var _push = require("./push");
|
|
24
24
|
var _sms = require("./sms");
|
|
25
25
|
var _totp = require("./totp");
|
|
26
|
+
var _device = require("./device");
|
|
26
27
|
var _types = require("./types");
|
|
27
28
|
Object.keys(_types).forEach(function (key) {
|
|
28
29
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -54,6 +55,7 @@ class Authsignal {
|
|
|
54
55
|
_defineProperty(this, "email", void 0);
|
|
55
56
|
_defineProperty(this, "passkey", void 0);
|
|
56
57
|
_defineProperty(this, "push", void 0);
|
|
58
|
+
_defineProperty(this, "device", void 0);
|
|
57
59
|
_defineProperty(this, "sms", void 0);
|
|
58
60
|
_defineProperty(this, "totp", void 0);
|
|
59
61
|
this.tenantID = tenantID;
|
|
@@ -74,6 +76,11 @@ class Authsignal {
|
|
|
74
76
|
baseURL,
|
|
75
77
|
enableLogging
|
|
76
78
|
});
|
|
79
|
+
this.device = new _device.AuthsignalDevice({
|
|
80
|
+
tenantID,
|
|
81
|
+
baseURL,
|
|
82
|
+
enableLogging
|
|
83
|
+
});
|
|
77
84
|
this.sms = new _sms.AuthsignalSms({
|
|
78
85
|
tenantID,
|
|
79
86
|
baseURL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AuthsignalModule","NativeModules","Proxy","get","Error","LINKING_ERROR","Authsignal","constructor","tenantID","baseURL","enableLogging","__DEV__","email","AuthsignalEmail","passkey","AuthsignalPasskey","push","AuthsignalPush","sms","AuthsignalSms","totp","AuthsignalTotp","setToken","token","launch","url","Platform","OS","Promise","resolve","reject","callback","error"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAAwB;AAGxB,MAAMA,gBAAgB,GAAGC,0BAAa,CAACD,gBAAgB,GACnDC,0BAAa,CAACD,gBAAgB,GAC9B,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACC,oBAAa,CAAC;EAChC;AACF,CAAC,CACF;AAQE,MAAMC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"names":["AuthsignalModule","NativeModules","Proxy","get","Error","LINKING_ERROR","Authsignal","constructor","tenantID","baseURL","enableLogging","__DEV__","email","AuthsignalEmail","passkey","AuthsignalPasskey","push","AuthsignalPush","device","AuthsignalDevice","sms","AuthsignalSms","totp","AuthsignalTotp","setToken","token","launch","url","Platform","OS","Promise","resolve","reject","callback","error"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAAwB;AAGxB,MAAMA,gBAAgB,GAAGC,0BAAa,CAACD,gBAAgB,GACnDC,0BAAa,CAACD,gBAAgB,GAC9B,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACC,oBAAa,CAAC;EAChC;AACF,CAAC,CACF;AAQE,MAAMC,UAAU,CAAC;EAYtBC,WAAW,OAIS;IAAA,IAJR;MACVC,QAAQ;MACRC,OAAO,GAAG,+BAA+B;MACzCC,aAAa,GAAGC;IACD,CAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAChB,IAAI,CAACH,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,aAAa,GAAGA,aAAa;IAElC,IAAI,CAACE,KAAK,GAAG,IAAIC,sBAAe,CAAC;MAAEL,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;IACtE,IAAI,CAACI,OAAO,GAAG,IAAIC,0BAAiB,CAAC;MAAEP,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;IAC1E,IAAI,CAACM,IAAI,GAAG,IAAIC,oBAAc,CAAC;MAAET,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;IACpE,IAAI,CAACQ,MAAM,GAAG,IAAIC,wBAAgB,CAAC;MAAEX,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;IACxE,IAAI,CAACU,GAAG,GAAG,IAAIC,kBAAa,CAAC;MAAEb,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;IAClE,IAAI,CAACY,IAAI,GAAG,IAAIC,oBAAc,CAAC;MAAEf,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;EACtE;EAEA,MAAMc,QAAQ,CAACC,KAAa,EAAiB;IAC3C,MAAMzB,gBAAgB,CAACwB,QAAQ,CAACC,KAAK,CAAC;EACxC;EAEA,MAAMC,MAAM,CAACC,GAAW,EAA0B;IAChD,OAAO,MAAMD,MAAM,CAACC,GAAG,CAAC;EAC1B;AACF;AAAC;AAEM,SAASD,MAAM,CAACC,GAAW,EAA0B;EAC1D,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAO7B,gBAAgB,CAAC0B,MAAM,CAACC,GAAG,CAAC;EACrC,CAAC,MAAM;IACL,OAAO,IAAIG,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,MAAMC,QAAQ,GAAG,CAACC,KAAU,EAAET,KAAa,KAAK;QAC9C,IAAIA,KAAK,EAAE;UACTM,OAAO,CAACN,KAAK,CAAC;QAChB,CAAC,MAAM,IAAIS,KAAK,EAAE;UAChB,IAAIA,KAAK,CAACA,KAAK,KAAK,gBAAgB,EAAE;YACpCH,OAAO,CAAC,IAAI,CAAC;UACf,CAAC,MAAM;YACLC,MAAM,CAACE,KAAK,CAAC;UACf;QACF,CAAC,MAAM;UACLF,MAAM,CAAC,kBAAkB,CAAC;QAC5B;MACF,CAAC;MAEDhC,gBAAgB,CAAC0B,MAAM,CAACC,GAAG,EAAEM,QAAQ,CAAC;IACxC,CAAC,CAAC;EACJ;AACF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
import { NativeModules } from 'react-native';
|
|
3
|
+
import { handleErrorCodes, LINKING_ERROR } from './error';
|
|
4
|
+
let initialized = false;
|
|
5
|
+
const AuthsignalDeviceModule = NativeModules.AuthsignalDeviceModule ? NativeModules.AuthsignalDeviceModule : new Proxy({}, {
|
|
6
|
+
get() {
|
|
7
|
+
throw new Error(LINKING_ERROR);
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
export class AuthsignalDevice {
|
|
11
|
+
constructor(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
tenantID,
|
|
14
|
+
baseURL,
|
|
15
|
+
enableLogging
|
|
16
|
+
} = _ref;
|
|
17
|
+
_defineProperty(this, "tenantID", void 0);
|
|
18
|
+
_defineProperty(this, "baseURL", void 0);
|
|
19
|
+
_defineProperty(this, "enableLogging", void 0);
|
|
20
|
+
this.tenantID = tenantID;
|
|
21
|
+
this.baseURL = baseURL;
|
|
22
|
+
this.enableLogging = enableLogging;
|
|
23
|
+
}
|
|
24
|
+
async getCredential() {
|
|
25
|
+
await this.ensureModuleIsInitialized();
|
|
26
|
+
try {
|
|
27
|
+
const data = await AuthsignalDeviceModule.getCredential();
|
|
28
|
+
return {
|
|
29
|
+
data
|
|
30
|
+
};
|
|
31
|
+
} catch (ex) {
|
|
32
|
+
if (this.enableLogging) {
|
|
33
|
+
console.log(ex);
|
|
34
|
+
}
|
|
35
|
+
return handleErrorCodes(ex);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async addCredential() {
|
|
39
|
+
let {
|
|
40
|
+
token
|
|
41
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
42
|
+
await this.ensureModuleIsInitialized();
|
|
43
|
+
try {
|
|
44
|
+
const data = await AuthsignalDeviceModule.addCredential(token);
|
|
45
|
+
return {
|
|
46
|
+
data
|
|
47
|
+
};
|
|
48
|
+
} catch (ex) {
|
|
49
|
+
if (this.enableLogging) {
|
|
50
|
+
console.log(ex);
|
|
51
|
+
}
|
|
52
|
+
return handleErrorCodes(ex);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async removeCredential() {
|
|
56
|
+
await this.ensureModuleIsInitialized();
|
|
57
|
+
try {
|
|
58
|
+
const data = await AuthsignalDeviceModule.removeCredential();
|
|
59
|
+
return {
|
|
60
|
+
data
|
|
61
|
+
};
|
|
62
|
+
} catch (ex) {
|
|
63
|
+
if (this.enableLogging) {
|
|
64
|
+
console.log(ex);
|
|
65
|
+
}
|
|
66
|
+
return handleErrorCodes(ex);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async getChallenge() {
|
|
70
|
+
await this.ensureModuleIsInitialized();
|
|
71
|
+
try {
|
|
72
|
+
const data = await AuthsignalDeviceModule.getChallenge();
|
|
73
|
+
return {
|
|
74
|
+
data
|
|
75
|
+
};
|
|
76
|
+
} catch (ex) {
|
|
77
|
+
if (this.enableLogging) {
|
|
78
|
+
console.log(ex);
|
|
79
|
+
}
|
|
80
|
+
return handleErrorCodes(ex);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async updateChallenge(_ref2) {
|
|
84
|
+
let {
|
|
85
|
+
challengeId,
|
|
86
|
+
approved,
|
|
87
|
+
verificationCode = null
|
|
88
|
+
} = _ref2;
|
|
89
|
+
await this.ensureModuleIsInitialized();
|
|
90
|
+
try {
|
|
91
|
+
const data = await AuthsignalDeviceModule.updateChallenge(challengeId, approved, verificationCode);
|
|
92
|
+
return {
|
|
93
|
+
data
|
|
94
|
+
};
|
|
95
|
+
} catch (ex) {
|
|
96
|
+
if (this.enableLogging) {
|
|
97
|
+
console.log(ex);
|
|
98
|
+
}
|
|
99
|
+
return handleErrorCodes(ex);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async ensureModuleIsInitialized() {
|
|
103
|
+
if (initialized) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
await AuthsignalDeviceModule.initialize(this.tenantID, this.baseURL);
|
|
107
|
+
initialized = true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","handleErrorCodes","LINKING_ERROR","initialized","AuthsignalDeviceModule","Proxy","get","Error","AuthsignalDevice","constructor","tenantID","baseURL","enableLogging","getCredential","ensureModuleIsInitialized","data","ex","console","log","addCredential","token","removeCredential","getChallenge","updateChallenge","challengeId","approved","verificationCode","initialize"],"sourceRoot":"../../src","sources":["device.ts"],"mappings":";AAAA,SAASA,aAAa,QAAQ,cAAc;AAC5C,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,SAAS;AAazD,IAAIC,WAAW,GAAG,KAAK;AAEvB,MAAMC,sBAAsB,GAAGJ,aAAa,CAACI,sBAAsB,GAC/DJ,aAAa,CAACI,sBAAsB,GACpC,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAG,GAAG;IACJ,MAAM,IAAIC,KAAK,CAACL,aAAa,CAAC;EAChC;AACF,CAAC,CACF;AAYL,OAAO,MAAMM,gBAAgB,CAAC;EAK5BC,WAAW,OAAwD;IAAA,IAAvD;MAAEC,QAAQ;MAAEC,OAAO;MAAEC;IAA+B,CAAC;IAAA;IAAA;IAAA;IAC/D,IAAI,CAACF,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,aAAa,GAAGA,aAAa;EACpC;EAEA,MAAMC,aAAa,GAAkD;IACnE,MAAM,IAAI,CAACC,yBAAyB,EAAE;IAEtC,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMX,sBAAsB,CAACS,aAAa,EAAE;MAEzD,OAAO;QAAEE;MAAK,CAAC;IACjB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACX,IAAI,IAAI,CAACJ,aAAa,EAAE;QACtBK,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,OAAOf,gBAAgB,CAACe,EAAE,CAAC;IAC7B;EACF;EAEA,MAAMG,aAAa,GAEjB;IAAA,IAFkB;MAAEC;IAA0B,CAAC,uEAAG,CAAC,CAAC;IAGpD,MAAM,IAAI,CAACN,yBAAyB,EAAE;IAEtC,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMX,sBAAsB,CAACe,aAAa,CAACC,KAAK,CAAC;MAE9D,OAAO;QAAEL;MAAK,CAAC;IACjB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACX,IAAI,IAAI,CAACJ,aAAa,EAAE;QACtBK,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,OAAOf,gBAAgB,CAACe,EAAE,CAAC;IAC7B;EACF;EAEA,MAAMK,gBAAgB,GAAyC;IAC7D,MAAM,IAAI,CAACP,yBAAyB,EAAE;IAEtC,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMX,sBAAsB,CAACiB,gBAAgB,EAAE;MAC5D,OAAO;QAAEN;MAAK,CAAC;IACjB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACX,IAAI,IAAI,CAACJ,aAAa,EAAE;QACtBK,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,OAAOf,gBAAgB,CAACe,EAAE,CAAC;IAC7B;EACF;EAEA,MAAMM,YAAY,GAEhB;IACA,MAAM,IAAI,CAACR,yBAAyB,EAAE;IAEtC,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMX,sBAAsB,CAACkB,YAAY,EAAE;MAExD,OAAO;QAAEP;MAAK,CAAC;IACjB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACX,IAAI,IAAI,CAACJ,aAAa,EAAE;QACtBK,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,OAAOf,gBAAgB,CAACe,EAAE,CAAC;IAC7B;EACF;EAEA,MAAMO,eAAe,QAI0C;IAAA,IAJzC;MACpBC,WAAW;MACXC,QAAQ;MACRC,gBAAgB,GAAG;IACC,CAAC;IACrB,MAAM,IAAI,CAACZ,yBAAyB,EAAE;IAEtC,IAAI;MACF,MAAMC,IAAI,GAAG,MAAMX,sBAAsB,CAACmB,eAAe,CACvDC,WAAW,EACXC,QAAQ,EACRC,gBAAgB,CACjB;MAED,OAAO;QAAEX;MAAK,CAAC;IACjB,CAAC,CAAC,OAAOC,EAAE,EAAE;MACX,IAAI,IAAI,CAACJ,aAAa,EAAE;QACtBK,OAAO,CAACC,GAAG,CAACF,EAAE,CAAC;MACjB;MAEA,OAAOf,gBAAgB,CAACe,EAAE,CAAC;IAC7B;EACF;EAEA,MAAcF,yBAAyB,GAAG;IACxC,IAAIX,WAAW,EAAE;MACf;IACF;IAEA,MAAMC,sBAAsB,CAACuB,UAAU,CAAC,IAAI,CAACjB,QAAQ,EAAE,IAAI,CAACC,OAAO,CAAC;IAEpER,WAAW,GAAG,IAAI;EACpB;AACF"}
|