diff --git a/packages/hw-wallet-sdk/CHANGELOG.md b/packages/hw-wallet-sdk/CHANGELOG.md index 5e86d172b..3a6d48898 100644 --- a/packages/hw-wallet-sdk/CHANGELOG.md +++ b/packages/hw-wallet-sdk/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add error mapping for status code `0x6a83` indicating Ethereum app closed while on Solana ([#446](https://github.com/MetaMask/accounts/pull/446)) + +### Fixed + +- Fix error mappings for status codes `0x650f` and `0x6d00` to map to `DeviceStateEthAppClosed` instead of incorrect error codes ([#466](https://github.com/MetaMask/accounts/pull/466)) + - `0x650f`: changed from `ConnectionClosed` to `DeviceStateEthAppClosed`. + - `0x6d00`: changed from `DeviceStateOnlyV4Supported` to `DeviceStateEthAppClosed`. + ## [0.4.0] ### Added diff --git a/packages/hw-wallet-sdk/src/hardware-error-mappings.test.ts b/packages/hw-wallet-sdk/src/hardware-error-mappings.test.ts index 9bbb010ca..9431b68ab 100644 --- a/packages/hw-wallet-sdk/src/hardware-error-mappings.test.ts +++ b/packages/hw-wallet-sdk/src/hardware-error-mappings.test.ts @@ -75,15 +75,13 @@ describe('HARDWARE_ERROR_MAPPINGS', () => { expect(mapping.severity).toBe(Severity.Warning); }); }); - describe('connection errors', () => { - it('map 0x650f to connection issue', () => { + describe('device state errors', () => { + it('map 0x650f to eth app closed', () => { const mapping = getLedgerMapping('0x650f'); - expect(mapping.code).toBe(ErrorCode.ConnectionClosed); - expect(mapping.category).toBe(Category.Connection); + expect(mapping.code).toBe(ErrorCode.DeviceStateEthAppClosed); + expect(mapping.category).toBe(Category.DeviceState); }); - }); - describe('device state errors', () => { it('maps 0x6f00 to device unresponsive', () => { const mapping = getLedgerMapping('0x6f00'); expect(mapping.code).toBe(ErrorCode.DeviceUnresponsive); @@ -91,6 +89,22 @@ describe('HARDWARE_ERROR_MAPPINGS', () => { expect(mapping.category).toBe(Category.DeviceState); expect(mapping.userMessage).toContain('not responding'); }); + + it('maps 0x6a83 to eth app closed (on solana)', () => { + const mapping = getLedgerMapping('0x6a83'); + expect(mapping.code).toBe(ErrorCode.DeviceStateEthAppClosed); + expect(mapping.severity).toBe(Severity.Err); + expect(mapping.category).toBe(Category.DeviceState); + expect(mapping.userMessage).toContain('solana'); + }); + + it('maps 0x6d00 to eth app closed (on bitcoin)', () => { + const mapping = getLedgerMapping('0x6d00'); + expect(mapping.code).toBe(ErrorCode.DeviceStateEthAppClosed); + expect(mapping.severity).toBe(Severity.Err); + expect(mapping.category).toBe(Category.DeviceState); + expect(mapping.userMessage).toContain('bitcoin'); + }); }); it('has valid structure for all mappings', () => { diff --git a/packages/hw-wallet-sdk/src/hardware-error-mappings.ts b/packages/hw-wallet-sdk/src/hardware-error-mappings.ts index 3081d7802..07dc73781 100644 --- a/packages/hw-wallet-sdk/src/hardware-error-mappings.ts +++ b/packages/hw-wallet-sdk/src/hardware-error-mappings.ts @@ -71,12 +71,12 @@ export const LEDGER_ERROR_MAPPINGS: Record = { 'Your device is blocked due to too many failed attempts. Please follow device recovery procedures.', }, '0x650f': { - code: ErrorCode.ConnectionClosed, - message: 'App closed or connection issue', + code: ErrorCode.DeviceStateEthAppClosed, + message: 'Ethereum app closed', severity: Severity.Err, - category: Category.Connection, + category: Category.DeviceState, userMessage: - 'Connection lost or app closed. Please open the corresponding app on your Ledger device.', + 'Ethereum app is closed. Please open it on your Ledger device to continue.', }, '0x5515': { code: ErrorCode.AuthenticationDeviceLocked, @@ -100,12 +100,21 @@ export const LEDGER_ERROR_MAPPINGS: Record = { category: Category.DeviceState, userMessage: 'Blind signing is not supported on this device.', }, + '0x6a83': { + code: ErrorCode.DeviceStateEthAppClosed, + message: 'Ethereum app closed', + severity: Severity.Err, + category: Category.DeviceState, + userMessage: + 'Ethereum app is closed. Currently on solana. Please open it to continue.', + }, '0x6d00': { - code: ErrorCode.DeviceStateOnlyV4Supported, - message: 'Ledger Only V4 supported', + code: ErrorCode.DeviceStateEthAppClosed, + message: 'Ethereum app closed', severity: Severity.Err, category: Category.DeviceState, - userMessage: 'Only V4 is supported on this device.', + userMessage: + 'Ethereum app is closed. Currently on bitcoin. Please open it to continue.', }, '0x6e00': { code: ErrorCode.DeviceStateEthAppClosed, diff --git a/packages/keyring-eth-ledger-bridge/src/ledger-error-handler.test.ts b/packages/keyring-eth-ledger-bridge/src/ledger-error-handler.test.ts index c8214359d..c664c1d9f 100644 --- a/packages/keyring-eth-ledger-bridge/src/ledger-error-handler.test.ts +++ b/packages/keyring-eth-ledger-bridge/src/ledger-error-handler.test.ts @@ -91,8 +91,8 @@ describe('handleLedgerTransportError', () => { tc: 'app closed', inputMessage: 'App closed', status: 0x650f, - expectedCode: ErrorCodeEnum.ConnectionClosed, - expectedMessage: 'Ledger: App closed or connection issue', + expectedCode: ErrorCodeEnum.DeviceStateEthAppClosed, + expectedMessage: 'Ledger: Ethereum app closed', }, { tc: 'unknown status codes by preserving original message',