diff --git a/packages/core/src/code_assist/oauth-credential-storage.test.ts b/packages/core/src/code_assist/oauth-credential-storage.test.ts index 3ef2de997c..d08af00329 100644 --- a/packages/core/src/code_assist/oauth-credential-storage.test.ts +++ b/packages/core/src/code_assist/oauth-credential-storage.test.ts @@ -180,14 +180,18 @@ describe('OAuthCredentialStorage', () => { expect(result).toEqual(mockCredentials); }); - it('should throw an error if the migration file contains invalid JSON', async () => { + it('should return null and log a warning if the migration file contains invalid JSON', async () => { vi.spyOn(mockHybridTokenStorage, 'getCredentials').mockResolvedValue( null, ); vi.spyOn(fs, 'readFile').mockResolvedValue('invalid json'); - await expect(OAuthCredentialStorage.loadCredentials()).rejects.toThrow( - 'Failed to load OAuth credentials', + const result = await OAuthCredentialStorage.loadCredentials(); + + expect(result).toBeNull(); + expect(coreEvents.emitFeedback).toHaveBeenCalledWith( + 'warning', + expect.stringContaining('Corrupted OAuth credential file'), ); }); diff --git a/packages/core/src/code_assist/oauth-credential-storage.ts b/packages/core/src/code_assist/oauth-credential-storage.ts index c924031d0d..6da7e30957 100644 --- a/packages/core/src/code_assist/oauth-credential-storage.ts +++ b/packages/core/src/code_assist/oauth-credential-storage.ts @@ -129,8 +129,17 @@ export class OAuthCredentialStorage { throw error; } - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const credentials: Credentials = JSON.parse(credsJson); + let credentials: Credentials; + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + credentials = JSON.parse(credsJson); + } catch { + coreEvents.emitFeedback( + 'warning', + `Corrupted OAuth credential file at ${oldFilePath}, skipping migration`, + ); + return null; + } // Save to new storage await this.saveCredentials(credentials);