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 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-passkey-example) to see an example app which implements a sign-in with passkey flow using the Authsignal React Native SDK.
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).
@@ -77,5 +77,5 @@ dependencies {
77
77
 
78
78
  implementation "androidx.browser:browser:1.2.0"
79
79
 
80
- implementation("com.authsignal:authsignal-android:2.0.3")
80
+ implementation("com.authsignal:authsignal-android:2.1.2")
81
81
  }
@@ -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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"}
@@ -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;EAWtBC,WAAW,OAIS;IAAA,IAJR;MACVC,QAAQ;MACRC,OAAO,GAAG,+BAA+B;MACzCC,aAAa,GAAGC;IACD,CAAC;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,GAAG,GAAG,IAAIC,kBAAa,CAAC;MAAEX,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;IAClE,IAAI,CAACU,IAAI,GAAG,IAAIC,oBAAc,CAAC;MAAEb,QAAQ;MAAEC,OAAO;MAAEC;IAAc,CAAC,CAAC;EACtE;EAEA,MAAMY,QAAQ,CAACC,KAAa,EAAiB;IAC3C,MAAMvB,gBAAgB,CAACsB,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,OAAO3B,gBAAgB,CAACwB,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;MAED9B,gBAAgB,CAACwB,MAAM,CAACC,GAAG,EAAEM,QAAQ,CAAC;IACxC,CAAC,CAAC;EACJ;AACF"}
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":"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"}