From f3639821d836f54001f117a1133ad19645dbe372 Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Mon, 3 Jun 2024 16:31:45 -0500 Subject: [PATCH 1/6] fix(datastore): added missing defaultAuthType method --- .../pigeons/NativePluginBindings.kt | 7 +++ .../ios/Classes/FlutterApiPlugin.swift | 43 ++++++++++++++++++- .../pigeons/NativePluginBindings.swift | 7 +++ .../lib/amplify_datastore.dart | 26 ++++++++++- .../lib/src/native_plugin.g.dart | 20 +++++++++ .../pigeons/native_plugin.dart | 2 + 6 files changed, 102 insertions(+), 3 deletions(-) diff --git a/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt b/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt index 9dd0e1ee4e..62cc29aa90 100644 --- a/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt +++ b/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt @@ -360,6 +360,13 @@ class NativeApiPlugin(private val binaryMessenger: BinaryMessenger) { callback(result) } } + fun getEndpointAuthorizationType(apiNameArg: String?, callback: (String?) -> Unit) { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType", codec) + channel.send(listOf(apiNameArg)) { + val result = it as String? + callback(result) + } + } fun mutate(requestArg: NativeGraphQLRequest, callback: (NativeGraphQLResponse) -> Unit) { val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.mutate", codec) channel.send(listOf(requestArg)) { diff --git a/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift b/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift index bd3fa4c122..b6c619dc8e 100644 --- a/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift +++ b/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift @@ -2,7 +2,7 @@ import Foundation import Flutter import Combine -public class FlutterApiPlugin: APICategoryPlugin +public class FlutterApiPlugin: APICategoryPlugin, AWSAPIAuthInformation { public var key: PluginKey = "awsAPIPlugin" private let apiAuthFactory: APIAuthProviderFactory @@ -20,6 +20,47 @@ public class FlutterApiPlugin: APICategoryPlugin self.nativeSubscriptionEvents = subscriptionEventBus } + public func defaultAuthType() throws -> AWSAuthorizationType { + try defaultAuthType(for: nil) + } + + public func defaultAuthType(for apiName: String?) throws -> AWSAuthorizationType { + guard let apiName = apiName else { + let error = DataStoreError.api(APIError.invalidConfiguration( "Unable to get an endpoint configuration for \(String(describing: apiName))", + """ + Review your API plugin configuration and ensure \(String(describing: apiName)) has a valid configuration. + """) ) + throw error + } + // TODO(equartey): Migrate away from sempahore. + let semaphore = DispatchSemaphore(value: 0) + var authTypeResponse: String? + self.nativeApiPlugin.getEndpointAuthorizationType(apiName: apiName) { authType in + authTypeResponse = authType + semaphore.signal() + } + semaphore.wait() + + return try stringToAWSAuthType(string: authTypeResponse) + } + + private func stringToAWSAuthType(string: String?) throws -> AWSAuthorizationType { + switch(string){ + case .some("apiKey"): + return AWSAuthorizationType.apiKey + case .some("none"): + return AWSAuthorizationType.none + case .some("iam"): + return AWSAuthorizationType.awsIAM + case .some("oidc"): + return AWSAuthorizationType.openIDConnect + case .some("userPools"): + return AWSAuthorizationType.amazonCognitoUserPools + default: + throw DataStoreError.configuration("No AWSAuthorizationType found from given string", "Please check API configuration") + } + } + public func query(request: GraphQLRequest) async throws -> GraphQLTask.Success where R : Decodable { let response = await asyncQuery(nativeRequest: request.toNativeGraphQLRequest()) diff --git a/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift b/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift index a619cbb998..c60b75cbb4 100644 --- a/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift +++ b/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift @@ -374,6 +374,13 @@ class NativeApiPlugin { completion(result) } } + func getEndpointAuthorizationType(apiName apiNameArg: String?, completion: @escaping (String?) -> Void) { + let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType", binaryMessenger: binaryMessenger, codec: codec) + channel.sendMessage([apiNameArg] as [Any?]) { response in + let result: String? = nilOrValue(response) + completion(result) + } + } func mutate(request requestArg: NativeGraphQLRequest, completion: @escaping (NativeGraphQLResponse) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.mutate", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([requestArg] as [Any?]) { response in diff --git a/packages/amplify_datastore/lib/amplify_datastore.dart b/packages/amplify_datastore/lib/amplify_datastore.dart index fa58a61dca..c05002ff85 100644 --- a/packages/amplify_datastore/lib/amplify_datastore.dart +++ b/packages/amplify_datastore/lib/amplify_datastore.dart @@ -106,7 +106,12 @@ class AmplifyDataStore extends DataStorePluginInterface if (apiPlugin != null && gqlConfig != null) { // ignore: invalid_use_of_protected_member final authProviders = apiPlugin.authProviders; - final nativePlugin = _NativeAmplifyApi(authProviders); + final endpoints = config.api?.awsPlugin?.all.entries.map((e) { + return { + e.key: e.value.authorizationType, + }; + }).toList(); + final nativePlugin = _NativeAmplifyApi(authProviders, endpoints); NativeApiPlugin.setup(nativePlugin); final nativeBridge = NativeApiBridge(); @@ -291,7 +296,7 @@ class _NativeAmplifyAuthCognito class _NativeAmplifyApi with AWSDebuggable, AmplifyLoggerMixin implements NativeApiPlugin { - _NativeAmplifyApi(this._authProviders); + _NativeAmplifyApi(this._authProviders, this.endpoints); /// The registered [APIAuthProvider] instances. final Map, APIAuthProvider> @@ -300,6 +305,8 @@ class _NativeAmplifyApi final Map>> _subscriptionsCache = {}; + final List>>? endpoints; + @override String get runtimeTypeName => '_NativeAmplifyApi'; @@ -319,6 +326,21 @@ class _NativeAmplifyApi return authProvider.getLatestAuthToken(); } + @override + String? getEndpointAuthorizationType(String? apiName) { + if (apiName == null) { + throw DataStoreException('No API name provided'); + } + final endpoint = + endpoints?.firstWhereOrNull((e) => e.keys.first == apiName); + if (endpoint == null) { + throw DataStoreException( + 'No endpoint found for $apiName', + ); + } + return endpoint.values.first.rawValue; + } + @override Future mutate(NativeGraphQLRequest request) async { try { diff --git a/packages/amplify_datastore/lib/src/native_plugin.g.dart b/packages/amplify_datastore/lib/src/native_plugin.g.dart index 327c28c658..498b09d148 100644 --- a/packages/amplify_datastore/lib/src/native_plugin.g.dart +++ b/packages/amplify_datastore/lib/src/native_plugin.g.dart @@ -349,6 +349,8 @@ abstract class NativeApiPlugin { Future getLatestAuthToken(String providerName); + String? getEndpointAuthorizationType(String? apiName); + Future mutate(NativeGraphQLRequest request); Future query(NativeGraphQLRequest request); @@ -380,6 +382,24 @@ abstract class NativeApiPlugin { }); } } + { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType', + codec, + binaryMessenger: binaryMessenger); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType was null.'); + final List args = (message as List?)!; + final String? arg_apiName = (args[0] as String?); + final String? output = api.getEndpointAuthorizationType(arg_apiName); + return output; + }); + } + } { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.mutate', codec, diff --git a/packages/amplify_datastore/pigeons/native_plugin.dart b/packages/amplify_datastore/pigeons/native_plugin.dart index d44a729c8f..93ecd5cd15 100644 --- a/packages/amplify_datastore/pigeons/native_plugin.dart +++ b/packages/amplify_datastore/pigeons/native_plugin.dart @@ -30,6 +30,8 @@ abstract class NativeApiPlugin { @async String? getLatestAuthToken(String providerName); + String? getEndpointAuthorizationType(String? apiName); + @async NativeGraphQLResponse mutate(NativeGraphQLRequest request); From 943b118db0661841947ffdc405bd5b81737db699 Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Mon, 3 Jun 2024 16:37:03 -0500 Subject: [PATCH 2/6] fix: remove comment --- .../ios/Classes/types/model/FlutterModelSchema.swift | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/amplify_datastore/ios/Classes/types/model/FlutterModelSchema.swift b/packages/amplify_datastore/ios/Classes/types/model/FlutterModelSchema.swift index a4f63621f7..ebd0f9eb73 100644 --- a/packages/amplify_datastore/ios/Classes/types/model/FlutterModelSchema.swift +++ b/packages/amplify_datastore/ios/Classes/types/model/FlutterModelSchema.swift @@ -97,12 +97,3 @@ struct FlutterModelSchema { return (fields, name) } } - -// TODO: Migrate to Async Swift v2 -// This enables custom selection set behavior within Amplify-Swift v1. -// Which allows models to be decoded when created on Android and received to iOS -//extension FlutterModelSchema: SubscriptionSelectionSetBehavior { -// public var includePrimaryKeysOnly: Bool { -// return true -// } -//} From 0c61124a455c117e813bf4bd110d175e36d9133d Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Mon, 3 Jun 2024 16:57:35 -0500 Subject: [PATCH 3/6] fix: corrected logic --- packages/amplify_datastore/lib/amplify_datastore.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/amplify_datastore/lib/amplify_datastore.dart b/packages/amplify_datastore/lib/amplify_datastore.dart index c05002ff85..05260d7bb8 100644 --- a/packages/amplify_datastore/lib/amplify_datastore.dart +++ b/packages/amplify_datastore/lib/amplify_datastore.dart @@ -331,14 +331,13 @@ class _NativeAmplifyApi if (apiName == null) { throw DataStoreException('No API name provided'); } - final endpoint = - endpoints?.firstWhereOrNull((e) => e.keys.first == apiName); + final endpoint = endpoints?.firstWhereOrNull((e) => e[apiName] != null); if (endpoint == null) { throw DataStoreException( 'No endpoint found for $apiName', ); } - return endpoint.values.first.rawValue; + return endpoint[apiName]?.name; } @override From c76f3cf27306cc874e6e5731f6ab6e6046d8fba2 Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Mon, 3 Jun 2024 18:11:56 -0500 Subject: [PATCH 4/6] refactor: pass endpoints at config time --- .../pigeons/NativePluginBindings.kt | 12 ++----- .../ios/Classes/FlutterApiPlugin.swift | 28 +++++++---------- .../Classes/SwiftAmplifyDataStorePlugin.swift | 6 ++-- .../pigeons/NativePluginBindings.swift | 12 ++----- .../lib/amplify_datastore.dart | 31 +++++-------------- .../lib/src/native_plugin.g.dart | 26 +++------------- .../pigeons/native_plugin.dart | 5 ++- 7 files changed, 34 insertions(+), 86 deletions(-) diff --git a/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt b/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt index 62cc29aa90..71c7a0db1d 100644 --- a/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt +++ b/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/pigeons/NativePluginBindings.kt @@ -360,13 +360,6 @@ class NativeApiPlugin(private val binaryMessenger: BinaryMessenger) { callback(result) } } - fun getEndpointAuthorizationType(apiNameArg: String?, callback: (String?) -> Unit) { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType", codec) - channel.send(listOf(apiNameArg)) { - val result = it as String? - callback(result) - } - } fun mutate(requestArg: NativeGraphQLRequest, callback: (NativeGraphQLResponse) -> Unit) { val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.mutate", codec) channel.send(listOf(requestArg)) { @@ -542,7 +535,7 @@ private object NativeApiBridgeCodec : StandardMessageCodec() { * Generated interface from Pigeon that represents a handler of messages from Flutter. */ interface NativeApiBridge { - fun addApiPlugin(authProvidersList: List, callback: (Result) -> Unit) + fun addApiPlugin(authProvidersList: List, endpoints: Map, callback: (Result) -> Unit) fun sendSubscriptionEvent(event: NativeGraphQLSubscriptionResponse, callback: (Result) -> Unit) companion object { @@ -559,7 +552,8 @@ interface NativeApiBridge { channel.setMessageHandler { message, reply -> val args = message as List val authProvidersListArg = args[0] as List - api.addApiPlugin(authProvidersListArg) { result: Result -> + val endpointsArg = args[1] as Map + api.addApiPlugin(authProvidersListArg, endpointsArg) { result: Result -> val error = result.exceptionOrNull() if (error != null) { reply.reply(wrapError(error)) diff --git a/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift b/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift index b6c619dc8e..4b82bc8051 100644 --- a/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift +++ b/packages/amplify_datastore/ios/Classes/FlutterApiPlugin.swift @@ -9,15 +9,18 @@ public class FlutterApiPlugin: APICategoryPlugin, AWSAPIAuthInformation private let nativeApiPlugin: NativeApiPlugin private let nativeSubscriptionEvents: PassthroughSubject private var cancellables = AtomicDictionary() + private var endpoints: [String: String] init( apiAuthProviderFactory: APIAuthProviderFactory, nativeApiPlugin: NativeApiPlugin, - subscriptionEventBus: PassthroughSubject + subscriptionEventBus: PassthroughSubject, + endpoints: [String: String] ) { self.apiAuthFactory = apiAuthProviderFactory self.nativeApiPlugin = nativeApiPlugin self.nativeSubscriptionEvents = subscriptionEventBus + self.endpoints = endpoints } public func defaultAuthType() throws -> AWSAuthorizationType { @@ -25,23 +28,14 @@ public class FlutterApiPlugin: APICategoryPlugin, AWSAPIAuthInformation } public func defaultAuthType(for apiName: String?) throws -> AWSAuthorizationType { - guard let apiName = apiName else { - let error = DataStoreError.api(APIError.invalidConfiguration( "Unable to get an endpoint configuration for \(String(describing: apiName))", - """ - Review your API plugin configuration and ensure \(String(describing: apiName)) has a valid configuration. - """) ) - throw error - } - // TODO(equartey): Migrate away from sempahore. - let semaphore = DispatchSemaphore(value: 0) - var authTypeResponse: String? - self.nativeApiPlugin.getEndpointAuthorizationType(apiName: apiName) { authType in - authTypeResponse = authType - semaphore.signal() + if apiName == nil { + if self.endpoints.count == 1 { + return try stringToAWSAuthType(string: self.endpoints.first?.value) + } + return try stringToAWSAuthType(string: "") } - semaphore.wait() - - return try stringToAWSAuthType(string: authTypeResponse) + let authType = self.endpoints[apiName!] + return try stringToAWSAuthType(string: authType) } private func stringToAWSAuthType(string: String?) throws -> AWSAuthorizationType { diff --git a/packages/amplify_datastore/ios/Classes/SwiftAmplifyDataStorePlugin.swift b/packages/amplify_datastore/ios/Classes/SwiftAmplifyDataStorePlugin.swift index e94d41e0ed..681c679068 100644 --- a/packages/amplify_datastore/ios/Classes/SwiftAmplifyDataStorePlugin.swift +++ b/packages/amplify_datastore/ios/Classes/SwiftAmplifyDataStorePlugin.swift @@ -80,11 +80,12 @@ public class SwiftAmplifyDataStorePlugin: NSObject, FlutterPlugin, NativeAmplify } } - func addApiPlugin(authProvidersList: [String], completion: @escaping (Result) -> Void) { + func addApiPlugin(authProvidersList: [String], endpoints: [String: String], completion: @escaping (Result) -> Void) { do { let authProviders = authProvidersList.compactMap { AWSAuthorizationType(rawValue: $0) } + try Amplify.add( plugin: FlutterApiPlugin( apiAuthProviderFactory: FlutterAuthProviders( @@ -92,7 +93,8 @@ public class SwiftAmplifyDataStorePlugin: NSObject, FlutterPlugin, NativeAmplify nativeApiPlugin: nativeApiPlugin ), nativeApiPlugin: nativeApiPlugin, - subscriptionEventBus: nativeSubscriptionEventBus + subscriptionEventBus: nativeSubscriptionEventBus, + endpoints: endpoints ) ) return completion(.success(())) diff --git a/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift b/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift index c60b75cbb4..580f662bb9 100644 --- a/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift +++ b/packages/amplify_datastore/ios/Classes/pigeons/NativePluginBindings.swift @@ -374,13 +374,6 @@ class NativeApiPlugin { completion(result) } } - func getEndpointAuthorizationType(apiName apiNameArg: String?, completion: @escaping (String?) -> Void) { - let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType", binaryMessenger: binaryMessenger, codec: codec) - channel.sendMessage([apiNameArg] as [Any?]) { response in - let result: String? = nilOrValue(response) - completion(result) - } - } func mutate(request requestArg: NativeGraphQLRequest, completion: @escaping (NativeGraphQLResponse) -> Void) { let channel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.mutate", binaryMessenger: binaryMessenger, codec: codec) channel.sendMessage([requestArg] as [Any?]) { response in @@ -563,7 +556,7 @@ class NativeApiBridgeCodec: FlutterStandardMessageCodec { /// /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol NativeApiBridge { - func addApiPlugin(authProvidersList: [String], completion: @escaping (Result) -> Void) + func addApiPlugin(authProvidersList: [String], endpoints: [String: String], completion: @escaping (Result) -> Void) func sendSubscriptionEvent(event: NativeGraphQLSubscriptionResponse, completion: @escaping (Result) -> Void) } @@ -578,7 +571,8 @@ class NativeApiBridgeSetup { addApiPluginChannel.setMessageHandler { message, reply in let args = message as! [Any?] let authProvidersListArg = args[0] as! [String] - api.addApiPlugin(authProvidersList: authProvidersListArg) { result in + let endpointsArg = args[1] as! [String: String] + api.addApiPlugin(authProvidersList: authProvidersListArg, endpoints: endpointsArg) { result in switch result { case .success: reply(wrapResult(nil)) diff --git a/packages/amplify_datastore/lib/amplify_datastore.dart b/packages/amplify_datastore/lib/amplify_datastore.dart index 05260d7bb8..685165c76a 100644 --- a/packages/amplify_datastore/lib/amplify_datastore.dart +++ b/packages/amplify_datastore/lib/amplify_datastore.dart @@ -106,19 +106,18 @@ class AmplifyDataStore extends DataStorePluginInterface if (apiPlugin != null && gqlConfig != null) { // ignore: invalid_use_of_protected_member final authProviders = apiPlugin.authProviders; - final endpoints = config.api?.awsPlugin?.all.entries.map((e) { - return { - e.key: e.value.authorizationType, - }; - }).toList(); - final nativePlugin = _NativeAmplifyApi(authProviders, endpoints); + Map endpoints = {}; + config.api?.awsPlugin?.all.entries.forEach((e) { + endpoints[e.key] = e.value.authorizationType.name; + }); + final nativePlugin = _NativeAmplifyApi(authProviders); NativeApiPlugin.setup(nativePlugin); final nativeBridge = NativeApiBridge(); try { final authProvidersList = authProviders.keys.map((key) => key.rawValue).toList(); - await nativeBridge.addApiPlugin(authProvidersList); + await nativeBridge.addApiPlugin(authProvidersList, endpoints); } on PlatformException catch (e) { if (e.code.contains('AmplifyAlreadyConfiguredException') || e.code.contains('AlreadyConfiguredException')) { @@ -296,7 +295,7 @@ class _NativeAmplifyAuthCognito class _NativeAmplifyApi with AWSDebuggable, AmplifyLoggerMixin implements NativeApiPlugin { - _NativeAmplifyApi(this._authProviders, this.endpoints); + _NativeAmplifyApi(this._authProviders); /// The registered [APIAuthProvider] instances. final Map, APIAuthProvider> @@ -305,8 +304,6 @@ class _NativeAmplifyApi final Map>> _subscriptionsCache = {}; - final List>>? endpoints; - @override String get runtimeTypeName => '_NativeAmplifyApi'; @@ -326,20 +323,6 @@ class _NativeAmplifyApi return authProvider.getLatestAuthToken(); } - @override - String? getEndpointAuthorizationType(String? apiName) { - if (apiName == null) { - throw DataStoreException('No API name provided'); - } - final endpoint = endpoints?.firstWhereOrNull((e) => e[apiName] != null); - if (endpoint == null) { - throw DataStoreException( - 'No endpoint found for $apiName', - ); - } - return endpoint[apiName]?.name; - } - @override Future mutate(NativeGraphQLRequest request) async { try { diff --git a/packages/amplify_datastore/lib/src/native_plugin.g.dart b/packages/amplify_datastore/lib/src/native_plugin.g.dart index 498b09d148..d2ffdb76db 100644 --- a/packages/amplify_datastore/lib/src/native_plugin.g.dart +++ b/packages/amplify_datastore/lib/src/native_plugin.g.dart @@ -349,8 +349,6 @@ abstract class NativeApiPlugin { Future getLatestAuthToken(String providerName); - String? getEndpointAuthorizationType(String? apiName); - Future mutate(NativeGraphQLRequest request); Future query(NativeGraphQLRequest request); @@ -382,24 +380,6 @@ abstract class NativeApiPlugin { }); } } - { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType', - codec, - binaryMessenger: binaryMessenger); - if (api == null) { - channel.setMessageHandler(null); - } else { - channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.getEndpointAuthorizationType was null.'); - final List args = (message as List?)!; - final String? arg_apiName = (args[0] as String?); - final String? output = api.getEndpointAuthorizationType(arg_apiName); - return output; - }); - } - } { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.amplify_datastore.NativeApiPlugin.mutate', codec, @@ -634,13 +614,15 @@ class NativeApiBridge { static const MessageCodec codec = _NativeApiBridgeCodec(); - Future addApiPlugin(List arg_authProvidersList) async { + Future addApiPlugin(List arg_authProvidersList, + Map arg_endpoints) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.amplify_datastore.NativeApiBridge.addApiPlugin', codec, binaryMessenger: _binaryMessenger); final List? replyList = - await channel.send([arg_authProvidersList]) as List?; + await channel.send([arg_authProvidersList, arg_endpoints]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', diff --git a/packages/amplify_datastore/pigeons/native_plugin.dart b/packages/amplify_datastore/pigeons/native_plugin.dart index 93ecd5cd15..d9c2b69043 100644 --- a/packages/amplify_datastore/pigeons/native_plugin.dart +++ b/packages/amplify_datastore/pigeons/native_plugin.dart @@ -30,8 +30,6 @@ abstract class NativeApiPlugin { @async String? getLatestAuthToken(String providerName); - String? getEndpointAuthorizationType(String? apiName); - @async NativeGraphQLResponse mutate(NativeGraphQLRequest request); @@ -65,7 +63,8 @@ abstract class NativeAuthBridge { @HostApi() abstract class NativeApiBridge { @async - void addApiPlugin(List authProvidersList); + void addApiPlugin( + List authProvidersList, Map endpoints); @async void sendSubscriptionEvent(NativeGraphQLSubscriptionResponse event); From 36cb27c66ec20d074c336ce6ff80786b5a312060 Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Mon, 3 Jun 2024 18:58:13 -0500 Subject: [PATCH 5/6] fix: add missing override --- .../amplify/amplify_datastore/AmplifyDataStorePlugin.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/AmplifyDataStorePlugin.kt b/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/AmplifyDataStorePlugin.kt index 0ad51df167..c1c7ece49e 100644 --- a/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/AmplifyDataStorePlugin.kt +++ b/packages/amplify_datastore/android/src/main/kotlin/com/amazonaws/amplify/amplify_datastore/AmplifyDataStorePlugin.kt @@ -901,6 +901,7 @@ class AmplifyDataStorePlugin : override fun addApiPlugin( authProvidersList: List, + endpoints: Map, callback: (kotlin.Result) -> Unit ) { try { From 4309474cd25891880f401b7321010e6273b16937 Mon Sep 17 00:00:00 2001 From: Elijah Quartey Date: Mon, 3 Jun 2024 19:16:38 -0500 Subject: [PATCH 6/6] chore: regen amplify swift --- .../ios/internal/Amplify/Categories/Logging/LogLevel.swift | 2 +- .../AWSUnifiedLoggingPlugin/Internal/OSLogWrapper.swift | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/amplify_datastore/ios/internal/Amplify/Categories/Logging/LogLevel.swift b/packages/amplify_datastore/ios/internal/Amplify/Categories/Logging/LogLevel.swift index cee8acfff4..aea36cdfbf 100644 --- a/packages/amplify_datastore/ios/internal/Amplify/Categories/Logging/LogLevel.swift +++ b/packages/amplify_datastore/ios/internal/Amplify/Categories/Logging/LogLevel.swift @@ -9,12 +9,12 @@ /// public extension Amplify { enum LogLevel: Int, Codable { + case none case error case warn case info case debug case verbose - case none public init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() diff --git a/packages/amplify_datastore/ios/internal/Amplify/DefaultPlugins/AWSUnifiedLoggingPlugin/Internal/OSLogWrapper.swift b/packages/amplify_datastore/ios/internal/Amplify/DefaultPlugins/AWSUnifiedLoggingPlugin/Internal/OSLogWrapper.swift index ad3087d867..66529cc64d 100644 --- a/packages/amplify_datastore/ios/internal/Amplify/DefaultPlugins/AWSUnifiedLoggingPlugin/Internal/OSLogWrapper.swift +++ b/packages/amplify_datastore/ios/internal/Amplify/DefaultPlugins/AWSUnifiedLoggingPlugin/Internal/OSLogWrapper.swift @@ -29,7 +29,7 @@ final class OSLogWrapper: Logger { } public func error(_ message: @autoclosure () -> String) { - guard enabled else { return } + guard enabled, logLevel.rawValue >= LogLevel.error.rawValue else { return } os_log("%@", log: osLog, type: OSLogType.error, @@ -37,7 +37,7 @@ final class OSLogWrapper: Logger { } public func error(error: Error) { - guard enabled else { return } + guard enabled, logLevel.rawValue >= LogLevel.error.rawValue else { return } os_log("%@", log: osLog, type: OSLogType.error,