@@ -573,7 +573,6 @@ public async Task<TransactionResult> RemoveAdmin(string admin)
573573 /// <param name="reqValidityStartTimestamp">UNIX timestamp of when the signer's permissions request validity starts.</param>
574574 /// <param name="reqValidityEndTimestamp">UNIX timestamp of when the signer's permissions request validity ends.</param>
575575 /// <returns>The result of the transaction as a TransactionResult object.</returns>
576- /// <exception cref="UnityException"></exception>
577576 public async Task < TransactionResult > CreateSessionKey (
578577 string signerAddress ,
579578 List < string > approvedTargets ,
@@ -603,8 +602,6 @@ string reqValidityEndTimestamp
603602 }
604603 else
605604 {
606- if ( ThirdwebManager . Instance . SDK . session . ActiveWallet . GetProvider ( ) != WalletProvider . SmartWallet )
607- throw new UnityException ( "This functionality is only available for SmartWallets." ) ;
608605 var smartWallet = ThirdwebManager . Instance . SDK . session . ActiveWallet as Wallets . ThirdwebSmartWallet ;
609606 var request = new Contracts . Account . ContractDefinition . SignerPermissionRequest ( )
610607 {
@@ -623,6 +620,99 @@ string reqValidityEndTimestamp
623620 }
624621 }
625622
623+ /// <summary>
624+ /// Smart Wallet only: Revoke a signer for the connected smart account.
625+ /// </summary>
626+ /// <param name="signerAddress">Address of the signer to revoke.</param>
627+ /// <returns>The result of the transaction as a TransactionResult object.</returns>
628+ public async Task < TransactionResult > RevokeSessionKey ( string signerAddress )
629+ {
630+ if ( Utils . IsWebGLBuild ( ) )
631+ {
632+ return await Bridge . SmartWalletRevokeSessionKey < TransactionResult > ( signerAddress ) ;
633+ }
634+ else
635+ {
636+ var smartWallet = ThirdwebManager . Instance . SDK . session . ActiveWallet as Wallets . ThirdwebSmartWallet ;
637+ var request = new Contracts . Account . ContractDefinition . SignerPermissionRequest ( )
638+ {
639+ Signer = signerAddress ,
640+ IsAdmin = 0 ,
641+ ApprovedTargets = new List < string > ( ) ,
642+ NativeTokenLimitPerTransaction = 0 ,
643+ PermissionStartTimestamp = 0 ,
644+ PermissionEndTimestamp = 0 ,
645+ ReqValidityStartTimestamp = 0 ,
646+ ReqValidityEndTimestamp = Utils . GetUnixTimeStampIn10Years ( ) ,
647+ Uid = Guid . NewGuid ( ) . ToByteArray ( )
648+ } ;
649+ string signature = await EIP712 . GenerateSignature_SmartAccount ( "Account" , "1" , await GetChainId ( ) , await GetAddress ( ) , request ) ;
650+ return await smartWallet . SmartWallet . SetPermissionsForSigner ( request , signature . HexToByteArray ( ) ) ;
651+ }
652+ }
653+
654+ /// <summary>
655+ /// Smart Wallet only: Get all active signers for the connected smart account.
656+ /// </summary>
657+ /// <returns>A list of SignerWithPermissions objects.</returns>
658+ public async Task < List < SignerWithPermissions > > GetAllActiveSigners ( )
659+ {
660+ if ( Utils . IsWebGLBuild ( ) )
661+ {
662+ var activeSigners = await Bridge . SmartWalletGetAllActiveSigners < List < SignerWithPermissions > > ( ) ;
663+ for ( int i = 0 ; i < activeSigners . Count ; i ++ )
664+ {
665+ var signer = activeSigners [ i ] ;
666+ signer . permissions . startDate = signer . permissions . startDate == "0" ? "0" : Utils . JSDateToUnixTimestamp ( signer . permissions . startDate ) ;
667+ signer . permissions . expirationDate = signer . permissions . expirationDate == "0" ? "0" : Utils . JSDateToUnixTimestamp ( signer . permissions . expirationDate ) ;
668+ activeSigners [ i ] = signer ;
669+ }
670+ return activeSigners ;
671+ }
672+ else
673+ {
674+ string address = await GetAddress ( ) ;
675+ var raw = await TransactionManager . ThirdwebRead < Contracts . Account . ContractDefinition . GetAllActiveSignersFunction , Contracts . Account . ContractDefinition . GetAllActiveSignersOutputDTO > (
676+ address ,
677+ new Contracts . Account . ContractDefinition . GetAllActiveSignersFunction ( )
678+ ) ;
679+ var signers = new List < SignerWithPermissions > ( ) ;
680+ foreach ( var rawSigner in raw . Signers )
681+ {
682+ bool ? isAdmin ;
683+ try
684+ {
685+ isAdmin = (
686+ await TransactionManager . ThirdwebRead < Contracts . Account . ContractDefinition . IsAdminFunction , Contracts . Account . ContractDefinition . IsAdminOutputDTO > (
687+ address ,
688+ new Contracts . Account . ContractDefinition . IsAdminFunction ( ) { Account = rawSigner . Signer }
689+ )
690+ ) . ReturnValue1 ;
691+ }
692+ catch
693+ {
694+ isAdmin = null ;
695+ }
696+
697+ signers . Add (
698+ new SignerWithPermissions ( )
699+ {
700+ isAdmin = isAdmin ,
701+ signer = rawSigner . Signer ,
702+ permissions = new SignerPermissions ( )
703+ {
704+ approvedCallTargets = rawSigner . ApprovedTargets ,
705+ nativeTokenLimitPerTransaction = rawSigner . NativeTokenLimitPerTransaction . ToString ( ) ,
706+ startDate = rawSigner . StartTimestamp . ToString ( ) ,
707+ expirationDate = rawSigner . EndTimestamp . ToString ( ) ,
708+ }
709+ }
710+ ) ;
711+ }
712+ return signers ;
713+ }
714+ }
715+
626716 /// <summary>
627717 /// Sends a raw transaction from the connected wallet.
628718 /// </summary>
0 commit comments