diff --git a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart index fbbd8a2b60..b2157be19e 100644 --- a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart +++ b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart @@ -144,8 +144,15 @@ class WebSocketError extends WebSocketMessagePayload implements Exception { final List> errors; static WebSocketError fromJson(Map json) { - final errors = json['errors'] as List?; - return WebSocketError(errors?.cast() ?? []); + final errors = json['errors']; + List>? errorsList = []; + if (errors is List?) { + errorsList = errors?.cast(); + } else if (errors is Map) { + errorsList = [errors]; + } + + return WebSocketError(errorsList ?? []); } @override diff --git a/packages/api/amplify_api_dart/test/web_socket/web_socket_types_test.dart b/packages/api/amplify_api_dart/test/web_socket/web_socket_types_test.dart index 90e7489e1c..14e26ea68f 100644 --- a/packages/api/amplify_api_dart/test/web_socket/web_socket_types_test.dart +++ b/packages/api/amplify_api_dart/test/web_socket/web_socket_types_test.dart @@ -113,6 +113,34 @@ void main() { errors, ); + /// GraphQLResponseDecoder should handle a payload with errors. + final response = GraphQLResponseDecoder.instance.decode( + request: GraphQLRequest( + document: '', + ), + response: message.payload!.toJson(), + ); + expect( + response.errors.first.message, + errorMessage, + ); + }); + test('WebsocketMessage should decode errors as a Map', () { + const errorMessage = 'Max number of 100 subscriptions reached'; + const errorType = 'MaxSubscriptionsReachedError'; + const errorMap = {'errorType': errorType, 'message': errorMessage}; + final entry = { + 'id': 'xyz-456', + 'type': 'error', + 'payload': {'data': null, 'errors': errorMap}, + }; + final message = WebSocketMessage.fromJson(entry); + expect(message.messageType, MessageType.error); + expect( + message.payload!.toJson()['errors'], + [errorMap], + ); + /// GraphQLResponseDecoder should handle a payload with errors. final response = GraphQLResponseDecoder.instance.decode( request: GraphQLRequest(