1
+ import { OAuthErrorResponse } from "../../shared/auth.js" ;
2
+
3
+ /**
4
+ * Base class for all OAuth errors
5
+ */
6
+ export class OAuthError extends Error {
7
+ constructor (
8
+ public readonly errorCode : string ,
9
+ message : string ,
10
+ public readonly errorUri ?: string
11
+ ) {
12
+ super ( message ) ;
13
+ this . name = this . constructor . name ;
14
+ }
15
+
16
+ /**
17
+ * Converts the error to a standard OAuth error response object
18
+ */
19
+ toResponseObject ( ) : OAuthErrorResponse {
20
+ const response : OAuthErrorResponse = {
21
+ error : this . errorCode ,
22
+ error_description : this . message
23
+ } ;
24
+
25
+ if ( this . errorUri ) {
26
+ response . error_uri = this . errorUri ;
27
+ }
28
+
29
+ return response ;
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Invalid request error - The request is missing a required parameter,
35
+ * includes an invalid parameter value, includes a parameter more than once,
36
+ * or is otherwise malformed.
37
+ */
38
+ export class InvalidRequestError extends OAuthError {
39
+ constructor ( message : string , errorUri ?: string ) {
40
+ super ( "invalid_request" , message , errorUri ) ;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Invalid client error - Client authentication failed (e.g., unknown client, no client
46
+ * authentication included, or unsupported authentication method).
47
+ */
48
+ export class InvalidClientError extends OAuthError {
49
+ constructor ( message : string , errorUri ?: string ) {
50
+ super ( "invalid_client" , message , errorUri ) ;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Invalid grant error - The provided authorization grant or refresh token is
56
+ * invalid, expired, revoked, does not match the redirection URI used in the
57
+ * authorization request, or was issued to another client.
58
+ */
59
+ export class InvalidGrantError extends OAuthError {
60
+ constructor ( message : string , errorUri ?: string ) {
61
+ super ( "invalid_grant" , message , errorUri ) ;
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Unauthorized client error - The authenticated client is not authorized to use
67
+ * this authorization grant type.
68
+ */
69
+ export class UnauthorizedClientError extends OAuthError {
70
+ constructor ( message : string , errorUri ?: string ) {
71
+ super ( "unauthorized_client" , message , errorUri ) ;
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Unsupported grant type error - The authorization grant type is not supported
77
+ * by the authorization server.
78
+ */
79
+ export class UnsupportedGrantTypeError extends OAuthError {
80
+ constructor ( message : string , errorUri ?: string ) {
81
+ super ( "unsupported_grant_type" , message , errorUri ) ;
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Invalid scope error - The requested scope is invalid, unknown, malformed, or
87
+ * exceeds the scope granted by the resource owner.
88
+ */
89
+ export class InvalidScopeError extends OAuthError {
90
+ constructor ( message : string , errorUri ?: string ) {
91
+ super ( "invalid_scope" , message , errorUri ) ;
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Access denied error - The resource owner or authorization server denied the request.
97
+ */
98
+ export class AccessDeniedError extends OAuthError {
99
+ constructor ( message : string , errorUri ?: string ) {
100
+ super ( "access_denied" , message , errorUri ) ;
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Server error - The authorization server encountered an unexpected condition
106
+ * that prevented it from fulfilling the request.
107
+ */
108
+ export class ServerError extends OAuthError {
109
+ constructor ( message : string , errorUri ?: string ) {
110
+ super ( "server_error" , message , errorUri ) ;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Temporarily unavailable error - The authorization server is currently unable to
116
+ * handle the request due to a temporary overloading or maintenance of the server.
117
+ */
118
+ export class TemporarilyUnavailableError extends OAuthError {
119
+ constructor ( message : string , errorUri ?: string ) {
120
+ super ( "temporarily_unavailable" , message , errorUri ) ;
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Unsupported response type error - The authorization server does not support
126
+ * obtaining an authorization code using this method.
127
+ */
128
+ export class UnsupportedResponseTypeError extends OAuthError {
129
+ constructor ( message : string , errorUri ?: string ) {
130
+ super ( "unsupported_response_type" , message , errorUri ) ;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Unsupported token type error - The authorization server does not support
136
+ * the requested token type.
137
+ */
138
+ export class UnsupportedTokenTypeError extends OAuthError {
139
+ constructor ( message : string , errorUri ?: string ) {
140
+ super ( "unsupported_token_type" , message , errorUri ) ;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Invalid token error - The access token provided is expired, revoked, malformed,
146
+ * or invalid for other reasons.
147
+ */
148
+ export class InvalidTokenError extends OAuthError {
149
+ constructor ( message : string , errorUri ?: string ) {
150
+ super ( "invalid_token" , message , errorUri ) ;
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Method not allowed error - The HTTP method used is not allowed for this endpoint.
156
+ * (Custom, non-standard error)
157
+ */
158
+ export class MethodNotAllowedError extends OAuthError {
159
+ constructor ( message : string , errorUri ?: string ) {
160
+ super ( "method_not_allowed" , message , errorUri ) ;
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Too many requests error - Rate limit exceeded.
166
+ * (Custom, non-standard error based on RFC 6585)
167
+ */
168
+ export class TooManyRequestsError extends OAuthError {
169
+ constructor ( message : string , errorUri ?: string ) {
170
+ super ( "too_many_requests" , message , errorUri ) ;
171
+ }
172
+ }
0 commit comments