package Ġcom . segment . analytics . kotlin . core Ċ Ċ import Ġcom . segment . analytics . kotlin . core . utilities . put All Ċ import Ġkotlinx . serialization . decode FromString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġkotlinx . serialization . json . build JsonObject Ċ import Ġkotlinx . serialization . json . put Ċ import Ġso vr an . kotlin . Action Ċ import Ġso vr an . kotlin . State Ċ import Ġjava . util . UUID Ċ Ċ /** Ċ Ġ* ĠStores Ġstate Ġrelated Ġto Ġthe Ġanalytics Ġsystem Ċ Ġ* Ġ- Ġconfiguration Ġused Ġto Ġinitialize Ġthe Ġclient Ċ Ġ* Ġ- Ġsegment Ġsettings Ġas Ġa Ġjson Ġmap Ċ Ġ* Ġ- Ġrunning Ġstate Ġindicating Ġthe Ġsystem Ġhas Ġreceived Ġsettings Ċ Ġ*/ Ċ data Ġclass ĠSystem ( ĊĠĠĠ Ġvar Ġconfiguration : ĠConfiguration Ġ= ĠConfiguration (""), ĊĠĠĠ Ġvar Ġsettings : ĠSettings ?, ĊĠĠĠ Ġvar Ġrunning : ĠBoolean , ĊĠĠĠ Ġvar Ġinitial Settings Dis patched : ĠBoolean Ċ ) Ġ: ĠState Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdefault State ( configuration : ĠConfiguration , Ġstorage : ĠStorage ): ĠSystem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson . decode FromString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage . read ( Storage . Constants . Settings ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . default Settings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSystem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration Ġ= Ġconfiguration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Ġ= Ġsettings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Settings Dis patched Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUpdate Settings Action ( var Ġsettings : ĠSettings ) Ġ: ĠAction < System > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠSystem ): ĠSystem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSystem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . running , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . initial Settings Dis patched ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠToggle Running Action ( var Ġrunning : ĠBoolean ) Ġ: ĠAction < System > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠSystem ): ĠSystem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSystem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . settings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . initial Settings Dis patched ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAdd Destination To Settings Action ( ĊĠĠĠĠĠĠĠ Ġvar Ġdestination Key : ĠString , ĊĠĠĠ Ġ) Ġ: ĠAction < System > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠSystem ): ĠSystem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Integr ations Ġ= Ġbuild JsonObject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . settings ?. integrations ?. let Ġ{ Ġput All ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( destination Key , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Settings Ġ= Ġstate . settings ?. copy ( integrations Ġ= Ġnew Integr ations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSystem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Settings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . running , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . initial Settings Dis patched ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠToggle Settings Dispatch ( ĊĠĠĠĠĠĠĠ Ġvar Ġdis patched : ĠBoolean , ĊĠĠĠ Ġ) Ġ: ĠAction < System > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠSystem ): ĠSystem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSystem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . configuration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . settings , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . running , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis patched ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠStores Ġstate Ġrelated Ġto Ġthe Ġuser Ċ Ġ* Ġ- Ġanonymous Id Ġ( String ) Ċ Ġ* Ġ- ĠuserId Ġ( String ) Ċ Ġ* Ġ- Ġtraits Ġ( Map ) Ċ Ġ*/ Ċ data Ġclass ĠUserInfo ( ĊĠĠĠ Ġvar Ġanonymous Id : ĠString , ĊĠĠĠ Ġvar ĠuserId : ĠString ?, ĊĠĠĠ Ġvar Ġtraits : ĠJsonObject ? Ċ ) Ġ: ĠState Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdefault State ( storage : ĠStorage ): ĠUserInfo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId : ĠString ? Ġ= Ġstorage . read ( Storage . Constants . UserId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtraits : ĠJsonObject ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson . decode FromString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage . read ( Storage . Constants . Traits ) Ġ?: Ġ"{} " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanonymous Id : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage . read ( Storage . Constants . Anonymous Id ) Ġ?: ĠUUID . randomUUID (). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUserInfo ( anonymous Id , ĠuserId , Ġtraits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠReset Action Ġ: ĠAction < UserInfo > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠUserInfo ): ĠUserInfo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUserInfo ( UUID . randomUUID (). toString (), Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSet UserId Action ( var ĠuserId : ĠString ) Ġ: ĠAction < UserInfo > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠUserInfo ): ĠUserInfo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUserInfo ( state . anonymous Id , ĠuserId , Ġstate . traits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSet Anonymous Id Action ( var Ġanonymous Id : ĠString ) Ġ: ĠAction < UserInfo > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠUserInfo ): ĠUserInfo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUserInfo ( anonymous Id , Ġstate . userId , Ġstate . traits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSet Traits Action ( var Ġtraits : ĠJsonObject ) Ġ: ĠAction < UserInfo > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠUserInfo ): ĠUserInfo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUserInfo ( state . anonymous Id , Ġstate . userId , Ġtraits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSet UserId And Traits Action ( var ĠuserId : ĠString , Ġvar Ġtraits : ĠJsonObject ) Ġ: ĠAction < UserInfo > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġreduce ( state : ĠUserInfo ): ĠUserInfo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUserInfo ( state . anonymous Id , ĠuserId , Ġtraits ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ