diff --git a/src/api/user-setup.client.ts b/src/api/user-setup.client.ts index 1191fb15..c4f4ea3d 100644 --- a/src/api/user-setup.client.ts +++ b/src/api/user-setup.client.ts @@ -11,7 +11,7 @@ import { getGraphQLErrors } from './graphql-errors.ts'; const USER_SETUP_MAX_ATTEMPTS = 3; const USER_SETUP_RETRY_DELAY_MS = 500; -const USER_FACING_SERVER_ERROR = 'Please contact your administrator.'; +const USER_FACING_SERVER_ERROR = 'Please contact support@herodevs.com.'; const SERVER_ERROR_CODES = ['INTERNAL_SERVER_ERROR', 'SERVER_ERROR', 'SERVICE_UNAVAILABLE']; type UserSetupStatusData = { isComplete: boolean; orgId?: number | null }; @@ -116,5 +116,5 @@ export async function ensureUserSetup(): Promise { return result.orgId; } - throw new Error('User setup did not return an organization ID. Please contact your administrator.'); + throw new Error(`User setup did not return an organization ID. ${USER_FACING_SERVER_ERROR}`); } diff --git a/src/commands/scan/eol.ts b/src/commands/scan/eol.ts index 0deecff4..078fd838 100644 --- a/src/commands/scan/eol.ts +++ b/src/commands/scan/eol.ts @@ -231,9 +231,9 @@ export default class ScanEol extends Command { })); const errorMessages: Record = { - SESSION_EXPIRED: 'Your session is no longer valid. To re-authenticate, run "hd auth login".', - INVALID_TOKEN: 'Your session is no longer valid. To re-authenticate, run "hd auth login".', - UNAUTHENTICATED: 'Please log in to perform a scan. To authenticate, run "hd auth login".', + SESSION_EXPIRED: 'Your session is no longer valid. To re-authenticate, please run an "auth login" command.', + INVALID_TOKEN: 'Your session is no longer valid. To re-authenticate, please run an "auth login" command.', + UNAUTHENTICATED: 'Please log in to perform a scan. To authenticate, please run an "auth login" command.', FORBIDDEN: 'You do not have permission to perform this action.', }; const message = errorMessages[error.code] ?? error.message?.trim(); diff --git a/src/service/auth.svc.ts b/src/service/auth.svc.ts index cf7fdf56..e1bc7020 100644 --- a/src/service/auth.svc.ts +++ b/src/service/auth.svc.ts @@ -50,7 +50,7 @@ export async function getAccessToken(): Promise { export async function requireAccessToken(): Promise { const token = await getAccessToken(); if (!token) { - throw new Error('You are not logged in. Run "hd auth login" to authenticate.'); + throw new Error('You are not logged in. Please run an "auth login" command to authenticate.'); } return token; @@ -68,7 +68,10 @@ export async function requireAccessTokenForScan(): Promise { const tokens = await getStoredTokens(); if (!tokens?.accessToken) { - throw new AuthError('Please log in to perform a scan. To authenticate, run "hd auth login".', 'NOT_LOGGED_IN'); + throw new AuthError( + 'Please log in to perform a scan. To authenticate, please run an "auth login" command.', + 'NOT_LOGGED_IN', + ); } if (!isAccessTokenExpired(tokens.accessToken)) { @@ -85,5 +88,8 @@ export async function requireAccessTokenForScan(): Promise { } } - throw new AuthError('Your session is no longer valid. To re-authenticate, run "hd auth login".', 'SESSION_EXPIRED'); + throw new AuthError( + 'Your session is no longer valid. To re-authenticate, please run an "auth login" command.', + 'SESSION_EXPIRED', + ); } diff --git a/src/utils/retry.ts b/src/utils/retry.ts index 9aee9db2..c453f051 100644 --- a/src/utils/retry.ts +++ b/src/utils/retry.ts @@ -35,6 +35,6 @@ export async function withRetries(operation: string, fn: () => Promise, op const message = finalErrorMessage ?? (lastError instanceof Error ? lastError.message : null) ?? - 'Please contact your administrator.'; + 'Please contact support@herodevs.com.'; throw new Error(message); } diff --git a/test/api/user-setup.client.test.ts b/test/api/user-setup.client.test.ts index bac41270..e8c952ef 100644 --- a/test/api/user-setup.client.test.ts +++ b/test/api/user-setup.client.test.ts @@ -60,7 +60,7 @@ describe('user-setup.client', () => { { message: 'Internal server error', extensions: { code: 'INTERNAL_SERVER_ERROR' } }, ]); - await expect(ensureUserSetup()).rejects.toThrow('Please contact your administrator.'); + await expect(ensureUserSetup()).rejects.toThrow('Please contact support@herodevs.com.'); expect(fetchMock.getCalls()).toHaveLength(3); }); }); diff --git a/test/service/auth.svc.test.ts b/test/service/auth.svc.test.ts index ecdd66c1..004dd121 100644 --- a/test/service/auth.svc.test.ts +++ b/test/service/auth.svc.test.ts @@ -185,7 +185,7 @@ describe('auth.svc', () => { await expect(requireAccessTokenForScan()).rejects.toMatchObject({ name: 'AuthError', code: 'NOT_LOGGED_IN', - message: 'Please log in to perform a scan. To authenticate, run "hd auth login".', + message: 'Please log in to perform a scan. To authenticate, please run an "auth login" command.', }); }); @@ -206,7 +206,7 @@ describe('auth.svc', () => { await expect(requireAccessTokenForScan()).rejects.toThrow(AuthError); await expect(requireAccessTokenForScan()).rejects.toMatchObject({ code: 'SESSION_EXPIRED', - message: 'Your session is no longer valid. To re-authenticate, run "hd auth login".', + message: 'Your session is no longer valid. To re-authenticate, please run an "auth login" command.', }); });