react-native-authsignal 0.4.5 → 1.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.
Files changed (72) hide show
  1. package/android/build.gradle +2 -3
  2. package/android/gradle/wrapper/gradle-wrapper.properties +2 -1
  3. package/android/gradle.properties +2 -2
  4. package/android/src/main/java/com/authsignal/react/AuthsignalEmailModule.java +133 -0
  5. package/android/src/main/java/com/authsignal/react/AuthsignalModule.java +10 -2
  6. package/android/src/main/java/com/authsignal/react/AuthsignalPackage.java +4 -1
  7. package/android/src/main/java/com/authsignal/react/AuthsignalPasskeyModule.java +8 -6
  8. package/android/src/main/java/com/authsignal/react/AuthsignalPushModule.java +3 -1
  9. package/android/src/main/java/com/authsignal/react/AuthsignalSMSModule.java +133 -0
  10. package/android/src/main/java/com/authsignal/react/AuthsignalTOTPModule.java +112 -0
  11. package/ios/Authsignal.xcodeproj/project.pbxproj +16 -4
  12. package/ios/AuthsignalEmailModule.m +22 -0
  13. package/ios/AuthsignalEmailModule.swift +109 -0
  14. package/ios/AuthsignalModule.m +9 -63
  15. package/ios/AuthsignalModule.swift +87 -0
  16. package/ios/AuthsignalPasskeyModule.m +1 -1
  17. package/ios/AuthsignalPasskeyModule.swift +11 -9
  18. package/ios/AuthsignalPushModule.m +1 -1
  19. package/ios/AuthsignalPushModule.swift +9 -7
  20. package/ios/AuthsignalSMSModule.m +22 -0
  21. package/ios/AuthsignalSMSModule.swift +109 -0
  22. package/ios/AuthsignalTOTPModule.m +18 -0
  23. package/ios/AuthsignalTOTPModule.swift +82 -0
  24. package/lib/commonjs/email.js +80 -0
  25. package/lib/commonjs/email.js.map +1 -0
  26. package/lib/commonjs/error.js +18 -0
  27. package/lib/commonjs/error.js.map +1 -1
  28. package/lib/commonjs/index.js +27 -0
  29. package/lib/commonjs/index.js.map +1 -1
  30. package/lib/commonjs/passkey.js +4 -4
  31. package/lib/commonjs/passkey.js.map +1 -1
  32. package/lib/commonjs/sms.js +80 -0
  33. package/lib/commonjs/sms.js.map +1 -0
  34. package/lib/commonjs/totp.js +68 -0
  35. package/lib/commonjs/totp.js.map +1 -0
  36. package/lib/module/email.js +73 -0
  37. package/lib/module/email.js.map +1 -0
  38. package/lib/module/error.js +17 -0
  39. package/lib/module/error.js.map +1 -1
  40. package/lib/module/index.js +27 -0
  41. package/lib/module/index.js.map +1 -1
  42. package/lib/module/passkey.js +4 -4
  43. package/lib/module/passkey.js.map +1 -1
  44. package/lib/module/sms.js +73 -0
  45. package/lib/module/sms.js.map +1 -0
  46. package/lib/module/totp.js +61 -0
  47. package/lib/module/totp.js.map +1 -0
  48. package/lib/typescript/email.d.ts +22 -0
  49. package/lib/typescript/email.d.ts.map +1 -0
  50. package/lib/typescript/error.d.ts +9 -0
  51. package/lib/typescript/error.d.ts.map +1 -1
  52. package/lib/typescript/index.d.ts +8 -0
  53. package/lib/typescript/index.d.ts.map +1 -1
  54. package/lib/typescript/passkey.d.ts +3 -3
  55. package/lib/typescript/passkey.d.ts.map +1 -1
  56. package/lib/typescript/sms.d.ts +22 -0
  57. package/lib/typescript/sms.d.ts.map +1 -0
  58. package/lib/typescript/totp.d.ts +22 -0
  59. package/lib/typescript/totp.d.ts.map +1 -0
  60. package/lib/typescript/types.d.ts +10 -2
  61. package/lib/typescript/types.d.ts.map +1 -1
  62. package/package.json +1 -1
  63. package/react-native-authsignal.podspec +1 -1
  64. package/src/email.ts +94 -0
  65. package/src/error.ts +19 -0
  66. package/src/index.tsx +17 -0
  67. package/src/passkey.ts +5 -5
  68. package/src/sms.ts +96 -0
  69. package/src/totp.ts +83 -0
  70. package/src/types.ts +12 -2
  71. package/yarn.lock +109 -83
  72. package/ios/AuthsignalModule.h +0 -11
@@ -5,7 +5,7 @@ buildscript {
5
5
  }
6
6
 
7
7
  dependencies {
8
- classpath 'com.android.tools.build:gradle:4.2.0'
8
+ classpath 'com.android.tools.build:gradle:7.4.2'
9
9
  }
10
10
  }
11
11
 
@@ -129,8 +129,7 @@ dependencies {
129
129
 
130
130
  implementation "androidx.browser:browser:1.2.0"
131
131
 
132
- implementation("com.authsignal:authsignal-push-android:0.2.13")
133
- implementation("com.authsignal:authsignal-passkey-android:0.2.2")
132
+ implementation("com.authsignal:authsignal-android:1.0.4")
134
133
  }
135
134
 
136
135
  if (isNewArchitectureEnabled()) {
@@ -1,5 +1,6 @@
1
+ #Fri Aug 16 14:14:32 NZST 2024
1
2
  distributionBase=GRADLE_USER_HOME
2
3
  distributionPath=wrapper/dists
3
- distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
4
+ distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
4
5
  zipStoreBase=GRADLE_USER_HOME
5
6
  zipStorePath=wrapper/dists
@@ -1,5 +1,5 @@
1
1
  Authsignal_minSdkVersion=24
2
- Authsignal_targetSdkVersion=31
3
- Authsignal_compileSdkVersion=31
2
+ Authsignal_targetSdkVersion=33
3
+ Authsignal_compileSdkVersion=33
4
4
  Authsignal_ndkversion=21.4.7075529
5
5
  android.useAndroidX=true
@@ -0,0 +1,133 @@
1
+ package com.authsignal.react;
2
+
3
+ import android.app.Activity;
4
+ import android.util.Log;
5
+
6
+ import androidx.annotation.NonNull;
7
+
8
+ import com.authsignal.email.AuthsignalEmail;
9
+ import com.authsignal.models.*;
10
+ import com.facebook.react.bridge.Arguments;
11
+ import com.facebook.react.bridge.Promise;
12
+ import com.facebook.react.bridge.ReactApplicationContext;
13
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
14
+ import com.facebook.react.bridge.ReactMethod;
15
+ import com.facebook.react.bridge.WritableMap;
16
+
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ public class AuthsignalEmailModule extends ReactContextBaseJavaModule {
21
+ private final ReactApplicationContext reactContext;
22
+
23
+ private AuthsignalEmail authsignalEmail;
24
+
25
+ private final String TAG = "AuthsignalEmailModule";
26
+ private final String INIT_WARNING = "AuthsignalEmailModule is not initialized.";
27
+
28
+ public AuthsignalEmailModule(ReactApplicationContext reactContext) {
29
+ super(reactContext);
30
+ this.reactContext = reactContext;
31
+ }
32
+
33
+ @Override
34
+ public Map<String, Object> getConstants() {
35
+ final Map<String, Object> constants = new HashMap<>();
36
+ constants.put("bundleIdentifier", reactContext.getApplicationInfo().packageName);
37
+ return constants;
38
+ }
39
+
40
+ @NonNull
41
+ @Override
42
+ public String getName() {
43
+ return "AuthsignalEmailModule";
44
+ }
45
+
46
+ @ReactMethod
47
+ public void initialize(String tenantID, String baseURL, Promise promise) {
48
+ Activity currentActivity = reactContext.getCurrentActivity();
49
+
50
+ if (currentActivity != null) {
51
+ authsignalEmail = new AuthsignalEmail(
52
+ tenantID,
53
+ baseURL
54
+ );
55
+ }
56
+
57
+ promise.resolve(null);
58
+ }
59
+
60
+ @ReactMethod
61
+ public void enroll(String email, Promise promise) {
62
+ if (authsignalEmail != null) {
63
+ authsignalEmail
64
+ .enrollAsync(email)
65
+ .thenAcceptAsync(response -> {
66
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
67
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
68
+ } else if (response.getError() != null) {
69
+ promise.reject("enrollError", response.getError());
70
+ } else {
71
+ EnrollResponse enrollResponse = response.getData();
72
+ WritableMap map = Arguments.createMap();
73
+ map.putString("userAuthenticatorId", enrollResponse.getUserAuthenticatorId());
74
+ promise.resolve(map);
75
+ }
76
+ });
77
+ } else {
78
+ Log.w(TAG, INIT_WARNING);
79
+
80
+ promise.resolve(null);
81
+ }
82
+ }
83
+
84
+ @ReactMethod
85
+ public void challenge(Promise promise) {
86
+ if (authsignalEmail != null) {
87
+ authsignalEmail
88
+ .challengeAsync()
89
+ .thenAcceptAsync(response -> {
90
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
91
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
92
+ } else if (response.getError() != null) {
93
+ promise.reject("challengeError", response.getError());
94
+ } else {
95
+ ChallengeResponse challengeResponse = response.getData();
96
+ WritableMap map = Arguments.createMap();
97
+ map.putString("challengeId", challengeResponse.getChallengeId());
98
+ promise.resolve(map);
99
+ }
100
+ });
101
+ } else {
102
+ Log.w(TAG, INIT_WARNING);
103
+
104
+ promise.resolve(null);
105
+ }
106
+ }
107
+
108
+ @ReactMethod
109
+ public void verify(String code, Promise promise) {
110
+ if (authsignalEmail != null) {
111
+ authsignalEmail
112
+ .verifyAsync(code)
113
+ .thenAcceptAsync(response -> {
114
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
115
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
116
+ } else if (response.getError() != null) {
117
+ promise.reject("verifyError", response.getError());
118
+ } else {
119
+ VerifyResponse verifyResponse = response.getData();
120
+ WritableMap map = Arguments.createMap();
121
+ map.putBoolean("isVerified", verifyResponse.isVerified());
122
+ map.putString("token", verifyResponse.getToken());
123
+ map.putString("failureReason", verifyResponse.getFailureReason());
124
+ promise.resolve(map);
125
+ }
126
+ });
127
+ } else {
128
+ Log.w(TAG, INIT_WARNING);
129
+
130
+ promise.resolve(null);
131
+ }
132
+ }
133
+ }
@@ -6,6 +6,7 @@ import android.content.ActivityNotFoundException;
6
6
  import android.net.Uri;
7
7
  import androidx.annotation.NonNull;
8
8
 
9
+ import com.authsignal.TokenCache;
9
10
  import com.facebook.react.bridge.ActivityEventListener;
10
11
  import com.facebook.react.bridge.Arguments;
11
12
  import com.facebook.react.bridge.Callback;
@@ -14,11 +15,9 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
14
15
  import com.facebook.react.bridge.ReactMethod;
15
16
  import com.facebook.react.bridge.WritableMap;
16
17
 
17
- import java.net.URL;
18
18
  import java.net.URLDecoder;
19
19
  import java.util.HashMap;
20
20
  import java.util.Map;
21
- import java.util.Objects;
22
21
 
23
22
  import static android.app.Activity.RESULT_OK;
24
23
 
@@ -45,6 +44,13 @@ public class AuthsignalModule extends ReactContextBaseJavaModule implements Acti
45
44
  return "AuthsignalModule";
46
45
  }
47
46
 
47
+ @ReactMethod
48
+ public void setToken(String token, Callback callback) {
49
+ TokenCache.Companion.getShared().setToken(token);
50
+
51
+ callback.invoke(null, "token_set");
52
+ }
53
+
48
54
  @ReactMethod
49
55
  public void launch(String url, Callback callback) {
50
56
  final Activity activity = getCurrentActivity();
@@ -92,6 +98,8 @@ public class AuthsignalModule extends ReactContextBaseJavaModule implements Acti
92
98
  String value = URLDecoder.decode(pair.substring(index + 1), "UTF-8");
93
99
  if (name.equals("token")) {
94
100
  token = value;
101
+
102
+ TokenCache.Companion.getShared().setToken(value);
95
103
  }
96
104
  }
97
105
  cb.invoke(null, token);
@@ -14,8 +14,11 @@ public class AuthsignalPackage implements ReactPackage {
14
14
  public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
15
15
  return Arrays.asList(
16
16
  new AuthsignalModule(reactContext),
17
+ new AuthsignalEmailModule(reactContext),
17
18
  new AuthsignalPasskeyModule(reactContext),
18
- new AuthsignalPushModule(reactContext)
19
+ new AuthsignalPushModule(reactContext),
20
+ new AuthsignalSMSModule(reactContext),
21
+ new AuthsignalTOTPModule(reactContext)
19
22
  );
20
23
  }
21
24
 
@@ -60,13 +60,15 @@ public class AuthsignalPasskeyModule extends ReactContextBaseJavaModule {
60
60
  }
61
61
 
62
62
  @ReactMethod
63
- public void signUp(String token, String userName, String displayName, Promise promise) {
63
+ public void signUp(String token, String username, String displayName, Promise promise) {
64
64
  if (authsignalPasskey != null) {
65
65
  authsignalPasskey
66
- .signUpAsync(token, userName, displayName)
66
+ .signUpAsync(token, username, displayName)
67
67
  .thenAcceptAsync(response -> {
68
- if (response.getError() != null) {
69
- promise.reject("signUp error", response.getError());
68
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
69
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
70
+ } else if (response.getError() != null) {
71
+ promise.reject("signUpError", response.getError());
70
72
  } else {
71
73
  SignUpResponse signUpResponse = response.getData();
72
74
  WritableMap map = Arguments.createMap();
@@ -104,8 +106,8 @@ public class AuthsignalPasskeyModule extends ReactContextBaseJavaModule {
104
106
  map.putString("token", signInResponse.getToken());
105
107
  map.putString("userId", signInResponse.getUserId());
106
108
  map.putString("userAuthenticatorId", signInResponse.getUserAuthenticatorId());
107
- map.putString("userName", signInResponse.getUserName());
108
- map.putString("userDisplayName", signInResponse.getUserDisplayName());
109
+ map.putString("username", signInResponse.getUsername());
110
+ map.putString("displayName", signInResponse.getDisplayName());
109
111
  promise.resolve(map);
110
112
  }
111
113
  });
@@ -79,7 +79,9 @@ public class AuthsignalPushModule extends ReactContextBaseJavaModule {
79
79
  authsignalPush
80
80
  .addCredentialAsync(token, null)
81
81
  .thenAcceptAsync(response -> {
82
- if (response.getError() != null) {
82
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
83
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
84
+ } else if (response.getError() != null) {
83
85
  promise.reject("addCredential error", response.getError());
84
86
  } else {
85
87
  promise.resolve(response.getData());
@@ -0,0 +1,133 @@
1
+ package com.authsignal.react;
2
+
3
+ import android.app.Activity;
4
+ import android.util.Log;
5
+
6
+ import androidx.annotation.NonNull;
7
+
8
+ import com.authsignal.sms.AuthsignalSMS;
9
+ import com.authsignal.models.*;
10
+ import com.facebook.react.bridge.Arguments;
11
+ import com.facebook.react.bridge.Promise;
12
+ import com.facebook.react.bridge.ReactApplicationContext;
13
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
14
+ import com.facebook.react.bridge.ReactMethod;
15
+ import com.facebook.react.bridge.WritableMap;
16
+
17
+ import java.util.HashMap;
18
+ import java.util.Map;
19
+
20
+ public class AuthsignalSMSModule extends ReactContextBaseJavaModule {
21
+ private final ReactApplicationContext reactContext;
22
+
23
+ private AuthsignalSMS authsignalSMS;
24
+
25
+ private final String TAG = "AuthsignalSMSModule";
26
+ private final String INIT_WARNING = "AuthsignalSMSModule is not initialized.";
27
+
28
+ public AuthsignalSMSModule(ReactApplicationContext reactContext) {
29
+ super(reactContext);
30
+ this.reactContext = reactContext;
31
+ }
32
+
33
+ @Override
34
+ public Map<String, Object> getConstants() {
35
+ final Map<String, Object> constants = new HashMap<>();
36
+ constants.put("bundleIdentifier", reactContext.getApplicationInfo().packageName);
37
+ return constants;
38
+ }
39
+
40
+ @NonNull
41
+ @Override
42
+ public String getName() {
43
+ return "AuthsignalSMSModule";
44
+ }
45
+
46
+ @ReactMethod
47
+ public void initialize(String tenantID, String baseURL, Promise promise) {
48
+ Activity currentActivity = reactContext.getCurrentActivity();
49
+
50
+ if (currentActivity != null) {
51
+ authsignalSMS = new AuthsignalSMS(
52
+ tenantID,
53
+ baseURL
54
+ );
55
+ }
56
+
57
+ promise.resolve(null);
58
+ }
59
+
60
+ @ReactMethod
61
+ public void enroll(String phoneNumber, Promise promise) {
62
+ if (authsignalSMS != null) {
63
+ authsignalSMS
64
+ .enrollAsync(phoneNumber)
65
+ .thenAcceptAsync(response -> {
66
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
67
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
68
+ } else if (response.getError() != null) {
69
+ promise.reject("enrollError", response.getError());
70
+ } else {
71
+ EnrollResponse enrollResponse = response.getData();
72
+ WritableMap map = Arguments.createMap();
73
+ map.putString("userAuthenticatorId", enrollResponse.getUserAuthenticatorId());
74
+ promise.resolve(map);
75
+ }
76
+ });
77
+ } else {
78
+ Log.w(TAG, INIT_WARNING);
79
+
80
+ promise.resolve(null);
81
+ }
82
+ }
83
+
84
+ @ReactMethod
85
+ public void challenge(Promise promise) {
86
+ if (authsignalSMS != null) {
87
+ authsignalSMS
88
+ .challengeAsync()
89
+ .thenAcceptAsync(response -> {
90
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
91
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
92
+ } else if (response.getError() != null) {
93
+ promise.reject("challengeError", response.getError());
94
+ } else {
95
+ ChallengeResponse challengeResponse = response.getData();
96
+ WritableMap map = Arguments.createMap();
97
+ map.putString("challengeId", challengeResponse.getChallengeId());
98
+ promise.resolve(map);
99
+ }
100
+ });
101
+ } else {
102
+ Log.w(TAG, INIT_WARNING);
103
+
104
+ promise.resolve(null);
105
+ }
106
+ }
107
+
108
+ @ReactMethod
109
+ public void verify(String code, Promise promise) {
110
+ if (authsignalSMS != null) {
111
+ authsignalSMS
112
+ .verifyAsync(code)
113
+ .thenAcceptAsync(response -> {
114
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
115
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
116
+ } else if (response.getError() != null) {
117
+ promise.reject("verifyError", response.getError());
118
+ } else {
119
+ VerifyResponse verifyResponse = response.getData();
120
+ WritableMap map = Arguments.createMap();
121
+ map.putBoolean("isVerified", verifyResponse.isVerified());
122
+ map.putString("token", verifyResponse.getToken());
123
+ map.putString("failureReason", verifyResponse.getFailureReason());
124
+ promise.resolve(map);
125
+ }
126
+ });
127
+ } else {
128
+ Log.w(TAG, INIT_WARNING);
129
+
130
+ promise.resolve(null);
131
+ }
132
+ }
133
+ }
@@ -0,0 +1,112 @@
1
+ package com.authsignal.react;
2
+
3
+ import android.app.Activity;
4
+ import android.util.Log;
5
+
6
+ import androidx.annotation.NonNull;
7
+
8
+ import com.authsignal.totp.AuthsignalTOTP;
9
+ import com.authsignal.models.*;
10
+ import com.authsignal.totp.api.models.*;
11
+ import com.facebook.react.bridge.Arguments;
12
+ import com.facebook.react.bridge.Promise;
13
+ import com.facebook.react.bridge.ReactApplicationContext;
14
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
15
+ import com.facebook.react.bridge.ReactMethod;
16
+ import com.facebook.react.bridge.WritableMap;
17
+
18
+ import java.util.HashMap;
19
+ import java.util.Map;
20
+
21
+ public class AuthsignalTOTPModule extends ReactContextBaseJavaModule {
22
+ private final ReactApplicationContext reactContext;
23
+
24
+ private AuthsignalTOTP authsignalTOTP;
25
+
26
+ private final String TAG = "AuthsignalTOTPModule";
27
+ private final String INIT_WARNING = "AuthsignalTOTPModule is not initialized.";
28
+
29
+ public AuthsignalTOTPModule(ReactApplicationContext reactContext) {
30
+ super(reactContext);
31
+ this.reactContext = reactContext;
32
+ }
33
+
34
+ @Override
35
+ public Map<String, Object> getConstants() {
36
+ final Map<String, Object> constants = new HashMap<>();
37
+ constants.put("bundleIdentifier", reactContext.getApplicationInfo().packageName);
38
+ return constants;
39
+ }
40
+
41
+ @NonNull
42
+ @Override
43
+ public String getName() {
44
+ return "AuthsignalTOTPModule";
45
+ }
46
+
47
+ @ReactMethod
48
+ public void initialize(String tenantID, String baseURL, Promise promise) {
49
+ Activity currentActivity = reactContext.getCurrentActivity();
50
+
51
+ if (currentActivity != null) {
52
+ authsignalTOTP = new AuthsignalTOTP(
53
+ tenantID,
54
+ baseURL
55
+ );
56
+ }
57
+
58
+ promise.resolve(null);
59
+ }
60
+
61
+ @ReactMethod
62
+ public void enroll(Promise promise) {
63
+ if (authsignalTOTP != null) {
64
+ authsignalTOTP
65
+ .enrollAsync()
66
+ .thenAcceptAsync(response -> {
67
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
68
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
69
+ } else if (response.getError() != null) {
70
+ promise.reject("enrollError", response.getError());
71
+ } else {
72
+ EnrollTOTPResponse enrollResponse = response.getData();
73
+ WritableMap map = Arguments.createMap();
74
+ map.putString("userAuthenticatorId", enrollResponse.getUserAuthenticatorId());
75
+ map.putString("uri", enrollResponse.getUri());
76
+ map.putString("secret", enrollResponse.getSecret());
77
+ promise.resolve(map);
78
+ }
79
+ });
80
+ } else {
81
+ Log.w(TAG, INIT_WARNING);
82
+
83
+ promise.resolve(null);
84
+ }
85
+ }
86
+
87
+ @ReactMethod
88
+ public void verify(String code, Promise promise) {
89
+ if (authsignalTOTP != null) {
90
+ authsignalTOTP
91
+ .verifyAsync(code)
92
+ .thenAcceptAsync(response -> {
93
+ if (response.getErrorType() != null && response.getErrorType().equals("TYPE_TOKEN_NOT_SET")) {
94
+ promise.reject("tokenNotSetError", "TOKEN_NOT_SET");
95
+ } else if (response.getError() != null) {
96
+ promise.reject("verifyError", response.getError());
97
+ } else {
98
+ VerifyResponse verifyResponse = response.getData();
99
+ WritableMap map = Arguments.createMap();
100
+ map.putBoolean("isVerified", verifyResponse.isVerified());
101
+ map.putString("token", verifyResponse.getToken());
102
+ map.putString("failureReason", verifyResponse.getFailureReason());
103
+ promise.resolve(map);
104
+ }
105
+ });
106
+ } else {
107
+ Log.w(TAG, INIT_WARNING);
108
+
109
+ promise.resolve(null);
110
+ }
111
+ }
112
+ }
@@ -20,8 +20,14 @@
20
20
 
21
21
  /* Begin PBXFileReference section */
22
22
  134814201AA4EA6300B7C361 /* libAuthsignal.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAuthsignal.a; sourceTree = BUILT_PRODUCTS_DIR; };
23
- B3E7B5891CC2AC0600A0062D /* AuthsignalModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuthsignalModule.m; sourceTree = "<group>"; };
24
- D8CCAF332908C7A30040E0F0 /* AuthsignalModule.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AuthsignalModule.h; sourceTree = "<group>"; };
23
+ D8AE39E42C729A88003759EB /* AuthsignalEmailModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalEmailModule.m; sourceTree = "<group>"; };
24
+ D8AE39E52C729A88003759EB /* AuthsignalSMSModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalSMSModule.swift; sourceTree = "<group>"; };
25
+ D8AE39E62C729A88003759EB /* AuthsignalTOTPModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalTOTPModule.m; sourceTree = "<group>"; };
26
+ D8AE39E72C729A88003759EB /* AuthsignalEmailModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalEmailModule.swift; sourceTree = "<group>"; };
27
+ D8AE39E82C729A88003759EB /* AuthsignalTOTPModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalTOTPModule.swift; sourceTree = "<group>"; };
28
+ D8AE39E92C729A88003759EB /* AuthsignalSMSModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalSMSModule.m; sourceTree = "<group>"; };
29
+ D8AE39EA2C729B67003759EB /* AuthsignalModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalModule.swift; sourceTree = "<group>"; };
30
+ D8AE39EB2C729BF4003759EB /* AuthsignalModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalModule.m; sourceTree = "<group>"; };
25
31
  D8EC5CD32A4D1EE00085B442 /* AuthsignalPasskeyModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalPasskeyModule.swift; sourceTree = "<group>"; };
26
32
  D8EC5CD42A4D1EE00085B442 /* AuthsignalPushModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthsignalPushModule.swift; sourceTree = "<group>"; };
27
33
  D8EC5CD52A4D1EE00085B442 /* AuthsignalPushModule.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthsignalPushModule.m; sourceTree = "<group>"; };
@@ -51,13 +57,19 @@
51
57
  58B511D21A9E6C8500147676 = {
52
58
  isa = PBXGroup;
53
59
  children = (
60
+ D8AE39EB2C729BF4003759EB /* AuthsignalModule.m */,
61
+ D8AE39EA2C729B67003759EB /* AuthsignalModule.swift */,
62
+ D8AE39E42C729A88003759EB /* AuthsignalEmailModule.m */,
63
+ D8AE39E72C729A88003759EB /* AuthsignalEmailModule.swift */,
64
+ D8AE39E92C729A88003759EB /* AuthsignalSMSModule.m */,
65
+ D8AE39E52C729A88003759EB /* AuthsignalSMSModule.swift */,
66
+ D8AE39E62C729A88003759EB /* AuthsignalTOTPModule.m */,
67
+ D8AE39E82C729A88003759EB /* AuthsignalTOTPModule.swift */,
54
68
  D8EC5CD72A4D1EE90085B442 /* Authsignal-Bridging-Header.h */,
55
69
  D8EC5CD62A4D1EE00085B442 /* AuthsignalPasskeyModule.m */,
56
70
  D8EC5CD32A4D1EE00085B442 /* AuthsignalPasskeyModule.swift */,
57
71
  D8EC5CD52A4D1EE00085B442 /* AuthsignalPushModule.m */,
58
72
  D8EC5CD42A4D1EE00085B442 /* AuthsignalPushModule.swift */,
59
- D8CCAF332908C7A30040E0F0 /* AuthsignalModule.h */,
60
- B3E7B5891CC2AC0600A0062D /* AuthsignalModule.m */,
61
73
  134814211AA4EA7D00B7C361 /* Products */,
62
74
  );
63
75
  sourceTree = "<group>";
@@ -0,0 +1,22 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <Foundation/Foundation.h>
3
+
4
+ @interface RCT_EXTERN_MODULE(AuthsignalEmailModule, 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(enroll:(NSString)email
12
+ resolver:(RCTPromiseResolveBlock)resolve
13
+ rejecter:(RCTPromiseRejectBlock)reject)
14
+
15
+ RCT_EXTERN_METHOD(challenge:(RCTPromiseResolveBlock)resolve
16
+ rejecter:(RCTPromiseRejectBlock)reject)
17
+
18
+ RCT_EXTERN_METHOD(verify:(NSString)code
19
+ resolver:(RCTPromiseResolveBlock)resolve
20
+ rejecter:(RCTPromiseRejectBlock)reject)
21
+
22
+ @end