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