Skip to content

Commit f089a14

Browse files
calvincestarimartinbonninBoD
authored
feature: Enhanced Client Awareness (v4.x) (#6567)
* Adds ApolloClient configuration * Adds ApolloRequest configuration * Apollo API: generate the version (#6539) * Apollo API: generate the version * update apiDump * Updates DefaultHttpRequestComposer * Update API signature files * Update fixtures when making a release * Updates tests * Reformat files * Fix test data * Update test fixtures * Keep binary compatibility * update apiDump --------- Co-authored-by: Martin Bonnin <[email protected]> Co-authored-by: BoD <[email protected]>
1 parent 831fff3 commit f089a14

File tree

19 files changed

+234
-28
lines changed

19 files changed

+234
-28
lines changed

libraries/apollo-api/api/apollo-api.api

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ public final class com/apollographql/apollo/api/Adapters {
3737
public static synthetic fun -toJson$default (Lcom/apollographql/apollo/api/Adapter;Ljava/lang/Object;Lcom/apollographql/apollo/api/CustomScalarAdapters;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
3838
}
3939

40+
public final class com/apollographql/apollo/api/ApolloApiVersionKt {
41+
public static final field apolloApiVersion Ljava/lang/String;
42+
}
43+
4044
public final class com/apollographql/apollo/api/ApolloOptionalAdapter : com/apollographql/apollo/api/Adapter {
4145
public fun <init> (Lcom/apollographql/apollo/api/Adapter;)V
4246
public fun fromJson (Lcom/apollographql/apollo/api/json/JsonReader;Lcom/apollographql/apollo/api/CustomScalarAdapters;)Lcom/apollographql/apollo/api/Optional;
@@ -46,7 +50,7 @@ public final class com/apollographql/apollo/api/ApolloOptionalAdapter : com/apol
4650
}
4751

4852
public final class com/apollographql/apollo/api/ApolloRequest : com/apollographql/apollo/api/ExecutionOptions {
49-
public synthetic fun <init> (Lcom/apollographql/apollo/api/Operation;Ljava/util/UUID;Lcom/apollographql/apollo/api/ExecutionContext;Lcom/apollographql/apollo/api/http/HttpMethod;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
53+
public synthetic fun <init> (Lcom/apollographql/apollo/api/Operation;Ljava/util/UUID;Lcom/apollographql/apollo/api/ExecutionContext;Lcom/apollographql/apollo/api/http/HttpMethod;Ljava/util/List;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;ZLkotlin/jvm/internal/DefaultConstructorMarker;)V
5054
public fun getCanBeBatched ()Ljava/lang/Boolean;
5155
public fun getEnableAutoPersistedQueries ()Ljava/lang/Boolean;
5256
public fun getExecutionContext ()Lcom/apollographql/apollo/api/ExecutionContext;
@@ -59,6 +63,7 @@ public final class com/apollographql/apollo/api/ApolloRequest : com/apollographq
5963
public final fun getRetryOnError ()Ljava/lang/Boolean;
6064
public fun getSendApqExtensions ()Ljava/lang/Boolean;
6165
public fun getSendDocument ()Ljava/lang/Boolean;
66+
public final fun getSendEnhancedClientAwareness ()Z
6267
public final fun newBuilder ()Lcom/apollographql/apollo/api/ApolloRequest$Builder;
6368
public final fun newBuilder (Lcom/apollographql/apollo/api/Operation;)Lcom/apollographql/apollo/api/ApolloRequest$Builder;
6469
}
@@ -88,6 +93,7 @@ public final class com/apollographql/apollo/api/ApolloRequest$Builder : com/apol
8893
public final fun getRetryOnError ()Ljava/lang/Boolean;
8994
public fun getSendApqExtensions ()Ljava/lang/Boolean;
9095
public fun getSendDocument ()Ljava/lang/Boolean;
96+
public final fun getSendEnhancedClientAwareness ()Z
9197
public fun httpHeaders (Ljava/util/List;)Lcom/apollographql/apollo/api/ApolloRequest$Builder;
9298
public synthetic fun httpHeaders (Ljava/util/List;)Ljava/lang/Object;
9399
public fun httpMethod (Lcom/apollographql/apollo/api/http/HttpMethod;)Lcom/apollographql/apollo/api/ApolloRequest$Builder;
@@ -99,6 +105,7 @@ public final class com/apollographql/apollo/api/ApolloRequest$Builder : com/apol
99105
public synthetic fun sendApqExtensions (Ljava/lang/Boolean;)Ljava/lang/Object;
100106
public fun sendDocument (Ljava/lang/Boolean;)Lcom/apollographql/apollo/api/ApolloRequest$Builder;
101107
public synthetic fun sendDocument (Ljava/lang/Boolean;)Ljava/lang/Object;
108+
public final fun sendEnhancedClientAwareness (Z)Lcom/apollographql/apollo/api/ApolloRequest$Builder;
102109
}
103110

104111
public final class com/apollographql/apollo/api/ApolloResponse {
@@ -935,6 +942,7 @@ public final class com/apollographql/apollo/api/http/DefaultHttpRequestComposer
935942
public final class com/apollographql/apollo/api/http/DefaultHttpRequestComposer$Companion {
936943
public final fun appendQueryParameters (Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;
937944
public final fun buildParamsMap (Lcom/apollographql/apollo/api/Operation;Lcom/apollographql/apollo/api/CustomScalarAdapters;ZZ)Lokio/ByteString;
945+
public final fun buildParamsMap (Lcom/apollographql/apollo/api/Operation;Lcom/apollographql/apollo/api/CustomScalarAdapters;ZZZ)Lokio/ByteString;
938946
public final fun buildPostBody (Lcom/apollographql/apollo/api/Operation;Lcom/apollographql/apollo/api/CustomScalarAdapters;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lcom/apollographql/apollo/api/http/HttpBody;
939947
public final fun buildPostBody (Lcom/apollographql/apollo/api/Operation;Lcom/apollographql/apollo/api/CustomScalarAdapters;ZLjava/lang/String;)Lcom/apollographql/apollo/api/http/HttpBody;
940948
public final fun composePayload (Lcom/apollographql/apollo/api/ApolloRequest;)Ljava/util/Map;

libraries/apollo-api/api/apollo-api.klib.api

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,8 @@ final class <#A: com.apollographql.apollo.api/Operation.Data> com.apollographql.
310310
final fun <get-sendApqExtensions>(): kotlin/Boolean? // com.apollographql.apollo.api/ApolloRequest.sendApqExtensions.<get-sendApqExtensions>|<get-sendApqExtensions>(){}[0]
311311
final val sendDocument // com.apollographql.apollo.api/ApolloRequest.sendDocument|{}sendDocument[0]
312312
final fun <get-sendDocument>(): kotlin/Boolean? // com.apollographql.apollo.api/ApolloRequest.sendDocument.<get-sendDocument>|<get-sendDocument>(){}[0]
313+
final val sendEnhancedClientAwareness // com.apollographql.apollo.api/ApolloRequest.sendEnhancedClientAwareness|{}sendEnhancedClientAwareness[0]
314+
final fun <get-sendEnhancedClientAwareness>(): kotlin/Boolean // com.apollographql.apollo.api/ApolloRequest.sendEnhancedClientAwareness.<get-sendEnhancedClientAwareness>|<get-sendEnhancedClientAwareness>(){}[0]
313315

314316
final fun <#A1: com.apollographql.apollo.api/Operation.Data> newBuilder(com.apollographql.apollo.api/Operation<#A1>): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.newBuilder|newBuilder(com.apollographql.apollo.api.Operation<0:0>){0§<com.apollographql.apollo.api.Operation.Data>}[0]
315317
final fun newBuilder(): com.apollographql.apollo.api/ApolloRequest.Builder<#A> // com.apollographql.apollo.api/ApolloRequest.newBuilder|newBuilder(){}[0]
@@ -342,6 +344,8 @@ final class <#A: com.apollographql.apollo.api/Operation.Data> com.apollographql.
342344
final fun <get-sendApqExtensions>(): kotlin/Boolean? // com.apollographql.apollo.api/ApolloRequest.Builder.sendApqExtensions.<get-sendApqExtensions>|<get-sendApqExtensions>(){}[0]
343345
final var sendDocument // com.apollographql.apollo.api/ApolloRequest.Builder.sendDocument|{}sendDocument[0]
344346
final fun <get-sendDocument>(): kotlin/Boolean? // com.apollographql.apollo.api/ApolloRequest.Builder.sendDocument.<get-sendDocument>|<get-sendDocument>(){}[0]
347+
final var sendEnhancedClientAwareness // com.apollographql.apollo.api/ApolloRequest.Builder.sendEnhancedClientAwareness|{}sendEnhancedClientAwareness[0]
348+
final fun <get-sendEnhancedClientAwareness>(): kotlin/Boolean // com.apollographql.apollo.api/ApolloRequest.Builder.sendEnhancedClientAwareness.<get-sendEnhancedClientAwareness>|<get-sendEnhancedClientAwareness>(){}[0]
345349

346350
final fun addExecutionContext(com.apollographql.apollo.api/ExecutionContext): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.Builder.addExecutionContext|addExecutionContext(com.apollographql.apollo.api.ExecutionContext){}[0]
347351
final fun addHttpHeader(kotlin/String, kotlin/String): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.Builder.addHttpHeader|addHttpHeader(kotlin.String;kotlin.String){}[0]
@@ -357,6 +361,7 @@ final class <#A: com.apollographql.apollo.api/Operation.Data> com.apollographql.
357361
final fun retryOnError(kotlin/Boolean?): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.Builder.retryOnError|retryOnError(kotlin.Boolean?){}[0]
358362
final fun sendApqExtensions(kotlin/Boolean?): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.Builder.sendApqExtensions|sendApqExtensions(kotlin.Boolean?){}[0]
359363
final fun sendDocument(kotlin/Boolean?): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.Builder.sendDocument|sendDocument(kotlin.Boolean?){}[0]
364+
final fun sendEnhancedClientAwareness(kotlin/Boolean): com.apollographql.apollo.api/ApolloRequest.Builder<#A1> // com.apollographql.apollo.api/ApolloRequest.Builder.sendEnhancedClientAwareness|sendEnhancedClientAwareness(kotlin.Boolean){}[0]
360365
}
361366
}
362367

@@ -490,6 +495,7 @@ final class com.apollographql.apollo.api.http/DefaultHttpRequestComposer : com.a
490495

491496
final fun (kotlin/String).appendQueryParameters(kotlin.collections/Map<kotlin/String, kotlin/String>): kotlin/String // com.apollographql.apollo.api.http/DefaultHttpRequestComposer.Companion.appendQueryParameters|[email protected](kotlin.collections.Map<kotlin.String,kotlin.String>){}[0]
492497
final fun <#A2: com.apollographql.apollo.api/Operation.Data> buildParamsMap(com.apollographql.apollo.api/Operation<#A2>, com.apollographql.apollo.api/CustomScalarAdapters, kotlin/Boolean, kotlin/Boolean): okio/ByteString // com.apollographql.apollo.api.http/DefaultHttpRequestComposer.Companion.buildParamsMap|buildParamsMap(com.apollographql.apollo.api.Operation<0:0>;com.apollographql.apollo.api.CustomScalarAdapters;kotlin.Boolean;kotlin.Boolean){0§<com.apollographql.apollo.api.Operation.Data>}[0]
498+
final fun <#A2: com.apollographql.apollo.api/Operation.Data> buildParamsMap(com.apollographql.apollo.api/Operation<#A2>, com.apollographql.apollo.api/CustomScalarAdapters, kotlin/Boolean, kotlin/Boolean, kotlin/Boolean): okio/ByteString // com.apollographql.apollo.api.http/DefaultHttpRequestComposer.Companion.buildParamsMap|buildParamsMap(com.apollographql.apollo.api.Operation<0:0>;com.apollographql.apollo.api.CustomScalarAdapters;kotlin.Boolean;kotlin.Boolean;kotlin.Boolean){0§<com.apollographql.apollo.api.Operation.Data>}[0]
493499
final fun <#A2: com.apollographql.apollo.api/Operation.Data> buildPostBody(com.apollographql.apollo.api/Operation<#A2>, com.apollographql.apollo.api/CustomScalarAdapters, kotlin/Boolean, kotlin/String?): com.apollographql.apollo.api.http/HttpBody // com.apollographql.apollo.api.http/DefaultHttpRequestComposer.Companion.buildPostBody|buildPostBody(com.apollographql.apollo.api.Operation<0:0>;com.apollographql.apollo.api.CustomScalarAdapters;kotlin.Boolean;kotlin.String?){0§<com.apollographql.apollo.api.Operation.Data>}[0]
494500
final fun <#A2: com.apollographql.apollo.api/Operation.Data> buildPostBody(com.apollographql.apollo.api/Operation<#A2>, com.apollographql.apollo.api/CustomScalarAdapters, kotlin/String?, kotlin/Function1<com.apollographql.apollo.api.json/JsonWriter, kotlin/Unit>): com.apollographql.apollo.api.http/HttpBody // com.apollographql.apollo.api.http/DefaultHttpRequestComposer.Companion.buildPostBody|buildPostBody(com.apollographql.apollo.api.Operation<0:0>;com.apollographql.apollo.api.CustomScalarAdapters;kotlin.String?;kotlin.Function1<com.apollographql.apollo.api.json.JsonWriter,kotlin.Unit>){0§<com.apollographql.apollo.api.Operation.Data>}[0]
495501
final fun <#A2: com.apollographql.apollo.api/Operation.Data> composePayload(com.apollographql.apollo.api/ApolloRequest<#A2>): kotlin.collections/Map<kotlin/String, kotlin/Any?> // com.apollographql.apollo.api.http/DefaultHttpRequestComposer.Companion.composePayload|composePayload(com.apollographql.apollo.api.ApolloRequest<0:0>){0§<com.apollographql.apollo.api.Operation.Data>}[0]
@@ -1348,6 +1354,9 @@ final object com.apollographql.apollo.exception/OfflineException : okio/IOExcept
13481354
final fun toString(): kotlin/String // com.apollographql.apollo.exception/OfflineException.toString|toString(){}[0]
13491355
}
13501356

1357+
final const val com.apollographql.apollo.api/apolloApiVersion // com.apollographql.apollo.api/apolloApiVersion|{}apolloApiVersion[0]
1358+
final fun <get-apolloApiVersion>(): kotlin/String // com.apollographql.apollo.api/apolloApiVersion.<get-apolloApiVersion>|<get-apolloApiVersion>(){}[0]
1359+
13511360
final val com.apollographql.apollo.api/AnyAdapter // com.apollographql.apollo.api/AnyAdapter|{}AnyAdapter[0]
13521361
final fun <get-AnyAdapter>(): com.apollographql.apollo.api/Adapter<kotlin/Any> // com.apollographql.apollo.api/AnyAdapter.<get-AnyAdapter>|<get-AnyAdapter>(){}[0]
13531362
final val com.apollographql.apollo.api/ApolloOptionalAnyAdapter // com.apollographql.apollo.api/ApolloOptionalAnyAdapter|{}ApolloOptionalAnyAdapter[0]

libraries/apollo-api/build.gradle.kts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
import org.jetbrains.kotlin.gradle.dsl.KotlinBaseExtension
2+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
3+
import kotlin.jvm.java
4+
15
plugins {
26
id("org.jetbrains.kotlin.multiplatform")
37
}
@@ -18,3 +22,39 @@ kotlin {
1822
}
1923
}
2024

25+
abstract class GenerateLibraryVersion : DefaultTask() {
26+
@get:Input
27+
abstract val version: Property<String>
28+
29+
@get:OutputDirectory
30+
abstract val outputDir: DirectoryProperty
31+
32+
@TaskAction
33+
fun taskAction() {
34+
outputDir.asFile.get().apply {
35+
deleteRecursively()
36+
mkdirs()
37+
}
38+
39+
val versionFile = File(outputDir.asFile.get(), "com/apollographql/apollo/api/ApolloApiVersion.kt")
40+
versionFile.parentFile.mkdirs()
41+
versionFile.writeText("""// Generated file. Do not edit!
42+
package com.apollographql.apollo.api
43+
const val apolloApiVersion = "${version.get()}"
44+
""")
45+
}
46+
}
47+
48+
val pluginVersionTaskProvider = tasks.register("generateLibraryVersion", GenerateLibraryVersion::class.java) {
49+
outputDir.set(project.layout.buildDirectory.dir("generated/kotlin/"))
50+
version.set(project.version.toString())
51+
}
52+
53+
extensions.getByType(KotlinBaseExtension::class.java).apply {
54+
val versionFileProvider = pluginVersionTaskProvider.flatMap { it.outputDir }
55+
sourceSets.getByName("commonMain").kotlin.srcDir(versionFileProvider)
56+
}
57+
58+
tasks.withType(KotlinCompile::class.java) {
59+
dependsOn(pluginVersionTaskProvider)
60+
}

libraries/apollo-api/src/commonMain/kotlin/com/apollographql/apollo/api/ApolloRequest.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ private constructor(
3939
val retryOnError: Boolean?,
4040
@ApolloExperimental
4141
val failFastIfOffline: Boolean?,
42+
val sendEnhancedClientAwareness: Boolean,
4243
) : ExecutionOptions {
4344

4445
fun newBuilder(): Builder<D> = newBuilder(operation)
@@ -57,6 +58,7 @@ private constructor(
5758
.retryOnError(retryOnError)
5859
.failFastIfOffline(failFastIfOffline)
5960
.ignoreApolloClientHttpHeaders(ignoreApolloClientHttpHeaders)
61+
.sendEnhancedClientAwareness(sendEnhancedClientAwareness)
6062
}
6163

6264
class Builder<D : Operation.Data>(
@@ -80,13 +82,16 @@ private constructor(
8082
private set
8183
var ignoreApolloClientHttpHeaders: Boolean? = null
8284
private set
85+
8386
@ApolloExperimental
8487
var retryOnError: Boolean? = null
8588
private set
89+
8690
@ApolloExperimental
8791
var failFastIfOffline: Boolean? = null
8892
private set
89-
93+
var sendEnhancedClientAwareness: Boolean = true
94+
private set
9095

9196
fun requestUuid(requestUuid: Uuid) = apply {
9297
this.requestUuid = requestUuid
@@ -142,6 +147,10 @@ private constructor(
142147
this.failFastIfOffline = failFastIfOffline
143148
}
144149

150+
fun sendEnhancedClientAwareness(sendEnhancedClientAwareness: Boolean): Builder<D> = apply {
151+
this.sendEnhancedClientAwareness = sendEnhancedClientAwareness
152+
}
153+
145154
fun build(): ApolloRequest<D> {
146155
return ApolloRequest(
147156
operation = operation,
@@ -156,6 +165,7 @@ private constructor(
156165
ignoreApolloClientHttpHeaders = ignoreApolloClientHttpHeaders,
157166
retryOnError = retryOnError,
158167
failFastIfOffline = failFastIfOffline,
168+
sendEnhancedClientAwareness = sendEnhancedClientAwareness,
159169
)
160170
}
161171
}

0 commit comments

Comments
 (0)