66
77from ....core .error import BaseError
88from ....core .profile import Profile , ProfileSession
9+ from ....connections .models .conn_record import ConnRecord
910from ....storage .base import BaseStorage
1011from ....storage .error import StorageNotFoundError
1112from ....storage .record import StorageRecord
1213from ....wallet .base import BaseWallet
1314from ....wallet .did_info import DIDInfo
1415from ....wallet .did_method import DIDMethod
16+ from ....wallet .error import WalletNotFoundError
1517from ....wallet .key_type import KeyType
1618from ...routing .v1_0 .manager import RoutingManager
1719from ...routing .v1_0 .models .route_record import RouteRecord
@@ -600,21 +602,34 @@ async def store_update_results(
600602 for record_for_removal in to_remove :
601603 await record_for_removal .delete_record (session )
602604
605+ async def _conn_id_from_recipient_key (
606+ self , session : ProfileSession , wallet : BaseWallet , recipient_key : str
607+ ) -> str :
608+ try :
609+ conn = await ConnRecord .retrieve_by_invitation_key (
610+ session , invitation_key = normalize_from_did_key (recipient_key )
611+ )
612+ except StorageNotFoundError :
613+ did_info = await wallet .get_local_did_for_verkey (
614+ normalize_from_did_key (recipient_key )
615+ )
616+ conn = await ConnRecord .retrieve_by_did (session , my_did = did_info .did )
617+ return conn .connection_id
618+
603619 async def notify_keylist_updated (
604620 self , connection_id : str , response : KeylistUpdateResponse
605621 ):
606622 """Notify of keylist update response received."""
607- # Retrieve connection IDs associated with recipient keys
608- # recipient key -> connection id
609623 async with self ._profile .session () as session :
624+ wallet = session .inject (BaseWallet )
610625 try :
611- routes = [
612- await RouteRecord . retrieve_by_recipient_key (
613- session , updated .recipient_key
626+ routes = {
627+ updated . recipient_key : await self . _conn_id_from_recipient_key (
628+ session , wallet , updated .recipient_key
614629 )
615630 for updated in response .updated
616- ]
617- except StorageNotFoundError as err :
631+ }
632+ except ( StorageNotFoundError , WalletNotFoundError ) as err :
618633 raise MediationManagerError (
619634 "Unknown recipient key received in keylist update response"
620635 ) from err
@@ -625,9 +640,7 @@ async def notify_keylist_updated(
625640 "connection_id" : connection_id ,
626641 "thread_id" : response ._thread_id ,
627642 "updated" : [update .serialize () for update in response .updated ],
628- "mediated_connections" : {
629- route .recipient_key : route .connection_id for route in routes
630- },
643+ "mediated_connections" : routes ,
631644 },
632645 )
633646
0 commit comments