From 232cc1faab34ec251da43029da0f367735b6d930 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Tue, 24 Sep 2024 14:24:56 +0530 Subject: [PATCH 01/23] feat: update aggregateVerifier function and example in android Signed-off-by: Gaurav Goel --- android/build.gradle | 2 +- .../SingleFactorAuthFlutterPlugin.kt | 32 +------------------ example/lib/main.dart | 19 +++++++---- example/pubspec.lock | 2 +- lib/input.dart | 27 +++++++++++++--- lib/single_factor_auth_flutter.dart | 11 +------ 6 files changed, 40 insertions(+), 53 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index b9e89bf..3933f11 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'com.github.Web3Auth:single-factor-auth-android:1.1.0' + implementation 'com.github.grvgoel81:single-factor-auth-android:9.1.0' implementation 'org.torusresearch:fetch-node-details-java:5.0.0' implementation 'com.google.code.gson:gson:2.9.1' } diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index b182227..e8330f5 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -99,24 +99,7 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { "connect" -> { try { val initArgs = call.arguments() - val params = gson.fromJson(initArgs, Web3AuthOptions::class.java) - if (params.aggregateVerifier.isNullOrEmpty()) { - loginParams = LoginParams( - params.verifier, params.verifierId, - params.idToken - ) - } else { - loginParams = LoginParams( - params.aggregateVerifier, params.verifierId, - params.idToken, - arrayOf( - TorusSubVerifierInfo( - params.verifier, - params.idToken - ) - ) - ) - } + val loginParams = gson.fromJson(initArgs, LoginParams::class.java) val sfaKeyCF = singleFactorAuth.connect(loginParams, context) Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#connect") val sfaKey = sfaKeyCF @@ -125,19 +108,6 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { throw Error(e) } } - - "isSessionIdExists" -> { - try { - val result = singleFactorAuth.isSessionIdExists() - Log.d( - "${SingleFactorAuthFlutterPlugin::class.qualifiedName}", - "#isSessionIdExists" - ) - return result - } catch (e: Throwable) { - throw Error(e) - } - } } throw NotImplementedError() } diff --git a/example/lib/main.dart b/example/lib/main.dart index c45eddf..3e4c36a 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -35,14 +35,10 @@ class _MyAppState extends State { Future initSdk() async { if (Platform.isAndroid) { await init(); - if (await _singleFactorAuthFlutterPlugin.isSessionIdExists()) { - initialize(); - } + initialize(); } else if (Platform.isIOS) { await init(); - if (await _singleFactorAuthFlutterPlugin.isSessionIdExists()) { - initialize(); - } + initialize(); } else {} } @@ -181,4 +177,15 @@ class _MyAppState extends State { idToken: Utils().es256Token("hello@tor.us"), )); } + + Future getAggregateKey() { + return _singleFactorAuthFlutterPlugin.connect(LoginParams( + verifier: 'torus-aggregate-sapphire-mainnet', + verifierId: 'devnettestuser@tor.us', + idToken: Utils().es256Token("devnettestuser@tor.us"), + subVerifierInfoArray: [ + TorusSubVerifierInfo('torus-test-health', Utils().es256Token("devnettestuser@tor.us")) + ] + )); + } } diff --git a/example/pubspec.lock b/example/pubspec.lock index 5392046..cdef532 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -217,7 +217,7 @@ packages: path: ".." relative: true source: path - version: "5.0.0" + version: "5.1.0" sky_engine: dependency: transitive description: flutter diff --git a/lib/input.dart b/lib/input.dart index 35fe405..07ce9a4 100644 --- a/lib/input.dart +++ b/lib/input.dart @@ -2,21 +2,40 @@ class LoginParams { final String verifier; final String verifierId; final String idToken; - final String? aggregateVerifier; + List? subVerifierInfoArray; LoginParams({ required this.verifier, required this.verifierId, required this.idToken, - this.aggregateVerifier, + this.subVerifierInfoArray, //Optional }); Map toJson() { - return { + final Map data = { 'verifier': verifier, 'verifierId': verifierId, 'idToken': idToken, - 'aggregateVerifier': aggregateVerifier, + }; + + if (subVerifierInfoArray != null) { + data['subVerifierInfoArray'] = subVerifierInfoArray!.map((v) => v.toJson()).toList(); + } + + return data; + } +} + +class TorusSubVerifierInfo { + String verifier; + String idToken; + + TorusSubVerifierInfo(this.verifier, this.idToken); + + Map toJson() { + return { + 'verifier': verifier, + 'idToken': idToken, }; } } diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index 92011c8..66a379d 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -42,7 +42,7 @@ class SingleFactAuthFlutter { loginParamsJson.removeWhere((key, value) => value == null); final String torusKeyJson = await _channel.invokeMethod( 'connect', - jsonEncode(loginParams), + jsonEncode(loginParamsJson), ); return sfaKeyFromJson(torusKeyJson); } on PlatformException catch (e) { @@ -50,15 +50,6 @@ class SingleFactAuthFlutter { } } - Future isSessionIdExists() async { - try { - bool response = await _channel.invokeMethod('isSessionIdExists'); - return response; - } on PlatformException catch (e) { - throw _hanldePlatformException(e); - } - } - Exception _hanldePlatformException(PlatformException e) { switch (e.code) { case "UserCancelledException": From e9bc7ead2f47f426f1b76981a44fd401c5da70d9 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Tue, 24 Sep 2024 15:04:08 +0530 Subject: [PATCH 02/23] feat: added logout() function Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.kt | 10 ++++++++++ example/lib/main.dart | 2 +- lib/single_factor_auth_flutter.dart | 12 +++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index e8330f5..a407147 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -108,6 +108,16 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { throw Error(e) } } + + "logout" -> { + try { + val logoutCF = singleFactorAuth.logout(context) + Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#logout") + return logoutCF + } catch (e: Throwable) { + throw Error(e) + } + } } throw NotImplementedError() } diff --git a/example/lib/main.dart b/example/lib/main.dart index 3e4c36a..9eaae66 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -21,7 +21,7 @@ class MyApp extends StatefulWidget { } class _MyAppState extends State { - final _singleFactorAuthFlutterPlugin = SingleFactAuthFlutter(); + final _singleFactorAuthFlutterPlugin = SingleFactorAuthFlutter(); String _result = ''; bool logoutVisible = false; Web3AuthNetwork web3AuthNetwork = Web3AuthNetwork.sapphire_mainnet; diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index 66a379d..912fb76 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:ffi'; import 'package:flutter/services.dart'; import 'package:single_factor_auth_flutter/input.dart'; @@ -7,7 +8,7 @@ import 'package:single_factor_auth_flutter/output.dart'; import 'single_factor_auth_flutter_platform_interface.dart'; -class SingleFactAuthFlutter { +class SingleFactorAuthFlutter { static const MethodChannel _channel = MethodChannel('single_factor_auth_flutter'); @@ -50,6 +51,15 @@ class SingleFactAuthFlutter { } } + Future logout() async { + try { + final bool result = await _channel.invokeMethod('logout'); + return result; + } on PlatformException catch (e) { + throw _hanldePlatformException(e); + } + } + Exception _hanldePlatformException(PlatformException e) { switch (e.code) { case "UserCancelledException": From ba5fb5778a8a5748aa5f6b577a75c2b3e3530c78 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 27 Sep 2024 09:51:02 +0530 Subject: [PATCH 03/23] feat: code cleanup Signed-off-by: Gaurav Goel --- .../single_factor_auth_flutter/Web3AuthOptions.kt | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/Web3AuthOptions.kt diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/Web3AuthOptions.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/Web3AuthOptions.kt deleted file mode 100644 index 06f237b..0000000 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/Web3AuthOptions.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.web3auth.single_factor_auth_flutter - -data class Web3AuthOptions( - val verifier: String, - val verifierId: String, - val idToken: String, - val aggregateVerifier: String? = null -) - - From 3e45645d53e93cd1c8d621fb4406b6ec177f653f Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 27 Sep 2024 09:52:15 +0530 Subject: [PATCH 04/23] feat: Update SingleFactorAuthFlutterPlugin.swift Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.swift | 35 ++++--------------- 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/ios/Classes/SingleFactorAuthFlutterPlugin.swift b/ios/Classes/SingleFactorAuthFlutterPlugin.swift index f7e5619..379a9cc 100644 --- a/ios/Classes/SingleFactorAuthFlutterPlugin.swift +++ b/ios/Classes/SingleFactorAuthFlutterPlugin.swift @@ -63,6 +63,7 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { self.singleFactorAuth = singleFactorAuth return result(nil) + break case "initialize": do { @@ -76,6 +77,7 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { } catch { result(throwKeyNotGeneratedError()) } + break case "connect": let args = call.arguments as? String @@ -83,28 +85,7 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { return result(throwKeyNotGeneratedError()) } - let params = try self.decoder.decode(getTorusKeyParams.self, from: data) - - let loginParams: LoginParams - if params.aggregateVerifier?.isEmpty ?? true { - loginParams = LoginParams( - verifier: params.verifier, - verifierId: params.verifierId, - idToken: params.idToken - ) - } else { - loginParams = LoginParams( - verifier: params.aggregateVerifier!, - verifierId: params.verifierId, - idToken: params.idToken, - subVerifierInfoArray: [ - TorusSubVerifierInfo( - verifier: params.verifier, - idToken: params.idToken - ) - ] - ) - } + let loginParams = try self.decoder.decode(LoginParams.self, from: data) do { @@ -120,14 +101,10 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { } break - case "isSessionIdExists": + case "logout": do { - if singleFactorAuth == nil { - return result(false) - } else { - let isSessionExists = try await singleFactorAuth?.isSessionIdExists() ?? false - return result(isSessionExists) - } + let logoutResult = try await singleFactorAuth?.logout() + return result(logoutResult) } catch { result(throwKeyNotGeneratedError()) } From 4029c45642d3fec7a4e83d7ae69bc10fbf349eb8 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 27 Sep 2024 10:01:28 +0530 Subject: [PATCH 05/23] feat: Add example for logout. Signed-off-by: Gaurav Goel --- example/lib/main.dart | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/example/lib/main.dart b/example/lib/main.dart index 9eaae66..d154aac 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -170,6 +170,7 @@ class _MyAppState extends State { } } + //Get key example Future getKey() { return _singleFactorAuthFlutterPlugin.connect(LoginParams( verifier: 'torus-test-health', @@ -178,6 +179,7 @@ class _MyAppState extends State { )); } + //Aggregate verifier key example Future getAggregateKey() { return _singleFactorAuthFlutterPlugin.connect(LoginParams( verifier: 'torus-aggregate-sapphire-mainnet', @@ -188,4 +190,9 @@ class _MyAppState extends State { ] )); } + + //Logout example + Future logout() { + return _singleFactorAuthFlutterPlugin.logout(); + } } From 886e490aa6017630d968e6ec873ba5769ae6c405 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Mon, 11 Nov 2024 12:42:20 +0530 Subject: [PATCH 06/23] feat: update flutter android method channel and sfa android deps --- android/build.gradle | 2 +- .../SingleFactorAuthFlutterPlugin.kt | 29 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 3933f11..352c687 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'com.github.grvgoel81:single-factor-auth-android:9.1.0' + implementation 'com.github.grvgoel81:single-factor-auth-android:9.3.0' implementation 'org.torusresearch:fetch-node-details-java:5.0.0' implementation 'com.google.code.gson:gson:2.9.1' } diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index a407147..8fdd90a 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -6,9 +6,8 @@ import androidx.annotation.NonNull import com.google.gson.Gson import com.web3auth.singlefactorauth.SingleFactorAuth import com.web3auth.singlefactorauth.types.LoginParams -import com.web3auth.singlefactorauth.types.SFAKey -import com.web3auth.singlefactorauth.types.SFAParams -import com.web3auth.singlefactorauth.types.TorusSubVerifierInfo +import com.web3auth.singlefactorauth.types.SessionData +import com.web3auth.singlefactorauth.types.Web3AuthOptions import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.MethodCall import io.flutter.plugin.common.MethodChannel @@ -27,7 +26,7 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { private lateinit var channel: MethodChannel private lateinit var context: Context private lateinit var singleFactorAuth: SingleFactorAuth - private lateinit var sfaParams: SFAParams + private lateinit var web3AuthOptions: Web3AuthOptions private lateinit var loginParams: LoginParams private var gson: Gson = Gson() @@ -76,9 +75,9 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { "init" -> { val initArgs = call.arguments() val params = gson.fromJson(initArgs, SFAOptions::class.java) - sfaParams = - SFAParams(getNetwork(params.network), params.clientId, params.sessionTime) - singleFactorAuth = SingleFactorAuth(sfaParams, context) + web3AuthOptions = + Web3AuthOptions(params.clientId, getNetwork(params.network), params.sessionTime) + singleFactorAuth = SingleFactorAuth(web3AuthOptions, context) return null } @@ -87,7 +86,7 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { val sfaKey = singleFactorAuth.initialize(context) Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#initialize") return if (sfaKey.get() != null) { - prepareResultFromSFAkey(sfaKey.get()) + prepareResultFromSFAkey(sfaKey.get()!!) } else { "" } @@ -122,17 +121,17 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { throw NotImplementedError() } - private fun prepareResult(sfaKey: SFAKey?): String { + private fun prepareResult(sfaKey: SessionData): String { val hashMap: HashMap = HashMap(2) - hashMap["privateKey"] = sfaKey?.getPrivateKey() as String - hashMap["publicAddress"] = sfaKey?.getPublicAddress() as String + hashMap["privateKey"] = sfaKey.privateKey as String + hashMap["publicAddress"] = sfaKey.publicAddress as String return gson.toJson(hashMap) } - private fun prepareResultFromSFAkey(sfaKey: SFAKey): String { - val hashMap: HashMap = HashMap(2) - hashMap["privateKey"] = sfaKey.getPrivateKey() as String ?: "" - hashMap["publicAddress"] = sfaKey.getPublicAddress() as String ?: "" + private fun prepareResultFromSFAkey(sfaKey: SessionData): String { + val hashMap: HashMap = HashMap(2) + hashMap["privateKey"] = sfaKey.privateKey ?: "" + hashMap["publicAddress"] = sfaKey.publicAddress ?: "" return gson.toJson(hashMap) } } From 2889b07921a3cb62033d17543fd0310259f90803 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Tue, 12 Nov 2024 11:28:46 +0530 Subject: [PATCH 07/23] feat: update flutter android code as per SFA android Signed-off-by: Gaurav Goel --- android/build.gradle | 2 +- example/lib/main.dart | 19 ++++++++++--------- lib/output.dart | 8 +++++--- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 352c687..73b944f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'com.github.grvgoel81:single-factor-auth-android:9.3.0' + implementation 'com.github.grvgoel81:single-factor-auth-android:9.4.0' implementation 'org.torusresearch:fetch-node-details-java:5.0.0' implementation 'com.google.code.gson:gson:2.9.1' } diff --git a/example/lib/main.dart b/example/lib/main.dart index d154aac..f8eeb44 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -51,8 +51,8 @@ class _MyAppState extends State { Future initialize() async { log("initialize() called"); - final SFAKey? sfaKey = await _singleFactorAuthFlutterPlugin.initialize(); - if (sfaKey != null) { + final SFAKey sfaKey = await _singleFactorAuthFlutterPlugin.getSessionData(); + if (sfaKey.error == null) { setState(() { _result = "Public Add : ${sfaKey.publicAddress} , Private Key : ${sfaKey.privateKey}"; @@ -156,13 +156,14 @@ class _MyAppState extends State { Future _initialize() async { try { - final SFAKey? response = - await _singleFactorAuthFlutterPlugin.initialize(); - setState(() { - _result = - "Public Add : ${response?.publicAddress} , Private Key : ${response?.privateKey}"; - log(response!.publicAddress); - }); + final SFAKey sfaKey = + await _singleFactorAuthFlutterPlugin.getSessionData(); + if (sfaKey.error == null) { + setState(() { + _result = + "Public Add : ${sfaKey.publicAddress} , Private Key : ${sfaKey.privateKey}"; + }); + } } on PrivateKeyNotGeneratedException { log("Private key not generated"); } on UnKnownException { diff --git a/lib/output.dart b/lib/output.dart index 6070f22..8cabb23 100644 --- a/lib/output.dart +++ b/lib/output.dart @@ -7,13 +7,15 @@ SFAKey sfaKeyFromJson(String string) => SFAKey.fromJson( class SFAKey { final String privateKey; final String publicAddress; + String? error; - SFAKey({required this.privateKey, required this.publicAddress}); + SFAKey({required this.privateKey, required this.publicAddress, this.error}); factory SFAKey.fromJson(Map json) { return SFAKey( - privateKey: json['privateKey'], - publicAddress: json['publicAddress'], + error: json['error'] ?? null, + privateKey: json['privateKey'] ?? "", + publicAddress: json['publicAddress'] ?? "", ); } } From 9eed7eb72edab86248141da6ab2c08c434ca4e1d Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Tue, 12 Nov 2024 11:29:23 +0530 Subject: [PATCH 08/23] feat: add getSessionData() in android and dart Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.kt | 37 ++++++++++++++----- lib/single_factor_auth_flutter.dart | 20 +++++----- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index 8fdd90a..22840f0 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -85,11 +85,7 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { try { val sfaKey = singleFactorAuth.initialize(context) Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#initialize") - return if (sfaKey.get() != null) { - prepareResultFromSFAkey(sfaKey.get()!!) - } else { - "" - } + return null } catch (e: Throwable) { throw Error(e) } @@ -117,21 +113,42 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { throw Error(e) } } + + "getSessionData" -> { + try { + Log.d( + "${SingleFactorAuthFlutterPlugin::class.qualifiedName}", + "#getSessionData" + ) + singleFactorAuth.initialize(context).get() + var sessionData = singleFactorAuth.getSessionData() + var response = sessionData?.let { prepareResult(it) } + ?: gson.toJson(mapOf("error" to "Session data is not available")) + return response + } catch (e: Throwable) { + Log.e( + "${SingleFactorAuthFlutterPlugin::class.qualifiedName}", + "Error retrieving session data", + e + ) + return gson.toJson(mapOf("error" to "Failed to retrieve session data")) + } + } } throw NotImplementedError() } private fun prepareResult(sfaKey: SessionData): String { - val hashMap: HashMap = HashMap(2) - hashMap["privateKey"] = sfaKey.privateKey as String - hashMap["publicAddress"] = sfaKey.publicAddress as String + val hashMap: HashMap = HashMap(2) + hashMap["privateKey"] = sfaKey.privateKey ?: "" + hashMap["publicAddress"] = sfaKey.publicAddress ?: "" return gson.toJson(hashMap) } private fun prepareResultFromSFAkey(sfaKey: SessionData): String { val hashMap: HashMap = HashMap(2) - hashMap["privateKey"] = sfaKey.privateKey ?: "" - hashMap["publicAddress"] = sfaKey.publicAddress ?: "" + hashMap["privateKey"] = sfaKey.privateKey + hashMap["publicAddress"] = sfaKey.publicAddress return gson.toJson(hashMap) } } diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index 912fb76..40e7fc7 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -22,16 +22,9 @@ class SingleFactorAuthFlutter { await _channel.invokeMethod('init', jsonEncode(initParamsJson)); } - Future initialize() async { + Future initialize() async { try { - final String? sfaKeyJson = await _channel.invokeMethod( - 'initialize', - ); - - if (sfaKeyJson != null) { - return sfaKeyFromJson(sfaKeyJson); - } - return null; + await _channel.invokeMethod('initialize'); } on PlatformException catch (e) { throw _hanldePlatformException(e); } @@ -51,6 +44,15 @@ class SingleFactorAuthFlutter { } } + Future getSessionData() async { + try { + final String torusKeyJson = await _channel.invokeMethod('getSessionData'); + return sfaKeyFromJson(torusKeyJson); + } on PlatformException catch (e) { + throw _hanldePlatformException(e); + } + } + Future logout() async { try { final bool result = await _channel.invokeMethod('logout'); From 39f03fed7b8f687a8ba8a388535e63ff6059e5e0 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Thu, 28 Nov 2024 12:59:35 +0530 Subject: [PATCH 09/23] feat: update swift code Signed-off-by: Gaurav Goel --- example/ios/Podfile.lock | 40 ++++++++-------- .../SingleFactorAuthFlutterPlugin.swift | 41 ++++++++-------- ios/single_factor_auth_flutter.podspec | 47 +++++++++++++------ 3 files changed, 73 insertions(+), 55 deletions(-) diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 9325125..d6c1ffb 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,23 +1,23 @@ PODS: - BigInt (5.2.0) - - curvelib.swift (1.0.1) + - curvelib.swift (2.0.0) - Flutter (1.0.0) + - JWTDecode (3.2.0) - KeychainSwift (20.0.0) - single_factor_auth_flutter (0.0.1): - Flutter - - SingleFactorAuth (= 8.0.0) - - SingleFactorAuth (8.0.0): - - curvelib.swift (~> 1.0.1) - - Torus-fetchNodeDetails (~> 6.0.3) - - Torus-utils (~> 9.0.1) - - TorusSessionManager (~> 5.0.0) - - Torus-fetchNodeDetails (6.0.3): + - SingleFactorAuth (= 9.0.2) + - SingleFactorAuth (9.0.2): + - JWTDecode (~> 3.2) + - Torus-utils (~> 10.0.0) + - TorusSessionManager (~> 6.0.1) + - Torus-fetchNodeDetails (8.0.0): - BigInt (~> 5.2.0) - - Torus-utils (9.0.1): - - curvelib.swift (~> 1.0.1) - - Torus-fetchNodeDetails (~> 6.0.3) - - TorusSessionManager (5.0.0): - - curvelib.swift (~> 1.0.1) + - Torus-utils (10.0.0): + - curvelib.swift (~> 2.0.0) + - Torus-fetchNodeDetails (~> 8.0.0) + - TorusSessionManager (6.0.1): + - curvelib.swift (~> 2.0.0) - KeychainSwift (~> 20.0.0) DEPENDENCIES: @@ -28,6 +28,7 @@ SPEC REPOS: trunk: - BigInt - curvelib.swift + - JWTDecode - KeychainSwift - SingleFactorAuth - Torus-fetchNodeDetails @@ -42,14 +43,15 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: BigInt: f668a80089607f521586bbe29513d708491ef2f7 - curvelib.swift: d0746ae82bee34016c06da3567a97e493b3c979f + curvelib.swift: b9223e5cac801effed8a5fe8968e952b3fe427a5 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + JWTDecode: 7dae24cb9bf9b608eae61e5081029ec169bb5527 KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - single_factor_auth_flutter: 9617e5ffce9c0251bddb19cbe49293f921c13b79 - SingleFactorAuth: 2bfa8ad0fe8d0023fffdf1a5f0c9634ca3ee66d8 - Torus-fetchNodeDetails: 6c349f47cbca36a4b3f276fe26d03c1b39b20949 - Torus-utils: 1d23e6eedf9ee7df9ecc2605b765ad68eb194f71 - TorusSessionManager: 42c21f100d895976fabe3806cb9c575392f6e424 + single_factor_auth_flutter: a406fab1682326a08a0b5ceac835a8934d0db9be + SingleFactorAuth: 0dd1e92f37b7175c6c1224afcde609615708a115 + Torus-fetchNodeDetails: 2a5fbb222ec28af4128d64e4c2d520c7db456b78 + Torus-utils: 4a1db3d9c1aa221df312ffa7ec154e7e4719850a + TorusSessionManager: 9c9871718233dc020ab4fde9bdf37802f01dae10 PODFILE CHECKSUM: d5c402b2f74646de5c7f24c1231886362b49b38f diff --git a/ios/Classes/SingleFactorAuthFlutterPlugin.swift b/ios/Classes/SingleFactorAuthFlutterPlugin.swift index 379a9cc..a567f35 100644 --- a/ios/Classes/SingleFactorAuthFlutterPlugin.swift +++ b/ios/Classes/SingleFactorAuthFlutterPlugin.swift @@ -1,5 +1,6 @@ import Flutter import UIKit +import FetchNodeDetails import SingleFactorAuth public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { @@ -16,25 +17,25 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { private func getNetwork(_ network: String) -> Web3AuthNetwork { switch network { case "mainnet": - return .legacy(.MAINNET) + return .MAINNET case "testnet": - return .legacy(.TESTNET) + return .TESTNET case "aqua": - return .legacy(.AQUA) + return .AQUA case "cyan": - return .legacy(.CYAN) + return .CYAN case "sapphire_devnet": - return .sapphire(.SAPPHIRE_DEVNET) + return .SAPPHIRE_DEVNET case "sapphire_mainnet": - return .sapphire(.SAPPHIRE_MAINNET) + return .SAPPHIRE_MAINNET default: - return .sapphire(.SAPPHIRE_MAINNET) + return .SAPPHIRE_MAINNET } } var decoder = JSONDecoder() var encoder = JSONEncoder() - var sfaParams: SFAParams? + var web3AuthOptions: Web3AuthOptions? var singleFactorAuth: SingleFactorAuth? public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { @@ -51,14 +52,14 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { let params = try self.decoder.decode(InitParams.self, from: data) - sfaParams = SFAParams( - web3AuthClientId: params.clientId, - network: self.getNetwork(params.network), + web3AuthOptions = Web3AuthOptions( + clientId: params.clientId, + web3AuthNetwork: self.getNetwork(params.network), sessionTime: params.sessionTime ?? 86400 ) let singleFactorAuth = try SingleFactorAuth( - params: sfaParams! + params: web3AuthOptions! ) self.singleFactorAuth = singleFactorAuth @@ -67,13 +68,8 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { case "initialize": do { - guard let torusKeyCF = try await singleFactorAuth?.initialize() else { - return result(nil) - } - - let resultData: Data = try encoder.encode(torusKeyCF) - let resultJson = String(decoding: resultData, as: UTF8.self) - return result(resultJson) + try await singleFactorAuth?.initialize() + return result(nil) } catch { result(throwKeyNotGeneratedError()) } @@ -103,13 +99,16 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { case "logout": do { - let logoutResult = try await singleFactorAuth?.logout() - return result(logoutResult) + try await singleFactorAuth?.logout() + return result(nil) } catch { result(throwKeyNotGeneratedError()) } break + case "getSessionData": + break + default: break } diff --git a/ios/single_factor_auth_flutter.podspec b/ios/single_factor_auth_flutter.podspec index 0fddef6..35bc526 100644 --- a/ios/single_factor_auth_flutter.podspec +++ b/ios/single_factor_auth_flutter.podspec @@ -5,20 +5,37 @@ Pod::Spec.new do |s| s.name = 'single_factor_auth_flutter' s.version = '0.0.1' - s.summary = 'A new Flutter plugin project.' - s.description = <<-DESC -A new Flutter plugin project. - DESC - s.homepage = 'http://example.com' - s.license = { :file => '../LICENSE' } - s.author = { 'Your Company' => 'email@example.com' } - s.source = { :path => '.' } - s.source_files = 'Classes/**/*' - s.dependency 'Flutter' - s.dependency 'SingleFactorAuth', '8.0.0' - s.platform = :ios, '14.0' +s. +summary = 'A new Flutter plugin project.' +s. +description = +<<- +DESC + A +new +Flutter plugin +project. +DESC + s +. +homepage = 'http://example.com' +s. +license = {:file => '../LICENSE'} +s. +author = {'Your Company' => 'email@example.com'} +s. +source = {:path => '.'} +s. +source_files = 'Classes/**/*' +s.dependency 'Flutter' +s.dependency 'SingleFactorAuth', '9.0.2' +s. +platform = +:ios, '14.0' - # Flutter.framework does not contain a i386 slice. - s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } - s.swift_version = '5.0' +# Flutter.framework does not contain a i386 slice. +s. +pod_target_xcconfig = {'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386'} +s. +swift_version = '5.0' end From 7c9a0cc541b072207682c8c6083c6594e408552c Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 14:20:20 +0530 Subject: [PATCH 10/23] feat: update swift code Signed-off-by: Gaurav Goel --- example/ios/Podfile.lock | 8 ++-- example/pubspec.lock | 22 ++++----- .../SingleFactorAuthFlutterPlugin.swift | 9 ++++ ios/single_factor_auth_flutter.podspec | 47 ++++++------------- 4 files changed, 39 insertions(+), 47 deletions(-) diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index d6c1ffb..fd63701 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -6,8 +6,8 @@ PODS: - KeychainSwift (20.0.0) - single_factor_auth_flutter (0.0.1): - Flutter - - SingleFactorAuth (= 9.0.2) - - SingleFactorAuth (9.0.2): + - SingleFactorAuth (= 9.0.3) + - SingleFactorAuth (9.0.3): - JWTDecode (~> 3.2) - Torus-utils (~> 10.0.0) - TorusSessionManager (~> 6.0.1) @@ -47,8 +47,8 @@ SPEC CHECKSUMS: Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 JWTDecode: 7dae24cb9bf9b608eae61e5081029ec169bb5527 KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - single_factor_auth_flutter: a406fab1682326a08a0b5ceac835a8934d0db9be - SingleFactorAuth: 0dd1e92f37b7175c6c1224afcde609615708a115 + single_factor_auth_flutter: 0d99b60b1e56e4c8a36754519a15a142e97db518 + SingleFactorAuth: 5f7af5e3370769455f7543453cbf398da1ffb754 Torus-fetchNodeDetails: 2a5fbb222ec28af4128d64e4c2d520c7db456b78 Torus-utils: 4a1db3d9c1aa221df312ffa7ec154e7e4719850a TorusSessionManager: 9c9871718233dc020ab4fde9bdf37802f01dae10 diff --git a/example/pubspec.lock b/example/pubspec.lock index cdef532..a4fca1f 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -53,18 +53,18 @@ packages: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" crypto: dependency: transitive description: name: crypto - sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.6" cupertino_icons: dependency: "direct main" description: @@ -77,10 +77,10 @@ packages: dependency: "direct main" description: name: dart_jsonwebtoken - sha256: "346e9a21e4bf6e6a431e19ece00ebb2e3668e1e339cabdf6f46d18d88692a848" + sha256: "866787dc17afaef46a9ea7dd33eefe60c6d82084b4a36d70e8e788d091cd04ef" url: "https://pub.dev" source: hosted - version: "2.14.0" + version: "2.14.2" ed25519_edwards: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -275,10 +275,10 @@ packages: dependency: transitive description: name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" vector_math: dependency: transitive description: @@ -296,5 +296,5 @@ packages: source: hosted version: "14.2.5" sdks: - dart: ">=3.4.0 <4.0.0" + dart: ">=3.5.0 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/ios/Classes/SingleFactorAuthFlutterPlugin.swift b/ios/Classes/SingleFactorAuthFlutterPlugin.swift index a567f35..ddca702 100644 --- a/ios/Classes/SingleFactorAuthFlutterPlugin.swift +++ b/ios/Classes/SingleFactorAuthFlutterPlugin.swift @@ -107,6 +107,15 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { break case "getSessionData": + do { + try await singleFactorAuth?.initialize() + let sessionData = try await singleFactorAuth?.getSessionData() + let resultData = try encoder.encode(sessionData) + let resultJson = String(decoding: resultData, as: UTF8.self) + return result(resultJson) + } catch { + result(throwKeyNotGeneratedError()) + } break default: diff --git a/ios/single_factor_auth_flutter.podspec b/ios/single_factor_auth_flutter.podspec index 35bc526..fe46126 100644 --- a/ios/single_factor_auth_flutter.podspec +++ b/ios/single_factor_auth_flutter.podspec @@ -3,39 +3,22 @@ # Run `pod lib lint single_factor_auth_flutter.podspec` to validate before publishing. # Pod::Spec.new do |s| - s.name = 'single_factor_auth_flutter' - s.version = '0.0.1' -s. -summary = 'A new Flutter plugin project.' -s. -description = -<<- +s.name = 'single_factor_auth_flutter' +s.version = '0.0.1' +s.summary = 'A new Flutter plugin project.' +s.description = <<-DESC + A new Flutter plugin project. DESC - A -new -Flutter plugin -project. -DESC - s -. -homepage = 'http://example.com' -s. -license = {:file => '../LICENSE'} -s. -author = {'Your Company' => 'email@example.com'} -s. -source = {:path => '.'} -s. -source_files = 'Classes/**/*' + s.homepage = 'http://example.com' +s.license = { :file => '../LICENSE' } +s.author = { 'Your Company' => 'email@example.com' } +s.source = { :path => '.' } +s.source_files = 'Classes/**/*' s.dependency 'Flutter' -s.dependency 'SingleFactorAuth', '9.0.2' -s. -platform = -:ios, '14.0' +s.dependency 'SingleFactorAuth', '9.0.3' +s.platform = :ios, '14.0' # Flutter.framework does not contain a i386 slice. -s. -pod_target_xcconfig = {'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386'} -s. -swift_version = '5.0' -end +s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } +s.swift_version = '5.0' +end \ No newline at end of file From a57936592e93e344c81f72cc49575efc5928b940 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 14:30:13 +0530 Subject: [PATCH 11/23] feat: update pubspec.lock Signed-off-by: Gaurav Goel --- example/pubspec.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index a4fca1f..2b4d501 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -217,7 +217,7 @@ packages: path: ".." relative: true source: path - version: "5.1.0" + version: "5.3.0" sky_engine: dependency: transitive description: flutter From 21d041d359823ab455831dd3423c7ccd9cc8452c Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 14:34:35 +0530 Subject: [PATCH 12/23] feat: update pnp android deps Signed-off-by: Gaurav Goel --- android/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 73b944f..8dd5aac 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'com.github.grvgoel81:single-factor-auth-android:9.4.0' + implementation 'com.github.Web3Auth:single-factor-auth-android:2.2.0' implementation 'org.torusresearch:fetch-node-details-java:5.0.0' - implementation 'com.google.code.gson:gson:2.9.1' + implementation 'com.google.code.gson:gson:2.10.1' } From b9a296cd1d77aadc34f20c618eb1fb8d6dfa189c Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 14:44:07 +0530 Subject: [PATCH 13/23] feat: update example and pubspec.yaml Signed-off-by: Gaurav Goel --- example/lib/main.dart | 8 ++++---- pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index f8eeb44..9426ff2 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -35,10 +35,10 @@ class _MyAppState extends State { Future initSdk() async { if (Platform.isAndroid) { await init(); - initialize(); + getSessionData(); } else if (Platform.isIOS) { await init(); - initialize(); + getSessionData(); } else {} } @@ -49,8 +49,8 @@ class _MyAppState extends State { sessionTime: 86400)); } - Future initialize() async { - log("initialize() called"); + Future getSessionData() async { + log("getSessionData() called"); final SFAKey sfaKey = await _singleFactorAuthFlutterPlugin.getSessionData(); if (sfaKey.error == null) { setState(() { diff --git a/pubspec.yaml b/pubspec.yaml index 0530b81..fff679e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: single_factor_auth_flutter description: Single Factor Auth Flutter SDK -version: 5.3.0 +version: 6.0.0 homepage: "https://github.com/web3auth/single-factor-auth-flutter" environment: From 4beee3a32fda2dfbea93f24eed9e7daa9528ef2a Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 15:45:59 +0530 Subject: [PATCH 14/23] feat: update pnp android deps --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 8dd5aac..7a79ab4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'com.github.Web3Auth:single-factor-auth-android:2.2.0' + implementation 'com.github.Web3Auth:single-factor-auth-android:3.0.0' implementation 'org.torusresearch:fetch-node-details-java:5.0.0' implementation 'com.google.code.gson:gson:2.10.1' } From 2f8564806d1092a3f461a9bf87cf4e8e5e4468c6 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 16:44:50 +0530 Subject: [PATCH 15/23] feat: update SingleFactorAuthFlutterPlugin.swift Signed-off-by: Gaurav Goel --- ios/Classes/SingleFactorAuthFlutterPlugin.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ios/Classes/SingleFactorAuthFlutterPlugin.swift b/ios/Classes/SingleFactorAuthFlutterPlugin.swift index d8becba..0a7813e 100644 --- a/ios/Classes/SingleFactorAuthFlutterPlugin.swift +++ b/ios/Classes/SingleFactorAuthFlutterPlugin.swift @@ -110,7 +110,11 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { try await singleFactorAuth?.logout() return result(nil) } catch { - result(throwKeyNotGeneratedError()) + result(FlutterError( + code: (error as NSError).domain, + message: error.localizedDescription, + details: String(describing: error) + )) } break From 647f322ed0322682718cf00333b73d14838a5277 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 19:25:50 +0530 Subject: [PATCH 16/23] feat: update pubspec.lock Signed-off-by: Gaurav Goel --- example/pubspec.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index 2b4d501..c755561 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -217,7 +217,7 @@ packages: path: ".." relative: true source: path - version: "5.3.0" + version: "6.0.0" sky_engine: dependency: transitive description: flutter From a36939dbe69ceb1607aa20583c983d990af61f87 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Wed, 4 Dec 2024 19:27:09 +0530 Subject: [PATCH 17/23] feat: update SessionData from connect() and getSessionData() Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.kt | 11 +- example/lib/main.dart | 50 ++-- lib/output.dart | 243 +++++++++++++++++- lib/single_factor_auth_flutter.dart | 17 +- 4 files changed, 270 insertions(+), 51 deletions(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index 22840f0..f4d58a2 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -95,10 +95,10 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { try { val initArgs = call.arguments() val loginParams = gson.fromJson(initArgs, LoginParams::class.java) - val sfaKeyCF = singleFactorAuth.connect(loginParams, context) + val sessionData = singleFactorAuth.connect(loginParams, context) Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#connect") - val sfaKey = sfaKeyCF - return prepareResult(sfaKey) + val result: SessionData = sessionData + return gson.toJson(result) } catch (e: Throwable) { throw Error(e) } @@ -122,9 +122,8 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { ) singleFactorAuth.initialize(context).get() var sessionData = singleFactorAuth.getSessionData() - var response = sessionData?.let { prepareResult(it) } - ?: gson.toJson(mapOf("error" to "Session data is not available")) - return response + val loginResult: SessionData? = sessionData + return gson.toJson(loginResult) } catch (e: Throwable) { Log.e( "${SingleFactorAuthFlutterPlugin::class.qualifiedName}", diff --git a/example/lib/main.dart b/example/lib/main.dart index 9426ff2..17dbdb7 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -51,11 +51,11 @@ class _MyAppState extends State { Future getSessionData() async { log("getSessionData() called"); - final SFAKey sfaKey = await _singleFactorAuthFlutterPlugin.getSessionData(); - if (sfaKey.error == null) { + final SessionData sessionData = + await _singleFactorAuthFlutterPlugin.getSessionData(); + if (sessionData.publicAddress != null) { setState(() { - _result = - "Public Add : ${sfaKey.publicAddress} , Private Key : ${sfaKey.privateKey}"; + _result = "Session Data: ${sessionData.toString()}"; }); } } @@ -135,14 +135,13 @@ class _MyAppState extends State { ); } - VoidCallback _getKey(Future Function() method) { + VoidCallback _getKey(Future Function() method) { return () async { try { - final SFAKey response = await method(); + final SessionData sessionData = await method(); setState(() { - _result = - "Public Add : ${response.publicAddress} , Private Key : ${response.privateKey}"; - log(response.publicAddress); + _result = "Session Data: ${sessionData.toString()}"; + log("Full Session Data: ${sessionData.toString()}"); }); } on MissingParamException catch (error) { log("Missing Param: ${error.paramName}"); @@ -156,44 +155,47 @@ class _MyAppState extends State { Future _initialize() async { try { - final SFAKey sfaKey = + final SessionData sessionData = await _singleFactorAuthFlutterPlugin.getSessionData(); - if (sfaKey.error == null) { + + if (sessionData != null) { setState(() { - _result = - "Public Add : ${sfaKey.publicAddress} , Private Key : ${sfaKey.privateKey}"; + _result = "Session Data: ${sessionData.toString()}"; }); + } else { + log("Session data is null"); } - } on PrivateKeyNotGeneratedException { - log("Private key not generated"); } on UnKnownException { log("Unknown exception occurred"); + } catch (e, stackTrace) { + log("An unexpected error occurred: $e"); + log("Stack trace: $stackTrace"); } } //Get key example - Future getKey() { + Future getKey() { return _singleFactorAuthFlutterPlugin.connect(LoginParams( - verifier: 'torus-test-health', - verifierId: 'hello@tor.us', - idToken: Utils().es256Token("hello@tor.us"), + verifier: 'torus-test-health', + verifierId: 'hello@tor.us', + idToken: Utils().es256Token("hello@tor.us"), )); } //Aggregate verifier key example - Future getAggregateKey() { + Future getAggregateKey() { return _singleFactorAuthFlutterPlugin.connect(LoginParams( verifier: 'torus-aggregate-sapphire-mainnet', verifierId: 'devnettestuser@tor.us', idToken: Utils().es256Token("devnettestuser@tor.us"), subVerifierInfoArray: [ - TorusSubVerifierInfo('torus-test-health', Utils().es256Token("devnettestuser@tor.us")) - ] - )); + TorusSubVerifierInfo( + 'torus-test-health', Utils().es256Token("devnettestuser@tor.us")) + ])); } //Logout example - Future logout() { + Future logout() { return _singleFactorAuthFlutterPlugin.logout(); } } diff --git a/lib/output.dart b/lib/output.dart index 8cabb23..82247a3 100644 --- a/lib/output.dart +++ b/lib/output.dart @@ -1,21 +1,240 @@ import 'dart:convert'; -SFAKey sfaKeyFromJson(String string) => SFAKey.fromJson( - jsonDecode(string), - ); - -class SFAKey { +class SessionData { final String privateKey; final String publicAddress; - String? error; + final Session_Data? signatures; + final UserInfo? userInfo; + + SessionData({ + required this.privateKey, + required this.publicAddress, + this.signatures, + this.userInfo, + }); + + // Factory constructor to create an instance from a JSON map + factory SessionData.fromJson(Map json) { + return SessionData( + privateKey: json['privateKey'], + publicAddress: json['publicAddress'], + signatures: json['signatures'] != null + ? Session_Data.fromJson(json['signatures']) + : null, + userInfo: + json['userInfo'] != null ? UserInfo.fromJson(json['userInfo']) : null, + ); + } + + Map toJson() { + return { + 'privateKey': privateKey, + 'publicAddress': publicAddress, + 'signatures': signatures?.toJson(), + 'userInfo': userInfo?.toJson(), + }; + } + + @override + String toString() { + return 'SessionData(privateKey: $privateKey, publicAddress: $publicAddress, signatures: ${signatures?.toString()}, userInfo: ${userInfo?.toString()})'; + } +} + +class UserInfo { + final String email; + final String name; + final String profileImage; + final String? aggregateVerifier; + final String verifier; + final String verifierId; + final LoginType typeOfLogin; + final String? ref; + final String? accessToken; + final String? idToken; + final String? extraParams; + final String? extraParamsPassed; + final TorusGenericContainer state; + + UserInfo({ + required this.email, + required this.name, + required this.profileImage, + this.aggregateVerifier, + required this.verifier, + required this.verifierId, + required this.typeOfLogin, + this.ref, + this.accessToken, + this.idToken, + this.extraParams, + this.extraParamsPassed, + required this.state, + }); + + // Factory constructor to create an instance from a JSON map + factory UserInfo.fromJson(Map json) { + return UserInfo( + email: json['email'], + name: json['name'], + profileImage: json['profileImage'], + aggregateVerifier: json['aggregateVerifier'], + verifier: json['verifier'], + verifierId: json['verifierId'], + typeOfLogin: LoginTypeExtension.fromJson(json['typeOfLogin']), + ref: json['ref'], + accessToken: json['accessToken'], + idToken: json['idToken'], + extraParams: json['extraParams'], + extraParamsPassed: json['extraParamsPassed'], + state: TorusGenericContainer.fromJson(json['state']), + ); + } + + // Method to convert an instance to a JSON map + Map toJson() { + return { + 'email': email, + 'name': name, + 'profileImage': profileImage, + 'aggregateVerifier': aggregateVerifier, + 'verifier': verifier, + 'verifierId': verifierId, + 'typeOfLogin': typeOfLogin.toJson(), + 'ref': ref, + 'accessToken': accessToken, + 'idToken': idToken, + 'extraParams': extraParams, + 'extraParamsPassed': extraParamsPassed, + 'state': state.toJson(), + }; + } + + @override + String toString() { + return 'UserInfo(email: $email, name: $name, profileImage: $profileImage, aggregateVerifier: $aggregateVerifier, verifier: $verifier, verifierId: $verifierId, typeOfLogin: ${typeOfLogin.toString()}, ref: $ref, accessToken: $accessToken, idToken: $idToken, extraParams: $extraParams, extraParamsPassed: $extraParamsPassed, state: ${state.toString()})'; + } +} + +enum LoginType { + google, + facebook, + discord, + reddit, + twitch, + apple, + github, + linkedin, + twitter, + weibo, + line, + email_password, + email_passwordless, + sms_passwordless, + jwt; +} + +extension LoginTypeExtension on LoginType { + String toJson() { + return toString().split('.').last; + } + + static LoginType fromJson(String value) { + return LoginType.values.firstWhere( + (type) => type.toJson() == value, + orElse: () => throw ArgumentError('Invalid LoginType: $value'), + ); + } +} + +class Session_Data { + final List sessionTokenData; + final String sessionAuthKey; + + Session_Data({ + required this.sessionTokenData, + required this.sessionAuthKey, + }); + + factory Session_Data.fromJson(Map json) { + return Session_Data( + sessionTokenData: (json['sessionTokenData'] as List) + .map((item) => SessionToken.fromJson(item as Map)) + .toList(), + sessionAuthKey: json['sessionAuthKey'] as String, + ); + } - SFAKey({required this.privateKey, required this.publicAddress, this.error}); + Map toJson() { + return { + 'sessionTokenData': + sessionTokenData.map((token) => token.toJson()).toList(), + 'sessionAuthKey': sessionAuthKey, + }; + } + + @override + String toString() { + return 'Session_Data(sessionTokenData: $sessionTokenData, sessionAuthKey: $sessionAuthKey)'; + } +} - factory SFAKey.fromJson(Map json) { - return SFAKey( - error: json['error'] ?? null, - privateKey: json['privateKey'] ?? "", - publicAddress: json['publicAddress'] ?? "", +class SessionToken { + final String token; + final String signature; + final String nodePubx; + final String nodePuby; + + SessionToken({ + required this.token, + required this.signature, + required this.nodePubx, + required this.nodePuby, + }); + + factory SessionToken.fromJson(Map json) { + return SessionToken( + token: json['token'] as String, + signature: json['signature'] as String, + nodePubx: json['node_pubx'] as String, + nodePuby: json['node_puby'] as String, ); } + + Map toJson() { + return { + 'token': token, + 'signature': signature, + 'node_pubx': nodePubx, + 'node_puby': nodePuby, + }; + } + + @override + String toString() { + return 'SessionToken(token: $token, signature: $signature, nodePubx: $nodePubx, nodePuby: $nodePuby)'; + } +} + +class TorusGenericContainer { + final Map params; + + TorusGenericContainer({required this.params}); + + factory TorusGenericContainer.fromJson(Map json) { + return TorusGenericContainer( + params: Map.from(json['params']), + ); + } + + Map toJson() { + return { + 'params': params, + }; + } + + @override + String toString() { + return 'TorusGenericContainer(params: $params)'; + } } diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index 40e7fc7..ea5f6b9 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -30,33 +30,32 @@ class SingleFactorAuthFlutter { } } - Future connect(LoginParams loginParams) async { + Future connect(LoginParams loginParams) async { try { Map loginParamsJson = loginParams.toJson(); loginParamsJson.removeWhere((key, value) => value == null); - final String torusKeyJson = await _channel.invokeMethod( + final String sessionData = await _channel.invokeMethod( 'connect', jsonEncode(loginParamsJson), ); - return sfaKeyFromJson(torusKeyJson); + return SessionData.fromJson(jsonDecode(sessionData)); } on PlatformException catch (e) { throw _hanldePlatformException(e); } } - Future getSessionData() async { + Future getSessionData() async { try { - final String torusKeyJson = await _channel.invokeMethod('getSessionData'); - return sfaKeyFromJson(torusKeyJson); + final String sessionData = await _channel.invokeMethod('getSessionData'); + return SessionData.fromJson(jsonDecode(sessionData)); } on PlatformException catch (e) { throw _hanldePlatformException(e); } } - Future logout() async { + Future logout() async { try { - final bool result = await _channel.invokeMethod('logout'); - return result; + await _channel.invokeMethod('logout'); } on PlatformException catch (e) { throw _hanldePlatformException(e); } From 87f1543f4b0f0d301d0c8bc258e68242ee35f7ab Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 6 Dec 2024 10:03:08 +0530 Subject: [PATCH 18/23] feat: code refactoring and update sfa android sdk deps Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.kt | 14 -------------- example/lib/main.dart | 10 +++------- lib/output.dart | 1 - lib/single_factor_auth_flutter.dart | 4 +++- test/single_factor_auth_flutter_test.dart | 1 - 5 files changed, 6 insertions(+), 24 deletions(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index f4d58a2..ae60af1 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -136,18 +136,4 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { } throw NotImplementedError() } - - private fun prepareResult(sfaKey: SessionData): String { - val hashMap: HashMap = HashMap(2) - hashMap["privateKey"] = sfaKey.privateKey ?: "" - hashMap["publicAddress"] = sfaKey.publicAddress ?: "" - return gson.toJson(hashMap) - } - - private fun prepareResultFromSFAkey(sfaKey: SessionData): String { - val hashMap: HashMap = HashMap(2) - hashMap["privateKey"] = sfaKey.privateKey - hashMap["publicAddress"] = sfaKey.publicAddress - return gson.toJson(hashMap) - } } diff --git a/example/lib/main.dart b/example/lib/main.dart index 17dbdb7..b55dae7 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -158,13 +158,9 @@ class _MyAppState extends State { final SessionData sessionData = await _singleFactorAuthFlutterPlugin.getSessionData(); - if (sessionData != null) { - setState(() { - _result = "Session Data: ${sessionData.toString()}"; - }); - } else { - log("Session data is null"); - } + setState(() { + _result = "Session Data: ${sessionData.toString()}"; + }); } on UnKnownException { log("Unknown exception occurred"); } catch (e, stackTrace) { diff --git a/lib/output.dart b/lib/output.dart index 82247a3..fc77e12 100644 --- a/lib/output.dart +++ b/lib/output.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; class SessionData { final String privateKey; diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index ea5f6b9..a8102ad 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -1,6 +1,5 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:ffi'; import 'package:flutter/services.dart'; import 'package:single_factor_auth_flutter/input.dart'; @@ -47,6 +46,9 @@ class SingleFactorAuthFlutter { Future getSessionData() async { try { final String sessionData = await _channel.invokeMethod('getSessionData'); + if (sessionData == null || sessionData.isEmpty || sessionData == "null") { + throw Exception("Session data not found."); + } return SessionData.fromJson(jsonDecode(sessionData)); } on PlatformException catch (e) { throw _hanldePlatformException(e); diff --git a/test/single_factor_auth_flutter_test.dart b/test/single_factor_auth_flutter_test.dart index 4287d12..dfaf851 100644 --- a/test/single_factor_auth_flutter_test.dart +++ b/test/single_factor_auth_flutter_test.dart @@ -1,5 +1,4 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:single_factor_auth_flutter/single_factor_auth_flutter.dart'; import 'package:single_factor_auth_flutter/single_factor_auth_flutter_platform_interface.dart'; import 'package:single_factor_auth_flutter/single_factor_auth_flutter_method_channel.dart'; import 'package:plugin_platform_interface/plugin_platform_interface.dart'; From 05f1117a5b0bdb0d6d335bcfc44d90a44ac39dfd Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 6 Dec 2024 11:30:53 +0530 Subject: [PATCH 19/23] feat: add connected() method Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.kt | 8 ++++++++ example/lib/main.dart | 6 +++--- ios/Classes/SingleFactorAuthFlutterPlugin.swift | 13 +++++++++++++ lib/single_factor_auth_flutter.dart | 12 ++++++++++-- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index ae60af1..f62778e 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -133,6 +133,14 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { return gson.toJson(mapOf("error" to "Failed to retrieve session data")) } } + + "connected" -> { + try { + return singleFactorAuth.isConnected() + } catch (e: Throwable) { + throw Error(e) + } + } } throw NotImplementedError() } diff --git a/example/lib/main.dart b/example/lib/main.dart index b55dae7..468fde1 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -51,9 +51,9 @@ class _MyAppState extends State { Future getSessionData() async { log("getSessionData() called"); - final SessionData sessionData = + final SessionData? sessionData = await _singleFactorAuthFlutterPlugin.getSessionData(); - if (sessionData.publicAddress != null) { + if (sessionData?.publicAddress != null) { setState(() { _result = "Session Data: ${sessionData.toString()}"; }); @@ -155,7 +155,7 @@ class _MyAppState extends State { Future _initialize() async { try { - final SessionData sessionData = + final SessionData? sessionData = await _singleFactorAuthFlutterPlugin.getSessionData(); setState(() { diff --git a/ios/Classes/SingleFactorAuthFlutterPlugin.swift b/ios/Classes/SingleFactorAuthFlutterPlugin.swift index 0a7813e..1931e03 100644 --- a/ios/Classes/SingleFactorAuthFlutterPlugin.swift +++ b/ios/Classes/SingleFactorAuthFlutterPlugin.swift @@ -134,6 +134,19 @@ public class SingleFactorAuthFlutterPlugin: NSObject, FlutterPlugin { } break + case "connected": + do { + let connected = try await singleFactorAuth?.connected() ?? false + result(connected) + } catch { + result(FlutterError( + code: (error as NSError).domain, + message: error.localizedDescription, + details: String(describing: error) + )) + } + break + default: break } diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index a8102ad..7b3c76a 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -43,11 +43,11 @@ class SingleFactorAuthFlutter { } } - Future getSessionData() async { + Future getSessionData() async { try { final String sessionData = await _channel.invokeMethod('getSessionData'); if (sessionData == null || sessionData.isEmpty || sessionData == "null") { - throw Exception("Session data not found."); + return null; } return SessionData.fromJson(jsonDecode(sessionData)); } on PlatformException catch (e) { @@ -63,6 +63,14 @@ class SingleFactorAuthFlutter { } } + Future connected() async { + try { + return await _channel.invokeMethod('connected'); + } on PlatformException catch (e) { + throw _hanldePlatformException(e); + } + } + Exception _hanldePlatformException(PlatformException e) { switch (e.code) { case "UserCancelledException": From e7a2e7cecc276da746a119e16bd0e1db9782f837 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 6 Dec 2024 11:55:49 +0530 Subject: [PATCH 20/23] feat: code refactored for getSessionData() in android Signed-off-by: Gaurav Goel --- .../SingleFactorAuthFlutterPlugin.kt | 6 +++++- lib/single_factor_auth_flutter.dart | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index f62778e..8a78d5a 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -123,7 +123,11 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { singleFactorAuth.initialize(context).get() var sessionData = singleFactorAuth.getSessionData() val loginResult: SessionData? = sessionData - return gson.toJson(loginResult) + return if (loginResult == null) { + null + } else { + gson.toJson(loginResult) + } } catch (e: Throwable) { Log.e( "${SingleFactorAuthFlutterPlugin::class.qualifiedName}", diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index 7b3c76a..a55ba04 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -45,8 +45,8 @@ class SingleFactorAuthFlutter { Future getSessionData() async { try { - final String sessionData = await _channel.invokeMethod('getSessionData'); - if (sessionData == null || sessionData.isEmpty || sessionData == "null") { + final String? sessionData = await _channel.invokeMethod('getSessionData'); + if (sessionData == null || sessionData.isEmpty) { return null; } return SessionData.fromJson(jsonDecode(sessionData)); From b4f5ca69d39a3b105f89f95d462fa475ffab5d85 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 6 Dec 2024 15:27:24 +0530 Subject: [PATCH 21/23] feat: logout code refactored for null. Signed-off-by: Gaurav Goel --- .../single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt index 8a78d5a..d9f68c7 100644 --- a/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt +++ b/android/src/main/kotlin/com/web3auth/single_factor_auth_flutter/SingleFactorAuthFlutterPlugin.kt @@ -108,7 +108,7 @@ class SingleFactorAuthFlutterPlugin : FlutterPlugin, MethodCallHandler { try { val logoutCF = singleFactorAuth.logout(context) Log.d("${SingleFactorAuthFlutterPlugin::class.qualifiedName}", "#logout") - return logoutCF + return null } catch (e: Throwable) { throw Error(e) } From 3492a77390f60ad03bda449c6fad31a5d0c19016 Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Fri, 20 Dec 2024 09:33:32 +0530 Subject: [PATCH 22/23] feat: update SFAParams class name to Web3AuthOptions Signed-off-by: Gaurav Goel --- example/lib/main.dart | 3 ++- lib/enums.dart | 9 +++++++++ lib/input.dart | 16 ++++------------ lib/single_factor_auth_flutter.dart | 4 ++-- 4 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 lib/enums.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index 468fde1..6bae85f 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -3,6 +3,7 @@ import 'dart:developer'; import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:single_factor_auth_flutter/enums.dart'; import 'package:single_factor_auth_flutter/input.dart'; import 'package:single_factor_auth_flutter/output.dart'; import 'package:single_factor_auth_flutter/single_factor_auth_flutter.dart'; @@ -43,7 +44,7 @@ class _MyAppState extends State { } Future init() async { - await _singleFactorAuthFlutterPlugin.init(SFAParams( + await _singleFactorAuthFlutterPlugin.init(Web3AuthOptions( network: web3AuthNetwork, clientId: 'YOUR_CLIENT_ID', sessionTime: 86400)); diff --git a/lib/enums.dart b/lib/enums.dart new file mode 100644 index 0000000..7c3b3c8 --- /dev/null +++ b/lib/enums.dart @@ -0,0 +1,9 @@ +enum Web3AuthNetwork { + mainnet, + testnet, + cyan, + aqua, + celeste, + sapphire_devnet, + sapphire_mainnet +} diff --git a/lib/input.dart b/lib/input.dart index 07ce9a4..8072d63 100644 --- a/lib/input.dart +++ b/lib/input.dart @@ -1,3 +1,5 @@ +import 'enums.dart'; + class LoginParams { final String verifier; final String verifierId; @@ -40,12 +42,12 @@ class TorusSubVerifierInfo { } } -class SFAParams { +class Web3AuthOptions { final Web3AuthNetwork network; final String clientId; final int sessionTime; - SFAParams( + Web3AuthOptions( {required this.network, required this.clientId, this.sessionTime = 86400}); @@ -59,16 +61,6 @@ class SFAParams { } } -enum Web3AuthNetwork { - mainnet, - testnet, - cyan, - aqua, - celeste, - sapphire_devnet, - sapphire_mainnet -} - class UserCancelledException implements Exception {} class PrivateKeyNotGeneratedException implements Exception {} diff --git a/lib/single_factor_auth_flutter.dart b/lib/single_factor_auth_flutter.dart index a55ba04..9e63ef2 100644 --- a/lib/single_factor_auth_flutter.dart +++ b/lib/single_factor_auth_flutter.dart @@ -15,8 +15,8 @@ class SingleFactorAuthFlutter { return SingleFactAuthFlutterPlatform.instance.getPlatformVersion(); } - Future init(SFAParams initParams) async { - Map initParamsJson = initParams.toJson(); + Future init(Web3AuthOptions web3AuthOptions) async { + Map initParamsJson = web3AuthOptions.toJson(); initParamsJson.removeWhere((key, value) => value == null); await _channel.invokeMethod('init', jsonEncode(initParamsJson)); } From abaad9c6769ce7b40e83a53d51d87ce0e154abea Mon Sep 17 00:00:00 2001 From: Gaurav Goel Date: Thu, 9 Jan 2025 13:38:51 +0530 Subject: [PATCH 23/23] feat: bump deps for min sessionTime updates. Signed-off-by: Gaurav Goel --- android/build.gradle | 2 +- example/ios/Podfile.lock | 14 ++++----- ios/single_factor_auth_flutter.podspec | 41 ++++++++++++++++++-------- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 7a79ab4..dd442e4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,7 +49,7 @@ android { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4' - implementation 'com.github.Web3Auth:single-factor-auth-android:3.0.0' + implementation 'com.github.Web3Auth:single-factor-auth-android:3.0.1' implementation 'org.torusresearch:fetch-node-details-java:5.0.0' implementation 'com.google.code.gson:gson:2.10.1' } diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index fd63701..e99dbaf 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -6,17 +6,17 @@ PODS: - KeychainSwift (20.0.0) - single_factor_auth_flutter (0.0.1): - Flutter - - SingleFactorAuth (= 9.0.3) - - SingleFactorAuth (9.0.3): + - SingleFactorAuth (= 9.0.4) + - SingleFactorAuth (9.0.4): - JWTDecode (~> 3.2) - Torus-utils (~> 10.0.0) - - TorusSessionManager (~> 6.0.1) + - TorusSessionManager (~> 6.0.2) - Torus-fetchNodeDetails (8.0.0): - BigInt (~> 5.2.0) - Torus-utils (10.0.0): - curvelib.swift (~> 2.0.0) - Torus-fetchNodeDetails (~> 8.0.0) - - TorusSessionManager (6.0.1): + - TorusSessionManager (6.0.2): - curvelib.swift (~> 2.0.0) - KeychainSwift (~> 20.0.0) @@ -47,11 +47,11 @@ SPEC CHECKSUMS: Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 JWTDecode: 7dae24cb9bf9b608eae61e5081029ec169bb5527 KeychainSwift: 0ce6a4d13f7228054d1a71bb1b500448fb2ab837 - single_factor_auth_flutter: 0d99b60b1e56e4c8a36754519a15a142e97db518 - SingleFactorAuth: 5f7af5e3370769455f7543453cbf398da1ffb754 + single_factor_auth_flutter: aab0e8cb32b6e76fe5cb8a2036489367bc549338 + SingleFactorAuth: 6a2639e2d25d4cec901753193b97f8503734734d Torus-fetchNodeDetails: 2a5fbb222ec28af4128d64e4c2d520c7db456b78 Torus-utils: 4a1db3d9c1aa221df312ffa7ec154e7e4719850a - TorusSessionManager: 9c9871718233dc020ab4fde9bdf37802f01dae10 + TorusSessionManager: 3c47c2a4c4d6173a10006eb0af4b86317ee45ff8 PODFILE CHECKSUM: d5c402b2f74646de5c7f24c1231886362b49b38f diff --git a/ios/single_factor_auth_flutter.podspec b/ios/single_factor_auth_flutter.podspec index fe46126..5da3df6 100644 --- a/ios/single_factor_auth_flutter.podspec +++ b/ios/single_factor_auth_flutter.podspec @@ -5,20 +5,37 @@ Pod::Spec.new do |s| s.name = 'single_factor_auth_flutter' s.version = '0.0.1' -s.summary = 'A new Flutter plugin project.' -s.description = <<-DESC - A new Flutter plugin project. +s. +summary = 'A new Flutter plugin project.' +s. +description = +<<- DESC - s.homepage = 'http://example.com' -s.license = { :file => '../LICENSE' } -s.author = { 'Your Company' => 'email@example.com' } -s.source = { :path => '.' } -s.source_files = 'Classes/**/*' + A +new +Flutter plugin +project. +DESC + s +. +homepage = 'http://example.com' +s. +license = {:file => '../LICENSE'} +s. +author = {'Your Company' => 'email@example.com'} +s. +source = {:path => '.'} +s. +source_files = 'Classes/**/*' s.dependency 'Flutter' -s.dependency 'SingleFactorAuth', '9.0.3' -s.platform = :ios, '14.0' +s.dependency 'SingleFactorAuth', '9.0.4' +s. +platform = +:ios, '14.0' # Flutter.framework does not contain a i386 slice. -s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' } -s.swift_version = '5.0' +s. +pod_target_xcconfig = {'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386'} +s. +swift_version = '5.0' end \ No newline at end of file