package Ġcom . wallet connect . wallet connect v 2 Ċ Ċ import Ġcom . wallet connect . wallet connect v 2 . common .* Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġcom . wallet connect . wallet connect v 2 . client . Client Types Ċ import Ġcom . wallet connect . wallet connect v 2 . client . Wallet Connect Client Data Ċ import Ġcom . wallet connect . wallet connect v 2 . client . Wallet Connect Client Listener Ċ import Ġcom . wallet connect . wallet connect v 2 . client . Wallet Connect Client Listeners Ċ import Ġcom . wallet connect . wallet connect v 2 . engine . Engine Interactor Ċ import Ġcom . wallet connect . wallet connect v 2 . engine . model . Engine Data Ċ import Ġcom . wallet connect . wallet connect v 2 . engine . sequence . Sequence Lifecycle Ċ Ċ object ĠWallet Connect Client Ġ{ ĊĠĠĠ Ġprivate Ġval Ġengine Interactor Ġ= ĠEngine Interactor () ĊĊĠĠĠ Ġfun Ġinitialize ( initial Params : ĠClient Types . Initial Params ) Ġ= Ġwith ( initial Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġpass Ġproperties Ġto ĠDI Ġframework ĊĠĠĠĠĠĠĠ Ġapp Ġ= Ġapplication ĊĠĠĠĠĠĠĠ Ġval Ġengine Factory Ġ= Ġcom . wallet connect . wallet connect v 2 . engine . Engine Interactor . Engine Factory ( use Tls , Ġhost Name , ĠprojectId , Ġis Controller , Ġapplication , Ġmetadata ) ĊĠĠĠĠĠĠĠ Ġengine Interactor . initialize ( engine Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Wallet Connect Listener ( wallet Connect Listener : ĠWallet Connect Client Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġengine Interactor . sequence Event . collect Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSequence Lifecycle . On Session Proposal Ġ-> Ġwallet Connect Listener . on Session Proposal ( event . proposal . to Client Session Proposal ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSequence Lifecycle . On Session Request Ġ-> Ġwallet Connect Listener . on Session Request ( event . request . to Client Session Request ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSequence Lifecycle . On Session Deleted Ġ-> Ġwallet Connect Listener . on Session Delete ( event . deleted Session . to Client Deleted Session ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSequence Lifecycle . On Session Notification Ġ-> Ġwallet Connect Listener . on Session Notification ( event . notification . to Client Session Notification ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSequence Lifecycle . Default Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpair ( ĊĠĠĠĠĠĠĠ Ġpair ing Params : ĠClient Types . Pair Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Pair ing ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . pair ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpair ing Params . uri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtopic Ġ-> Ġlistener . on Success ( Wallet Connect Client Data . Set tled Pair ing ( topic )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapprove ( ĊĠĠĠĠĠĠĠ Ġapprove Params : ĠClient Types . Approve Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Approve ĊĠĠĠ Ġ) Ġ= Ġwith ( approve Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . approve ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproposal . to Engine Session Proposal ( accounts ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġset tled Session Ġ-> Ġlistener . on Success ( set tled Session . to Client Set tled Session ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreject ( ĊĠĠĠĠĠĠĠ Ġreject Params : ĠClient Types . Reject Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Reject ĊĠĠĠ Ġ) Ġ= Ġwith ( reject Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . reject ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrejection Reason , Ġproposal Topic , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ( topic , Ġreason ) Ġ-> Ġlistener . on Success ( Wallet Connect Client Data . Rejected Session ( topic , Ġreason )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrespond ( ĊĠĠĠĠĠĠĠ Ġresponse Params : ĠClient Types . Response Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Payload ĊĠĠĠ Ġ) Ġ= Ġwith ( response Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Rpc Engine Response Ġ= Ġwhen Ġ( json Rpc Response ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWallet Connect Client Data . Json Rpc Response . Json Rpc Result Ġ-> Ġjson Rpc Response . to Engine Rpc Result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWallet Connect Client Data . Json Rpc Response . Json Rpc Error Ġ-> Ġjson Rpc Response . to Engine Rpc Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġengine Interactor . respond Session Payload ( session Topic , Ġjson Rpc Engine Response ) Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupgrade ( ĊĠĠĠĠĠĠĠ Ġupgrade Params : ĠClient Types . Upgrade Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Upgrade ĊĠĠĠ Ġ) Ġ= Ġwith ( upgrade Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . upgrade ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtopic , Ġpermissions . to Engine Session Permissions (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ( topic , Ġpermissions ) Ġ-> Ġlistener . on Success ( Wallet Connect Client Data . Up graded Session ( topic , Ġpermissions . to Client Per ms ())) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( ĊĠĠĠĠĠĠĠ Ġupdate Params : ĠClient Types . Update Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Update ĊĠĠĠ Ġ) Ġ= Ġwith ( update Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Topic , Ġsession State . to Engine Session State (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ( topic , Ġaccounts ) Ġ-> Ġlistener . on Success ( Wallet Connect Client Data . Updated Session ( topic , Ġaccounts )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġping ( ĊĠĠĠĠĠĠĠ Ġping Params : ĠClient Types . Ping Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Ping ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . ping ( ping Params . topic , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtopic Ġ-> Ġlistener . on Success ( topic ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnotify ( ĊĠĠĠĠĠĠĠ Ġnotification Params : ĠClient Types . Notification Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Notification ĊĠĠĠ Ġ) Ġ= Ġwith ( notification Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . notify ( topic , Ġnotification . to Engine Notification (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtopic Ġ-> Ġlistener . on Success ( topic ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect ( ĊĠĠĠĠĠĠĠ Ġdisconnect Params : ĠClient Types . Disconnect Params , ĊĠĠĠĠĠĠĠ Ġlistener : ĠWallet Connect Client Listeners . Session Delete ĊĠĠĠ Ġ) Ġ= Ġwith ( disconnect Params ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Interactor . disconnect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Topic , Ġreason , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ( topic , Ġreason ) Ġ-> Ġlistener . on Success ( Wallet Connect Client Data . Deleted Session ( topic , Ġreason )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> Ġlistener . onError ( error ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ListOf Set tled Sessions (): ĠList < Wallet Connect Client Data . Set tled Session > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġengine Interactor . get ListOf Set tled Sessions (). map ( Engine Data . Set tled Session :: to Client Set tled Session ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget ListOf Pending Session (): ĠList < Wallet Connect Client Data . Session Proposal > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġengine Interactor . get ListOf Pending Sessions (). map ( Engine Data . Session Proposal :: to Client Session Proposal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshutdown () Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . cancel () ĊĠĠĠ Ġ} Ċ }