/** Ċ Ġ* ĠB read Wallet Ċ Ġ* Ċ Ġ* ĠCreated Ġby ĠD rew ĠCar l son Ġ< d rew . car l son @ bread wallet . com > Ġon Ġ 4 / 2 1 / 2 0 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġb read wallet ĠLLC Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . platform . js bridge Ċ Ċ import Ġandroid . webkit . Javascript Interface Ċ import Ġcom . platform . APIClient Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġorg . json . JSONArray Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . util . Locale Ċ Ċ class ĠB rd Api Js ( ĊĠĠĠ Ġprivate Ġval Ġpromise : ĠNative Promise Factory , ĊĠĠĠ Ġprivate Ġval ĠapiClient : ĠAP IC lient Ċ ) Ġ: ĠJs Api Ġ{ ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Javascript Interface ĊĠĠĠ Ġfun Ġrequest ( ĊĠĠĠĠĠĠĠ Ġmethod : ĠString , ĊĠĠĠĠĠĠĠ Ġpath : ĠString , ĊĠĠĠĠĠĠĠ Ġbody : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġauthenticate : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ) Ġ= Ġwhen Ġ( method . toUpperCase ( Locale . ROOT )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" GET " Ġ-> Ġget ( path , Ġauthenticate ) ĊĠĠĠĠĠĠĠ Ġ" POST " Ġ-> Ġpost ( path , Ġbody , Ġauthenticate ) ĊĠĠĠĠĠĠĠ Ġ" PUT " Ġ-> Ġput ( path , Ġbody , Ġauthenticate ) ĊĠĠĠĠĠĠĠ Ġ" DELETE " Ġ-> Ġdelete ( path , Ġauthenticate ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpromise . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Unknown Ġmethod Ġ'$ method '. ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Javascript Interface ĊĠĠĠ Ġfun Ġget ( path : ĠString , Ġauthenticate : ĠBoolean Ġ= Ġtrue ) Ġ= Ġpromise . create Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( path . isNotBlank ()) Ġ{ Ġ" Path Ġcannot Ġbe Ġblank ." Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( apiClient . build Url ( path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Javascript Interface ĊĠĠĠ Ġfun Ġpost ( path : ĠString , Ġbody : ĠString ?, Ġauthenticate : ĠBoolean Ġ= Ġtrue ) Ġ= Ġpromise . create Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( path . isNotBlank ()) Ġ{ Ġ" Path Ġcannot Ġbe Ġblank ." Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( body ) Ġ{ Ġ" Request Ġbody Ġrequired Ġfor ĠPOST Ġrequest ." Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( body . to RequestBody (" application / json ". to MediaType ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( apiClient . build Url ( path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Javascript Interface ĊĠĠĠ Ġfun Ġdelete ( path : ĠString , Ġauthenticate : ĠBoolean Ġ= Ġtrue ) Ġ= Ġpromise . create Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( path . isNotBlank ()) Ġ{ Ġ" Path Ġcannot Ġbe Ġblank ." Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( apiClient . build Url ( path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Javascript Interface ĊĠĠĠ Ġfun Ġput ( path : ĠString , Ġbody : ĠString ?, Ġauthenticate : ĠBoolean Ġ= Ġtrue ) Ġ= Ġpromise . create Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( path . isNotBlank ()) Ġ{ Ġ" Path Ġcannot Ġbe Ġblank ." Ġ} ĊĠĠĠĠĠĠĠ ĠcheckNotNull ( body ) Ġ{ Ġ" Request Ġbody Ġrequired Ġfor ĠPUT Ġrequest ." Ġ} ĊĠĠĠĠĠĠĠ Ġsubmit Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put ( body . to RequestBody (" application / json ". to MediaType ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( apiClient . build Url ( path )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubmit Request ( request : ĠRequest , Ġauthenticate : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠ ĠapiClient . send Request ( request , Ġauthenticate ). as JsonObject () ĊĊĠĠĠ Ġprivate Ġfun ĠAP IC lient . BR Response . as JsonObject (): ĠJSONObject Ġ= ĊĠĠĠĠĠĠĠ ĠJSONObject (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" is Successful ", Ġis Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" status ", Ġcode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput (" headers ", ĠJSONObject ( headers )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" body ", Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Text . isBlank () Ġ|| ĠcontentType Ġ!= Ġ" application / json " Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Text . startsWith ("[ ") Ġ-> ĠJSONArray ( body Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Text . startsWith ("{ ") Ġ-> ĠJSONObject ( body Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Failed Ġto Ġparse Ġresponse Ġbody .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }