in server/aws-lsp-codewhisperer/src/shared/utils.ts [37:87]
export function getErrorMsg(err: Error | undefined, withCause: boolean = false): string | undefined {
if (err === undefined) {
return undefined
}
// Non-standard SDK fields added by the OIDC service, to conform to the OAuth spec
// (https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1) :
// - error: code per the OAuth spec
// - error_description: improved error message provided by OIDC service. Prefer this to
// `message` if present.
// https://github.com/aws/aws-toolkit-jetbrains/commit/cc9ed87fa9391dd39ac05cbf99b4437112fa3d10
// - error_uri: not provided by OIDC currently?
//
// Example:
//
// [error] API response (oidc.us-east-1.amazonaws.com /token): {
// name: 'InvalidGrantException',
// '$fault': 'client',
// '$metadata': {
// httpStatusCode: 400,
// requestId: '7f5af448-5af7-45f2-8e47-5808deaea4ab',
// extendedRequestId: undefined,
// cfId: undefined
// },
// error: 'invalid_grant',
// error_description: 'Invalid refresh token provided',
// message: 'UnknownError'
// }
const anyDesc = (err as any).error_description
const errDesc = typeof anyDesc === 'string' ? anyDesc.trim() : ''
let msg = errDesc !== '' ? errDesc : err.message?.trim()
if (typeof msg !== 'string') {
return undefined
}
// append the cause's message
if (withCause) {
const errorId = getErrorId(err)
// - prepend id to message
// - If a generic error does not have the `name` field explicitly set, it returns a generic 'Error' name. So skip since it is useless.
if (errorId && errorId !== 'Error') {
msg = `${errorId}: ${msg}`
}
const cause = (err as any).cause
return `${msg}${cause ? ' | ' + getErrorMsg(cause, withCause) : ''}`
}
return msg
}