package Ġcom . stripe . android Ċ Ċ import Ġcom . stripe . android . exception . Invalid RequestException Ċ import Ġjava . io . Unsupported EncodingException Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . util . HashMap Ċ import Ġjava . util . HashSet Ċ import Ġjava . util . Objects Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġrepresenting Ġa Ġrequest Ġto Ġa ĠStripe - owned Ġservice . Ċ Ġ*/ Ċ internal Ġabstract Ġclass ĠStripe Request ( ĊĠĠĠ Ġval Ġmethod : ĠMethod , ĊĠĠĠ Ġval ĠbaseUrl : ĠString , ĊĠĠĠ Ġparams : ĠMap < String , Ġ*> ?, ĊĠĠĠ Ġprivate Ġval ĠmimeType : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġval Ġparams : ĠMap < String , Ġ* >? Ġ= Ġparams ?. let Ġ{ Ġcompact Params ( it ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġif Ġthe ĠHTTP Ġmethod Ġis Ġ[ Method . GET ], Ġreturn ĠURL Ġwith Ġquery Ġstring ; ĊĠĠĠĠ Ġ* Ġotherwise , Ġreturn Ġthe ĠURL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġval Ġurl : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Unsupported EncodingException :: class , ĠInvalid RequestException :: class ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( Method . GET Ġ== Ġmethod ) Ġurl With Query () Ġelse ĠbaseUrl ĊĊĠĠĠ Ġinternal Ġval ĠcontentType : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"$ mime Type ; Ġcharset =$ CHARSET " ĊĊĠĠĠ Ġinternal Ġval Ġheaders : ĠMap < String , ĠString > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcreate Headers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( HEADER _ USER _ AGENT Ġto ĠgetUser Agent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġabstract Ġfun ĠgetUser Agent (): ĠString ĊĊĠĠĠ Ġ@ Throws ( Unsupported EncodingException :: class , ĠInvalid RequestException :: class ) ĊĠĠĠ Ġinternal Ġabstract Ġfun Ġget Output Bytes (): ĠByteArray ĊĊĠĠĠ Ġinternal Ġval Ġbase HashCode : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠObjects . hash ( method , ĠbaseUrl , Ġparams ) ĊĊĠĠĠ Ġinternal Ġabstract Ġfun Ġcreate Headers (): ĠMap < String , ĠString > ĊĊĠĠĠ Ġinternal Ġval Ġquery : ĠString ĊĠĠĠĠĠĠĠ Ġ@ Throws ( Invalid RequestException :: class , ĠUnsupported EncodingException :: class ) ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġflatten Params ( params ). join ToString ("& ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Encode Pair ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Invalid RequestException :: class , ĠUnsupported EncodingException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġurl With Query (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġthis . query ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġsome Ġcases , ĠURL Ġcan Ġalready Ġcontain Ġa Ġquestion Ġmark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( eg , Ġupcoming Ġinvoice Ġlines ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( baseUrl , Ġquery ). join ToString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseparator Ġ= Ġif Ġ( baseUrl . contains (" ? ")) Ġ"& " Ġelse Ġ" ?" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Invalid RequestException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġflatten Params ( params : ĠMap < String , Ġ* >? ): ĠList < Parameter > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġflatten Params Map ( params , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Invalid RequestException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġflatten Params List ( ĊĠĠĠĠĠĠĠ Ġparams : ĠList <* >, ĊĠĠĠĠĠĠĠ Ġkey Prefix : ĠString ĊĠĠĠ Ġ): ĠList < Parameter > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠBecause Ġapplication / x - www - form - urlencoded Ġcannot Ġrepresent Ġan Ġempty ĊĠĠĠĠĠĠĠ Ġ// Ġlist , Ġconvention Ġis Ġto Ġtake Ġthe Ġlist Ġparameter Ġand Ġjust Ġset Ġit Ġto Ġan ĊĠĠĠĠĠĠĠ Ġ// Ġempty Ġstring . Ġ( e . g . ĠA Ġregular Ġlist Ġmight Ġlook Ġlike Ġ` a [] = 1 & b [] = 2 `. ĊĠĠĠĠĠĠĠ Ġ// ĠEmpty ing Ġit Ġwould Ġlook Ġlike Ġ` a = `. ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( params . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Parameter ( key Prefix , Ġ"")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Prefix Ġ= Ġ"$ key Prefix []" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflatten Params Value ( it , Ġnew Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Invalid RequestException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġflatten Params Map ( ĊĠĠĠĠĠĠĠ Ġparams : ĠMap < String , Ġ*> ?, ĊĠĠĠĠĠĠĠ Ġkey Prefix : ĠString ? ĊĠĠĠ Ġ): ĠList < Parameter > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparams ?. flatMap Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Prefix Ġ= Ġkey Prefix ?. let Ġ{ Ġ"$ it [$ key ]" Ġ} Ġ?: Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflatten Params Value ( value , Ġnew Prefix ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Invalid RequestException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġflatten Params Value ( ĊĠĠĠĠĠĠĠ Ġvalue : ĠAny ?, ĊĠĠĠĠĠĠĠ Ġkey Prefix : ĠString ĊĠĠĠ Ġ): ĠList < Parameter > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMap < *, Ġ*> Ġ-> Ġflatten Params Map ( value Ġas ĠMap < String , ĠAny > ?, Ġkey Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġflatten Params List ( value , Ġkey Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" Ġ-> Ġthrow ĠInvalid RequestException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġcannot Ġset Ġ'$ key Prefix ' Ġto Ġan Ġempty Ġstring . ĠWe Ġinterpret Ġempty Ġstrings Ġas Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" null Ġin Ġrequests . ĠYou Ġmay Ġset Ġ'$ key Prefix ' Ġto Ġnull Ġto Ġdelete Ġthe Ġproperty .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Prefix , Ġnull , Ġ 0 , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Parameter ( key Prefix , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Parameter ( key Prefix , Ġvalue . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Unsupported EncodingException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġurl Encode Pair ( k : ĠString , Ġv : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġencoded Key Ġ= Ġurl Encode ( k ) ĊĠĠĠĠĠĠĠ Ġval Ġencoded Value Ġ= Ġurl Encode ( v ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ encoded Key =$ encoded Value " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Unsupported EncodingException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġurl Encode ( str : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPre serve Ġoriginal Ġbehavior Ġthat Ġpassing Ġnull Ġfor Ġan Ġobject Ġid Ġwill Ġlead ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġus Ġactually Ġmaking Ġa Ġrequest Ġto Ġ/ v 1 / foo / null ĊĠĠĠĠĠĠĠ Ġreturn ĠURL Encoder . encode ( str , ĠCHARSET ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtyped Equals ( request : ĠStripe Request ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmethod Ġ== Ġrequest . method Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbaseUrl Ġ== Ġrequest . baseUrl Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams Ġ== Ġrequest . params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġenum Ġclass ĠMethod ( val Ġcode : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGET (" GET "), ĊĠĠĠĠĠĠĠ ĠPOST (" POST "), ĊĠĠĠĠĠĠĠ ĠDELETE (" DELETE ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠParameter Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġvalue : ĠString ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHEADER _ USER _ AGENT Ġ= Ġ" User - Agent " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCHARSET Ġ= Ġ" UTF - 8 " ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ USER _ AGENT Ġ= Ġ" Stripe / v 1 Ġ${ Stripe . VERSION }" ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCopy Ġthe Ġ{@ param Ġparams } Ġmap Ġand Ġrecursively Ġremove Ġnull Ġand Ġempty Ġvalues . ĠThe ĠStripe ĠAPI ĊĠĠĠĠĠĠĠĠ Ġ* Ġrequires Ġthat Ġparameters Ġwith Ġnull Ġvalues Ġare Ġremoved Ġfrom Ġrequests . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparams Ġa Ġ[ Map ] Ġfrom Ġwhich Ġto Ġremove Ġthe Ġkeys Ġthat Ġhave Ġ` null ` Ġvalues ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcompact Params ( params : ĠMap < String , Ġ* >): ĠMap < String , ĠAny > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompact Params Ġ= ĠHashMap < String , ĠAny >( params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRemove Ġall Ġnull Ġvalues ; Ġthey Ġcause Ġvalidation Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin ĠHashSet ( compact Params . keys )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compact Params [ key ] Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompact Params . remove ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compact Params [ key ] Ġis ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġcompact Params [ key ] Ġas ĠCharSequence ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sequence . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompact Params . remove ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compact Params [ key ] Ġis ĠMap < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnested Map Ġ= Ġcompact Params [ key ] Ġas ĠMap < String , ĠAny >? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( nested Map Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompact Nested Map Ġ= Ġcompact Params ( nested Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompact Params [ key ] Ġ= Ġcompact Nested Map ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcompact Params ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ