-
-
Notifications
You must be signed in to change notification settings - Fork 668
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
Clean up old errors #3633
Clean up old errors #3633
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
763454e
to
259bf11
Compare
After enabling |
After enabling |
After enabling |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I started reviewing the first two points from the TL;DR and found something that should be addressed before I continue the review so I'm submitting a request changes proposal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice improvements. Non blocking approve with some comments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice improvements. Non blocking approve with some comments.
This PR adds the missing serialization of the AuthenticationRequired response back in. It was mistakenly removed in #3633. This PR also adds another test to verify that it the options property is present.
https://linear.app/unleash/issue/2-1085/bug-password-based-login-still-shows-on-the-login-page-even-if Fixes a regression introduced with the changes related with #3633 where we still show the password login even though it's disabled. --------- Co-authored-by: Thomas Heartman <thomas@getunleash.io>
This PR attempts to improve the error handling introduced in #3607.
About the changes
tl;dr:
UnleashError
constructor protectedUnleashError
.PasswordMismatchError
andBadRequestError
. These don't exist.ContentTypeError
,NotImplementedError
,UnauthorizedError
...rest
parameter from error constructorGenericUnleashError
classBadDataError
clasError.captureStackTrace
. This is done automatically.getPropFromString
function and add testsIn a more verbose fashion
The main thing is that all our internal errors now inherit from
UnleashError
. This allows us to simplify theUnleashError
constructor and error handling in general while still giving us the extra benefits we added to that class. However, it does also mean that I've had to update all existing error classes.The constructor for
UnleashError
is now protected and all places that called that constructor directly have been updated. Because the base error isn't available anymore, I've added three new errors to cover use cases that we didn't already have covered:NotImplementedError
,UnauthorizedError
,ContentTypeError
. This is to stay consistent in how we report errors to the user.There is also an internal class,
GenericUnleashError
that inherits from the base error. This class is only used in conversions for cases where we don't know what the error is. It is not exported.In making all the errors inherit, I've also removed the
...rest
parameter from theUnleashError
constructor. We don't need this anymore.Following on from the fixes with missing properties in #3638, I have added tests for all errors that contain extra data.
Some of the error names that were originally used when creating the list don't exist in the backend.
BadRequestError
andPasswordMismatchError
have been removed.The
BadDataError
class now contains the conversion code for OpenAPI validation errors. In doing so, I extracted and tested thegetPropFromString
function.Main files
Due to the nature of the changes, there's a lot of files to look at. So to make it easier to know where to turn your attention:
The changes in
api-error.ts
contain the main changes: protected constructor, removal of OpenAPI conversion (moved intoBadDataError
.api-error.test.ts
contains tests to make sure that errors work as expected.Aside from
get-prop-from-string.ts
and the tests, everything else is just the required updates to go through with the changes.Discussion points
I've gone for inheritance of the Error type over composition. This is in large part because throwing actual Error instances instead of just objects is preferable (because they collect stack traces, for instance). However, it's quite possible that we could solve the same thing in a more elegant fashion using composition.
For later / suggestions for further improvements
The
api-error
files still contain a lot of code. I think it might be beneficial to break each Error into a separate folder that includes the error, its tests, and its schema (if required). It would help decouple it a bit.We don't currently expose the schema anywhere, so it's not available in the openapi spec. We should look at exposing it too.
Finally, it would be good to go through each individual error message and update each one to be as helpful as possible.