package Ġcom . st yt ch . sdk Ċ Ċ import Ġcom . squareup . mos hi . Json Class Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġretrofit 2 . http . Body Ċ import Ġretrofit 2 . http . POST Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ public Ġobject ĠSty t ch Api Ġ{ ĊĠĠĠ Ġpublic Ġobject ĠMagic Links Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġobject ĠEmail Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġhttps :// st yt ch . com / docs / api / log - in - or - create - user - by - email Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġsuspend Ġfun Ġlogin OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Magic Link Url : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup Magic Link Url : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Expiration Minutes : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup Expiration Minutes : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User As Pending : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠSty t ch DataTypes . Attributes ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠSty t ch Result < St yt ch Response Types . Login OrCreate User By Email Response > Ġ= Ġsafe Api Call Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Service . login OrCreate User By Email ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Request Types . SDK Login OrCreate User By Email Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic _ token Ġ= ĠSty t ch . public Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠSty t ch Request Types . Login OrCreate User By Email Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ magic _ link _ url Ġ= Ġlogin Magic Link Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup _ magic _ link _ url Ġ= Ġsignup Magic Link Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ expiration _ minutes Ġ= Ġlogin Expiration Minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup _ expiration _ minutes Ġ= Ġsignup Expiration Minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate _ user _ as _ pending Ġ= Ġcreate User As Pending , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġobject ĠO TP s Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġobject ĠSMS Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġhttps :// st yt ch . com / docs / api / log - in - or - create - user - by - sms Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġsuspend Ġfun Ġlogin OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠphoneNumber : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration Minutes : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User As Pending : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠSty t ch DataTypes . Attributes ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠSty t ch Result < St yt ch Response Types . Login OrCreate User By SMS Response > Ġ= Ġsafe Api Call Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Service . login OrCreate User By SMS ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Request Types . SDK Login OrCreate User By SMS Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic _ token Ġ= ĠSty t ch . public Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= ĠSty t ch Request Types . Login OrCreate User By SMS Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphone _ number Ġ= ĠphoneNumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration _ minutes Ġ= Ġexpiration Minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate _ user _ as _ pending Ġ= Ġcreate User As Pending , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġapi Service : ĠSty t ch ApiService Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSty t ch . assert Initialized () ĊĠĠĠĠĠĠĠ ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( St yt ch . environment . baseUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 1 2 0 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( 1 2 0 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( 1 2 0 L , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( St yt ch ApiService :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġobject ĠSty t ch Callback Api Ġ{ ĊĠĠĠ Ġpublic Ġobject ĠMagic Links Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġobject ĠEmail Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġhttps :// st yt ch . com / docs / api / log - in - or - create - user - by - email Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġpublic Ġfun Ġlogin OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Magic Link Url : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup Magic Link Url : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Expiration Minutes : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup Expiration Minutes : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User As Pending : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠSty t ch DataTypes . Attributes ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( St yt ch Result < St yt ch Response Types . Login OrCreate User By Email Response >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠUnit Ġ= Ġcallback . queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Api . Magic Links . Email . login OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Magic Link Url Ġ= Ġlogin Magic Link Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup Magic Link Url Ġ= Ġsignup Magic Link Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Expiration Minutes Ġ= Ġlogin Expiration Minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignup Expiration Minutes Ġ= Ġsignup Expiration Minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User As Pending Ġ= Ġcreate User As Pending , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġobject ĠO TP s Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġobject ĠSMS Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Ġhttps :// st yt ch . com / docs / api / log - in - or - create - user - by - sms Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġpublic Ġfun Ġlogin OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠphoneNumber : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration Minutes : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User As Pending : ĠBoolean ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes : ĠSty t ch DataTypes . Attributes ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback : Ġ( St yt ch Result < St yt ch Response Types . Login OrCreate User By SMS Response >) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠUnit Ġ= Ġcallback . queue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Api . OT Ps . SMS . login OrCreate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠphoneNumber Ġ= ĠphoneNumber , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpiration Minutes Ġ= Ġexpiration Minutes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate User As Pending Ġ= Ġcreate User As Pending , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= Ġattributes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġ(( T ) Ġ-> ĠUnit ). queue ( block : Ġsuspend Ġ() Ġ-> ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ queue ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġobject ĠSty t ch DataTypes Ġ{ ĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġpublic Ġdata Ġclass ĠAttributes ( ĊĠĠĠĠĠĠĠ Ġval Ġip _ address : ĠString ?, ĊĠĠĠĠĠĠĠ Ġval Ġuser _ agent : ĠString ?, ĊĠĠĠ Ġ) Ċ } Ċ Ċ internal Ġobject ĠSty t ch Request Types Ġ{ ĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠLogin OrCreate User By Email Request ( ĊĠĠĠĠĠĠĠ Ġval Ġemail : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġlogin _ magic _ link _ url : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġsignup _ magic _ link _ url : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġlogin _ expiration _ minutes : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġsignup _ expiration _ minutes : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġcreate _ user _ as _ pending : ĠBoolean ?, ĊĠĠĠĠĠĠĠ Ġval Ġattributes : ĠSty t ch DataTypes . Attributes ?, ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠSDK Login OrCreate User By Email Request ( ĊĠĠĠĠĠĠĠ Ġval Ġpublic _ token : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġrequest : ĠLogin OrCreate User By Email Request , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠLogin OrCreate User By SMS Request ( ĊĠĠĠĠĠĠĠ Ġval Ġphone _ number : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġexpiration _ minutes : ĠInt ?, ĊĠĠĠĠĠĠĠ Ġval Ġcreate _ user _ as _ pending : ĠBoolean ?, ĊĠĠĠĠĠĠĠ Ġval Ġattributes : ĠSty t ch DataTypes . Attributes ?, ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġdata Ġclass ĠSDK Login OrCreate User By SMS Request ( ĊĠĠĠĠĠĠĠ Ġval Ġpublic _ token : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġrequest : ĠLogin OrCreate User By SMS Request , ĊĠĠĠ Ġ) Ċ } Ċ Ċ public Ġobject ĠSty t ch Response Types Ġ{ ĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġpublic Ġdata Ġclass ĠLogin OrCreate User By Email Response ( ĊĠĠĠĠĠĠĠ Ġval Ġrequest _ id : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġuser _ id : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġemail _ id : ĠString , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Json Class ( generate Adapter Ġ= Ġtrue ) ĊĠĠĠ Ġpublic Ġdata Ġclass ĠLogin OrCreate User By SMS Response ( ĊĠĠĠĠĠĠĠ Ġval Ġrequest _ id : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġuser _ id : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġphone _ id : ĠString , ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ public Ġdata Ġclass ĠSty t ch ErrorResponse ( ĊĠĠĠ Ġval Ġstatus _ code : ĠInt , ĊĠĠĠ Ġval Ġrequest _ id : ĠString , ĊĠĠĠ Ġval Ġerror _ type : ĠString , ĊĠĠĠ Ġval Ġerror _ message : ĠString ?, ĊĠĠĠ Ġval Ġerror _ url : ĠString , Ċ ) Ċ Ċ public Ġenum Ġclass ĠSty t ch ErrorType ( public Ġval Ġstring Value : ĠString ) Ġ{ ĊĠĠĠ ĠE MAIL _ NOT _ FOUND (" email _ not _ found "), ĊĠĠĠ ĠB ILL ING _ NOT _ VER IFI ED _ FOR _ EMAIL (" billing _ not _ verified _ for _ email "), ĊĠĠĠ ĠUN ABLE _ TO _ AUTH _ MAGIC _ LINK (" unable _ to _ auth _ magic _ link "), ĊĠĠĠ ĠINVALID _ USER _ ID (" invalid _ user _ id "), ĊĠĠĠ ĠU NA UTH ORIZ ED _ CRED ENTIAL S (" un authorized _ credentials "), ĊĠĠĠ ĠINTERNAL _ SERVER _ ERROR (" internal _ server _ error "), ĊĠĠĠ ĠTO O _ MAN Y _ REQUEST S (" too _ many _ requests "), ĊĠĠĠ ĠINVALID _ PHONE _ NUMBER (" invalid _ phone _ number "), ĊĠĠĠ ĠUN ABLE _ TO _ AUTH _ OTP _ CODE (" unable _ to _ auth _ otp _ code "), ĊĠĠĠ ĠO TP _ CODE _ NOT _ FOUND (" otp _ code _ not _ found "), Ċ } Ċ Ċ internal Ġfun ĠString . to St yt ch ErrorType (): ĠSty t ch ErrorType ? Ġ{ ĊĠĠĠ ĠSty t ch ErrorType . values (). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġit . stringValue ) Ġreturn Ġit ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ internal Ġinterface ĠSty t ch ApiService Ġ{ ĊĠĠĠ Ġ@ POST (" sdk / magic _ links / email / login _ or _ create ") ĊĠĠĠ Ġsuspend Ġfun Ġlogin OrCreate User By Email ( ĊĠĠĠĠĠĠĠ Ġ@ Body Ġrequest : ĠSty t ch Request Types . SDK Login OrCreate User By Email Request , ĊĠĠĠ Ġ): ĠSty t ch Response Types . Login OrCreate User By Email Response ĊĊĠĠĠ Ġ@ POST (" sdk / ot ps / sms / login _ or _ create ") ĊĠĠĠ Ġsuspend Ġfun Ġlogin OrCreate User By SMS ( ĊĠĠĠĠĠĠĠ Ġ@ Body Ġrequest : ĠSty t ch Request Types . SDK Login OrCreate User By SMS Request , ĊĠĠĠ Ġ): ĠSty t ch Response Types . Login OrCreate User By SMS Response Ċ } Ċ Ċ public Ġsealed Ġclass ĠSty t ch Result < out ĠT > Ġ{ ĊĠĠĠ Ġpublic Ġdata Ġclass ĠSuccess < out ĠT >( val Ġvalue : ĠT ) Ġ: ĠSty t ch Result < T >() ĊĠĠĠ Ġpublic Ġobject ĠNetwork Error Ġ: ĠSty t ch Result < Nothing >() ĊĠĠĠ Ġpublic Ġdata Ġclass ĠError ( val ĠerrorCode : ĠInt , Ġval Ġerror Response : ĠSty t ch ErrorResponse ?) Ġ: ĠSty t ch Result < Nothing >() Ġ{ ĊĠĠĠĠĠĠĠ Ġpublic Ġval Ġerror Type : ĠSty t ch ErrorType ? Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Response ?. error _ type ?. to St yt ch ErrorType () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġsuspend Ġfun Ġ< T > Ġsafe Api Call ( api Call : Ġsuspend Ġ() Ġ-> ĠT ): ĠSty t ch Result < T > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠ ĠSty t ch . assert Initialized () ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠSty t ch Result . Success ( api Call ()) ĊĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( throwable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorCode Ġ= Ġthrowable . code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġst yt ch ErrorResponse Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . response ()?. error Body ()?. source ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM oshi . Builder (). build (). adapter ( St yt ch ErrorResponse :: class . java ). fromJson ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Log . w (" http Ġerror Ġcode : Ġ$ errorCode , Ġerror Response : Ġ$ st yt ch ErrorResponse ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Result . Error ( errorCode Ġ= ĠerrorCode , Ġerror Response Ġ= Ġst yt ch ErrorResponse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Log . w (" Network ĠError ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSty t ch Result . Network Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ