Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ruby exceptions hide error messages #533

Open
bpo opened this issue Jul 11, 2020 · 4 comments
Open

Ruby exceptions hide error messages #533

bpo opened this issue Jul 11, 2020 · 4 comments

Comments

@bpo
Copy link

bpo commented Jul 11, 2020

Version info

  • intercom-ruby version: intercom-4.0.1
  • Ruby version: 2.6.6

Expected behavior

Exception objects raised by the Intercom client should include the error message, as are surfaced by the API. For example, this is a possible API response body associated with a 403 Forbidden response code. The message is very important to understanding why the action is forbidden:

{"type":"error.list","request_id":"xxx","errors":[{"code":"action_forbidden","message":"This user is unsubscribed from emails"}]}"

Actual behavior

The Ruby client masks all details of the error returned by the API, and surfaces only a blank Ruby object that can be used to guess the return code, but not the message:

#Intercom::AuthenticationError:Forbidden @http_code=nil @application_error_code=nil @field=nil @request_id=nil

Steps to reproduce

  1. Trigger any 40x or 50x response from the API

Additional details

It looks like the client was designed to parse these error messages properly in raise_application_errors_on_failure, but most non-20x response codes will abort client handling early in raise_errors_on_failure

@bpo bpo changed the title Ruby exceptions hide all error details Ruby exceptions hide error messages Jul 11, 2020
@theandrewykim
Copy link
Contributor

theandrewykim commented Oct 28, 2020

@bpo merged a change in: #548

That should reveal more of our verbose error messages

@rahulgdsouza
Copy link
Contributor

Reopening issue as we had to revert #548

@rahulgdsouza rahulgdsouza reopened this Oct 30, 2020
@bpo
Copy link
Author

bpo commented Nov 2, 2021

Intercom's API may reply with a response that looks like this:

{"type"=>"error.list", "request_id"=>"xxxxx", "errors"=>[{"code"=>"action_forbidden", "message"=>"An email to this user has hard bounced and they cannot be messaged via email"}]}

As noted above this will raise an Intercom::AuthenticationError with no information other than the message "Forbidden".

With the patch from #548 applied the raised error will instead be:

Intercom::UnexpectedError (The error of type '' is not recognized. It occurred with the message: An email to this user has hard bounced and they cannot be messaged via email and http_code: '403'. Please contact Intercom with these details.)

This is caused by two separate issues not addressed in #548:

  • Error code action_forbidden is not supported in this client
  • The client's error-handling fallthrough (message_for_unexpected_error_with_type) expects errors to have a type field where the current API uses a code field.

The workaround for a codebase I maintain was to refine the behaviors of raise_errors_on_failure and raise_application_errors_on_failure pending support for this gem from Intercom.

@johnlempka
Copy link

This still seems to be happening.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants