package Ġme . dig i . sdk . api . intercept ors Ċ Ċ import Ġme . dig i . sdk . entities . configuration . Client Configuration Ċ import Ġme . dig i . sdk . entities . configuration . Dig i Me Configuration Ċ import Ġme . dig i . sdk . utilities . crypto . Byte Transformer Ċ import Ġme . dig i . sdk . utilities . crypto . Crypto Utilities Ċ import Ġme . dig i . sdk . utilities . crypto . Key Transformer Ċ import Ġme . dig i . sdk . utilities . jwt . Json Web Token Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . internal . wait Millis Ċ Ċ class ĠRetry Interceptor ( private Ġval Ġconfig : ĠClient Configuration ) Ġ: ĠInter ceptor Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠRun Ġrequest . ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġchain . proceed ( request ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġif Ġretry Ġdisabled . ĊĠĠĠĠĠĠĠ Ġif Ġ(! config . retry On Fail ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĊĠĠĠĠĠĠĠ Ġvar Ġretry Attempts Remaining Ġ= Ġconfig . max Retry Count ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Recover able Error ( response )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAll Ġthe Ġwhile Ġthe Ġrequest Ġfails , Ġretry Ġit Ġif Ġbelow Ġcap . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! response . is Successful Ġ&& Ġretry Attempts Remaining Ġ> Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Attempts Remaining -- ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwait Time Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġt Ġ= Ġconfig . retry Delay . to Long () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . retry With Exponent ial Back Off ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( config . max Retry Count Ġ- Ġretry Attempts Remaining ) Ġ{ Ġt Ġ*= Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. invoke () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠImplement Ġerror Ġbased Ġfiltering Ġto Ġavoid Ġnon - recover able Ġretries . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . wait Millis ( wait Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . close () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Request Ġ= Ġrequest . with Re generated Jwt Nonce () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġchain . proceed ( new Request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Recover able Error ( response : ĠResponse ) Ġ= Ġwhen Ġ( response . code ) Ġ{ ĊĠĠĠĠĠĠĠĠ 4 0 0 , Ġ 4 0 1 Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRequest . with Re generated Jwt Nonce (): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauth Header Ġ= Ġheader (" Authorization ") Ġ?: Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġsigning Key Ġ= Ġ( config Ġas ? ĠDig i Me Configuration )?. privateKey Hex ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Transformer . java PrivateKey From Hex ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġval Ġtoken ised Jwt Ġ= Ġauth Header . split (" Ġ"). last () ĊĠĠĠĠĠĠĠ Ġval Ġjwt Ġ= ĠJson Web Token ( token ised Jwt ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Nonce Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByte Transformer . hex String From Bytes ( Crypto Utilities . generate Secure Random ( 1 6 )) ĊĠĠĠĠĠĠĠ Ġval Ġnew Payload Ġ= Ġjwt . payload . to Mutable Map (). apply Ġ{ Ġthis [" nonce "] Ġ= Ġnew Nonce Ġ} ĊĠĠĠĠĠĠĠ Ġjwt . payload Ġ= Ġnew Payload ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Token ised Jwt Ġ= Ġjwt . sign ( signing Key ). tokenize () ĊĠĠĠĠĠĠĠ Ġval Ġnew Auth Header Ġ= Ġ" Bearer Ġ$ new Token ised Jwt " ĊĠĠĠĠĠĠĠ Ġval Ġnew Request Ġ= ĠnewBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Authorization ", Ġnew Auth Header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew Request ĊĠĠĠ Ġ} Ċ }