package Ġcom . t ink . link . payments Ċ Ċ import Ġcom . t ink . link . authentication . Authentication Task Ċ import Ġcom . t ink . model . credentials . Credentials Ċ import Ġcom . t ink . service . credentials . Credentials Service Ċ import Ġcom . t ink . service . streaming . publisher . Stream Observer Ċ import Ġcom . t ink . service . streaming . publisher . Stream Subscription Ċ import Ġcom . t ink . service . transfer . Create Bene ficiary Descriptor Ċ import Ġcom . t ink . service . transfer . Transfer Service Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ internal Ġclass ĠAdd Bene ficiary Task ( ĊĠĠĠ Ġprivate Ġval Ġdescriptor : ĠCreate Bene ficiary Descriptor , ĊĠĠĠ Ġprivate Ġval Ġcredentials Service : ĠCredentials Service , ĊĠĠĠ Ġprivate Ġval Ġtransfer Service : ĠTransfer Service , ĊĠĠĠ Ġprivate Ġval Ġstream Observer : ĠStream Observer < Add Bene ficiary Status > Ċ ) Ġ: ĠStream Subscription Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠerrorHandler Ġ= ĊĠĠĠĠĠĠĠ ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġerror Ġ-> Ġstream Observer . onError ( error ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġscope Ġ= ĠCor outine Scope ( Dispatch ers . IO Ġ+ ĠJob () Ġ+ ĠerrorHandler ) ĊĠĠĠ Ġprivate Ġvar Ġcurrent Status : ĠAdd Bene ficiary Status Ġ= ĠAdd Bene ficiary Status . Loading () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isNew Status ( field , Ġvalue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstream Observer . onNext ( current Status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Credentials Status Updated Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Service . get Credentials ( descriptor . credentials Id ). status Updated ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransfer Service . add Bene ficiary ( descriptor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Ġ= Ġcredentials Service . get Credentials ( descriptor . credentials Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . status Updated . is After ( initial Credentials Status Updated ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( credentials Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġhave Ġa Ġvalid Ġcredentials Ġwith Ġa Ġnew Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Status Ġ= ĠgetStatus From Credentials ( credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Status Ġis ĠAdd Bene ficiary Status . Success ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 2 _ 0 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream Observer . on Completed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis New Status ( ĊĠĠĠĠĠĠĠ Ġold Status : ĠAdd Bene ficiary Status , ĊĠĠĠĠĠĠĠ Ġnew Status : ĠAdd Bene ficiary Status ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( old Status Ġis ĠAdd Bene ficiary Status . Await ing Authentication Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Status Ġis ĠAdd Bene ficiary Status . Await ing Authentication ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnew Status . authentication Task . isNew er Than ( old Status . authentication Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġold Status Ġ!= Ġnew Status ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetStatus From Credentials ( credentials : ĠCredentials ) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( credentials . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . UNKNOWN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . CREATED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . UP DAT ING , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . AUTHENT IC ATING Ġ-> ĠAdd Bene ficiary Status . Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . UPDATED Ġ-> ĠAdd Bene ficiary Status . Success () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . AW A IT ING _ MOB ILE _ BANK ID _ AUTHENT ICATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . AW A IT ING _ TH IRD _ PAR TY _ APP _ AUTHENT ICATION Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Bene ficiary Status . Await ing Authentication ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Task . Third Party Authentication ( credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . AW A IT ING _ SUP P LEMENT AL _ INFORMATION Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Bene ficiary Status . Await ing Authentication ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuthentication Task . Supp lement al Information ( credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . DISABLED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . DELETED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . SESSION _ EXPI RED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . TEMP OR ARY _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . AUTHENT ICATION _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCredentials . Status . PER MAN ENT _ ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠAdd Bene ficiary Failure ( credentials . status Payload ?. if Blank Ġ{ Ġnull Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġunsubscribe () Ġ{ ĊĠĠĠĠĠĠĠ Ġscope . cancel () ĊĠĠĠ Ġ} Ċ } Ċ