package Ġio . github . gn up ingu in . spotify . client Ċ Ċ import Ġfe ign .* Ċ import Ġfe ign . codec . Decoder Ċ import Ġfe ign . codec . Encoder Ċ import Ġfe ign . http client . Apache HttpClient Ċ import Ġfe ign . jackson . Jack son Decoder Ċ import Ġfe ign . jackson . Jack son Encoder Ċ import Ġio . github . gn up ingu in . spotify . service . Spot ify SecurityContext Ċ import Ġorg . apache . http . impl . client . HttpClient Builder Ċ import Ġorg . springframework . context . annotation . Bean Ċ import Ġorg . springframework . security . oauth 2 . client . OAuth 2 Authorized Client Service Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠSpotify Client Configuration ( private Ġval Ġspot ify SecurityContext : ĠSpotify SecurityContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġfe ign Logger Level (): ĠLogger . Level Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLogger . Level . FULL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġencoder (): ĠEncoder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJack son Encoder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecoder (): ĠDecoder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJack son Decoder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġauth Request Interceptor (): ĠRequest Interceptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAuthorization Header Interceptor Ġ{ Ġ" Bearer Ġ${ spotify SecurityContext . get AccessToken () }" Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Bean ĊĠĠĠ Ġfun Ġfe ign Builder ( client Service : ĠOAuth 2 Authorized Client Service ): ĠFe ign . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFe ign . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. retry er ( Retry er . Default ( 1 0 0 , Ġ 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( fe ign Client ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. encoder ( encoder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. decoder ( decoder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. request Interceptor ( auth Request Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. logLevel ( fe ign Logger Level ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfe ign Client (): ĠClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠHttpClient Builder . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMax Conn Total ( 6 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMax Conn Per Route ( 6 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setConnection TimeTo Live ( 1 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ Ġreturn ĠApache HttpClient ( builder . build ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠAuthorization Header Interceptor ( private Ġval Ġheader Value Provider : Ġ() Ġ-> ĠString ): ĠRequest Interceptor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġapply ( template : ĠRequest Template ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtemplate ?. header (" Authorization ", Ġheader Value Provider . invoke ()) ĊĠĠĠ Ġ} Ċ } Ċ