From 88ddcab616a02348995b2f3191ec7e4f0f09761c Mon Sep 17 00:00:00 2001 From: Emily Hedlund Date: Tue, 14 Apr 2026 11:33:01 -0700 Subject: [PATCH] fix(core): use debug level for keychain fallback logging (#25398) --- packages/core/src/services/keychainService.test.ts | 12 ++++++------ packages/core/src/services/keychainService.ts | 13 ++++++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/core/src/services/keychainService.test.ts b/packages/core/src/services/keychainService.test.ts index 7649271a02..8e88c1bf8b 100644 --- a/packages/core/src/services/keychainService.test.ts +++ b/packages/core/src/services/keychainService.test.ts @@ -53,7 +53,7 @@ vi.mock('../utils/events.js', () => ({ })); vi.mock('../utils/debugLogger.js', () => ({ - debugLogger: { log: vi.fn() }, + debugLogger: { debug: vi.fn() }, })); vi.mock('node:os', async (importOriginal) => { @@ -153,14 +153,14 @@ describe('KeychainService', () => { // Because it falls back to FileKeychain, it is always available. expect(available).toBe(true); - expect(debugLogger.log).toHaveBeenCalledWith( + expect(debugLogger.debug).toHaveBeenCalledWith( expect.stringContaining('encountered an error'), 'locked', ); expect(coreEvents.emitTelemetryKeychainAvailability).toHaveBeenCalledWith( expect.objectContaining({ available: false }), ); - expect(debugLogger.log).toHaveBeenCalledWith( + expect(debugLogger.debug).toHaveBeenCalledWith( expect.stringContaining('Using FileKeychain fallback'), ); expect(FileKeychain).toHaveBeenCalled(); @@ -173,7 +173,7 @@ describe('KeychainService', () => { const available = await service.isAvailable(); expect(available).toBe(true); - expect(debugLogger.log).toHaveBeenCalledWith( + expect(debugLogger.debug).toHaveBeenCalledWith( expect.stringContaining('failed structural validation'), expect.objectContaining({ getPassword: expect.any(Array) }), ); @@ -191,7 +191,7 @@ describe('KeychainService', () => { const available = await service.isAvailable(); expect(available).toBe(true); - expect(debugLogger.log).toHaveBeenCalledWith( + expect(debugLogger.debug).toHaveBeenCalledWith( expect.stringContaining('functional verification failed'), ); expect(FileKeychain).toHaveBeenCalled(); @@ -243,7 +243,7 @@ describe('KeychainService', () => { ); expect(mockKeytar.setPassword).not.toHaveBeenCalled(); expect(FileKeychain).toHaveBeenCalled(); - expect(debugLogger.log).toHaveBeenCalledWith( + expect(debugLogger.debug).toHaveBeenCalledWith( expect.stringContaining('MacOS default keychain not found'), ); }); diff --git a/packages/core/src/services/keychainService.ts b/packages/core/src/services/keychainService.ts index 89ec0dd662..0d12e68ffb 100644 --- a/packages/core/src/services/keychainService.ts +++ b/packages/core/src/services/keychainService.ts @@ -114,7 +114,7 @@ export class KeychainService { } // If native failed or was skipped, return the secure file fallback. - debugLogger.log('Using FileKeychain fallback for secure storage.'); + debugLogger.debug('Using FileKeychain fallback for secure storage.'); return new FileKeychain(); } @@ -130,7 +130,7 @@ export class KeychainService { // Probing macOS prevents process-blocking popups when no keychain exists. if (os.platform() === 'darwin' && !this.isMacOSKeychainAvailable()) { - debugLogger.log( + debugLogger.debug( 'MacOS default keychain not found; skipping functional verification.', ); return null; @@ -140,12 +140,15 @@ export class KeychainService { return keychainModule; } - debugLogger.log('Keychain functional verification failed'); + debugLogger.debug('Keychain functional verification failed'); return null; } catch (error) { // Avoid logging full error objects to prevent PII exposure. const message = error instanceof Error ? error.message : String(error); - debugLogger.log('Keychain initialization encountered an error:', message); + debugLogger.debug( + 'Keychain initialization encountered an error:', + message, + ); return null; } } @@ -162,7 +165,7 @@ export class KeychainService { return potential as Keychain; } - debugLogger.log( + debugLogger.debug( 'Keychain module failed structural validation:', result.error.flatten().fieldErrors, );