From d589a1f87bc6440951de0b6cfc387f6eba52c779 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 20 Aug 2026 13:42:43 +0200 Subject: [PATCH 1/4] fix: Extract error messages from error objects --- packages/bitcoin-wallet-snap/snap.manifest.json | 2 +- packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/bitcoin-wallet-snap/snap.manifest.json b/packages/bitcoin-wallet-snap/snap.manifest.json index f594f203d..86c408c91 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": "md9QLmiGWsH2SuCOOUM+VyhWLx//k/wRhpIey/5f4eY=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts index 6d83d6844..dcbc8e5e9 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,7 @@ 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)); } } } From 6ce735ca94a2b5637c64bd22507a6fc413a898e3 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 20 Aug 2026 13:48:44 +0200 Subject: [PATCH 2/4] Fix lint --- packages/bitcoin-wallet-snap/snap.manifest.json | 2 +- .../bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/bitcoin-wallet-snap/snap.manifest.json b/packages/bitcoin-wallet-snap/snap.manifest.json index 86c408c91..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": "md9QLmiGWsH2SuCOOUM+VyhWLx//k/wRhpIey/5f4eY=", + "shasum": "sYefpN30aR0fb7v2DtdJ+jNFSnJJX5jtqvdsDof4RHQ=", "location": { "npm": { "filePath": "dist/bundle.js", diff --git a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts index dcbc8e5e9..99faf8df2 100644 --- a/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts +++ b/packages/bitcoin-wallet-snap/src/handlers/HandlerMiddleware.ts @@ -139,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 : getErrorMessage(error)); + throw new SnapError( + error instanceof Error ? error : getErrorMessage(error), + ); } } } From 15c37cbe20b11a956e10d2164940f6d955b9bd66 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 20 Aug 2026 13:55:37 +0200 Subject: [PATCH 3/4] Add unit test --- .../src/handlers/HandlerMiddleware.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) 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); From 68a51bf2391e94960df44b310346b4705b18e8c0 Mon Sep 17 00:00:00 2001 From: Frederik Bolding Date: Thu, 20 Aug 2026 13:58:59 +0200 Subject: [PATCH 4/4] Update CHANGELOG --- packages/bitcoin-wallet-snap/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) 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