33 * SPDX-License-Identifier: Apache-2.0
44 */
55
6- import { ToolkitError } from '../shared/errors'
76import {
87 featureName ,
98 clientErrorMessages ,
@@ -12,131 +11,151 @@ import {
1211} from './constants'
1312import { uploadCodeError } from './userFacingText'
1413import { i18n } from '../shared/i18n-helper'
14+ import { ClientError , ServiceError , ContentLengthError as SharedContentLengthError } from '../amazonq/errors'
1515
16- export class ConversationIdNotFoundError extends ToolkitError {
16+ export class ConversationIdNotFoundError extends ServiceError {
1717 constructor ( ) {
1818 super ( i18n ( 'AWS.amazonq.featureDev.error.conversationIdNotFoundError' ) , {
1919 code : 'ConversationIdNotFound' ,
2020 } )
2121 }
2222}
2323
24- export class TabIdNotFoundError extends ToolkitError {
24+ export class TabIdNotFoundError extends ServiceError {
2525 constructor ( ) {
2626 super ( i18n ( 'AWS.amazonq.featureDev.error.tabIdNotFoundError' ) , {
2727 code : 'TabIdNotFound' ,
2828 } )
2929 }
3030}
3131
32- export class WorkspaceFolderNotFoundError extends ToolkitError {
32+ export class WorkspaceFolderNotFoundError extends ServiceError {
3333 constructor ( ) {
3434 super ( i18n ( 'AWS.amazonq.featureDev.error.workspaceFolderNotFoundError' ) , {
3535 code : 'WorkspaceFolderNotFound' ,
3636 } )
3737 }
3838}
3939
40- export class UserMessageNotFoundError extends ToolkitError {
40+ export class UserMessageNotFoundError extends ServiceError {
4141 constructor ( ) {
4242 super ( i18n ( 'AWS.amazonq.featureDev.error.userMessageNotFoundError' ) , {
4343 code : 'MessageNotFound' ,
4444 } )
4545 }
4646}
4747
48- export class SelectedFolderNotInWorkspaceFolderError extends ToolkitError {
48+ export class SelectedFolderNotInWorkspaceFolderError extends ClientError {
4949 constructor ( ) {
5050 super ( i18n ( 'AWS.amazonq.featureDev.error.selectedFolderNotInWorkspaceFolderError' ) , {
5151 code : 'SelectedFolderNotInWorkspaceFolder' ,
5252 } )
5353 }
5454}
5555
56- export class PromptRefusalException extends ToolkitError {
56+ export class PromptRefusalException extends ClientError {
5757 constructor ( ) {
5858 super ( i18n ( 'AWS.amazonq.featureDev.error.promptRefusalException' ) , {
5959 code : 'PromptRefusalException' ,
6060 } )
6161 }
6262}
6363
64- export class NoChangeRequiredException extends ToolkitError {
64+ export class NoChangeRequiredException extends ClientError {
6565 constructor ( ) {
6666 super ( i18n ( 'AWS.amazonq.featureDev.error.noChangeRequiredException' ) , {
6767 code : 'NoChangeRequiredException' ,
6868 } )
6969 }
7070}
7171
72- export class FeatureDevServiceError extends ToolkitError {
72+ export class FeatureDevServiceError extends ServiceError {
7373 constructor ( message : string , code : string ) {
7474 super ( message , { code } )
7575 }
7676}
7777
78- export class PrepareRepoFailedError extends ToolkitError {
78+ export class PrepareRepoFailedError extends ServiceError {
7979 constructor ( ) {
8080 super ( i18n ( 'AWS.amazonq.featureDev.error.prepareRepoFailedError' ) , {
8181 code : 'PrepareRepoFailed' ,
8282 } )
8383 }
8484}
8585
86- export class UploadCodeError extends ToolkitError {
86+ export class UploadCodeError extends ServiceError {
8787 constructor ( statusCode : string ) {
8888 super ( uploadCodeError , { code : `UploadCode-${ statusCode } ` } )
8989 }
9090}
9191
92- export class UploadURLExpired extends ToolkitError {
92+ export class UploadURLExpired extends ClientError {
9393 constructor ( ) {
9494 super ( i18n ( 'AWS.amazonq.featureDev.error.uploadURLExpired' ) , { code : 'UploadURLExpired' } )
9595 }
9696}
9797
98- export class IllegalStateTransition extends ToolkitError {
98+ export class IllegalStateTransition extends ServiceError {
9999 constructor ( ) {
100100 super ( i18n ( 'AWS.amazonq.featureDev.error.illegalStateTransition' ) , { code : 'IllegalStateTransition' } )
101101 }
102102}
103103
104- export class ContentLengthError extends ToolkitError {
104+ export class IllegalStateError extends ServiceError {
105+ constructor ( message : string ) {
106+ super ( message , { code : 'IllegalStateTransition' } )
107+ }
108+ }
109+
110+ export class ContentLengthError extends SharedContentLengthError {
105111 constructor ( ) {
106112 super ( i18n ( 'AWS.amazonq.featureDev.error.contentLengthError' ) , { code : ContentLengthError . name } )
107113 }
108114}
109115
110- export class ZipFileError extends ToolkitError {
116+ export class ZipFileError extends ServiceError {
111117 constructor ( ) {
112118 super ( i18n ( 'AWS.amazonq.featureDev.error.zipFileError' ) , { code : ZipFileError . name } )
113119 }
114120}
115121
116- export class CodeIterationLimitError extends ToolkitError {
122+ export class CodeIterationLimitError extends ClientError {
117123 constructor ( ) {
118124 super ( i18n ( 'AWS.amazonq.featureDev.error.codeIterationLimitError' ) , { code : CodeIterationLimitError . name } )
119125 }
120126}
121127
122- export class MonthlyConversationLimitError extends ToolkitError {
128+ export class MonthlyConversationLimitError extends ClientError {
123129 constructor ( message : string ) {
124130 super ( message , { code : MonthlyConversationLimitError . name } )
125131 }
126132}
127133
128- export class UnknownApiError extends ToolkitError {
134+ export class UnknownApiError extends ServiceError {
129135 constructor ( message : string , api : string ) {
130136 super ( message , { code : `${ api } -Unknown` } )
131137 }
132138}
133139
134- export class ApiError extends ToolkitError {
140+ export class ApiClientError extends ClientError {
141+ constructor ( message : string , api : string , errorName : string , errorCode : number ) {
142+ super ( message , { code : `${ api } -${ errorName } -${ errorCode } ` } )
143+ }
144+ }
145+
146+ export class ApiServiceError extends ServiceError {
135147 constructor ( message : string , api : string , errorName : string , errorCode : number ) {
136148 super ( message , { code : `${ api } -${ errorName } -${ errorCode } ` } )
137149 }
138150}
139151
152+ export function throwApiError ( message : string , api : string , errorName : string , errorCode : number ) {
153+ if ( errorCode >= 400 && errorCode < 500 ) {
154+ throw new ApiClientError ( message , api , errorName , errorCode )
155+ }
156+ throw new ApiServiceError ( message , api , errorName , errorCode )
157+ }
158+
140159export const denyListedErrors : string [ ] = [ 'Deserialization error' , 'Inaccessible host' ]
141160
142161export function createUserFacingErrorMessage ( message : string ) {
@@ -148,8 +167,6 @@ export function createUserFacingErrorMessage(message: string) {
148167
149168export function isAPIClientError ( error : { code ?: string ; message : string } ) : boolean {
150169 return (
151- ( error . code === 'StartCodeGenerationFailed' &&
152- startCodeGenClientErrorMessages . some ( ( msg : string ) => error . message . includes ( msg ) ) ) ||
153170 clientErrorMessages . some ( ( msg : string ) => error . message . includes ( msg ) ) ||
154171 error . message . includes ( startTaskAssistLimitReachedMessage )
155172 )
0 commit comments