From 9572357e6231ab4370b5a858e6596d6db963b525 Mon Sep 17 00:00:00 2001 From: Jithin Roy <51138777+royjit@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:31:38 -0700 Subject: [PATCH 1/3] feat: Add async protocol method for request interceptors --- .../AuthProvider/APIAuthProviderFactory.swift | 12 ++ .../AuthTokenProviderWrapper.swift | 15 +++ .../AuthenticationTokenAuthInterceptor.swift | 110 ++++++++++++++---- .../IAMAuthInterceptor.swift | 8 ++ .../OIDCAuthProviderWrapper.swift | 4 + ...SAPICategoryPluginConfigurationTests.swift | 4 + .../AuthTokenURLRequestInterceptorTests.swift | 4 + AmplifyPlugins/API/Podfile | 2 +- AmplifyPlugins/API/Podfile.lock | 13 ++- .../Auth/Provider/AuthTokenProvider.swift | 7 ++ 10 files changed, 149 insertions(+), 30 deletions(-) diff --git a/Amplify/Categories/API/AuthProvider/APIAuthProviderFactory.swift b/Amplify/Categories/API/AuthProvider/APIAuthProviderFactory.swift index 12ad66a859..1129b821d8 100644 --- a/Amplify/Categories/API/AuthProvider/APIAuthProviderFactory.swift +++ b/Amplify/Categories/API/AuthProvider/APIAuthProviderFactory.swift @@ -25,8 +25,20 @@ open class APIAuthProviderFactory { } public protocol AmplifyAuthTokenProvider { + typealias AuthToken = String + func getLatestAuthToken() -> Result + + func getLatestAuthToken(completion: @escaping (Result) -> Void) +} + +public extension AmplifyAuthTokenProvider { + + func getLatestAuthToken(completion: @escaping (Result) -> Void) { + let result = getLatestAuthToken() + completion(result) + } } /// Amplify OIDC Auth Provider diff --git a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/AuthTokenProviderWrapper.swift b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/AuthTokenProviderWrapper.swift index cf0f3da553..685123eb48 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/AuthTokenProviderWrapper.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/RequestInterceptor/AuthTokenProviderWrapper.swift @@ -29,4 +29,19 @@ class AuthTokenProviderWrapper: AuthTokenProvider { } } + func getToken(completion: @escaping (Result) -> Void) { + wrappedAuthTokenProvider.getLatestAuthToken { result in + switch result { + case .success(let token): + completion(.success(token)) + return + case .failure(let error): + completion(.failure(AuthError.service("Unable to get latest auth token", + "", + error))) + return + } + } + } + } diff --git a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/AuthenticationTokenAuthInterceptor.swift b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/AuthenticationTokenAuthInterceptor.swift index 4cf6da67a3..0c2b004822 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/AuthenticationTokenAuthInterceptor.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/AuthenticationTokenAuthInterceptor.swift @@ -19,35 +19,50 @@ class AuthenticationTokenAuthInterceptor: AuthInterceptor { self.authTokenProvider = authTokenProvider } - func interceptMessage(_ message: AppSyncMessage, for endpoint: URL) -> AppSyncMessage { - let host = endpoint.host! - guard let authToken = getAuthToken() else { - log.warn("Missing authentication token for subscription") - return message + func interceptMessage( + _ message: AppSyncMessage, + for endpoint: URL, + completion: @escaping (AppSyncMessage) -> Void) { + let host = endpoint.host! + + guard case .subscribe = message.messageType else { + completion(message) + return + } + + authTokenProvider.getLatestAuthToken { result in + let signedMessage = self.signedMessage( + message, + host: host, + tokenResult: result) + completion(signedMessage) + return + } } - guard case .subscribe = message.messageType else { - return message + func interceptConnection( + _ request: AppSyncConnectionRequest, + for endpoint: URL, + completion: @escaping (AppSyncConnectionRequest) -> Void) { + let host = endpoint.host! + authTokenProvider.getLatestAuthToken { result in + let signedRequest = self.signedRequest( + request, + for: endpoint, + host: host, + tokenResult: result) + completion(signedRequest) + return + } } - let authHeader = TokenAuthHeader(token: authToken, host: host) - var payload = message.payload ?? AppSyncMessage.Payload() - payload.authHeader = authHeader - - let signedMessage = AppSyncMessage( - id: message.id, - payload: payload, - type: message.messageType - ) - return signedMessage - } - - func interceptConnection( + private func signedRequest( _ request: AppSyncConnectionRequest, - for endpoint: URL + for endpoint: URL, + host: String, + tokenResult: Result ) -> AppSyncConnectionRequest { - let host = endpoint.host! - guard let authToken = getAuthToken() else { + guard let authToken = try? tokenResult.get() else { log.warn("Missing authentication token for subscription request") return request } @@ -71,9 +86,54 @@ class AuthenticationTokenAuthInterceptor: AuthInterceptor { return signedRequest } - private func getAuthToken() -> AmplifyAuthTokenProvider.AuthToken? { - try? authTokenProvider.getLatestAuthToken().get() + private func signedMessage( + _ message: AppSyncMessage, + host: String, + tokenResult: Result) -> AppSyncMessage { + + guard let authToken = try? tokenResult.get() else { + log.warn("Missing authentication token for subscription") + return message + } + + let authHeader = TokenAuthHeader(token: authToken, host: host) + var payload = message.payload ?? AppSyncMessage.Payload() + payload.authHeader = authHeader + + let signedMessage = AppSyncMessage( + id: message.id, + payload: payload, + type: message.messageType + ) + return signedMessage + } + + func interceptMessage(_ message: AppSyncMessage, for endpoint: URL) -> AppSyncMessage { + let host = endpoint.host! + + guard case .subscribe = message.messageType else { + return message + } + let signedMessage = self.signedMessage( + message, + host: host, + tokenResult: authTokenProvider.getLatestAuthToken()) + return signedMessage + } + + func interceptConnection( + _ request: AppSyncConnectionRequest, + for endpoint: URL + ) -> AppSyncConnectionRequest { + let host = endpoint.host! + let signedRequest = signedRequest( + request, + for: endpoint, + host: host, + tokenResult: authTokenProvider.getLatestAuthToken()) + return signedRequest } + } // MARK: AuthorizationTokenAuthInterceptor + DefaultLogger diff --git a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift index 92a6213a68..87abb2be55 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift @@ -28,6 +28,14 @@ class IAMAuthInterceptor: AuthInterceptor { self.region = region } + func interceptMessage(_ message: AppSyncMessage, for endpoint: URL, completion: @escaping (AppSyncMessage) -> Void) { + + } + + func interceptConnection(_ request: AppSyncConnectionRequest, for endpoint: URL, completion: @escaping (AppSyncConnectionRequest) -> Void) { + + } + func interceptMessage(_ message: AppSyncMessage, for endpoint: URL) -> AppSyncMessage { switch message.messageType { case .subscribe: diff --git a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/OIDCAuthProviderWrapper.swift b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/OIDCAuthProviderWrapper.swift index 5e8ff78d1d..bdb9f7081b 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/OIDCAuthProviderWrapper.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/OIDCAuthProviderWrapper.swift @@ -20,4 +20,8 @@ class OIDCAuthProviderWrapper: OIDCAuthProvider { func getLatestAuthToken() -> Result { return authTokenProvider.getLatestAuthToken() } + + func getLatestAuthToken(completion: @escaping (Result) -> Void ) { + authTokenProvider.getLatestAuthToken(completion: completion) + } } diff --git a/AmplifyPlugins/API/AWSAPICategoryPluginTests/Configuration/AWSAPICategoryPluginConfigurationTests.swift b/AmplifyPlugins/API/AWSAPICategoryPluginTests/Configuration/AWSAPICategoryPluginConfigurationTests.swift index b64bdc9a91..9890b1f444 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPluginTests/Configuration/AWSAPICategoryPluginConfigurationTests.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPluginTests/Configuration/AWSAPICategoryPluginConfigurationTests.swift @@ -126,6 +126,10 @@ class AWSAPICategoryPluginConfigurationTests: XCTestCase { func getToken() -> Result { .success("token") } + + func getToken(completion: @escaping (Result) -> Void) { + completion(.success("token")) + } } } diff --git a/AmplifyPlugins/API/AWSAPICategoryPluginTests/Interceptor/AuthTokenURLRequestInterceptorTests.swift b/AmplifyPlugins/API/AWSAPICategoryPluginTests/Interceptor/AuthTokenURLRequestInterceptorTests.swift index fcdcee5c1b..e08d69285c 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPluginTests/Interceptor/AuthTokenURLRequestInterceptorTests.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPluginTests/Interceptor/AuthTokenURLRequestInterceptorTests.swift @@ -37,5 +37,9 @@ extension AuthTokenURLRequestInterceptorTests { func getToken() -> Result { .success(authorizationToken) } + + func getToken(completion: @escaping (Result) -> Void) { + completion(.success(authorizationToken)) + } } } diff --git a/AmplifyPlugins/API/Podfile b/AmplifyPlugins/API/Podfile index d90caa89bc..12c715e684 100644 --- a/AmplifyPlugins/API/Podfile +++ b/AmplifyPlugins/API/Podfile @@ -8,7 +8,7 @@ include_build_tools! target 'AWSAPICategoryPlugin' do pod 'Amplify', :path => '../../' pod 'AWSPluginsCore', :path => '../../' - pod "AppSyncRealTimeClient", "~> 3.0" + pod "AppSyncRealTimeClient", :git => 'https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git', :branch => 'main' target "AWSAPICategoryPluginTests" do inherit! :complete diff --git a/AmplifyPlugins/API/Podfile.lock b/AmplifyPlugins/API/Podfile.lock index 6a436d1b41..5f7a1d985e 100644 --- a/AmplifyPlugins/API/Podfile.lock +++ b/AmplifyPlugins/API/Podfile.lock @@ -54,7 +54,7 @@ DEPENDENCIES: - Amplify (from `../../`) - AmplifyPlugins/AWSCognitoAuthPlugin (from `../../`) - AmplifyTestCommon (from `../../`) - - AppSyncRealTimeClient (~> 3.0) + - AppSyncRealTimeClient (from `https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git`, branch `main`) - AWSPluginsCore (from `../../`) - CwlPreconditionTesting (from `https://github.com/mattgallagher/CwlPreconditionTesting.git`, tag `2.1.0`) - SwiftFormat/CLI (= 0.44.17) @@ -62,7 +62,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - - AppSyncRealTimeClient - AWSAuthCore - AWSCognitoIdentityProvider - AWSCognitoIdentityProviderASF @@ -83,6 +82,9 @@ EXTERNAL SOURCES: :path: "../../" AmplifyTestCommon: :path: "../../" + AppSyncRealTimeClient: + :branch: main + :git: https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git AWSPluginsCore: :path: "../../" CwlPreconditionTesting: @@ -90,6 +92,9 @@ EXTERNAL SOURCES: :tag: 2.1.0 CHECKOUT OPTIONS: + AppSyncRealTimeClient: + :commit: 814d7a42a99371949732fc1e0fd72ad0edfcf6a9 + :git: https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git CwlPreconditionTesting: :git: https://github.com/mattgallagher/CwlPreconditionTesting.git :tag: 2.1.0 @@ -114,6 +119,6 @@ SPEC CHECKSUMS: SwiftFormat: 3b5caa6389b2b9adbc00e133b3ccc8c6e687a6a4 SwiftLint: 32ee33ded0636d0905ef6911b2b67bbaeeedafa5 -PODFILE CHECKSUM: 5170578806036f2ba018abb8868d56e448fb0ada +PODFILE CHECKSUM: ed8a1897b59148645b469aec7b84a6aa25e10fd2 -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.0 diff --git a/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift b/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift index b7a1c1ab1a..9a73912ca3 100644 --- a/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift +++ b/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift @@ -9,7 +9,10 @@ import Foundation import Amplify public protocol AuthTokenProvider { + func getToken() -> Result + + func getToken(completion: @escaping (Result) -> Void) } public struct BasicUserPoolTokenProvider: AuthTokenProvider { @@ -23,4 +26,8 @@ public struct BasicUserPoolTokenProvider: AuthTokenProvider { public func getToken() -> Result { return authService.getToken() } + + public func getToken(completion: @escaping (Result) -> Void) { + authService.getUserPoolAccessToken(completion: completion) + } } From 97794e5f3f0bea0afed9ceb384188df045546786 Mon Sep 17 00:00:00 2001 From: Jithin Roy <51138777+royjit@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:47:17 -0700 Subject: [PATCH 2/3] Add default implementation for AuthTokenProvider --- .../SubscriptionInterceptor/IAMAuthInterceptor.swift | 8 -------- .../AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift index 87abb2be55..92a6213a68 100644 --- a/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift +++ b/AmplifyPlugins/API/AWSAPICategoryPlugin/Interceptor/SubscriptionInterceptor/IAMAuthInterceptor.swift @@ -28,14 +28,6 @@ class IAMAuthInterceptor: AuthInterceptor { self.region = region } - func interceptMessage(_ message: AppSyncMessage, for endpoint: URL, completion: @escaping (AppSyncMessage) -> Void) { - - } - - func interceptConnection(_ request: AppSyncConnectionRequest, for endpoint: URL, completion: @escaping (AppSyncConnectionRequest) -> Void) { - - } - func interceptMessage(_ message: AppSyncMessage, for endpoint: URL) -> AppSyncMessage { switch message.messageType { case .subscribe: diff --git a/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift b/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift index 9a73912ca3..9eddd6fe8c 100644 --- a/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift +++ b/AmplifyPlugins/Core/AWSPluginsCore/Auth/Provider/AuthTokenProvider.swift @@ -15,6 +15,14 @@ public protocol AuthTokenProvider { func getToken(completion: @escaping (Result) -> Void) } +public extension AuthTokenProvider { + + func getToken(completion: @escaping (Result) -> Void) { + let result = getToken() + completion(result) + } +} + public struct BasicUserPoolTokenProvider: AuthTokenProvider { let authService: AWSAuthServiceBehavior From 10ca35b420a28f0ca096258087765b112af05064 Mon Sep 17 00:00:00 2001 From: Jithin Roy <51138777+royjit@users.noreply.github.com> Date: Wed, 19 Apr 2023 11:05:05 -0700 Subject: [PATCH 3/3] Updated realtime client version --- AmplifyPlugins.podspec | 2 +- AmplifyPlugins/API/Podfile | 2 +- AmplifyPlugins/API/Podfile.lock | 15 +++++---------- AmplifyPlugins/DataStore/Podfile.lock | 8 ++++---- Package.resolved | 4 ++-- Package.swift | 2 +- 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/AmplifyPlugins.podspec b/AmplifyPlugins.podspec index 5138c42294..cf80a8c496 100644 --- a/AmplifyPlugins.podspec +++ b/AmplifyPlugins.podspec @@ -36,7 +36,7 @@ Pod::Spec.new do |s| s.subspec 'AWSAPIPlugin' do |ss| ss.source_files = 'AmplifyPlugins/API/AWSAPICategoryPlugin/**/*.swift' - ss.dependency 'AppSyncRealTimeClient', "~> 3.0" + ss.dependency 'AppSyncRealTimeClient', "~> 3.1" end s.subspec 'AWSCognitoAuthPlugin' do |ss| diff --git a/AmplifyPlugins/API/Podfile b/AmplifyPlugins/API/Podfile index 12c715e684..1c47b864db 100644 --- a/AmplifyPlugins/API/Podfile +++ b/AmplifyPlugins/API/Podfile @@ -8,7 +8,7 @@ include_build_tools! target 'AWSAPICategoryPlugin' do pod 'Amplify', :path => '../../' pod 'AWSPluginsCore', :path => '../../' - pod "AppSyncRealTimeClient", :git => 'https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git', :branch => 'main' + pod "AppSyncRealTimeClient", "~> 3.1" target "AWSAPICategoryPluginTests" do inherit! :complete diff --git a/AmplifyPlugins/API/Podfile.lock b/AmplifyPlugins/API/Podfile.lock index 5f7a1d985e..6da66ac4d6 100644 --- a/AmplifyPlugins/API/Podfile.lock +++ b/AmplifyPlugins/API/Podfile.lock @@ -19,7 +19,7 @@ PODS: - AWSMobileClient (~> 2.30.1) - AWSPluginsCore (= 1.29.2) - CwlPreconditionTesting (~> 2.0) - - AppSyncRealTimeClient (3.0.0): + - AppSyncRealTimeClient (3.1.0): - Starscream (~> 4.0.4) - AWSAuthCore (2.30.4): - AWSCore (= 2.30.4) @@ -54,7 +54,7 @@ DEPENDENCIES: - Amplify (from `../../`) - AmplifyPlugins/AWSCognitoAuthPlugin (from `../../`) - AmplifyTestCommon (from `../../`) - - AppSyncRealTimeClient (from `https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git`, branch `main`) + - AppSyncRealTimeClient (~> 3.1) - AWSPluginsCore (from `../../`) - CwlPreconditionTesting (from `https://github.com/mattgallagher/CwlPreconditionTesting.git`, tag `2.1.0`) - SwiftFormat/CLI (= 0.44.17) @@ -62,6 +62,7 @@ DEPENDENCIES: SPEC REPOS: trunk: + - AppSyncRealTimeClient - AWSAuthCore - AWSCognitoIdentityProvider - AWSCognitoIdentityProviderASF @@ -82,9 +83,6 @@ EXTERNAL SOURCES: :path: "../../" AmplifyTestCommon: :path: "../../" - AppSyncRealTimeClient: - :branch: main - :git: https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git AWSPluginsCore: :path: "../../" CwlPreconditionTesting: @@ -92,9 +90,6 @@ EXTERNAL SOURCES: :tag: 2.1.0 CHECKOUT OPTIONS: - AppSyncRealTimeClient: - :commit: 814d7a42a99371949732fc1e0fd72ad0edfcf6a9 - :git: https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git CwlPreconditionTesting: :git: https://github.com/mattgallagher/CwlPreconditionTesting.git :tag: 2.1.0 @@ -103,7 +98,7 @@ SPEC CHECKSUMS: Amplify: 955400b4b5f29832357f682e15c659d049028306 AmplifyPlugins: 9ce2e86f2051f0ec38fcf4376efb936b6c617cce AmplifyTestCommon: 9b452352797cd82faa67e296669bb94bd531a5eb - AppSyncRealTimeClient: ec19a24f635611b193eb98a2da573abcf98b793b + AppSyncRealTimeClient: 49901c6f21e541bec09281854c5695a6c1309bf7 AWSAuthCore: 42e2d4927d94e5e323b63b2ae885f287c51b5889 AWSCognitoIdentityProvider: 2331f5f4c8c1775c6a228bb2dae2d353198401e8 AWSCognitoIdentityProviderASF: d905c2acab3d2e7016b643d53ba553d5217fa929 @@ -119,6 +114,6 @@ SPEC CHECKSUMS: SwiftFormat: 3b5caa6389b2b9adbc00e133b3ccc8c6e687a6a4 SwiftLint: 32ee33ded0636d0905ef6911b2b67bbaeeedafa5 -PODFILE CHECKSUM: ed8a1897b59148645b469aec7b84a6aa25e10fd2 +PODFILE CHECKSUM: f542a7a3bf7a7e882e6ea4799c9722d5b6495208 COCOAPODS: 1.12.0 diff --git a/AmplifyPlugins/DataStore/Podfile.lock b/AmplifyPlugins/DataStore/Podfile.lock index c3ecd82aec..a4f0675cf1 100644 --- a/AmplifyPlugins/DataStore/Podfile.lock +++ b/AmplifyPlugins/DataStore/Podfile.lock @@ -3,7 +3,7 @@ PODS: - Amplify/Default (= 1.29.2) - Amplify/Default (1.29.2) - AmplifyPlugins/AWSAPIPlugin (1.29.2): - - AppSyncRealTimeClient (~> 3.0) + - AppSyncRealTimeClient (~> 3.1) - AWSCore (~> 2.30.1) - AWSPluginsCore (= 1.29.2) - AmplifyPlugins/AWSCognitoAuthPlugin (1.29.2): @@ -23,7 +23,7 @@ PODS: - AWSMobileClient (~> 2.30.1) - AWSPluginsCore (= 1.29.2) - CwlPreconditionTesting (~> 2.0) - - AppSyncRealTimeClient (3.0.0): + - AppSyncRealTimeClient (3.1.0): - Starscream (~> 4.0.4) - AWSAuthCore (2.30.4): - AWSCore (= 2.30.4) @@ -106,9 +106,9 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: Amplify: 955400b4b5f29832357f682e15c659d049028306 - AmplifyPlugins: 9ce2e86f2051f0ec38fcf4376efb936b6c617cce + AmplifyPlugins: a82d1c5ddb2b5a8fcd23dd447f84b04f93dc00c2 AmplifyTestCommon: 9b452352797cd82faa67e296669bb94bd531a5eb - AppSyncRealTimeClient: ec19a24f635611b193eb98a2da573abcf98b793b + AppSyncRealTimeClient: 49901c6f21e541bec09281854c5695a6c1309bf7 AWSAuthCore: 42e2d4927d94e5e323b63b2ae885f287c51b5889 AWSCognitoIdentityProvider: 2331f5f4c8c1775c6a228bb2dae2d353198401e8 AWSCognitoIdentityProviderASF: d905c2acab3d2e7016b643d53ba553d5217fa929 diff --git a/Package.resolved b/Package.resolved index 8f19644f50..93f89fa5a5 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git", "state": { "branch": null, - "revision": "3de274c68a3cb60c8aec18b5bc0a8c07860219cd", - "version": "3.0.0" + "revision": "b036e83716789c13a3480eeb292b70caa54114f2", + "version": "3.1.0" } }, { diff --git a/Package.swift b/Package.swift index 985a0ec8e8..b892af8024 100644 --- a/Package.swift +++ b/Package.swift @@ -35,7 +35,7 @@ let package = Package( ], dependencies: [ .package(name: "AWSiOSSDKV2", url: "https://github.com/aws-amplify/aws-sdk-ios-spm.git", .upToNextMinor(from: "2.30.1")), - .package(name: "AppSyncRealTimeClient", url: "https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git", from: "3.0.0"), + .package(name: "AppSyncRealTimeClient", url: "https://github.com/aws-amplify/aws-appsync-realtime-client-ios.git", from: "3.1.0"), .package(url: "https://github.com/stephencelis/SQLite.swift.git", .exact("0.13.2")) ], targets: [