package Ġcom . segment . analytics . dest inations . plugins Ċ Ċ import Ġcom . segment . analytics . kotlin . core .* Ċ import Ġcom . segment . analytics . kotlin . core . platform . Destination Plugin Ċ import Ġcom . segment . analytics . kotlin . core . platform . Event Plugin Ċ import Ġcom . segment . analytics . kotlin . core . platform . Plugin Ċ import Ġcom . segment . analytics . kotlin . core . platform . plugins . logger .* Ċ import Ġcom . segment . analytics . kotlin . core . utilities . Encode Defaults Json Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġjava . io . Data OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . Malformed URLException Ċ import Ġjava . net . URL Ċ import Ġjava . util . concurrent . ExecutorService Ċ Ċ // ĠAn ĠAfter Ġplugin Ġthat Ġdoesn 't Ġmodify Ġthe Ġincoming Ġpayload , Ġand Ġsends Ġit Ġto Ġthe Ġdesired Ġwebhook Ċ class ĠWeb hook Plugin ( ĊĠĠĠ Ġprivate Ġval Ġwebhook Url : ĠString , ĊĠĠĠ Ġprivate Ġval Ġnetwork Executor : ĠExecutor Service Ċ ) Ġ: ĠEvent Plugin Ġ{ ĊĠĠĠ Ġval Ġname : ĠString Ġ= Ġ" Webhook Plugin -$ webhook Url " ĊĠĠĠ Ġoverride Ġval Ġtype : ĠPlugin . Type Ġ= ĠPlugin . Type . After ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġanalytics : ĠAnalytics ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSends Ġa ĠJSON Ġpayload Ġto Ġthe Ġspecified Ġwebhook Url , Ġwith Ġthe ĠContent - Type = application / json ĊĠĠĠĠ Ġ* Ġheader Ġset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT : ĠBase Event ?> Ġsend Payload To Webhook ( payload : ĠT ?) Ġ= Ġnetwork Executor . submit Ġ{ ĊĠĠĠĠĠĠĠ Ġpayload ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics . log ( message Ġ= Ġ" Running Ġ${ payload . type } Ġpayload Ġthrough Ġ$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequested URL : ĠURL Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL ( webhook Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠMal formed URLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" At tempted Ġto Ġuse Ġmalformed Ġurl : Ġ$ webhook Url ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġrequested URL . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . do Output Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . set Chunk ed Streaming Mode ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . setRequest Property (" Content - Type ", Ġ" application / json ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠData OutputStream ( connection . output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpayload Json Ġ= ĠEncode Defaults Json . encode ToString ( payload ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write Bytes ( payload Json ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Code Ġ= Ġconnection . response Code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Code Ġ>= Ġ 3 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse Body : ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠinputStream : ĠInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . inputStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . error Stream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream ?. buffered Reader ()?. use ( java . io . BufferedReader :: read Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Could Ġnot Ġread Ġresponse Ġbody Ġfor Ġrejected Ġmessage : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics . log ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Failed Ġto Ġsend Ġpayload , ĠstatusCode =$ response Code , Ġbody =$ response Body ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= ĠLog Filter Kind . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtrack ( payload : ĠTrack Event ): ĠBase Event ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Payload To Webhook ( payload ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġidentify ( payload : ĠIdent ify Event ): ĠBase Event ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Payload To Webhook ( payload ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġscreen ( payload : ĠScreen Event ): ĠBase Event ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Payload To Webhook ( payload ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgroup ( payload : ĠGroup Event ): ĠBase Event ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Payload To Webhook ( payload ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġalias ( payload : ĠAlias Event ): ĠBase Event ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsend Payload To Webhook ( payload ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpayload ĊĠĠĠ Ġ} Ċ }