@@ -89,57 +89,19 @@ public GraphQLHttpClient(string endPoint, IGraphQLWebsocketJsonSerializer serial
89
89
90
90
#region IGraphQLClient
91
91
92
- /// <inheritdoc />
93
- public async Task < GraphQLResponse < TResponse > > SendQueryAsync < TResponse > ( GraphQLRequest request , CancellationToken cancellationToken = default )
94
- {
95
- return Options . UseWebSocketForQueriesAndMutations || Options . WebSocketEndPoint is not null && Options . EndPoint is null || Options . EndPoint . HasWebSocketScheme ( )
96
- ? await GraphQlHttpWebSocket . SendRequestAsync < TResponse > ( request , cancellationToken ) . ConfigureAwait ( false )
97
- : await SendAPQHttpRequestAsync < TResponse > ( request , cancellationToken ) . ConfigureAwait ( false ) ;
98
- }
99
-
100
- /// <inheritdoc />
101
- public Task < GraphQLResponse < TResponse > > SendMutationAsync < TResponse > ( GraphQLRequest request ,
102
- CancellationToken cancellationToken = default )
103
- => SendQueryAsync < TResponse > ( request , cancellationToken ) ;
104
-
105
- /// <inheritdoc />
106
- public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request )
107
- => CreateSubscriptionStream < TResponse > ( request , null ) ;
92
+ private const int APQ_SUPPORTED_VERSION = 1 ;
108
93
109
94
/// <inheritdoc />
110
- public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request , Action < Exception > ? exceptionHandler )
111
- {
112
- if ( _disposed )
113
- throw new ObjectDisposedException ( nameof ( GraphQLHttpClient ) ) ;
114
-
115
- var observable = GraphQlHttpWebSocket . CreateSubscriptionStream < TResponse > ( request , exceptionHandler ) ;
116
- return observable ;
117
- }
118
-
119
- #endregion
120
-
121
- /// <inheritdoc />
122
- public Task InitializeWebsocketConnection ( ) => GraphQlHttpWebSocket . InitializeWebSocket ( ) ;
123
-
124
- /// <inheritdoc />
125
- public Task SendPingAsync ( object ? payload ) => GraphQlHttpWebSocket . SendPingAsync ( payload ) ;
126
-
127
- /// <inheritdoc />
128
- public Task SendPongAsync ( object ? payload ) => GraphQlHttpWebSocket . SendPongAsync ( payload ) ;
129
-
130
- #region Private Methods
131
-
132
- private async Task < GraphQLHttpResponse < TResponse > > SendAPQHttpRequestAsync < TResponse > ( GraphQLRequest request , CancellationToken cancellationToken = default )
95
+ public async Task < GraphQLResponse < TResponse > > SendQueryAsync < TResponse > ( GraphQLRequest request , CancellationToken cancellationToken = default )
133
96
{
134
97
cancellationToken . ThrowIfCancellationRequested ( ) ;
135
98
136
- var savedQuery = request . Query ;
99
+ string ? savedQuery = request . Query ;
137
100
bool useAPQ = false ;
138
101
139
102
if ( request . Query != null && ! _apqDisabledPerSession && Options . EnableAutomaticPersistedQueries ( request ) )
140
103
{
141
104
// https://www.apollographql.com/docs/react/api/link/persisted-queries/
142
- const int APQ_SUPPORTED_VERSION = 1 ;
143
105
useAPQ = true ;
144
106
request . Extensions ??= new ( ) ;
145
107
request . Extensions [ "persistedQuery" ] = new Dictionary < string , object >
@@ -150,7 +112,7 @@ private async Task<GraphQLHttpResponse<TResponse>> SendAPQHttpRequestAsync<TResp
150
112
request . Query = null ;
151
113
}
152
114
153
- var response = await SendHttpRequestAsync < TResponse > ( request , cancellationToken ) ;
115
+ var response = await SendQueryInternalAsync < TResponse > ( request , cancellationToken ) ;
154
116
155
117
if ( useAPQ )
156
118
{
@@ -161,21 +123,57 @@ private async Task<GraphQLHttpResponse<TResponse>> SendAPQHttpRequestAsync<TResp
161
123
// Alas, for the first time we did not guess and in vain removed Query, so we return Query and
162
124
// send request again. This is one-time "cache miss", not so scary.
163
125
request . Query = savedQuery ;
164
- return await SendHttpRequestAsync < TResponse > ( request , cancellationToken ) ;
126
+ return await SendQueryInternalAsync < TResponse > ( request , cancellationToken ) ;
165
127
}
166
128
else
167
129
{
168
130
// GraphQL server either supports APQ of some other version, or does not support it at all.
169
131
// Send a request for the second time. This is better than returning an error. Let the client work with APQ disabled.
170
132
_apqDisabledPerSession = Options . DisableAPQ ( response ) ;
171
133
request . Query = savedQuery ;
172
- return await SendHttpRequestAsync < TResponse > ( request , cancellationToken ) ;
134
+ return await SendQueryInternalAsync < TResponse > ( request , cancellationToken ) ;
173
135
}
174
136
}
175
137
176
138
return response ;
177
139
}
178
140
141
+ /// <inheritdoc />
142
+ public Task < GraphQLResponse < TResponse > > SendMutationAsync < TResponse > ( GraphQLRequest request ,
143
+ CancellationToken cancellationToken = default )
144
+ => SendQueryAsync < TResponse > ( request , cancellationToken ) ;
145
+
146
+ /// <inheritdoc />
147
+ public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request )
148
+ => CreateSubscriptionStream < TResponse > ( request , null ) ;
149
+
150
+ /// <inheritdoc />
151
+ public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request , Action < Exception > ? exceptionHandler )
152
+ {
153
+ if ( _disposed )
154
+ throw new ObjectDisposedException ( nameof ( GraphQLHttpClient ) ) ;
155
+
156
+ var observable = GraphQlHttpWebSocket . CreateSubscriptionStream < TResponse > ( request , exceptionHandler ) ;
157
+ return observable ;
158
+ }
159
+
160
+ #endregion
161
+
162
+ /// <inheritdoc />
163
+ public Task InitializeWebsocketConnection ( ) => GraphQlHttpWebSocket . InitializeWebSocket ( ) ;
164
+
165
+ /// <inheritdoc />
166
+ public Task SendPingAsync ( object ? payload ) => GraphQlHttpWebSocket . SendPingAsync ( payload ) ;
167
+
168
+ /// <inheritdoc />
169
+ public Task SendPongAsync ( object ? payload ) => GraphQlHttpWebSocket . SendPongAsync ( payload ) ;
170
+
171
+ #region Private Methods
172
+ private async Task < GraphQLResponse < TResponse > > SendQueryInternalAsync < TResponse > ( GraphQLRequest request , CancellationToken cancellationToken = default ) =>
173
+ Options . UseWebSocketForQueriesAndMutations || Options . WebSocketEndPoint is not null && Options . EndPoint is null || Options . EndPoint . HasWebSocketScheme ( )
174
+ ? await GraphQlHttpWebSocket . SendRequestAsync < TResponse > ( request , cancellationToken ) . ConfigureAwait ( false )
175
+ : await SendHttpRequestAsync < TResponse > ( request , cancellationToken ) . ConfigureAwait ( false ) ;
176
+
179
177
private async Task < GraphQLHttpResponse < TResponse > > SendHttpRequestAsync < TResponse > ( GraphQLRequest request , CancellationToken cancellationToken = default )
180
178
{
181
179
var preprocessedRequest = await Options . PreprocessRequest ( request , this ) . ConfigureAwait ( false ) ;
0 commit comments