Skip to content

Commit 178e106

Browse files
authored
fix(api): add default user-agent header value for subscription requests (#2700)
* fix(api): upgrade to appsync client v3 * fix(api): add default user-agent header to subscription requests
1 parent 90a7d93 commit 178e106

13 files changed

+65
-45
lines changed

AmplifyPlugins.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Pod::Spec.new do |s|
3636

3737
s.subspec 'AWSAPIPlugin' do |ss|
3838
ss.source_files = 'AmplifyPlugins/API/AWSAPICategoryPlugin/**/*.swift'
39-
ss.dependency 'AppSyncRealTimeClient', "~> 2.0"
39+
ss.dependency 'AppSyncRealTimeClient', "~> 3.0"
4040
end
4141

4242
s.subspec 'AWSCognitoAuthPlugin' do |ss|

AmplifyPlugins/API/AWSAPICategoryPlugin/Operation/AWSGraphQLSubscriptionOperation.swift

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,15 +93,17 @@ final public class AWSGraphQLSubscriptionOperation<R: Decodable>: GraphQLSubscri
9393
// Retrieve request plugin option and
9494
// auth type in case of a multi-auth setup
9595
let pluginOptions = request.options.pluginOptions as? AWSPluginOptions
96+
let urlRequest = generateSubscriptionURLRequest(from: endpointConfig)
9697

9798
// Retrieve the subscription connection
9899
subscriptionQueue.sync {
99100
do {
100101
subscriptionConnection = try subscriptionConnectionFactory
101102
.getOrCreateConnection(for: endpointConfig,
102-
authService: authService,
103-
authType: pluginOptions?.authType,
104-
apiAuthProviderFactory: apiAuthProviderFactory)
103+
urlRequest: urlRequest,
104+
authService: authService,
105+
authType: pluginOptions?.authType,
106+
apiAuthProviderFactory: apiAuthProviderFactory)
105107
} catch {
106108
let error = APIError.operationError("Unable to get connection for api \(endpointConfig.name)", "", error)
107109
dispatch(result: .failure(error))
@@ -119,6 +121,17 @@ final public class AWSGraphQLSubscriptionOperation<R: Decodable>: GraphQLSubscri
119121
}
120122
}
121123

124+
private func generateSubscriptionURLRequest(
125+
from endpointConfig: AWSAPICategoryPluginConfiguration.EndpointConfig
126+
) -> URLRequest {
127+
var urlRequest = URLRequest(url: endpointConfig.baseURL)
128+
urlRequest.setValue(
129+
AmplifyAWSServiceConfiguration.baseUserAgent(),
130+
forHTTPHeaderField: URLRequestConstants.Header.userAgent
131+
)
132+
return urlRequest
133+
}
134+
122135
private func onAsyncSubscriptionEvent(event: SubscriptionItemEvent) {
123136
switch event {
124137
case .connection(let subscriptionConnectionEvent):

AmplifyPlugins/API/AWSAPICategoryPlugin/SubscriptionFactory/AWSSubscriptionConnectionFactory.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,24 @@ class AWSSubscriptionConnectionFactory: SubscriptionConnectionFactory {
2323

2424
private var apiToConnectionProvider: [MapperCacheKey: ConnectionProvider] = [:]
2525

26-
func getOrCreateConnection(for endpointConfig: AWSAPICategoryPluginConfiguration.EndpointConfig,
27-
authService: AWSAuthServiceBehavior,
28-
authType: AWSAuthorizationType? = nil,
29-
apiAuthProviderFactory: APIAuthProviderFactory) throws -> SubscriptionConnection {
26+
func getOrCreateConnection(
27+
for endpointConfig: AWSAPICategoryPluginConfiguration.EndpointConfig,
28+
urlRequest: URLRequest,
29+
authService: AWSAuthServiceBehavior,
30+
authType: AWSAuthorizationType? = nil,
31+
apiAuthProviderFactory: APIAuthProviderFactory
32+
) throws -> SubscriptionConnection {
3033
return try concurrencyQueue.sync {
3134
let apiName = endpointConfig.name
3235

33-
let url = endpointConfig.baseURL
34-
3536
let authInterceptor = try getInterceptor(for: getOrCreateAuthConfiguration(from: endpointConfig,
3637
authType: authType),
3738
authService: authService,
3839
apiAuthProviderFactory: apiAuthProviderFactory)
3940

4041
// create or retrieve the connection provider. If creating, add interceptors onto the provider.
4142
let connectionProvider = apiToConnectionProvider[MapperCacheKey(apiName: apiName, authType: authType)] ??
42-
ConnectionProviderFactory.createConnectionProvider(for: url,
43+
ConnectionProviderFactory.createConnectionProvider(for: urlRequest,
4344
authInterceptor: authInterceptor,
4445
connectionType: .appSyncRealtime)
4546

AmplifyPlugins/API/AWSAPICategoryPlugin/SubscriptionFactory/SubscriptionConnectionFactory.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// SPDX-License-Identifier: Apache-2.0
66
//
77

8+
import Foundation
9+
810
import Amplify
911
import AWSPluginsCore
1012
import AppSyncRealTimeClient
@@ -14,6 +16,7 @@ protocol SubscriptionConnectionFactory {
1416

1517
/// Get connection based on the connection type
1618
func getOrCreateConnection(for endpointConfig: AWSAPICategoryPluginConfiguration.EndpointConfig,
19+
urlRequest: URLRequest,
1720
authService: AWSAuthServiceBehavior,
1821
authType: AWSAuthorizationType?,
1922
apiAuthProviderFactory: APIAuthProviderFactory) throws -> SubscriptionConnection

AmplifyPlugins/API/AWSAPICategoryPluginTests/Mocks/MockSubscription.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import AppSyncRealTimeClient
1414
struct MockSubscriptionConnectionFactory: SubscriptionConnectionFactory {
1515
typealias OnGetOrCreateConnection = (
1616
AWSAPICategoryPluginConfiguration.EndpointConfig,
17+
URLRequest,
1718
AWSAuthServiceBehavior,
1819
AWSAuthorizationType?,
1920
APIAuthProviderFactory
@@ -27,11 +28,12 @@ struct MockSubscriptionConnectionFactory: SubscriptionConnectionFactory {
2728

2829
func getOrCreateConnection(
2930
for endpointConfig: AWSAPICategoryPluginConfiguration.EndpointConfig,
31+
urlRequest: URLRequest,
3032
authService: AWSAuthServiceBehavior,
3133
authType: AWSAuthorizationType?,
3234
apiAuthProviderFactory: APIAuthProviderFactory
3335
) throws -> SubscriptionConnection {
34-
try onGetOrCreateConnection(endpointConfig, authService, authType, apiAuthProviderFactory)
36+
try onGetOrCreateConnection(endpointConfig, urlRequest, authService, authType, apiAuthProviderFactory)
3537
}
3638

3739
}

AmplifyPlugins/API/AWSAPICategoryPluginTests/Operation/AWSGraphQLSubscriptionOperationCancelTests.swift

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class AWSGraphQLSubscriptionOperationCancelTests: XCTestCase {
6767
}
6868

6969
func testCancelSendsCompletion() {
70-
let mockSubscriptionConnectionFactory = MockSubscriptionConnectionFactory(onGetOrCreateConnection: { _, _, _, _ in
70+
let mockSubscriptionConnectionFactory = MockSubscriptionConnectionFactory(onGetOrCreateConnection: { _, _, _, _, _ in
7171
return MockSubscriptionConnection(onSubscribe: { (_, _, eventHandler) -> SubscriptionItem in
7272
let item = SubscriptionItem(requestString: "", variables: nil, eventHandler: { _, _ in
7373
})
@@ -126,7 +126,7 @@ class AWSGraphQLSubscriptionOperationCancelTests: XCTestCase {
126126
}
127127

128128
func testFailureOnConnection() {
129-
let mockSubscriptionConnectionFactory = MockSubscriptionConnectionFactory(onGetOrCreateConnection: { _, _, _, _ in
129+
let mockSubscriptionConnectionFactory = MockSubscriptionConnectionFactory(onGetOrCreateConnection: { _, _, _, _, _ in
130130
throw APIError.invalidConfiguration("something went wrong", "", nil)
131131
})
132132

@@ -168,16 +168,17 @@ class AWSGraphQLSubscriptionOperationCancelTests: XCTestCase {
168168

169169
func testCallingCancelWhileCreatingConnectionShouldCallCompletionListener() {
170170
let connectionCreation = expectation(description: "connection factory called")
171-
let mockSubscriptionConnectionFactory = MockSubscriptionConnectionFactory(onGetOrCreateConnection: { _, _, _, _ in
172-
connectionCreation.fulfill()
173-
return MockSubscriptionConnection(onSubscribe: { (_, _, eventHandler) -> SubscriptionItem in
174-
let item = SubscriptionItem(requestString: "", variables: nil, eventHandler: { _, _ in
171+
let mockSubscriptionConnectionFactory =
172+
MockSubscriptionConnectionFactory(onGetOrCreateConnection: { _, _, _, _, _ in
173+
connectionCreation.fulfill()
174+
return MockSubscriptionConnection(onSubscribe: { (_, _, eventHandler) -> SubscriptionItem in
175+
let item = SubscriptionItem(requestString: "", variables: nil, eventHandler: { _, _ in
176+
})
177+
eventHandler(.connection(.connecting), item)
178+
return item
179+
}, onUnsubscribe: {_ in
175180
})
176-
eventHandler(.connection(.connecting), item)
177-
return item
178-
}, onUnsubscribe: {_ in
179181
})
180-
})
181182

182183
setUp(subscriptionConnectionFactory: mockSubscriptionConnectionFactory)
183184

AmplifyPlugins/API/AWSAPICategoryPluginTests/Operation/GraphQLSubscribeCombineTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ class GraphQLSubscribeCombineTests: OperationTestBase {
228228
return item
229229
}
230230

231-
let onGetOrCreateConnection: MockSubscriptionConnectionFactory.OnGetOrCreateConnection = { _, _, _, _ in
231+
let onGetOrCreateConnection: MockSubscriptionConnectionFactory.OnGetOrCreateConnection = { _, _, _, _, _ in
232232
MockSubscriptionConnection(onSubscribe: onSubscribe, onUnsubscribe: { _ in })
233233
}
234234

AmplifyPlugins/API/AWSAPICategoryPluginTests/Operation/GraphQLSubscribeTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ class GraphQLSubscribeTests: OperationTestBase {
290290
return item
291291
}
292292

293-
let onGetOrCreateConnection: MockSubscriptionConnectionFactory.OnGetOrCreateConnection = { _, _, _, _ in
293+
let onGetOrCreateConnection: MockSubscriptionConnectionFactory.OnGetOrCreateConnection = { _, _, _, _, _ in
294294
MockSubscriptionConnection(onSubscribe: onSubscribe, onUnsubscribe: { _ in })
295295
}
296296

AmplifyPlugins/API/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ include_build_tools!
88
target 'AWSAPICategoryPlugin' do
99
pod 'Amplify', :path => '../../'
1010
pod 'AWSPluginsCore', :path => '../../'
11-
pod "AppSyncRealTimeClient", "~> 2.0"
11+
pod "AppSyncRealTimeClient", "~> 3.0"
1212

1313
target "AWSAPICategoryPluginTests" do
1414
inherit! :complete

AmplifyPlugins/API/Podfile.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ PODS:
1919
- AWSMobileClient (~> 2.30.1)
2020
- AWSPluginsCore (= 1.28.4)
2121
- CwlPreconditionTesting (~> 2.0)
22-
- AppSyncRealTimeClient (2.1.1):
22+
- AppSyncRealTimeClient (3.0.0):
2323
- Starscream (~> 4.0.4)
2424
- AWSAuthCore (2.30.1):
2525
- AWSCore (= 2.30.1)
@@ -54,7 +54,7 @@ DEPENDENCIES:
5454
- Amplify (from `../../`)
5555
- AmplifyPlugins/AWSCognitoAuthPlugin (from `../../`)
5656
- AmplifyTestCommon (from `../../`)
57-
- AppSyncRealTimeClient (~> 2.0)
57+
- AppSyncRealTimeClient (~> 3.0)
5858
- AWSPluginsCore (from `../../`)
5959
- CwlPreconditionTesting (from `https://github.com/mattgallagher/CwlPreconditionTesting.git`, tag `2.1.0`)
6060
- SwiftFormat/CLI (= 0.44.17)
@@ -96,9 +96,9 @@ CHECKOUT OPTIONS:
9696

9797
SPEC CHECKSUMS:
9898
Amplify: be704bdc5c808a61b1a9a0ee79ba4892de9c5dcc
99-
AmplifyPlugins: 667480a37ee4239024148daf67e0b4346b7c46d1
99+
AmplifyPlugins: 12ae75a354d38ad623f1f78dc7f672f7baf4c0de
100100
AmplifyTestCommon: ee2908d5c7e372bb9caf5733644fe06f2cd7fcaf
101-
AppSyncRealTimeClient: 937360221f2b664c4c33ae142a60643e64f480cd
101+
AppSyncRealTimeClient: ec19a24f635611b193eb98a2da573abcf98b793b
102102
AWSAuthCore: 88e77e867b210e5d09e35a484de19753d587aee3
103103
AWSCognitoIdentityProvider: 37ff510e8f64dc6a1240088ba92ad4d6f0cd841e
104104
AWSCognitoIdentityProviderASF: f2cd19990c4ae642ad73d09a4945018a994c9ff8
@@ -114,6 +114,6 @@ SPEC CHECKSUMS:
114114
SwiftFormat: 3b5caa6389b2b9adbc00e133b3ccc8c6e687a6a4
115115
SwiftLint: 32ee33ded0636d0905ef6911b2b67bbaeeedafa5
116116

117-
PODFILE CHECKSUM: 2a9177ccb9833844ad436a0c7c9e5768a7ab8868
117+
PODFILE CHECKSUM: 5170578806036f2ba018abb8868d56e448fb0ada
118118

119119
COCOAPODS: 1.11.3

0 commit comments

Comments
 (0)