diff --git a/android/build.gradle b/android/build.gradle index ac78d80..38e8f7d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -77,5 +77,5 @@ dependencies { implementation "androidx.browser:browser:1.2.0" - implementation("com.authsignal:authsignal-android:3.0.3") + implementation("com.authsignal:authsignal-android:3.1.1") } diff --git a/android/src/main/java/com/authsignal/react/AuthsignalInAppModule.kt b/android/src/main/java/com/authsignal/react/AuthsignalInAppModule.kt index 4e45961..cdc031d 100644 --- a/android/src/main/java/com/authsignal/react/AuthsignalInAppModule.kt +++ b/android/src/main/java/com/authsignal/react/AuthsignalInAppModule.kt @@ -39,9 +39,9 @@ class AuthsignalInAppModule(private val reactContext: ReactApplicationContext) : } @ReactMethod - fun getCredential(promise: Promise) { + fun getCredential(username: String?, promise: Promise) { launch(promise) { - val response = it.getCredential() + val response = it.getCredential(username = username) if (response.error != null) { val errorCode = response.errorCode ?: defaultError @@ -64,10 +64,18 @@ class AuthsignalInAppModule(private val reactContext: ReactApplicationContext) : @ReactMethod fun addCredential( token: String?, + username: String?, promise: Promise ) { launch(promise) { - val response = it.addCredential(token, null) + val response = it.addCredential( + token = token, + deviceName = null, + userAuthenticationRequired = false, + timeout = 0, + authorizationType = 0, + username = username, + ) if (response.error != null) { val errorCode = response.errorCode ?: defaultError @@ -86,9 +94,9 @@ class AuthsignalInAppModule(private val reactContext: ReactApplicationContext) : } @ReactMethod - fun removeCredential(promise: Promise) { + fun removeCredential(username: String?, promise: Promise) { launch(promise) { - val response = it.removeCredential() + val response = it.removeCredential(username = username) if (response.error != null) { val errorCode = response.errorCode ?: defaultError @@ -103,10 +111,11 @@ class AuthsignalInAppModule(private val reactContext: ReactApplicationContext) : @ReactMethod fun verify( action: String?, + username: String?, promise: Promise ) { launch(promise) { - val response = it.verify(action) + val response = it.verify(action = action, username = username) if (response.error != null) { val errorCode = response.errorCode ?: defaultError diff --git a/ios/AuthsignalInAppModule.m b/ios/AuthsignalInAppModule.m index 3d1737b..4c4e839 100644 --- a/ios/AuthsignalInAppModule.m +++ b/ios/AuthsignalInAppModule.m @@ -8,19 +8,23 @@ @interface RCT_EXTERN_MODULE(AuthsignalInAppModule, NSObject) resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) -RCT_EXTERN_METHOD(getCredential:(RCTPromiseResolveBlock)resolve +RCT_EXTERN_METHOD(getCredential:(NSString)username + resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) RCT_EXTERN_METHOD(addCredential:(NSString)token withRequireUserAuthentication:(BOOL)requireUserAuthentication withKeychainAccess:(NSString)keychainAccess + withUsername:(NSString)username resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) -RCT_EXTERN_METHOD(removeCredential:(RCTPromiseResolveBlock)resolve +RCT_EXTERN_METHOD(removeCredential:(NSString)username + resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) RCT_EXTERN_METHOD(verify:(NSString)action + withUsername:(NSString)username resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) diff --git a/ios/AuthsignalInAppModule.swift b/ios/AuthsignalInAppModule.swift index 70b6706..75a1de4 100644 --- a/ios/AuthsignalInAppModule.swift +++ b/ios/AuthsignalInAppModule.swift @@ -22,16 +22,19 @@ class AuthsignalInAppModule: NSObject { } @objc func getCredential( - _ resolve: @escaping RCTPromiseResolveBlock, + _ username: NSString?, + resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void { guard let authsignal = authsignal else { resolve(nil) return } + + let usernameStr = username as String? Task.init { - let response = await authsignal.getCredential() + let response = await authsignal.getCredential(username: usernameStr) if let error = response.error { reject(response.errorCode ?? "unexpected_error", error, nil) @@ -54,6 +57,7 @@ class AuthsignalInAppModule: NSObject { _ token: NSString?, withRequireUserAuthentication requireUserAuthentication: Bool, withKeychainAccess keychainAccess: NSString, + withUsername username: NSString?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void { @@ -65,12 +69,14 @@ class AuthsignalInAppModule: NSObject { let tokenStr = token as String? let userPresenceRequired = requireUserAuthentication as Bool let keychainAccess = getKeychainAccess(value: keychainAccess as String?) + let usernameStr = username as String? Task.init { let response = await authsignal.addCredential( token: tokenStr, keychainAccess: keychainAccess, - userPresenceRequired: userPresenceRequired + userPresenceRequired: userPresenceRequired, + username: usernameStr ) if let error = response.error { @@ -91,16 +97,19 @@ class AuthsignalInAppModule: NSObject { } @objc func removeCredential( - _ resolve: @escaping RCTPromiseResolveBlock, + _ username: NSString?, + resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void { guard let authsignal = authsignal else { resolve(nil) return } + + let usernameStr = username as String? Task.init { - let response = await authsignal.removeCredential() + let response = await authsignal.removeCredential(username: usernameStr) if let error = response.error { reject(response.errorCode ?? "unexpected_error", error, nil) @@ -112,6 +121,7 @@ class AuthsignalInAppModule: NSObject { @objc func verify( _ action: NSString?, + withUsername username: NSString?, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock ) -> Void { @@ -121,9 +131,10 @@ class AuthsignalInAppModule: NSObject { } let actionStr = action as String? + let usernameStr = username as String? Task.init { - let response = await authsignal.verify(action: actionStr) + let response = await authsignal.verify(action: actionStr, username: usernameStr) if let error = response.error { reject(response.errorCode ?? "unexpected_error", error, nil) diff --git a/package.json b/package.json index 2a1b8e7..4e9e282 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-authsignal", - "version": "2.0.3", + "version": "2.1.0", "description": "The official Authsignal React Native library.", "main": "lib/commonjs/index", "module": "lib/module/index", diff --git a/react-native-authsignal.podspec b/react-native-authsignal.podspec index de38130..e53590f 100644 --- a/react-native-authsignal.podspec +++ b/react-native-authsignal.podspec @@ -17,7 +17,7 @@ Pod::Spec.new do |s| s.source_files = "ios/**/*.{h,m,mm,swift}" s.dependency "React-Core" - s.dependency 'Authsignal', '2.0.3' + s.dependency 'Authsignal', '2.1.0' # Don't install the dependencies when we run `pod install` in the old architecture. if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then diff --git a/src/inapp.ts b/src/inapp.ts index e75c129..aea5de4 100644 --- a/src/inapp.ts +++ b/src/inapp.ts @@ -5,7 +5,9 @@ import type { AppCredential, InAppVerifyRequest, InAppVerifyResponse, - AddCredentialInput, + InAppAddCredentialInput, + InAppGetCredentialInput, + InAppRemoveCredentialInput, } from './types'; interface ConstructorArgs { @@ -38,13 +40,15 @@ export class AuthsignalInApp { this.enableLogging = enableLogging; } - async getCredential(): Promise< + async getCredential({ + username, + }: InAppGetCredentialInput): Promise< AuthsignalResponse > { await this.ensureModuleIsInitialized(); try { - const data = await AuthsignalInAppModule.getCredential(); + const data = await AuthsignalInAppModule.getCredential(username); return { data }; } catch (ex) { @@ -60,7 +64,8 @@ export class AuthsignalInApp { token, requireUserAuthentication = false, keychainAccess, - }: AddCredentialInput = {}): Promise> { + username, + }: InAppAddCredentialInput = {}): Promise> { await this.ensureModuleIsInitialized(); try { @@ -69,9 +74,10 @@ export class AuthsignalInApp { ? await AuthsignalInAppModule.addCredential( token, requireUserAuthentication, - keychainAccess + keychainAccess, + username ) - : await AuthsignalInAppModule.addCredential(token); + : await AuthsignalInAppModule.addCredential(token, username); return { data }; } catch (ex) { @@ -83,11 +89,13 @@ export class AuthsignalInApp { } } - async removeCredential(): Promise> { + async removeCredential({ + username, + }: InAppRemoveCredentialInput): Promise> { await this.ensureModuleIsInitialized(); try { - const data = await AuthsignalInAppModule.removeCredential(); + const data = await AuthsignalInAppModule.removeCredential(username); return { data }; } catch (ex) { if (this.enableLogging) { @@ -98,13 +106,13 @@ export class AuthsignalInApp { } } - async verify({ action }: InAppVerifyRequest = {}): Promise< + async verify({ action, username }: InAppVerifyRequest = {}): Promise< AuthsignalResponse > { await this.ensureModuleIsInitialized(); try { - const data = await AuthsignalInAppModule.verify(action); + const data = await AuthsignalInAppModule.verify(action, username); return { data }; } catch (ex) { diff --git a/src/types.ts b/src/types.ts index 448aada..7bfd0e6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -83,8 +83,21 @@ export interface UpdateChallengeInput { verificationCode?: string | null; } +export interface InAppGetCredentialInput { + username?: string; +} + +export interface InAppAddCredentialInput extends AddCredentialInput { + username?: string; +} + +export interface InAppRemoveCredentialInput { + username?: string; +} + export interface InAppVerifyRequest { action?: string; + username?: string; } export interface InAppVerifyResponse {