package Ġcom . ba ul supp . ok url . kotlin Ċ Ċ import Ġcom . ba ul supp . ok url . Main Ċ import Ġcom . ba ul supp . ok url . commands . CommandLine Client Ċ import Ġcom . ba ul supp . ok url . credentials . Default Token Ċ import Ġcom . ba ul supp . ok url . credentials . Token Ċ import Ġcom . ba ul supp . ok url . util . ClientException Ċ import Ġcom . squareup . mos hi . Json Adapter Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . Types Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Callback Ċ import Ġokhttp 3 . Form Body Ċ import Ġokhttp 3 . Http Url Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġorg . fuse source . j ansi . Ansi Ċ import Ġorg . fuse source . j ansi . Ansi . Color . GREEN Ċ import Ġorg . fuse source . j ansi . Ansi . Color . MAG ENT A Ċ import Ġorg . fuse source . j ansi . Ansi . Color . RED Ċ import Ġjava . io . IOException Ċ import Ġjava . time . Instant Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Offset DateTime Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . resume With Exception Ċ Ċ inline Ġfun Ġ< T , ĠR > ĠIterable < T >. flatMap Me ( function : Ġ( T ) Ġ-> ĠIterable < R >): ĠList < R > Ġ{ ĊĠ Ġreturn Ġthis . map Ġ{ Ġfunction ( it ) Ġ}. flatten () Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ inline Ġfun Ġ< re ified ĠV > ĠM oshi . map Adapter () Ġ= ĊĠ Ġthis . adapter < Any >( ĊĠĠĠ ĠTypes . new Parameterized Type ( ĊĠĠĠĠĠ ĠMap :: class . java , ĠString :: class . java , ĊĠĠĠĠĠ ĠV :: class . java ĊĠĠĠ Ġ) ĊĠ Ġ) Ġas ĠJson Adapter < Map < String , ĠV >> Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ inline Ġfun Ġ< re ified ĠV > ĠM oshi . list Adapter () Ġ= ĊĠ Ġthis . adapter < Any >( ĊĠĠĠ ĠTypes . new Parameterized Type ( List :: class . java , ĠV :: class . java ) ĊĠ Ġ) Ġas ĠJson Adapter < List < V >> Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠT > ĠOk HttpClient . query ( url : ĠString , Ġtoken Set : ĠToken Ġ= ĠDefault Token ): ĠT Ġ{ ĊĠ Ġreturn Ġthis . query ( request ( url , Ġtoken Set )) Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠT > ĠOk HttpClient . query ( request : ĠRequest ): ĠT Ġ{ ĊĠ Ġval Ġstring Result Ġ= Ġthis . query For String ( request ) ĊĊĠ Ġreturn ĠMain . mos hi . adapter ( T :: class . java ). fromJson ( string Result ) !! Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠT > ĠOk HttpClient . query Pages ( ĊĠ Ġurl : ĠString , ĊĠ Ġcross inline Ġpag inator : ĠT . () Ġ-> ĠPagination , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token , ĊĠ Ġpage Limit : ĠInt Ġ= ĠInt . MAX _ VALUE Ċ ): ĠList < T > Ġ= Ġcoroutine Scope Ġ{ ĊĠ Ġvar Ġpage Ġ= Ġquery < T >( url , Ġtoken Set ) ĊĠ Ġval Ġresult List Ġ= Ġmutable ListOf ( page ) ĊĊĠ Ġvar Ġpages Ġ= Ġpag inator ( page ) ĊĊĠ Ġwhile Ġ( pages Ġ!== ĠEnd Ġ&& Ġresult List . size Ġ< Ġpage Limit ) Ġ{ ĊĠĠĠ Ġif Ġ( pages Ġis ĠNext ) Ġ{ ĊĠĠĠĠĠ Ġpage Ġ= Ġquery ( pages . url , Ġtoken Set ) ĊĠĠĠĠĠ Ġresult List . add ( page ) ĊĠĠĠĠĠ Ġpages Ġ= Ġpag inator ( page ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( pages Ġis ĠRest ) Ġ{ ĊĠĠĠĠĠ Ġval Ġdefer List Ġ= Ġpages . urls . take ( page Limit ). map Ġ{ ĊĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġquery < T >( it , Ġtoken Set ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġdefer List . forEach Ġ{ Ġresult List . add ( it . await ()) Ġ} ĊĠĠĠĠĠ Ġbreak ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġresult List Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠV > ĠOk HttpClient . query Map ( request : ĠRequest ): ĠMap < String , ĠV > Ġ{ ĊĠ Ġval Ġstring Result Ġ= Ġthis . query For String ( request ) ĊĊĠ Ġreturn ĠMain . mos hi . map Adapter < V >(). fromJson ( string Result ) !! Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠV > ĠOk HttpClient . query Map ( ĊĠ Ġurl : ĠString , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token Ċ ): ĠMap < String , ĠV > Ġ= ĊĠ Ġthis . query Map ( request ( url , Ġtoken Set )) Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠV > ĠOk HttpClient . query List ( request : ĠRequest ): ĠList < V > Ġ{ ĊĠ Ġval Ġstring Result Ġ= Ġthis . query For String ( request ) ĊĊĠ Ġreturn ĠMain . mos hi . list Adapter < V >(). fromJson ( string Result ) !! Ċ } Ċ Ċ sealed Ġclass ĠPagination Ċ Ċ object ĠEnd Ġ: ĠPagination () Ċ Ċ data Ġclass ĠNext ( val Ġurl : ĠString ) Ġ: ĠPagination () Ċ Ċ data Ġclass ĠRest ( val Ġurls : ĠList < String >) Ġ: ĠPagination () Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠV > ĠOk HttpClient . query List ( ĊĠ Ġurl : ĠString , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token Ċ ): ĠList < V > Ġ= ĊĠ Ġthis . query List ( request ( url , Ġtoken Set )) Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠV > ĠOk HttpClient . query Optional Map ( request : ĠRequest ): ĠMap < String , ĠV >? Ġ{ ĊĠ Ġval Ġstring Result Ġ= Ġthis . query For String ( request ) ĊĊĠ Ġreturn ĠMain . mos hi . map Adapter < V >(). fromJson ( string Result ) Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠV > ĠOk HttpClient . query Optional Map ( ĊĠ Ġurl : ĠString , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token Ċ ): ĠMap < String , ĠV >? Ġ= ĊĠ Ġthis . query Optional Map ( request ( url , Ġtoken Set )) Ċ Ċ suspend Ġinline Ġfun Ġ< re ified ĠT > ĠOk HttpClient . query Map Value ( ĊĠ Ġurl : ĠString , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token , ĊĠ Ġvar arg Ġkeys : ĠString Ċ ): ĠT ? Ġ= ĊĠ Ġthis . query Map Value < T >( request ( url , Ġtoken Set ), Ġ* keys ) Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ suspend Ġinline Ġfun Ġ< re ified ĠT > ĠOk HttpClient . query Map Value ( ĊĠ Ġrequest : ĠRequest , ĊĠ Ġvar arg Ġkeys : ĠString Ċ ): ĠT ? Ġ{ ĊĠ Ġval Ġquery Map Ġ= Ġthis . query Map < Any >( request ) ĊĊĠ Ġval Ġresult Ġ= Ġkeys . fold ( query Map Ġas ĠAny ) Ġ{ Ġmap , Ġkey Ġ-> Ġ( map Ġas ĠMap < String , ĠAny >). getValue ( key ) Ġ} ĊĊĠ Ġreturn Ġresult Ġas ĠT Ċ } Ċ Ċ // ĠTODO Ċ fun ĠHttp Url . request (): ĠRequest Ġ= ĠRequest . Builder (). url ( this ). build () Ċ Ċ suspend Ġfun ĠOk HttpClient . query For String ( request : ĠRequest ): ĠString Ġ= Ġexecute ( request ). body !!. readString () Ċ Ċ suspend Ġfun ĠOk HttpClient . query For String ( url : ĠString , Ġtoken Set : ĠToken Ġ= ĠDefault Token ): ĠString Ġ= ĊĠ Ġthis . query For String ( request ( url , Ġtoken Set )) ĊĊ Ċ suspend Ġfun ĠResponse Body . readString () Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ Ġstring () Ġ} Ċ Ċ suspend Ġfun ĠOk HttpClient . execute ( request : ĠRequest ): ĠResponse Ġ{ ĊĠ Ġval Ġcall Ġ= Ġthis . new Call ( request ) ĊĊĠ Ġval Ġresponse Ġ= Ġcall . await () ĊĊĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠ Ġval Ġresponse String Ġ= Ġresponse . body ?. readString () ĊĊĠĠĠ Ġval Ġmsg : ĠString Ġ= Ġif Ġ( response String . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġresponse . status Message () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġresponse String ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthrow ĠClient Exception ( msg , Ġresponse . code ) ĊĠ Ġ} ĊĊĠ Ġreturn Ġresponse Ċ } Ċ Ċ fun ĠResponse . status Message (): ĠString Ġ= Ġthis . code . toString () Ġ+ Ġ" Ġ" Ġ+ Ġthis . message Ċ Ċ fun ĠOk HttpClient . warm up ( var arg Ġurls : ĠString ) Ġ{ ĊĠ Ġurls . forEach Ġ{ ĊĠĠĠ Ġval Ġcall Ġ= Ġthis . new Call ( request ( it , ĠDefault Token )) ĊĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠ Ġresponse . close () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} Ċ } Ċ Ċ fun ĠString . error (): ĠString Ġ= Ġcolor ( RED ) Ċ fun ĠString . warn (): ĠString Ġ= Ġcolor ( MAG ENT A ) Ċ fun ĠString . success (): ĠString Ġ= Ġcolor ( GREEN ) Ċ fun ĠString . color ( color : ĠAn si . Color ): ĠString Ġ= Ġwhen Ġ{ ĊĠ Ġis Interactive () Ġ-> ĠAn si . ansi (). reset (). fg ( color ). a ( this ). reset (). toString () ĊĠ Ġelse Ġ-> Ġthis Ċ } Ċ Ċ val ĠJSON Ġ= Ġ" application / json ". to MediaType () Ċ Ċ fun Ġform ( init : ĠForm Body . Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠForm Body Ġ= ĠForm Body . Builder (). apply ( init ). build () Ċ Ċ fun Ġrequest ( ĊĠ Ġurl : ĠString ? Ġ= Ġnull , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token , ĊĠ Ġinit : ĠRequest . Builder . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠRequest Ġ= Ġrequest Builder ( url , Ġtoken Set ). apply ( init ). build () Ċ Ċ fun Ġrequest Builder ( ĊĠ Ġurl : ĠString ? Ġ= Ġnull , ĊĠ Ġtoken Set : ĠToken Ġ= ĠDefault Token Ċ ): ĠRequest . Builder Ġ= ĠRequest . Builder (). apply Ġ{ Ġif Ġ( url Ġ!= Ġnull ) Ġurl ( url ) Ġ}. tag ( ĊĠ ĠToken :: class . java , ĊĠ Ġtoken Set Ċ ) Ċ Ċ fun ĠRequest . Builder . token Set ( token Set : ĠToken ): ĠRequest . Builder Ġ= Ġtag ( Token :: class . java , Ġtoken Set ) Ċ Ċ fun ĠRequest . Builder . post Json Body ( body : ĠAny ) Ġ{ ĊĠ Ġval Ġcontent Ġ= ĠMain . mos hi . adapter ( body . java Class ). toJson ( body ) !! ĊĠ Ġpost ( content . to RequestBody ( JSON )) Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ", Ġ" PLATFORM _ CLASS _ MAP PED _ TO _ K OT LIN ") Ċ fun Ġ< T > ĠList < T >. to Java List (): Ġjava . util . List < T > Ġ{ ĊĠ Ġreturn Ġthis Ġas Ġjava . util . List < T > Ċ } Ċ Ċ fun ĠRequest . edit ( init : ĠRequest . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= ĠnewBuilder (). apply ( init ). build () Ċ fun ĠHttp Url . edit ( init : ĠHttp Url . Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= ĠnewBuilder (). apply ( init ). build () Ċ Ċ val Ġis Int ellij Ġby Ġlazy Ġ{ ĊĠ Ġtry Ġ{ ĊĠĠĠ ĠCommandLine Client :: class . java . class Loader . load Class (" com . intellij . rt . execution . application . App Main V 2 ") ĊĠĠĠ Ġtrue ĊĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠ Ġfalse ĊĠ Ġ} Ċ } Ċ Ċ fun Ġis Interactive (): ĠBoolean Ġ{ ĊĠ Ġreturn ĠSystem . console () Ġ!= Ġnull Ġ|| Ġis Int ellij Ċ } Ċ Ċ fun ĠLocalDateTime . to Instant (): ĠInstant Ġ{ ĊĠ Ġreturn Ġthis . to Instant ( Offset DateTime . now (). offset ) Ċ } Ċ Ċ suspend Ġfun ĠCall . await (): ĠResponse Ġ{ ĊĠ Ġreturn Ġsuspend C ancellable Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠ Ġcont . invoke On Cancellation Ġ{ ĊĠĠĠĠĠ Ġcancel () ĊĠĠĠ Ġ} ĊĠĠĠ Ġenqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! cont . is Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcont . resume With Exception ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! cont . is Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcont . resume ( response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} Ċ } Ċ