@@ -4,30 +4,32 @@ import { castToError, Headers } from './core';
44
55export class OpenAIError extends Error { }
66
7- export class APIError extends OpenAIError {
8- readonly status : number | undefined ;
9- readonly headers : Headers | undefined ;
10- readonly error : Object | undefined ;
7+ export class APIError <
8+ TStatus extends number | undefined = number | undefined ,
9+ THeaders extends Headers | undefined = Headers | undefined ,
10+ TError extends Object | undefined = Object | undefined ,
11+ > extends OpenAIError {
12+ /** HTTP status for the response that caused the error */
13+ readonly status : TStatus ;
14+ /** HTTP headers for the response that caused the error */
15+ readonly headers : THeaders ;
16+ /** JSON body of the response that caused the error */
17+ readonly error : TError ;
1118
1219 readonly code : string | null | undefined ;
1320 readonly param : string | null | undefined ;
1421 readonly type : string | undefined ;
1522
1623 readonly request_id : string | null | undefined ;
1724
18- constructor (
19- status : number | undefined ,
20- error : Object | undefined ,
21- message : string | undefined ,
22- headers : Headers | undefined ,
23- ) {
25+ constructor ( status : TStatus , error : TError , message : string | undefined , headers : THeaders ) {
2426 super ( `${ APIError . makeMessage ( status , error , message ) } ` ) ;
2527 this . status = status ;
2628 this . headers = headers ;
2729 this . request_id = headers ?. [ 'x-request-id' ] ;
30+ this . error = error ;
2831
2932 const data = error as Record < string , any > ;
30- this . error = data ;
3133 this . code = data ?. [ 'code' ] ;
3234 this . param = data ?. [ 'param' ] ;
3335 this . type = data ?. [ 'type' ] ;
@@ -60,7 +62,7 @@ export class APIError extends OpenAIError {
6062 message : string | undefined ,
6163 headers : Headers | undefined ,
6264 ) : APIError {
63- if ( ! status ) {
65+ if ( ! status || ! headers ) {
6466 return new APIConnectionError ( { message, cause : castToError ( errorResponse ) } ) ;
6567 }
6668
@@ -102,17 +104,13 @@ export class APIError extends OpenAIError {
102104 }
103105}
104106
105- export class APIUserAbortError extends APIError {
106- override readonly status : undefined = undefined ;
107-
107+ export class APIUserAbortError extends APIError < undefined , undefined , undefined > {
108108 constructor ( { message } : { message ?: string } = { } ) {
109109 super ( undefined , undefined , message || 'Request was aborted.' , undefined ) ;
110110 }
111111}
112112
113- export class APIConnectionError extends APIError {
114- override readonly status : undefined = undefined ;
115-
113+ export class APIConnectionError extends APIError < undefined , undefined , undefined > {
116114 constructor ( { message, cause } : { message ?: string | undefined ; cause ?: Error | undefined } ) {
117115 super ( undefined , undefined , message || 'Connection error.' , undefined ) ;
118116 // in some environments the 'cause' property is already declared
@@ -127,34 +125,21 @@ export class APIConnectionTimeoutError extends APIConnectionError {
127125 }
128126}
129127
130- export class BadRequestError extends APIError {
131- override readonly status : 400 = 400 ;
132- }
128+ export class BadRequestError extends APIError < 400 , Headers > { }
133129
134- export class AuthenticationError extends APIError {
135- override readonly status : 401 = 401 ;
136- }
130+ export class AuthenticationError extends APIError < 401 , Headers > { }
137131
138- export class PermissionDeniedError extends APIError {
139- override readonly status : 403 = 403 ;
140- }
132+ export class PermissionDeniedError extends APIError < 403 , Headers > { }
141133
142- export class NotFoundError extends APIError {
143- override readonly status : 404 = 404 ;
144- }
134+ export class NotFoundError extends APIError < 404 , Headers > { }
145135
146- export class ConflictError extends APIError {
147- override readonly status : 409 = 409 ;
148- }
136+ export class ConflictError extends APIError < 409 , Headers > { }
149137
150- export class UnprocessableEntityError extends APIError {
151- override readonly status : 422 = 422 ;
152- }
138+ export class UnprocessableEntityError extends APIError < 422 , Headers > { }
153139
154- export class RateLimitError extends APIError {
155- override readonly status : 429 = 429 ;
156- }
140+ export class RateLimitError extends APIError < 429 , Headers > { }
157141
142+ export class InternalServerError extends APIError < number , Headers > { }
158143export class InternalServerError extends APIError { }
159144
160145export class LengthFinishReasonError extends OpenAIError {
0 commit comments