@@ -30,6 +30,7 @@ import com.web3auth.core.types.WEBVIEW_URL
3030import com.web3auth.core.types.Web3AuthError
3131import com.web3auth.core.types.Web3AuthOptions
3232import com.web3auth.core.types.Web3AuthResponse
33+ import com.web3auth.core.types.Web3AuthSubVerifierInfo
3334import com.web3auth.core.types.WebViewResultCallback
3435import com.web3auth.session_manager_android.SessionManager
3536import kotlinx.coroutines.CoroutineScope
@@ -41,9 +42,11 @@ import org.torusresearch.fetchnodedetails.FetchNodeDetails
4142import org.torusresearch.fetchnodedetails.types.NodeDetails
4243import org.torusresearch.torusutils.TorusUtils
4344import org.torusresearch.torusutils.types.VerifierParams
45+ import org.torusresearch.torusutils.types.VerifyParams
4446import org.torusresearch.torusutils.types.common.SessionToken
4547import org.torusresearch.torusutils.types.common.TorusKey
4648import org.torusresearch.torusutils.types.common.TorusOptions
49+ import org.web3j.crypto.Hash
4750import java.util.Locale
4851import java.util.concurrent.CompletableFuture
4952
@@ -358,8 +361,25 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
358361 isSFA = false
359362 } else {
360363 isSFA = true
364+ loginParams.groupedAuthConnectionId?.let {
365+ if (it.isNullOrEmpty()) {
366+ connect(loginParams, ctx)
367+ } else {
368+ val _loginParams = LoginParams (
369+ AuthConnection .GOOGLE ,
370+ authConnectionId = loginParams.groupedAuthConnectionId,
371+ idToken = loginParams.idToken
372+ )
373+ val subVerifierInfoArray = arrayOf(
374+ Web3AuthSubVerifierInfo (
375+ loginParams.authConnectionId.toString(),
376+ idToken = loginParams.idToken.toString()
377+ )
378+ )
379+ connect(_loginParams , ctx, subVerifierInfoArray = subVerifierInfoArray)
380+ }
381+ }
361382 connect(loginParams, ctx) // SFA login
362- loginParams
363383 }
364384
365385 loginCompletableFuture = CompletableFuture ()
@@ -369,9 +389,16 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
369389
370390 private fun connect (
371391 loginParams : LoginParams ,
372- ctx : Context
392+ ctx : Context ,
393+ subVerifierInfoArray : Array <Web3AuthSubVerifierInfo >? = null,
373394 ) {
374- val torusKey = getTorusKey(loginParams)
395+ val torusKey = subVerifierInfoArray.let {
396+ if (it.isNullOrEmpty()) {
397+ getTorusKey(loginParams)
398+ } else {
399+ getTorusKey(loginParams, it)
400+ }
401+ }
375402
376403 val publicAddress = torusKey.finalKeyData?.walletAddress
377404 val privateKey = if (torusKey.finalKeyData?.privKey?.isEmpty() == true ) {
@@ -421,7 +448,8 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
421448 }
422449
423450 private fun getTorusKey (
424- loginParams : LoginParams
451+ loginParams : LoginParams ,
452+ subVerifierInfoArray : Array <Web3AuthSubVerifierInfo >? = null
425453 ): TorusKey {
426454 lateinit var retrieveSharesResponse: TorusKey
427455
@@ -430,32 +458,38 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
430458 nodeDetailManager.getNodeDetails(loginParams.authConnectionId, userId)
431459 .get()
432460
433- /* loginParams. subVerifierInfoArray?.let {
461+ subVerifierInfoArray?.let {
434462 val aggregateIdTokenSeeds: ArrayList <String > = ArrayList ()
435463 val subVerifierIds: ArrayList <String > = ArrayList ()
436464 val verifyParams: ArrayList <VerifyParams > = ArrayList ()
437465
438- for(value: TorusSubVerifierInfo in it) {
466+ for (value: Web3AuthSubVerifierInfo in it) {
439467 aggregateIdTokenSeeds.add(value.idToken)
440468 val verifyParam = VerifyParams (userId, value.idToken)
441469 verifyParams.add(verifyParam)
442470 subVerifierIds.add(value.verifier)
443471 }
444472
445473 aggregateIdTokenSeeds.sort()
446- val verifierParams = VerifierParams(userId.toString(), null,
474+ val verifierParams = VerifierParams (
475+ userId.toString(), null ,
447476 subVerifierIds.toTypedArray(), verifyParams.toTypedArray()
448477 )
449478
450- val aggregateIdToken = Hash.sha3String(java.lang.String.join(29.toChar().toString(), aggregateIdTokenSeeds)).replace("0x", "")
479+ val aggregateIdToken = Hash .sha3String(
480+ java.lang.String .join(
481+ 29 .toChar().toString(),
482+ aggregateIdTokenSeeds
483+ )
484+ ).replace(" 0x" , " " )
451485 retrieveSharesResponse = torusUtils.retrieveShares(
452486 nodeDetails.torusNodeEndpoints,
453487 loginParams.authConnectionId.toString(),
454488 verifierParams,
455489 aggregateIdToken,
456490 null
457491 )
458- } ?: run{
492+ } ? : run {
459493 val verifierParams = VerifierParams (userId.toString(), null , null , null )
460494 retrieveSharesResponse = torusUtils.retrieveShares(
461495 nodeDetails.torusNodeEndpoints,
@@ -464,16 +498,7 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions, context: Context) : WebViewResu
464498 loginParams.idToken.toString(),
465499 null
466500 )
467- }*/
468-
469- val verifierParams = VerifierParams (userId.toString(), null , null , null )
470- retrieveSharesResponse = torusUtils.retrieveShares(
471- nodeDetails.torusNodeEndpoints,
472- loginParams.authConnectionId.toString(),
473- verifierParams,
474- loginParams.idToken.toString(),
475- null
476- )
501+ }
477502
478503 val isUpgraded = retrieveSharesResponse.metadata?.isUpgraded
479504
0 commit comments