package Ġcom . bra ver idge . sol en oid . client . br ave gate Ċ Ċ import Ġcom . bra ver idge . sol en oid . client . Ret rofit Executor Ċ import Ġcom . bra ver idge . sol en oid . client . Ret rofit Result Ċ import Ġcom . bra ver idge . sol en oid . client . br ave gate . request . Auth Request Ċ import Ġcom . bra ver idge . sol en oid . client . br ave gate . response . Auth Response Ċ import Ġorg . springframework . cache . annotation . Cache able Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . time . Duration Ċ Ċ @ Component Ċ class ĠAuth Token Resolver ( private Ġval Ġclient : ĠBr ave gate Client , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġexecutor : ĠRet rofit Executor Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject ĠCache Key Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠResolve AuthToken Ġ= Ġ" AuthToken Resolver . resolve AuthToken " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Cache able ( Resolve AuthToken ) ĊĠĠĠ Ġfun Ġresolve ( auth key Id : ĠString , Ġauth key Secret : ĠString ): ĠAuth Token ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauth Result Ġ= Ġauth ( auth key Id , Ġauth key Secret ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( auth Result . is Suc cessed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Token ( auth Result . success Body !!. apiKey , Ġauth Result . success Body . token ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġauth ( auth key Id : ĠString , Ġauth key Secret : ĠString , Ġtimeout : ĠDuration Ġ= ĠDuration . of Days ( 1 )): ĠRet rofit Result < Auth Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠAuth Request ( auth key Id , Ġauth key Secret , Ġtimeout . to Seconds ()) ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġclient . auth ( request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecutor . execute ( call ) ĊĠĠĠ Ġ} Ċ }