From 1848b59aa06e4c5422f4a858b224a61411a52ad0 Mon Sep 17 00:00:00 2001 From: Maycon Mello Date: Mon, 9 Oct 2023 14:27:54 -0300 Subject: [PATCH] DCKA-2041: message provider, improve error handling --- packages/core/src/helpers.ts | 14 ++++++++++++++ packages/core/src/message-provider.ts | 14 ++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/core/src/helpers.ts b/packages/core/src/helpers.ts index 5e95ace7..f112803d 100644 --- a/packages/core/src/helpers.ts +++ b/packages/core/src/helpers.ts @@ -1,6 +1,10 @@ import axios from 'axios'; import assert from 'assert'; +let sentryCaptureException: any = (error) => { + console.error(error); +}; + function isURL(str) { try { // eslint-disable-next-line no-new @@ -38,3 +42,13 @@ export function getJSON(jsonOrURL: string | any) { throw new Error(`Invalid data ${jsonOrURL}`); } + +export function setSentryCaptureException(impl: any) { + sentryCaptureException = impl; +} + +export function captureException(error) { + if (sentryCaptureException) { + sentryCaptureException(error); + } +} diff --git a/packages/core/src/message-provider.ts b/packages/core/src/message-provider.ts index 93c0ed98..3132ec69 100644 --- a/packages/core/src/message-provider.ts +++ b/packages/core/src/message-provider.ts @@ -1,4 +1,5 @@ import { IDIDProvider } from './did-provider'; +import { captureException } from './helpers'; import { IWallet } from './types'; import { relayService as defaultRelayService } from '@docknetwork/wallet-sdk-wasm/src/services/relay-service'; @@ -41,6 +42,7 @@ export function createMessageProvider({ } await relayService.sendMessage({ keyPairDoc, message, recipientDid }); } catch (error) { + captureException(error); throw new Error(`Failed to send message: ${error.message}`); } }, @@ -50,10 +52,16 @@ export function createMessageProvider({ const messages = await wallet.getDocumentsByType('DIDCommMessage'); const keyPairDocs = await getKeyPairDocs(didProvider); for (const { encryptedMessage } of messages) { - const decryptedMessage = await relayService.resolveDidcommMessage({ keyPairDocs, encryptedMessage }); - wallet.eventManager.emit('didcomm-message-decrypted', decryptedMessage); + try { + const decryptedMessage = await relayService.resolveDidcommMessage({ keyPairDocs, encryptedMessage }); + wallet.eventManager.emit('didcomm-message-decrypted', decryptedMessage); + } catch(err) { + captureException(err); + console.error(err); + } } } catch (error) { + captureException(error); throw new Error(`Failed to process DIDComm messages: ${error.message}`); } }, @@ -68,6 +76,7 @@ export function createMessageProvider({ await wallet.removeDocument(messageId); } catch (error) { + captureException(error); throw new Error(`Failed to mark message as read: ${error.message}`); } }, @@ -95,6 +104,7 @@ export function createMessageProvider({ return encryptedMessages; } catch (error) { + captureException(error); throw new Error(`Failed to fetch messages: ${error.message}`); } },