Skip to content

Commit fe4e97a

Browse files
authored
Should prompt passkey (#61)
* no message * wip
1 parent fcc56c2 commit fe4e97a

File tree

7 files changed

+53
-8
lines changed

7 files changed

+53
-8
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,5 @@ dependencies {
7777

7878
implementation "androidx.browser:browser:1.2.0"
7979

80-
implementation("com.authsignal:authsignal-android:2.5.1")
80+
implementation("com.authsignal:authsignal-android:2.6.0")
8181
}

android/src/main/java/com/authsignal/react/AuthsignalPasskeyModule.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ class AuthsignalPasskeyModule(private val reactContext: ReactApplicationContext)
4040
}
4141

4242
@ReactMethod
43-
fun signUp(token: String?, username: String?, displayName: String?, promise: Promise) {
43+
fun signUp(token: String?, username: String?, displayName: String?, ignorePasskeyAlreadyExistsError: Boolean, promise: Promise) {
4444
launch(promise) {
45-
val response = it.signUp(token, username, displayName)
45+
val response = it.signUp(token, username, displayName, false, ignorePasskeyAlreadyExistsError)
4646

4747
if (response.error != null) {
4848
val errorCode = response.errorCode ?: defaultError
@@ -80,6 +80,15 @@ class AuthsignalPasskeyModule(private val reactContext: ReactApplicationContext)
8080
}
8181
}
8282

83+
@ReactMethod
84+
fun shouldPromptToCreatePasskey(promise: Promise) {
85+
launch(promise) {
86+
val response = it.shouldPromptToCreatePasskey()
87+
88+
promise.resolve(response.data ?: false)
89+
}
90+
}
91+
8392
@ReactMethod
8493
fun isAvailableOnDevice(promise: Promise) {
8594
launch(promise) {

ios/AuthsignalPasskeyModule.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ @interface RCT_EXTERN_MODULE(AuthsignalPasskeyModule, NSObject)
1212
RCT_EXTERN_METHOD(signUp:(NSString)token
1313
withUsername:(NSString)username
1414
withDisplayName:(NSString)displayName
15+
withIgnorePasskeyAlreadyExistsError:(BOOL)ignorePasskeyAlreadyExistsError
1516
resolver:(RCTPromiseResolveBlock)resolve
1617
rejecter:(RCTPromiseRejectBlock)reject)
1718

@@ -22,6 +23,9 @@ @interface RCT_EXTERN_MODULE(AuthsignalPasskeyModule, NSObject)
2223
resolver:(RCTPromiseResolveBlock)resolve
2324
rejecter:(RCTPromiseRejectBlock)reject)
2425

26+
RCT_EXTERN_METHOD(shouldPromptToCreatePasskey:(RCTPromiseResolveBlock)resolve
27+
rejecter:(RCTPromiseRejectBlock)reject)
28+
2529
RCT_EXTERN_METHOD(isAvailableOnDevice:(RCTPromiseResolveBlock)resolve
2630
rejecter:(RCTPromiseRejectBlock)reject)
2731

ios/AuthsignalPasskeyModule.swift

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class AuthsignalPasskeyModule: NSObject {
2626
_ token: NSString?,
2727
withUsername username: NSString?,
2828
withDisplayName displayName: NSString?,
29+
withIgnorePasskeyAlreadyExistsError ignorePasskeyAlreadyExistsError: Bool,
2930
resolver resolve: @escaping RCTPromiseResolveBlock,
3031
rejecter reject: @escaping RCTPromiseRejectBlock
3132
) -> Void {
@@ -39,8 +40,13 @@ class AuthsignalPasskeyModule: NSObject {
3940
let displayNameStr = displayName as String?
4041

4142
Task.init {
42-
let response = await authsignal!.signUp(token: tokenStr, username: usernameStr, displayName: displayNameStr)
43-
43+
let response = await authsignal!.signUp(
44+
token: tokenStr,
45+
username: usernameStr,
46+
displayName: displayNameStr,
47+
ignorePasskeyAlreadyExistsError: ignorePasskeyAlreadyExistsError
48+
)
49+
4450
if (response.error != nil) {
4551
reject(response.errorCode ?? "unexpected_error", response.error, nil)
4652
} else {
@@ -104,6 +110,23 @@ class AuthsignalPasskeyModule: NSObject {
104110
authsignal?.cancel()
105111
}
106112

113+
@objc func shouldPromptToCreatePasskey(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
114+
if (authsignal == nil) {
115+
resolve(false)
116+
return
117+
}
118+
119+
Task.init {
120+
let response = await authsignal!.shouldPromptToCreatePasskey()
121+
122+
if (response.error != nil) {
123+
resolve(false)
124+
} else {
125+
resolve(response.data)
126+
}
127+
}
128+
}
129+
107130
@objc func isAvailableOnDevice(_ resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
108131
if (authsignal == nil) {
109132
resolve(false)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-authsignal",
3-
"version": "1.7.3",
3+
"version": "1.8.0",
44
"description": "The official Authsignal React Native library.",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

react-native-authsignal.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
1717
s.source_files = "ios/**/*.{h,m,mm,swift}"
1818

1919
s.dependency "React-Core"
20-
s.dependency 'Authsignal', '1.5.2'
20+
s.dependency 'Authsignal', '1.6.0'
2121

2222
# Don't install the dependencies when we run `pod install` in the old architecture.
2323
if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then

src/passkey.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ interface PasskeySignUpInput {
1717
token?: string;
1818
username?: string;
1919
displayName?: string;
20+
ignorePasskeyAlreadyExistsError?: boolean;
2021
}
2122

2223
interface PasskeySignInInput {
@@ -57,14 +58,16 @@ export class AuthsignalPasskey {
5758
token,
5859
username,
5960
displayName,
61+
ignorePasskeyAlreadyExistsError = false,
6062
}: PasskeySignUpInput = {}): Promise<AuthsignalResponse<SignUpResponse>> {
6163
await this.ensureModuleIsInitialized();
6264

6365
try {
6466
const data = await AuthsignalPasskeyModule.signUp(
6567
token,
6668
username,
67-
displayName
69+
displayName,
70+
ignorePasskeyAlreadyExistsError
6871
);
6972

7073
return { data };
@@ -143,6 +146,12 @@ export class AuthsignalPasskey {
143146
}
144147
}
145148

149+
async shouldPromptToCreatePasskey(): Promise<boolean> {
150+
await this.ensureModuleIsInitialized();
151+
152+
return await AuthsignalPasskeyModule.shouldPromptToCreatePasskey();
153+
}
154+
146155
/**
147156
* @deprecated Use 'preferImmediatelyAvailableCredentials' to control what happens when a passkey isn't available.
148157
*/

0 commit comments

Comments
 (0)