package Ġcom . pb j . sdk . di Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Context Ċ import Ġcom . pb j . sdk . concrete Implementation . authentication . Guest Api Ċ import Ġcom . pb j . sdk . concrete Implementation . authentication . User Api Ċ import Ġcom . pb j . sdk . concrete Implementation . generic . Flow Stream Adapter Ċ import Ġcom . pb j . sdk . concrete Implementation . intercept ors . Accept Interceptor Ċ import Ġcom . pb j . sdk . concrete Implementation . intercept ors . ApiKey Interceptor Ċ import Ġcom . pb j . sdk . concrete Implementation . intercept ors . Authorization Interceptor Ċ import Ġcom . pb j . sdk . concrete Implementation . intercept ors . TimeZone Interceptor Ċ import Ġcom . pb j . sdk . concrete Implementation . live . Live Api Ċ import Ġcom . pb j . sdk . concrete Implementation . live . Live WebSocket Api Ċ import Ġcom . pb j . sdk . concrete Implementation . organization . Organization Api Ċ import Ġcom . pb j . sdk . concrete Implementation . product . Product Api Ċ import Ġcom . pb j . sdk . concrete Implementation . product . Product WebSocket Api Ċ import Ġcom . pb j . sdk . concrete Implementation . storage . PB J Preferences Ċ import Ġcom . pb j . sdk . concrete Implementation . vod . Vod Api Ċ import Ġcom . pb j . sdk . core . Api Environment Ċ import Ġcom . pb j . sdk . core . domain Ċ import Ġcom . pb j . sdk . core . isDebug Ċ import Ġcom . pb j . sdk . parser . Date Parser Ċ import Ġcom . pb j . sdk . parser . DateTime Parser Ċ import Ġcom . pb j . sdk . parser . Url Parser Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġcom . t inder . sc ar let . Sc ar let Ċ import Ġcom . t inder . sc ar let . WebSocket Ċ import Ġcom . t inder . sc ar let . lifecycle . android . Android Lifecycle Ċ import Ġcom . t inder . sc ar let . message adapter . mos hi . M oshi Message Adapter Ċ import Ġcom . t inder . sc ar let . retry . Exponent ial With J itter Backoff Strategy Ċ import Ġcom . t inder . sc ar let . websocket . okhttp . Ok HttpClient WebSocket Connection Est ablish er Ċ import Ġcom . t inder . sc ar let . websocket . okhttp . Ok Http WebSocket Ċ import Ġcom . t inder . sc ar let . websocket . okhttp . request . Request Factory Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . k oin . core . module . Module Ċ import Ġorg . k oin . dsl . module Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ internal Ġobject ĠData Module Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapi Environment : ĠApi Environment ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠapiKey : ĠString ĊĊĠĠĠ Ġfun Ġinit ( apiKey : ĠString , Ġenvironment : ĠApi Environment ): ĠModule Ġ{ ĊĊĠĠĠĠĠĠĠ Ġapi Environment Ġ= Ġenvironment ĊĠĠĠĠĠĠĠ Ġthis . apiKey Ġ= ĠapiKey ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdata Module ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdata Module Ġ= Ġmodule Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Ok Http Builder ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide SharedPreferences ( get (), Ġget ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Ret rofit ( get (), Ġget ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide M oshi () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Organization Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide User Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Guest Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Vod Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Live Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Product Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Sc ar let ( get (), Ġget (), Ġget (), Ġget ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Live WebSocket Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprovide Product WebSocket Api ( get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠTIME OUT Ġ= Ġ 3 0 ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Ok Http Builder ( user SharedPreferences : ĠP BJ Preferences ): ĠOk HttpClient Ġ= ĊĠĠĠĠĠĠĠ ĠOk HttpClient . Builder (). apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Timeout ( TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Timeout ( TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Timeout ( TIMEOUT . to Long (), ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( Accept Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( ApiKey Interceptor ( apiKey )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( provide Http Logging Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( TimeZone Interceptor ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Interceptor ( Authorization Interceptor ( user SharedPreferences )) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġprivate Ġfun Ġprovide SharedPreferences ( context : ĠContext , Ġm oshi : ĠM oshi ) Ġ= ĠP BJ Preferences ( context , Ġm oshi ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide M oshi () Ġ= ĠM oshi . Builder () ĊĠĠĠĠĠĠĠ Ġ. add ( Kotlin Json Adapter Factory ()) ĊĠĠĠĠĠĠĠ Ġ. add ( Url Parser ()) ĊĠĠĠĠĠĠĠ Ġ. add ( Date Parser ()) ĊĠĠĠĠĠĠĠ Ġ. add ( DateTime Parser ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Ret rofit ( ok HttpClient : ĠOk HttpClient , Ġm oshi : ĠM oshi ): ĠRet rofit Ġ= ĊĠĠĠĠĠĠĠ ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( getBase Api Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ( mos hi ). as Len ient ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Sc ar let ( ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient , ĊĠĠĠĠĠĠĠ Ġm oshi : ĠM oshi , ĊĠĠĠĠĠĠĠ Ġpreferences : ĠP BJ Preferences , ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication ĊĠĠĠ Ġ): ĠS car let Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ getBase WebSocket Url () }/ episodes / stream ? token =${ preferences . user Token }& org _ api _ key =$ apiKey " ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Factory Ġ= Ġobject Ġ: ĠRequest Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Request (): ĠRequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconnection Est ablish er : ĠOk Http WebSocket . Connection Est ablish er Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOk HttpClient WebSocket Connection Est ablish er ( ok HttpClient , Ġrequest Factory ) ĊĊĠĠĠĠĠĠĠ Ġval Ġweb Socket Factory : ĠWebSocket . Factory Ġ= ĠOk Http WebSocket . Factory ( connection Est ablish er ) ĊĠĠĠĠĠĠĠ Ġval Ġbackoff Strategy Ġ= ĠExp onent ial With J itter Backoff Strategy ( 5 0 0 0 , Ġ 5 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠS car let . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Stream Adapter Factory ( Flow Stream Adapter . Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addMessage Adapter Factory ( M oshi Message Adapter . Factory ( mos hi )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. web Socket Factory ( web Socket Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. backoff Strategy ( backoff Strategy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. lifecycle ( Android Lifecycle . of Application Foreground ( application )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Organization Api ( ret rofit : ĠRet rofit ): ĠOrganization Api Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Organization Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide User Api ( ret rofit : ĠRet rofit ): ĠUser Api Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( User Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Guest Api ( ret rofit : ĠRet rofit ): ĠGuest Api Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Guest Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Vod Api ( ret rofit : ĠRet rofit ): ĠV od Api Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Vod Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Live Api ( ret rofit : ĠRet rofit ): ĠLive Api Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Live Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Product Api ( ret rofit : ĠRet rofit ): ĠProduct Api Ġ= ĊĠĠĠĠĠĠĠ Ġretrofit . create ( Product Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Live WebSocket Api ( sc ar let : ĠS car let ): ĠLive WebSocket Api Ġ= ĊĠĠĠĠĠĠĠ Ġsc ar let . create ( Live WebSocket Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Product WebSocket Api ( sc ar let : ĠS car let ): ĠProduct WebSocket Api Ġ= ĊĠĠĠĠĠĠĠ Ġsc ar let . create ( Product WebSocket Api :: class . java ) ĊĊĠĠĠ Ġprivate Ġfun Ġprovide Http Logging Interceptor (): ĠHttp Logging Interceptor Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogging Ġ= ĠHttp Logging Interceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( api Environment . isDebug ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogging . level Ġ= ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogging . level Ġ= ĠHttp Logging Interceptor . Level . NONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlogging ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Base Api Url () Ġ= Ġ" https ://${ api Environment . domain }/ api /" ĊĊĠĠĠ Ġprivate Ġfun Ġget Base WebSocket Url () Ġ= Ġ" wss ://${ api Environment . domain }/ ws " ĊĊ Ċ }