33 * SPDX-License-Identifier: Apache-2.0
44 */
55
6- import { ToolkitError } from '../shared/errors'
7- import {
8- featureName ,
9- clientErrorMessages ,
10- startCodeGenClientErrorMessages ,
11- startTaskAssistLimitReachedMessage ,
12- } from './constants'
6+ import { featureName , clientErrorMessages , startTaskAssistLimitReachedMessage } from './constants'
137import { uploadCodeError } from './userFacingText'
148import { i18n } from '../shared/i18n-helper'
9+ import { ClientError , ServiceError , ContentLengthError as SharedContentLengthError } from '../amazonq/errors'
1510
16- export class ConversationIdNotFoundError extends ToolkitError {
11+ export class ConversationIdNotFoundError extends ServiceError {
1712 constructor ( ) {
1813 super ( i18n ( 'AWS.amazonq.featureDev.error.conversationIdNotFoundError' ) , {
1914 code : 'ConversationIdNotFound' ,
2015 } )
2116 }
2217}
2318
24- export class TabIdNotFoundError extends ToolkitError {
19+ export class TabIdNotFoundError extends ServiceError {
2520 constructor ( ) {
2621 super ( i18n ( 'AWS.amazonq.featureDev.error.tabIdNotFoundError' ) , {
2722 code : 'TabIdNotFound' ,
2823 } )
2924 }
3025}
3126
32- export class WorkspaceFolderNotFoundError extends ToolkitError {
27+ export class WorkspaceFolderNotFoundError extends ServiceError {
3328 constructor ( ) {
3429 super ( i18n ( 'AWS.amazonq.featureDev.error.workspaceFolderNotFoundError' ) , {
3530 code : 'WorkspaceFolderNotFound' ,
3631 } )
3732 }
3833}
3934
40- export class UserMessageNotFoundError extends ToolkitError {
35+ export class UserMessageNotFoundError extends ServiceError {
4136 constructor ( ) {
4237 super ( i18n ( 'AWS.amazonq.featureDev.error.userMessageNotFoundError' ) , {
4338 code : 'MessageNotFound' ,
4439 } )
4540 }
4641}
4742
48- export class SelectedFolderNotInWorkspaceFolderError extends ToolkitError {
43+ export class SelectedFolderNotInWorkspaceFolderError extends ClientError {
4944 constructor ( ) {
5045 super ( i18n ( 'AWS.amazonq.featureDev.error.selectedFolderNotInWorkspaceFolderError' ) , {
5146 code : 'SelectedFolderNotInWorkspaceFolder' ,
5247 } )
5348 }
5449}
5550
56- export class PromptRefusalException extends ToolkitError {
51+ export class PromptRefusalException extends ClientError {
5752 constructor ( ) {
5853 super ( i18n ( 'AWS.amazonq.featureDev.error.promptRefusalException' ) , {
5954 code : 'PromptRefusalException' ,
6055 } )
6156 }
6257}
6358
64- export class NoChangeRequiredException extends ToolkitError {
59+ export class NoChangeRequiredException extends ClientError {
6560 constructor ( ) {
6661 super ( i18n ( 'AWS.amazonq.featureDev.error.noChangeRequiredException' ) , {
6762 code : 'NoChangeRequiredException' ,
6863 } )
6964 }
7065}
7166
72- export class FeatureDevServiceError extends ToolkitError {
67+ export class FeatureDevServiceError extends ServiceError {
7368 constructor ( message : string , code : string ) {
7469 super ( message , { code } )
7570 }
7671}
7772
78- export class PrepareRepoFailedError extends ToolkitError {
73+ export class PrepareRepoFailedError extends ServiceError {
7974 constructor ( ) {
8075 super ( i18n ( 'AWS.amazonq.featureDev.error.prepareRepoFailedError' ) , {
8176 code : 'PrepareRepoFailed' ,
8277 } )
8378 }
8479}
8580
86- export class UploadCodeError extends ToolkitError {
81+ export class UploadCodeError extends ServiceError {
8782 constructor ( statusCode : string ) {
8883 super ( uploadCodeError , { code : `UploadCode-${ statusCode } ` } )
8984 }
9085}
9186
92- export class UploadURLExpired extends ToolkitError {
87+ export class UploadURLExpired extends ClientError {
9388 constructor ( ) {
9489 super ( i18n ( 'AWS.amazonq.featureDev.error.uploadURLExpired' ) , { code : 'UploadURLExpired' } )
9590 }
9691}
9792
98- export class IllegalStateTransition extends ToolkitError {
93+ export class IllegalStateTransition extends ServiceError {
9994 constructor ( ) {
10095 super ( i18n ( 'AWS.amazonq.featureDev.error.illegalStateTransition' ) , { code : 'IllegalStateTransition' } )
10196 }
10297}
10398
104- export class ContentLengthError extends ToolkitError {
99+ export class IllegalStateError extends ServiceError {
100+ constructor ( message : string ) {
101+ super ( message , { code : 'IllegalStateTransition' } )
102+ }
103+ }
104+
105+ export class ContentLengthError extends SharedContentLengthError {
105106 constructor ( ) {
106107 super ( i18n ( 'AWS.amazonq.featureDev.error.contentLengthError' ) , { code : ContentLengthError . name } )
107108 }
108109}
109110
110- export class ZipFileError extends ToolkitError {
111+ export class ZipFileError extends ServiceError {
111112 constructor ( ) {
112113 super ( i18n ( 'AWS.amazonq.featureDev.error.zipFileError' ) , { code : ZipFileError . name } )
113114 }
114115}
115116
116- export class CodeIterationLimitError extends ToolkitError {
117+ export class CodeIterationLimitError extends ClientError {
117118 constructor ( ) {
118119 super ( i18n ( 'AWS.amazonq.featureDev.error.codeIterationLimitError' ) , { code : CodeIterationLimitError . name } )
119120 }
120121}
121122
122- export class MonthlyConversationLimitError extends ToolkitError {
123+ export class MonthlyConversationLimitError extends ClientError {
123124 constructor ( message : string ) {
124125 super ( message , { code : MonthlyConversationLimitError . name } )
125126 }
126127}
127128
128- export class UnknownApiError extends ToolkitError {
129+ export class UnknownApiError extends ServiceError {
129130 constructor ( message : string , api : string ) {
130131 super ( message , { code : `${ api } -Unknown` } )
131132 }
132133}
133134
134- export class ApiError extends ToolkitError {
135+ export class ApiClientError extends ClientError {
136+ constructor ( message : string , api : string , errorName : string , errorCode : number ) {
137+ super ( message , { code : `${ api } -${ errorName } -${ errorCode } ` } )
138+ }
139+ }
140+
141+ export class ApiServiceError extends ServiceError {
135142 constructor ( message : string , api : string , errorName : string , errorCode : number ) {
136143 super ( message , { code : `${ api } -${ errorName } -${ errorCode } ` } )
137144 }
138145}
139146
147+ export class ApiError {
148+ static of ( message : string , api : string , errorName : string , errorCode : number ) {
149+ if ( errorCode >= 400 && errorCode < 500 ) {
150+ return new ApiClientError ( message , api , errorName , errorCode )
151+ }
152+ return new ApiServiceError ( message , api , errorName , errorCode )
153+ }
154+ }
155+
140156export const denyListedErrors : string [ ] = [ 'Deserialization error' , 'Inaccessible host' ]
141157
142158export function createUserFacingErrorMessage ( message : string ) {
@@ -148,8 +164,6 @@ export function createUserFacingErrorMessage(message: string) {
148164
149165export function isAPIClientError ( error : { code ?: string ; message : string } ) : boolean {
150166 return (
151- ( error . code === 'StartCodeGenerationFailed' &&
152- startCodeGenClientErrorMessages . some ( ( msg : string ) => error . message . includes ( msg ) ) ) ||
153167 clientErrorMessages . some ( ( msg : string ) => error . message . includes ( msg ) ) ||
154168 error . message . includes ( startTaskAssistLimitReachedMessage )
155169 )
0 commit comments