package Ġorg . ny pl . simpl ified . books . controller Ċ Ċ import Ġcom . io 7 m . j functional . Option Ċ import Ġcom . io 7 m . j functional . Option Type Ċ import Ġcom . io 7 m . j functional . Some Ċ import Ġcom . io 7 m . jun reachable . Un reachable Code Exception Ċ import Ġio . reactivex . subjects . Subject Ċ import Ġone . ir rad ia . mime . api . MIME Type Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Create Error Details Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Event Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Event Creation . Account Event Creation Failed Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Event Creation . Account Event Creation InProgress Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Provider Description Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Provider Resolution Error Details Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Provider Resolution Strings Type Ċ import Ġorg . ny pl . simpl ified . accounts . api . Account Provider Type Ċ import Ġorg . ny pl . simpl ified . accounts . database . api . Account Type Ċ import Ġorg . ny pl . simpl ified . accounts . registry . api . Account Provider Registry Type Ċ import Ġorg . ny pl . simpl ified . http . core . HTTP Problem Report Logging Ċ import Ġorg . ny pl . simpl ified . http . core . HTTP Result Error Ċ import Ġorg . ny pl . simpl ified . http . core . HTTP Result Exception Ċ import Ġorg . ny pl . simpl ified . http . core . HTTP Result OK Ċ import Ġorg . ny pl . simpl ified . http . core . HTTP Type Ċ import Ġorg . ny pl . simpl ified . links . Link Ċ import Ġorg . ny pl . simpl ified . op ds . auth _ document . api . Authentication Document Parsers Type Ċ import Ġorg . ny pl . simpl ified . op ds . core . OP DS Ac quisition Feed Ċ import Ġorg . ny pl . simpl ified . op ds . core . OP DS Feed Constants Ċ import Ġorg . ny pl . simpl ified . op ds . core . OP DS Feed Parser Type Ċ import Ġorg . ny pl . simpl ified . profiles . api . Profiles Database Type Ċ import Ġorg . ny pl . simpl ified . profiles . controller . api . Profile Account Creation String Resources Type Ċ import Ġorg . ny pl . simpl ified . task recorder . api . Task Recorder Ċ import Ġorg . ny pl . simpl ified . task recorder . api . Task Result Ċ import Ġorg . ny pl . simpl ified . task recorder . api . Task Step Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . IOException Ċ import Ġjava . net . URI Ċ import Ġjava . util . UUID Ċ import Ġjava . util . concurrent . Callable Ċ Ċ /** Ċ Ġ* ĠA Ġtask Ġthat Ġcreates Ġan Ġaccount Ġbased Ġon Ġa Ġcustom ĠOP DS Ġfeed . Ċ Ġ*/ Ċ Ċ class ĠProfile Account Create Custom OP DST ask ( ĊĠ Ġprivate Ġval Ġaccount Events : ĠSubject < Account Event >, ĊĠ Ġprivate Ġval Ġaccount Provider Registry : ĠAccount Provider Registry Type , ĊĠ Ġprivate Ġval Ġauth Document Parsers : ĠAuthentication Document Parsers Type , ĊĠ Ġprivate Ġval Ġhttp : ĠHTTP Type , ĊĠ Ġprivate Ġval Ġop ds URI : ĠURI , ĊĠ Ġprivate Ġval Ġop ds Feed Parser : ĠOP DS Feed Parser Type , ĊĠ Ġprivate Ġval Ġprofiles : ĠPro files Database Type , ĊĠ Ġprivate Ġval Ġresolution Strings : ĠAccount Provider Resolution Strings Type , ĊĠ Ġprivate Ġval Ġstrings : ĠProfile Account Creation String Resources Type Ċ ) Ġ: ĠCallable < Task Result < Account Create Error Details , ĠAccount Type >> Ġ{ ĊĊĠ Ġprivate Ġvar Ġtitle : ĠString Ġ= Ġ"" ĊĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Profile Account Create Custom OP DST ask :: class . java ) ĊĠ Ġprivate Ġval Ġtask Recorder Ġ= ĠTask Recorder . create < Account Create Error Details >() ĊĊĠ Ġoverride Ġfun Ġcall (): ĠTask Result < Account Create Error Details , ĠAccount Type > Ġ{ ĊĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( this . strings . creating Account )) ĊĠĠĠ Ġthis . logger . debug (" creating Ġa Ġcustom ĠOP DS Ġaccount ") ĊĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġaccount Provider Description Ġ= ĊĠĠĠĠĠĠĠ Ġthis . create Account Provider Description () ĊĊĠĠĠĠĠ Ġval Ġresolution Result Ġ= ĊĠĠĠĠĠĠĠ Ġthis . account Provider Registry . resolve ({ Ġ_, Ġmessage Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( message )) ĊĠĠĠĠĠĠĠ Ġ}, Ġaccount Provider Description ) ĊĊĠĠĠĠĠ Ġwhen Ġ( resolution Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠTask Result . Success Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġthis . create Account ( account Provider Description ) ĊĠĠĠĠĠĠĠ Ġis ĠTask Result . Failure Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġthis . account Resolution Failed ( resolution Result ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġthis . logger . error (" account Ġcreation Ġfailed : Ġ", Ġe ) ĊĊĠĠĠĠĠ Ġthis . task Recorder . current Step Failed App ending ( ĊĠĠĠĠĠĠĠ Ġthis . strings . unexpected Exception , ĊĠĠĠĠĠĠĠ ĠAccount Create Error Details . Unexpected Exception ( this . strings . unexpected Exception , Ġe ), ĊĠĠĠĠĠĠĠ Ġe ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġthis . publish Failure Event ( this . task Recorder . current Step () !! ) ĊĠĠĠĠĠ Ġthis . task Recorder . finish Failure () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġaccount Resolution Failed ( ĊĠĠĠ Ġresolution Result : ĠTask Result . Failure < Account Provider Resolution Error Details , ĠAccount Provider Type > ĊĠ Ġ): ĠTask Result . Failure < Account Create Error Details , ĠAccount Type > Ġ{ ĊĠĠĠ Ġthis . logger . error (" could Ġnot Ġresolve Ġan Ġaccount Ġprovider Ġdescription ") ĊĠĠĠ Ġthis . task Recorder . current Step Failed ( ĊĠĠĠĠĠ Ġthis . strings . res olving Account Provider Failed , ĊĠĠĠĠĠ ĠAccount Create Error Details . Account Provider Resolution Failed ( resolution Result . errors ()) ĊĠĠĠ Ġ) ĊĠĠĠ Ġreturn Ġthis . task Recorder . finish Failure () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Account ( ĊĠĠĠ Ġaccount Provider Description : ĠAccount Provider Description ĊĠ Ġ): ĠTask Result < Account Create Error Details , ĠAccount Type > Ġ{ ĊĊĠĠĠ Ġval Ġcreate Result Ġ= ĊĠĠĠĠĠ ĠProfile Account Create Task ( ĊĠĠĠĠĠĠĠ Ġaccount Events Ġ= Ġthis . account Events , ĊĠĠĠĠĠĠĠ Ġaccount Provider ID Ġ= Ġaccount Provider Description . id , ĊĠĠĠĠĠĠĠ Ġaccount Providers Ġ= Ġthis . account Provider Registry , ĊĠĠĠĠĠĠĠ Ġprofiles Ġ= Ġthis . profiles , ĊĠĠĠĠĠĠĠ Ġstrings Ġ= Ġthis . strings ĊĠĠĠĠĠ Ġ). call () ĊĊĠĠĠ Ġreturn Ġwhen Ġ( create Result ) Ġ{ ĊĠĠĠĠĠ Ġis ĠTask Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . task Recorder . addAll ( create Result . steps ) ĊĠĠĠĠĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . current Step Succeeded ( this . strings . creating Account Succeeded )) ĊĠĠĠĠĠĠĠ Ġthis . task Recorder . finish Success ( create Result . result ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġis ĠTask Result . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . task Recorder . addAll ( create Result . steps ) ĊĠĠĠĠĠĠĠ Ġthis . task Recorder . finish Failure () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCreate Ġa Ġcustom Ġaccount Ġprovider Ġdescription . ĊĠĠ Ġ*/ ĊĊĠ Ġprivate Ġfun Ġcreate Account Provider Description (): ĠAccount Provider Description Ġ{ ĊĠĠĠ Ġthis . logger . debug (" creating Ġan Ġaccount Ġprovider Ġdescription ") ĊĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( this . strings . creating An Account Provider Description )) ĊĊĠĠĠ Ġval Ġauth Document URI : ĠURI ? Ġ= Ġthis . find Authentication Document URI () ĊĠĠĠ Ġval Ġid Ġ= ĠURI . create (" urn : custom :" Ġ+ ĠUUID . randomUUID (). toString ()) ĊĠĠĠ Ġthis . logger . debug (" account Ġid Ġwill Ġbe Ġ{}", Ġid ) ĊĊĠĠĠ Ġval Ġlinks Ġ= ĊĠĠĠĠĠ Ġmutable ListOf < Link >() ĊĊĠĠĠ Ġlinks . add ( ĊĠĠĠĠĠ ĠLink . Link Basic ( ĊĠĠĠĠĠĠĠ Ġhref Ġ= Ġthis . op ds URI , ĊĠĠĠĠĠĠĠ Ġrelation Ġ= Ġ" http :// op ds - spec . org / catalog " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( auth Document URI Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġlinks . add ( ĊĠĠĠĠĠĠĠ ĠLink . Link Basic ( ĊĠĠĠĠĠĠĠĠĠ Ġhref Ġ= Ġauth Document URI , ĊĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠMIME Type (" application ", Ġ" vnd . op ds . authentication . v 1 . 0 + json ", Ġmap Of ()), ĊĠĠĠĠĠĠĠĠĠ Ġrelation Ġ= ĠOP DS Feed Constants . AUTHENT ICATION _ DOCUMENT _ REL ATION _ URI _ TEXT ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdescription Ġ= ĊĠĠĠĠĠ ĠAccount Provider Description ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġthis . title , ĊĠĠĠĠĠĠĠ Ġupdated Ġ= ĠDateTime . now (), ĊĠĠĠĠĠĠĠ Ġlinks Ġ= Ġlinks , ĊĠĠĠĠĠĠĠ Ġimages Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠ Ġis Production Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġis Automatic Ġ= Ġfalse ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠPublish Ġthe Ġdescription Ġto Ġthe Ġaccount Ġprovider Ġregistry . ĠIt Ġis Ġnow Ġpossible ĊĠĠĠĠ Ġ* Ġto Ġcreate Ġan Ġaccount Ġusing Ġthe Ġdescription ; Ġthe Ġaccount Ġcreation Ġtask Ġwill Ġask ĊĠĠĠĠ Ġ* Ġthe Ġregistry Ġto Ġresolve Ġthe Ġaccount Ġprovider Ġdescription . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġthis . account Provider Registry . update Description ( description ) ĊĠĠĠ Ġreturn Ġdescription ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfind Authentication Document URI (): ĠURI ? Ġ{ ĊĠĠĠ Ġthis . logger . debug (" creating Ġan Ġaccount Ġprovider Ġdescription ") ĊĊĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( this . strings . finding Auth Document URI )) ĊĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( this . strings . fetch ing OP DS Feed )) ĊĊĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠ Ġthis . http . get ( Option . none (), Ġthis . op ds URI , Ġ 0 L ) ĊĊĠĠĠ Ġreturn Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠ Ġis ĠHTTP Result OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . logger . debug (" f etched Ġop ds Ġfeed ") ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠParse Ġthe Ġresult Ġas Ġan ĠOP DS Ġfeed Ġand Ġthen Ġtry Ġto Ġfind Ġthe Ġauthentication Ġdocument ĊĠĠĠĠĠĠĠĠ Ġ* Ġlink Ġinside Ġit . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( this . strings . parsing OP DS Feed )) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġfeed Ġ= Ġthis . op ds Feed Parser . parse ( this . op ds URI , Ġresult . value ) ĊĠĠĠĠĠĠĠĠĠ Ġthis . title Ġ= Ġfeed . feed Title ĊĠĠĠĠĠĠĠĠĠ Ġthis . find Authentication Document Link ( feed ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis . publish Failure Event ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . task Recorder . current Step Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġthis . strings . parsing OP DS Feed Failed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Value Ġ= ĠAccount Create Error Details . Unexpected Exception ( e . message Ġ?: Ġ"", Ġe ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġis ĠHTTP Result Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . logger . debug (" failed Ġto Ġfetch Ġop ds Ġfeed ") ĊĊĠĠĠĠĠĠĠ ĠHTTP Problem Report Logging . log Error ( ĊĠĠĠĠĠĠĠĠĠ Ġlogger Ġ= Ġthis . logger , ĊĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġthis . op ds URI , ĊĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġresult . message , ĊĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġresult . status , ĊĠĠĠĠĠĠĠĠĠ Ġreport Option Ġ= Ġresult . problem Report ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġthe Ġserver Ġreturns Ġan Ġerror Ġbut Ġdeli vers Ġan Ġauthentication Ġdocument Ġas Ġa Ġresult , ĊĠĠĠĠĠĠĠĠ Ġ* Ġwell ... ĠWe 've Ġfound Ġthe Ġauthentication Ġdocument . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Types Ġ= Ġresult . response Headers [" content - type "] ĊĠĠĠĠĠĠĠ Ġif Ġ( content Types Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Types . contains (" application / vnd . op ds . authentication . v 1 . 0 + json ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . logger . debug (" deliver ed Ġauthentication Ġdocument Ġinstead Ġof Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . op ds URI ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠAny Ġother Ġerror Ġis Ġfatal . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġthis . publish Failure Event ( ĊĠĠĠĠĠĠĠĠĠ Ġthis . task Recorder . current Step Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġthis . strings . fetch ing OP DS Feed Failed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Value Ġ= ĠAccount Create Error Details . HTTP Request Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġthis . strings . fetch ing OP DS Feed Failed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġop ds URI Ġ= Ġthis . op ds URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġresult . status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproblem Report Ġ= Ġsome OrNull ( result . problem Report ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġthrow ĠIOException () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġis ĠHTTP Result Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . logger . debug (" failed Ġto Ġfetch Ġop ds Ġfeed : Ġ", Ġresult . error ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠAn Ġexception Ġis Ġfatal . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġthis . publish Failure Event ( ĊĠĠĠĠĠĠĠĠĠ Ġthis . task Recorder . current Step Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġthis . strings . fetch ing OP DS Feed Failed , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Value Ġ= ĠAccount Create Error Details . HTTP Request Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġthis . strings . fetch ing OP DS Feed Failed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġop ds URI Ġ= Ġthis . op ds URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproblem Report Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġresult . error ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġthrow Ġresult . error ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ// ĠXXX : ĠSe al Ġthe ĠHTTP Result Type ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUn reachable Code Exception () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfind Authentication Document Link ( feed : ĠOP DS Ac quisition Feed ): ĠURI ? Ġ{ ĊĠĠĠ Ġthis . publish Progress Event ( this . task Recorder . begin New Step ( this . strings . search ing Feed For Authentication Document )) ĊĠĠĠ Ġreturn Ġthis . some OrNull ( feed . auth Document ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġ< T > Ġsome OrNull ( opt : ĠOption Type < T >? ): ĠT ? Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( opt Ġis ĠSome < T >) Ġ{ ĊĠĠĠĠĠ Ġopt . get () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġpublish Failure Event ( step : ĠTask Step < Account Create Error Details >) Ġ= ĊĠĠĠ Ġthis . account Events . onNext ( ĊĠĠĠĠĠ ĠAccount Event Creation Failed ( ĊĠĠĠĠĠĠĠ Ġstep . resolution . message , Ġthis . task Recorder . finish Failure < Account Type >() ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġfun Ġpublish Progress Event ( step : ĠTask Step < Account Create Error Details >) Ġ= ĊĠĠĠ Ġthis . account Events . onNext ( Account Event Creation InProgress ( step . description )) Ċ } Ċ