package Ġcom . github . a ou di am once f . apollo . plugin . util Ċ Ċ import Ġcom . ap ol log raph ql . apollo 3 . compiler . fromJson Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . github . a ou di am once f . apollo . plugin . util . Config Utils . is Int rospection Ċ import Ġcom . squareup . mos hi . Json Writer Ċ import Ġokhttp 3 . MediaType . Companion . to MediaType OrNull Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġokhttp 3 . Response Ċ import Ġok io . buffer Ċ import Ġok io . sink Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠSchema Downloader Ġ{ ĊĊĠĠĠ Ġfun Ġnew Ok HttpClient ( ĊĠĠĠĠĠĠĠ Ġconnect Timeout Seconds : ĠLong , ĊĠĠĠĠĠĠĠ Ġread Timeout Seconds : ĠLong , ĊĠĠĠĠĠĠĠ Ġwrite Timeout Seconds : ĠLong , ĊĠĠĠĠĠĠĠ Ġuse Self Signed C ertific at : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġuse G zip : ĠBoolean ĊĠĠĠ Ġ): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġok httpClient Builder Ġ= Ġif Ġ( use Self Signed C ertific at ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnsafe Ok HttpClient . get Unsafe Ok HttpClient () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( use G zip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok httpClient Builder . add Interceptor ( G zip Request Interceptor ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġok httpClient Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( connect Timeout Seconds , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( read Timeout Seconds , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( write Timeout Seconds , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexecute Query ( ĊĠĠĠĠĠĠĠ Ġquery : ĠString , ĊĠĠĠĠĠĠĠ Ġvariables : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġheaders : ĠMap < String , ĠString >, ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient ĊĠĠĠ Ġ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠbyteArray OutputStream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ ĠJson Writer . of ( byteArray OutputStream . sink (). buffer ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Object () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname (" query ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( variables Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname (" variables ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ( variables ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Object () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠbyteArray OutputStream . toByteArray (). to RequestBody (" application / json ". to MediaType OrNull ()) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header (" User - Agent ", Ġ" A pol lo Maven Plugin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" ap ol log raph ql - client - name ", Ġ" apollo - maven - plugin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" ap ol log raph ql - client - version ", Ġcom . ap ol log raph ql . apollo 3 . compiler . AP OL LO _ VERSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġok HttpClient . new Call ( request ). execute () ĊĊĠĠĠĠĠĠĠ Ġcheck ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġget Ġschema Ġfrom Ġ$ url : Ġ${ response . code } :\ n ${ response . body ?. string () }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload Int rospection ( ĊĠĠĠĠĠĠĠ Ġendpoint : ĠString , ĊĠĠĠĠĠĠĠ Ġschema : ĠFile , ĊĠĠĠĠĠĠĠ Ġheaders : ĠMap < String , ĠString >, ĊĠĠĠĠĠĠĠ Ġpretty Print : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute Query ( int rospection Query , Ġnull , Ġendpoint , Ġheaders , Ġok HttpClient ) ĊĊĠĠĠĠĠĠĠ Ġwrite Response ( schema , Ġresponse , Ġpretty Print ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdownload Registry ( ĊĠĠĠĠĠĠĠ Ġgraph : ĠString , ĊĠĠĠĠĠĠĠ Ġschema : ĠFile , ĊĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġvariant : ĠString , ĊĠĠĠĠĠĠĠ Ġpretty Print : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġok HttpClient : ĠOk HttpClient ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġquery ĠDownload Schema ($ {' $ '} graph ID : ĠID !, Ġ${ '$ '} variant : ĠString !) Ġ{ ĊĠĠĠĠĠ Ġservice ( id : Ġ${ '$ '} graph ID ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvariant ( name : Ġ${ '$ '} variant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġactive Schema Publish Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocument ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġval Ġvariables Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ" graph ID ": Ġ"$ graph ", ĊĠĠĠĠĠĠĠ Ġ" variant ": Ġ"$ variant " ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġexecute Query ( query , Ġvariables , Ġ" https :// graphql . api . ap ol log raph ql . com / api / graphql ", Ġmap Of (" x - api - key " Ġto Ġkey ), Ġok HttpClient ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse String Ġ= Ġresponse . body . use Ġ{ Ġit ?. string () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġresponse String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . fromJson < Map < String , Ġ* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" data "). cast < Map < String , Ġ* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" service "). cast < Map < String , Ġ* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" variant "). cast < Map < String , Ġ* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" active Schema Publish "). cast < Map < String , Ġ* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" schema "). cast < Map < String , Ġ* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get (" document "). cast < String >() ĊĊĠĠĠĠĠĠĠ Ġcheck ( document Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġretrieve Ġdocument Ġfrom Ġ$ response String \ n Check Ġgraph Ġid Ġand Ġvariant " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwrite Response ( schema , Ġdocument , Ġpretty Print ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT > ĠAny ?. cast () Ġ= Ġthis Ġas ? ĠT ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Response ( schema : ĠFile , Ġresponse : ĠResponse , Ġpretty Print : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġschema . parent File ?. mkdir s () ĊĠĠĠĠĠĠĠ Ġresponse . body . use Ġ{ Ġresponse Body Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( schema . is Int rospection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema . write Text ( pret ify ( response Body ?. string (), Ġpretty Print )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Body ?. let Ġ{ Ġschema . write Text ( it . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Response ( schema : ĠFile , Ġdocument : ĠString ?, Ġpretty Print : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġschema . parent File ?. mkdir s () ĊĠĠĠĠĠĠĠ Ġif Ġ( schema . is Int rospection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema . write Text ( pret ify ( document , Ġpretty Print )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument ?. let Ġ{ Ġschema . write Text ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpret ify ( document : ĠString ?, Ġpretty Print : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( document . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" document : Ġis Ġnull Ġor Ġblank ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( pretty Print ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson : ĠJsonNode Ġ= Ġmapper . readValue ( document , ĠJsonNode :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmapper . writer WithDefault PrettyPrinter (). writeValue AsString ( json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdocument ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmapper Ġ= ĠObjectMapper () ĊĊĠĠĠ Ġprivate Ġval Ġint rospection Query Ġ= ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠ Ġquery ĠInt rospection Query Ġ{ ĊĠĠĠĠĠ Ġ__ schema Ġ{ ĊĠĠĠĠĠĠĠ Ġquery Type Ġ{ Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġmutation Type Ġ{ Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġsubscription Type Ġ{ Ġname Ġ} ĊĠĠĠĠĠĠĠ Ġtypes Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ... Full Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdirectives Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠ Ġdescription ĊĠĠĠĠĠĠĠĠĠ Ġlocations ĊĠĠĠĠĠĠĠĠĠ Ġargs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ... Input Value ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfragment ĠFull Type Ġon Ġ__ Type Ġ{ ĊĠĠĠĠĠ Ġkind ĊĠĠĠĠĠ Ġname ĊĠĠĠĠĠ Ġdescription ĊĠĠĠĠĠ Ġfields ( include Deprecated : Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠ Ġdescription ĊĠĠĠĠĠĠĠ Ġargs Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ... Input Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtype Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ... Type Ref ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Deprecated ĊĠĠĠĠĠĠĠ Ġdeprecation Reason ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġinput Fields Ġ{ ĊĠĠĠĠĠĠĠ Ġ... Input Value ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġinterfaces Ġ{ ĊĠĠĠĠĠĠĠ Ġ... Type Ref ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġenum Values ( include Deprecated : Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠ Ġdescription ĊĠĠĠĠĠĠĠ Ġis Deprecated ĊĠĠĠĠĠĠĠ Ġdeprecation Reason ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġpossible Types Ġ{ ĊĠĠĠĠĠĠĠ Ġ... Type Ref ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfragment ĠInput Value Ġon Ġ__ Input Value Ġ{ ĊĠĠĠĠĠ Ġname ĊĠĠĠĠĠ Ġdescription ĊĠĠĠĠĠ Ġtype Ġ{ Ġ... Type Ref Ġ} ĊĠĠĠĠĠ ĠdefaultValue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfragment ĠType Ref Ġon Ġ__ Type Ġ{ ĊĠĠĠĠĠ Ġkind ĊĠĠĠĠĠ Ġname ĊĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġof Type Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () Ċ } Ċ