@@ -36,6 +36,9 @@ trait JsonRpcHttpServer extends Json4sSupport with RateLimit with Logger {
3636
3737 def corsAllowedOrigins : HttpOriginMatcher
3838
39+ lazy val jsonRpcErrorCodes : List [Int ] =
40+ List (JsonRpcError .InvalidRequest .code, JsonRpcError .ParseError .code, JsonRpcError .InvalidParams ().code)
41+
3942 val corsSettings = CorsSettings .defaultSettings
4043 .withAllowGenericHttpRequests(true )
4144 .withAllowedOrigins(corsAllowedOrigins)
@@ -70,12 +73,12 @@ trait JsonRpcHttpServer extends Json4sSupport with RateLimit with Logger {
7073 // As a temporary solution, it is being excluded from the Rate Limit.
7174 if (config.rateLimit.enabled && request.method != FaucetJsonRpcController .Status ) {
7275 handleRateLimitedRequest(clientAddress, request)
73- } else complete(jsonRpcController.handleRequest(request).runToFuture)
76+ } else complete(handleResponse( jsonRpcController.handleRequest(request) ).runToFuture)
7477 }
7578
7679 def handleRateLimitedRequest (clientAddress : RemoteAddress , request : JsonRpcRequest ): StandardRoute = {
7780 if (isBelowRateLimit(clientAddress))
78- complete(jsonRpcController.handleRequest(request).runToFuture)
81+ complete(handleResponse( jsonRpcController.handleRequest(request) ).runToFuture)
7982 else {
8083 log.warn(s " Request limit exceeded for ip ${clientAddress.toIP.getOrElse(" unknown" )}" )
8184 complete(
@@ -84,6 +87,14 @@ trait JsonRpcHttpServer extends Json4sSupport with RateLimit with Logger {
8487 }
8588 }
8689
90+ private def handleResponse (f : Task [JsonRpcResponse ]): Task [(StatusCode , JsonRpcResponse )] = f map { jsonRpcResponse =>
91+ jsonRpcResponse.error match {
92+ case Some (JsonRpcError (error, _, _)) if jsonRpcErrorCodes.contains(error) =>
93+ (StatusCodes .BadRequest , jsonRpcResponse)
94+ case _ => (StatusCodes .OK , jsonRpcResponse)
95+ }
96+ }
97+
8798 /**
8899 * Try to start JSON RPC server
89100 */
0 commit comments