diff --git a/packages/bitcoin-wallet-snap/CHANGELOG.md b/packages/bitcoin-wallet-snap/CHANGELOG.md index 570452d8e..5908ee56b 100644 --- a/packages/bitcoin-wallet-snap/CHANGELOG.md +++ b/packages/bitcoin-wallet-snap/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Ensure certain errors are stringified correctly ([#179](https://github.com/MetaMask/internal-snaps/pull/179)) + ## [2.0.1] ### Fixed diff --git a/packages/bitcoin-wallet-snap/snap.manifest.json b/packages/bitcoin-wallet-snap/snap.manifest.json index f594f203d..d59b88aac 100644 --- a/packages/bitcoin-wallet-snap/snap.manifest.json +++ b/packages/bitcoin-wallet-snap/snap.manifest.json @@ -7,7 +7,7 @@ "url": "https://github.com/MetaMask/internal-snaps.git" }, "source": { - "shasum": "jV649WZbbfbj3FpOMD5U/xDPuRD0t4F+pxCoy08a/O0=", + "shasum": "sYefpN30aR0fb7v2DtdJ+jNFSnJJX5jtqvdsDof4RHQ=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.test.ts b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.test.ts index d0734fc17..8ca6d59d7 100644 --- a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.test.ts +++ b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.test.ts @@ -103,6 +103,16 @@ describe('HandlerMiddleware', () => { expect(mockLogger.error).toHaveBeenCalledWith(thrown); }); + it('uses the message property if it exists on a thrown plain object', async () => { + const thrown = { message: 'InsufficientFunds', code: 11 }; + const mockFn = jest.fn().mockRejectedValue(thrown); + + await expect(middleware.handle(mockFn)).rejects.toThrow( + 'InsufficientFunds', + ); + expect(mockLogger.error).toHaveBeenCalledWith(thrown); + }); + it('handles error successfully if instance of BaseError', async () => { const error = new BaseError('Test error', 1); const mockFn = jest.fn().mockRejectedValue(error); diff --git a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts index 6d83d6844..99faf8df2 100644 --- a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts +++ b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts @@ -8,6 +8,7 @@ import { UnauthorizedError, UserRejectedRequestError, SnapError, + getErrorMessage, } from '@metamask/snaps-sdk'; import { StructError } from 'superstruct'; @@ -138,7 +139,9 @@ export class HandlerMiddleware { // string, making cross-boundary errors like KeyringControllerError // opaque in Sentry). this.#logger.error(error); - throw new SnapError(error instanceof Error ? error : String(error)); + throw new SnapError( + error instanceof Error ? error : getErrorMessage(error), + ); } } }