package Ġtick etch ain . mobile . user . api Ċ Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . call .* Ċ import Ġio . ktor . client . engine . android .* Ċ import Ġio . ktor . client . features .* Ċ import Ġio . ktor . client . features . json .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . http . c io .* Ċ import Ġio . ktor . network . sockets .* Ċ import Ġtick etch ain . mobile . user . config . Config Ċ import Ġtick etch ain . mobile . user . errors . Ticket Chain Api Authorization Exception Ċ import Ġtick etch ain . mobile . user . errors . Ticket Chain ApiException Ċ import Ġtick etch ain . mobile . user . state . AppState Ċ import Ġjava . text . DateFormat Ċ import Ġjava . util . concurrent . TimeoutException Ċ Ċ abstract Ġclass ĠApi Handler ( open Ġval Ġstore : ĠApp State ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAPI Config Ġ= ĠConfig . load () ĊĠĠĠĠĠĠĠ Ġval ĠPROTO COL Ġ= ĠAPI Config . protocol ĊĠĠĠĠĠĠĠ Ġval ĠHOST Ġ= ĠAPI Config . host ĊĠĠĠĠĠĠĠ Ġval ĠPORT Ġ= ĠAPI Config . port ĊĠĠĠĠĠĠĠ Ġval ĠSE C URE _ PORT Ġ= ĠAPI Config . secure _ port ĊĠĠĠĠĠĠĠ Ġval ĠTIME OUT Ġ= ĠAPI Config . timeout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġapi Ġ= ĠHttpClient ( Android ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall ( Json Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠJack son Serializer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable ( Serialization Feature . IND ENT _ OUTPUT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat Ġ= ĠDate Format . getDate Instance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccept Content Types Ġ= ĠlistOf ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinstall ( Default Request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . host Ġ= ĠHOST ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . protocol Ġ= Ġif Ġ( PROTOCOL Ġ== Ġ" https ") ĠURL Protocol . HTTPS Ġelse ĠURL Protocol . HTTP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl . port Ġ= Ġif Ġ( PROTOCOL Ġ== Ġ" https ") ĠSE C URE _ PORT Ġelse ĠPORT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinstall ( Http Timeout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Timeout Millis Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġget ( path : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get ( path Ġ= Ġpath ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġget ( path : ĠString , Ġparameters : ĠMap < String , ĠAny >): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get ( path Ġ= Ġpath ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd JWT Token To Request ( headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameters . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> Ġparameter ( key , Ġvalue ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġget ( path : ĠString , Ġid : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get ( path Ġ= Ġpath . replace (" id ", Ġid )) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġpost ( path : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . post ( path Ġ= Ġpath ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġpost ( path : ĠString , Ġdata : ĠAny ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . post ( path Ġ= Ġpath , Ġbody Ġ= Ġdata ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġpost ( path : ĠString , Ġid : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . post ( path Ġ= Ġpath . replace (" id ", Ġid )) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġpost ( path : ĠString , Ġid : ĠString , Ġdata : ĠAny ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . post ( path Ġ= Ġpath . replace (" id ", Ġid ), Ġbody Ġ= Ġdata ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġput ( path : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . put ( path Ġ= Ġpath ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġput ( path : ĠString , Ġdata : ĠAny ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . put ( path Ġ= Ġpath , Ġbody Ġ= Ġdata ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġput ( path : ĠString , Ġid : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . put ( path Ġ= Ġpath . replace (" id ", Ġid )) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġdelete ( path : ĠString , Ġid : ĠString ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . delete ( path Ġ= Ġpath . replace (" id ", Ġid )) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġinline Ġfun Ġ< re ified ĠT > Ġdelete ( path : ĠString , Ġdata : ĠAny ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . delete ( path Ġ= Ġpath , Ġbody Ġ= Ġdata ) Ġ{ Ġadd JWT Token To Request ( headers ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle ApiException ( e ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġsuspend Ġfun Ġhandle ApiException ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerr Ġ= Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttpRequest TimeoutException , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSocket TimeoutException , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . net . Socket TimeoutException , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTimeout Exception , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConnect TimeoutException Ġ-> ĠResponse . ErrorResponse (" Can 't Ġreach Ġthe Ġserver ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . response . status Ġ== ĠHttpStatusCode . Unauthorized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTicket Chain Api Authorization Exception (" You Ġneed Ġto Ġlogin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . ErrorResponse ( e . response . receive ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . ErrorResponse ( e . message Ġ?: Ġ" Unknown Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthrow ĠTicket Chain ApiException ( err . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd JWT Token To Request ( headers : ĠHeaders Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// if Ġ( store . token . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠ Ġheaders [" Authorization "] Ġ= Ġ" Bearer Ġ${ store . token }" ĊĠĠĠĠĠĠĠ Ġ//} ĊĠĠĠ Ġ} Ċ }