diff --git a/android/build.gradle b/android/build.gradle index db8299d..670353a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -38,11 +38,11 @@ android { dependencies { testImplementation 'org.jetbrains.kotlin:kotlin-test' testImplementation 'org.mockito:mockito-core:5.0.0' - implementation 'id.passage.android:passage:2.0.1' + implementation 'id.passage.android:passage:2.0.2' implementation 'com.google.code.gson:gson:2.10.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1' - implementation 'androidx.annotation:annotation:1.8.2' + implementation 'androidx.annotation:annotation:1.9.1' } testOptions { diff --git a/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutter.kt b/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutter.kt index 7fc1e90..dd5c8a8 100644 --- a/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutter.kt +++ b/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutter.kt @@ -229,9 +229,15 @@ internal class PassageFlutter(private val activity: Activity, appId: String) { // endregion // region TOKEN METHODS - fun getAuthToken(result: MethodChannel.Result) { - val token = passage.tokenStore.authToken - result.success(token) + fun getValidAuthToken(result: MethodChannel.Result) { + CoroutineScope(Dispatchers.IO).launch { + try { + val newToken = passage.tokenStore.getValidAuthToken() + result.success(newToken) + } catch (e: Exception) { + result.error(PassageFlutterError.TOKEN_ERROR.name, e.message, e.toString()) + } + } } fun isAuthTokenValid(call: MethodCall, result: MethodChannel.Result) { @@ -243,8 +249,10 @@ internal class PassageFlutter(private val activity: Activity, appId: String) { fun refreshAuthToken(result: MethodChannel.Result) { CoroutineScope(Dispatchers.IO).launch { try { - val newToken = passage.tokenStore.getValidAuthToken() - result.success(newToken) + val refreshToken = passage.tokenStore.refreshToken ?: "" + val authResult = passage.tokenStore.refreshAuthToken(refreshToken) + val jsonString = Gson().toJson(authResult) + result.success(jsonString) } catch (e: Exception) { result.error(PassageFlutterError.TOKEN_ERROR.name, e.message, e.toString()) } diff --git a/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutterPlugin.kt b/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutterPlugin.kt index 664d64b..c42b48e 100644 --- a/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutterPlugin.kt +++ b/android/src/main/kotlin/id/passage/passage_flutter/PassageFlutterPlugin.kt @@ -54,7 +54,7 @@ class PassageFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAware { "getMagicLinkStatus" -> passageFlutter?.getMagicLinkStatus(call, result) "authorizeWith" -> passageFlutter?.authorizeWith(call, result) "finishSocialAuthentication" -> passageFlutter?.finishSocialAuthentication(call, result) - "getAuthToken" -> passageFlutter?.getAuthToken(result) + "getValidAuthToken" -> passageFlutter?.getValidAuthToken(result) "isAuthTokenValid" -> passageFlutter?.isAuthTokenValid(call, result) "refreshAuthToken" -> passageFlutter?.refreshAuthToken(result) "getAppInfo" -> passageFlutter?.getAppInfo(result) diff --git a/ios/Classes/PassageFlutter.swift b/ios/Classes/PassageFlutter.swift index 1639b0a..793ce4f 100644 --- a/ios/Classes/PassageFlutter.swift +++ b/ios/Classes/PassageFlutter.swift @@ -273,9 +273,20 @@ internal class PassageFlutter { // MARK: - Token Methods - internal func getAuthToken(result: @escaping FlutterResult) { - let token = passage.tokenStore.authToken - result(token) + internal func getValidAuthToken(result: @escaping FlutterResult) { + Task { + do { + let token = try await passage.tokenStore.getValidAuthToken() + result(token) + } catch { + let error = FlutterError( + code: PassageFlutterError.TOKEN_ERROR.rawValue, + message: error.localizedDescription, + details: nil + ) + result(error) + } + } } internal func isAuthTokenValid(arguments: Any?, result: @escaping FlutterResult) { @@ -292,7 +303,7 @@ internal class PassageFlutter { Task { do { let authResult = try await passage.tokenStore.refreshTokens() - result(authResult.authToken) + result(convertToJsonString(codable: authResult)) } catch { let error = FlutterError( code: PassageFlutterError.TOKEN_ERROR.rawValue, diff --git a/ios/Classes/PassageFlutterPlugin.swift b/ios/Classes/PassageFlutterPlugin.swift index f7b1bae..01b5a42 100644 --- a/ios/Classes/PassageFlutterPlugin.swift +++ b/ios/Classes/PassageFlutterPlugin.swift @@ -51,8 +51,8 @@ public class PassageFlutterPlugin: NSObject, FlutterPlugin { passageFlutter?.getMagicLinkStatus(arguments: call.arguments, result: result) case "authorizeWith": passageFlutter?.authorizeWith(arguments: call.arguments, result: result) - case "getAuthToken": - passageFlutter?.getAuthToken(result: result) + case "getValidAuthToken": + passageFlutter?.getValidAuthToken(result: result) case "isAuthTokenValid": passageFlutter?.isAuthTokenValid(arguments: call.arguments, result: result) case "refreshAuthToken": diff --git a/lib/passage_flutter_platform/passage_flutter_method_channel.dart b/lib/passage_flutter_platform/passage_flutter_method_channel.dart index f60d552..be0c232 100644 --- a/lib/passage_flutter_platform/passage_flutter_method_channel.dart +++ b/lib/passage_flutter_platform/passage_flutter_method_channel.dart @@ -193,10 +193,10 @@ class MethodChannelPassageFlutter extends PassageFlutterPlatform { // TOKEN METHODS @override - Future getAuthToken() async { + Future getValidAuthToken() async { try { final authToken = - await methodChannel.invokeMethod('getAuthToken'); + await methodChannel.invokeMethod('getValidAuthToken'); return authToken!; } catch (e) { throw PassageError.fromObject(object: e); diff --git a/lib/passage_flutter_platform/passage_flutter_platform_interface.dart b/lib/passage_flutter_platform/passage_flutter_platform_interface.dart index ccf7f96..dd5e370 100644 --- a/lib/passage_flutter_platform/passage_flutter_platform_interface.dart +++ b/lib/passage_flutter_platform/passage_flutter_platform_interface.dart @@ -105,7 +105,7 @@ abstract class PassageFlutterPlatform extends PlatformInterface { // TOKEN METHODS - Future getAuthToken() { + Future getValidAuthToken() { throw UnimplementedError('getAuthToken() has not been implemented.'); } diff --git a/lib/passage_flutter_web.dart b/lib/passage_flutter_web.dart index 1fa6723..49b24d0 100644 --- a/lib/passage_flutter_web.dart +++ b/lib/passage_flutter_web.dart @@ -218,7 +218,7 @@ class PassageFlutterWeb extends PassageFlutterPlatform { // TOKEN METHODS @override - Future getAuthToken() async { + Future getValidAuthToken() async { try { final resultPromise = passage.session.getAuthToken(); final String authToken = await js_util.promiseToFuture(resultPromise); diff --git a/lib/passage_token_store.dart b/lib/passage_token_store.dart index 85591bb..5c0b323 100644 --- a/lib/passage_token_store.dart +++ b/lib/passage_token_store.dart @@ -10,7 +10,7 @@ class PassageTokenStore { /// A `Future` representing the current Passage user's auth token, /// or `null` if no token has been stored. Future getValidAuthToken() { - return PassageFlutterPlatform.instance.getAuthToken(); + return PassageFlutterPlatform.instance.getValidAuthToken(); } /// Checks if the auth token for the currently authenticated user is valid.