Skip to content

Commit 4edf175

Browse files
fix(dev): add error messages for upload URL expiry (aws#5745)
1 parent 31493a6 commit 4edf175

File tree

5 files changed

+35
-4
lines changed

5 files changed

+35
-4
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "Bug Fix",
3+
"description": "Amazon Q Feature Dev: Add error messages when the upload URL expires"
4+
}

packages/core/package.nls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@
280280
"AWS.amazonq.featureDev.error.codeGen.denyListedError": "I'm sorry, I'm having trouble generating your code and can't continue at the moment. Please try again later, and share feedback to help me improve.",
281281
"AWS.amazonq.featureDev.error.codeGen.default": "I'm sorry, I ran into an issue while trying to generate your code. Please try again.",
282282
"AWS.amazonq.featureDev.error.codeGen.timeout": "Code generation did not finish within the expected time",
283+
"AWS.amazonq.featureDev.error.uploadURLExpired": "I’m sorry, I wasn’t able to generate code. A connection timed out or became unavailable. Please try again or check the following:\n\n- Exclude non-essential files in your workspace’s `.gitignore.`\n\n- Check that your network connection is stable.",
283284
"AWS.amazonq.featureDev.error.workspaceFolderNotFoundError": "I couldn't find a workspace folder. Open a workspace, and then open a new chat tab and enter /dev to start discussing your code task with me.",
284285
"AWS.amazonq.featureDev.error.selectedFolderNotInWorkspaceFolderError": "The folder you chose isn't in your open workspace folder. You can add this folder to your workspace, or choose a folder in your open workspace.",
285286
"AWS.amazonq.featureDev.error.userMessageNotFoundError": "It looks like you didn't provide an input. Please enter your message in the text bar.",

packages/core/src/amazonqFeatureDev/controllers/chat/controller.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
SelectedFolderNotInWorkspaceFolderError,
2121
TabIdNotFoundError,
2222
UploadCodeError,
23+
UploadURLExpired,
2324
UserMessageNotFoundError,
2425
WorkspaceFolderNotFoundError,
2526
ZipFileError,
@@ -280,6 +281,14 @@ export class FeatureDevController {
280281
],
281282
})
282283
break
284+
case UploadURLExpired.errorName:
285+
this.messenger.sendAnswer({
286+
type: 'answer',
287+
tabID: message.tabID,
288+
message: err.message,
289+
canBeVoted: true,
290+
})
291+
break
283292
default:
284293
if (isDenyListedError || this.retriesRemaining(session) === 0) {
285294
defaultMessage = i18n('AWS.amazonq.featureDev.error.codeGen.denyListedError')

packages/core/src/amazonqFeatureDev/errors.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@ export class UploadCodeError extends ToolkitError {
9898
}
9999
}
100100

101+
export class UploadURLExpired extends ToolkitError {
102+
static errorName = 'UploadURLExpired'
103+
constructor() {
104+
super(i18n('AWS.amazonq.featureDev.error.uploadURLExpired'), { code: 'UploadURLExpired' })
105+
}
106+
}
107+
101108
export class IllegalStateTransition extends ToolkitError {
102109
constructor() {
103110
super(i18n('AWS.amazonq.featureDev.error.illegalStateTransition'), { code: 'IllegalStateTransition' })

packages/core/src/amazonqFeatureDev/util/upload.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import request, { RequestError } from '../../shared/request'
77
import { getLogger } from '../../shared/logger/logger'
88
import { featureName } from '../constants'
99

10-
import { UploadCodeError } from '../errors'
10+
import { UploadCodeError, UploadURLExpired } from '../errors'
11+
import { ToolkitError } from '../../shared'
12+
import { i18n } from '../../shared/i18n-helper'
1113

1214
/**
1315
* uploadCode
@@ -30,8 +32,16 @@ export async function uploadCode(url: string, buffer: Buffer, checksumSha256: st
3032
}).response
3133
} catch (e: any) {
3234
getLogger().error(`${featureName}: failed to upload code to s3: ${(e as Error).message}`)
33-
throw new UploadCodeError(
34-
e instanceof RequestError ? `${e.response.status}: ${e.response.statusText}` : 'Unknown'
35-
)
35+
if (e instanceof RequestError) {
36+
switch (e.response.status) {
37+
case 403:
38+
throw new UploadURLExpired()
39+
default:
40+
throw new UploadCodeError(
41+
e instanceof RequestError ? `${e.response.status}: ${e.response.statusText}` : 'Unknown'
42+
)
43+
}
44+
}
45+
throw ToolkitError.chain(e, i18n('AWS.amazonq.featureDev.error.codeGen.default'))
3646
}
3747
}

0 commit comments

Comments
 (0)