package Ġorg . wallet connect Ċ Ċ import Ġjava . net . URL Decoder Ċ import Ġjava . net . URL Encoder Ċ Ċ interface ĠSession Ġ{ ĊĠĠĠ Ġfun Ġinit () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSend Ġclient Ġinfo Ġto Ġthe Ġbridge Ġand Ġwait Ġfor Ġa Ġclient Ġto Ġconnect ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġoffer () ĊĠĠĠ Ġfun Ġapprove ( accounts : ĠList < String >, Ġchain Id : ĠLong ) ĊĠĠĠ Ġfun Ġreject () ĊĠĠĠ Ġfun Ġupdate ( accounts : ĠList < String >, Ġchain Id : ĠLong ) ĊĠĠĠ Ġfun Ġkill () ĊĊĠĠĠ Ġfun Ġpeer Meta (): ĠPeer Meta ? ĊĠĠĠ Ġfun Ġapproved Accounts (): ĠList < String >? ĊĊĠĠĠ Ġfun Ġapprove Request ( id : ĠLong , Ġresponse : ĠAny ) ĊĠĠĠ Ġfun Ġreject Request ( id : ĠLong , ĠerrorCode : ĠLong , Ġerror Msg : ĠString ) ĊĠĠĠ Ġfun Ġperform MethodCall ( call : ĠMethod Call , Ġcallback : Ġ(( MethodCall . Response ) Ġ-> ĠUnit )? Ġ= Ġnull ) ĊĊĠĠĠ Ġfun Ġadd Callback ( cb : ĠCallback ) ĊĠĠĠ Ġfun Ġremove Callback ( cb : ĠCallback ) ĊĠĠĠ Ġfun Ġclear Callbacks () ĊĊĠĠĠ Ġdata Ġclass ĠFull y Qualified Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandshake Topic : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbridge : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprotocol : ĠString Ġ= Ġ" wc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠConfig ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandshake Topic : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbridge : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprotocol : ĠString Ġ= Ġ" wc ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġto WC Uri () Ġ= Ġ" wc :$ handshake Topic @ $ version ? bridge =${ URL Encoder . encode ( bridge , Ġ" UTF - 8 ") }& key =$ key " ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Fully Qualified Config () Ġ= Ġbridge Ġ!= Ġnull Ġ&& Ġkey Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġfun Ġto Fully Qualified Config () Ġ= ĠFull y Qualified Config ( handshake Topic , Ġbridge !! , Ġkey !! , Ġprotocol , Ġversion ) ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom WC Uri ( uri : ĠString ): ĠConfig Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprotocol Separator Ġ= Ġuri . indexOf (': ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandshake Topic Separator Ġ= Ġuri . indexOf ('@ ', ĠstartIndex Ġ= Ġprotocol Separator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Separator Ġ= Ġuri . indexOf (' ?') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprotocol Ġ= Ġuri . substring ( 0 , Ġprotocol Separator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandshake Topic Ġ= Ġuri . substring ( protocol Separator Ġ+ Ġ 1 , Ġhandshake Topic Separator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( version Separator Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠInteger . valueOf ( uri . substring ( handshake Topic Separator Ġ+ Ġ 1 , Ġversion Separator )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġuri . substring ( version Separator Ġ+ Ġ 1 ). split ("& "). associate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . split (" =" ). let Ġ{ Ġparam Ġ-> Ġparam . first () Ġto ĠURL Decoder . decode ( param [ 1 ], Ġ" UTF - 8 ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbridge Ġ= Ġparams [" bridge "] Ġ?: Ġthrow ĠIllegalArgumentException (" Missing Ġbridge Ġparam Ġin ĠURI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġparams [" key "] Ġ?: Ġthrow ĠIllegalArgumentException (" Missing Ġkey Ġparam Ġin ĠURI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfig ( handshake Topic , Ġbridge , Ġkey , Ġprotocol , Ġversion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Ġ= ĠInteger . valueOf ( uri . substring ( handshake Topic Separator Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfig ( handshake Topic , Ġprotocol , Ġversion Ġ= Ġversion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Status ( status : ĠStatus ) ĊĠĠĠĠĠĠĠ Ġfun Ġon MethodCall ( call : ĠMethod Call ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠStatus Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠConnected Ġ: ĠStatus () ĊĠĠĠĠĠĠĠ Ġobject ĠDis connected Ġ: ĠStatus () ĊĠĠĠĠĠĠĠ Ġobject ĠApproved Ġ: ĠStatus () ĊĠĠĠĠĠĠĠ Ġobject ĠClosed Ġ: ĠStatus () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val Ġthrowable : ĠThrowable ) Ġ: ĠStatus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTransport Error ( override Ġval Ġcause : ĠThrowable ) Ġ: ĠRuntimeException (" Transport Ġexception Ġcaused Ġby Ġ$ cause ", Ġcause ) ĊĊĠĠĠ Ġinterface ĠPayload Adapter Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( payload : ĠString , Ġkey : ĠString ): ĠMethod Call ĊĠĠĠĠĠĠĠ Ġfun Ġprepare ( data : ĠMethod Call , Ġkey : ĠString ): ĠString ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠTransport Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġconnect (): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Connected (): ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġfun Ġsend ( message : ĠMessage ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġclose () ĊĊĠĠĠĠĠĠĠ Ġsealed Ġclass ĠStatus Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠConnected Ġ: ĠStatus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject ĠDis connected Ġ: ĠStatus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġclass ĠError ( val Ġthrowable : ĠThrowable ) Ġ: ĠStatus () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtopic : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload : ĠString ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġinterface ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġbuild ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Handler : Ġ( Status ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Handler : Ġ( Message ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠTransport ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠMethod Call Exception ( val Ġid : ĠLong , Ġval Ġcode : ĠLong , Ġmessage : ĠString ) Ġ: ĠIllegalArgumentException ( message ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO Ġdefine Ġproper Ġerror Ġcodes ĊĠĠĠĠĠĠĠ Ġclass ĠInvalid Request ( id : ĠLong , Ġrequest : ĠString ) Ġ: ĠMethod Call Exception ( id , Ġ 2 3 , Ġ" Invalid Ġrequest : Ġ$ request ") ĊĠĠĠĠĠĠĠ Ġclass ĠInvalid Account ( id : ĠLong , Ġaccount : ĠString ) Ġ: ĠMethod Call Exception ( id , Ġ 3 1 4 1 , Ġ" Invalid Ġaccount Ġrequest : Ġ$ account ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠMethod Call ( private Ġval Ġinternal Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġid () Ġ= Ġinternal Id ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSession Request ( val Ġid : ĠLong , Ġval Ġpeer : ĠPeer Data ) Ġ: ĠMethod Call ( id ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSession Update ( val Ġid : ĠLong , Ġval Ġparams : ĠSession Params ) Ġ: ĠMethod Call ( id ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSend Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnonce : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgas Price : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgas Limit : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata : ĠString ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠMethod Call ( id ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠSign Message ( val Ġid : ĠLong , Ġval Ġaddress : ĠString , Ġval Ġmessage : ĠString ) Ġ: ĠMethod Call ( id ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠCustom ( val Ġid : ĠLong , Ġval Ġmethod : ĠString , Ġval Ġparams : ĠList < *> ?) Ġ: ĠMethod Call ( id ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠResponse ( val Ġid : ĠLong , Ġval Ġresult : ĠAny ?, Ġval Ġerror : ĠError ? Ġ= Ġnull ) Ġ: ĠMethod Call ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPeer Data ( val Ġid : ĠString , Ġval Ġmeta : ĠPeer Meta ?) ĊĠĠĠ Ġdata Ġclass ĠPeer Meta ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicons : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠSession Params ( val Ġapproved : ĠBoolean , Ġval Ġchain Id : ĠLong ?, Ġval Ġaccounts : ĠList < String > ?, Ġval Ġpeer Data : ĠPeer Data ?) ĊĠĠĠ Ġdata Ġclass ĠError ( val Ġcode : ĠLong , Ġval Ġmessage : ĠString ) Ċ } Ċ