Class: Seam::Http::Request::ResponseMiddleware
- Inherits:
-
Faraday::Response::RaiseError
- Object
- Faraday::Response::RaiseError
- Seam::Http::Request::ResponseMiddleware
- Defined in:
- lib/seam/request.rb
Instance Method Summary collapse
Instance Method Details
#on_complete(env) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/seam/request.rb', line 47 def on_complete(env) return if env.success? status_code = env.status request_id = env.response_headers["seam-request-id"] raise Http::UnauthorizedError.new(request_id) if status_code == 401 if seam_api_error_response?(env) body = JSON.parse(env.body) error = body["error"] error_details = { type: error["type"] || "unknown_error", message: error["message"] || "Unknown error", data: error["data"] } if error["type"] == "invalid_input" error_details["validation_errors"] = error["validation_errors"] raise Http::InvalidInputError.new(error_details, status_code, request_id) end raise Http::ApiError.new(error_details, status_code, request_id) end super end |
#seam_api_error_response?(env) ⇒ Boolean
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/seam/request.rb', line 75 def seam_api_error_response?(env) return false unless env.response_headers content_type = env.response_headers["Content-Type"] return false unless content_type&.start_with?("application/json") begin body = JSON.parse(env.body) return false unless body.is_a?(Hash) && body["error"].is_a?(Hash) error = body["error"] error["type"].is_a?(String) && error["message"].is_a?(String) rescue JSON::ParserError false end end |