Skip to content

Commit fbec384

Browse files
authored
Merge pull request #178 from docknetwork/fix/vc-did-distribution
fix: did vc distribution bug
2 parents 71c93db + 0c5c6f4 commit fbec384

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

packages/core/src/message-provider.test.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('MessageProvider', () => {
2626
relayService = {
2727
sendMessage: jest.fn(),
2828
getMessages: jest.fn().mockResolvedValue(didCommMessages),
29-
resolveDidcommMessage: jest.fn().mockImplementation(({ encryptedMessage }) => encryptedMessage),
29+
resolveDidcommMessage: jest.fn().mockImplementation(({ message }) => message),
3030
};
3131

3232
wallet = await createWallet({
@@ -35,6 +35,7 @@ describe('MessageProvider', () => {
3535
didProvider = createDIDProvider({
3636
wallet,
3737
});
38+
didProvider.getDIDKeyPairs = jest.fn().mockResolvedValue([{controller: "someDid"}])
3839
messageProvider = createMessageProvider({
3940
wallet,
4041
didProvider,
@@ -59,7 +60,7 @@ describe('MessageProvider', () => {
5960
await messageProvider.processDIDCommMessages();
6061

6162
expect(wallet.eventManager.emit).toHaveBeenCalledWith('didcomm-messages-received', didCommMessages);
62-
expect(wallet.eventManager.emit).toHaveBeenCalledWith('didcomm-message-decrypted', didCommMessages[0]);
63+
expect(wallet.eventManager.emit).toHaveBeenCalledWith('didcomm-message-decrypted', {"decryptedMessage": didCommMessages[0], "messageId": didCommMessages[0]._id});
6364
});
6465

6566

@@ -81,15 +82,34 @@ describe('MessageProvider', () => {
8182
).rejects.toThrow('Failed to send message: Sending failed');
8283
});
8384

84-
it('should handle errors when processing DIDComm messages', async () => {
85-
relayService.resolveDidcommMessage.mockRejectedValue(new Error('Decryption failed'));
85+
// it('should handle errors when processing DIDComm messages', async () => {
86+
// relayService.resolveDidcommMessage.mockRejectedValue(new Error('Decryption failed'));
8687

87-
await expect(messageProvider.processDIDCommMessages()).rejects.toThrow('Failed to process DIDComm messages: Decryption failed');
88+
// await expect(messageProvider.processDIDCommMessages()).rejects.toThrow('Failed to process DIDComm messages: Decryption failed');
89+
// });
90+
91+
it('should skip did that fail lookup when processing DIDComm messages', async () => {
92+
jest.spyOn(wallet.eventManager, 'emit').mockReset();
93+
const messageProvider2 = createMessageProvider({
94+
wallet,
95+
didProvider,
96+
relayService: {
97+
...relayService,
98+
resolveDidcommMessage: jest.fn().mockRejectedValueOnce(new Error('A DID document lookup was successful, but the DID in question does not exist. This is different from a network error.')).mockImplementation(({ message }) => message),
99+
},
100+
});
101+
102+
await messageProvider2.fetchMessages()
103+
await messageProvider2.processDIDCommMessages();
104+
105+
expect(wallet.eventManager.emit).toHaveBeenCalledWith('didcomm-messages-received', didCommMessages);
106+
expect(wallet.eventManager.emit).toHaveBeenCalledWith('didcomm-message-decrypted', {"decryptedMessage": didCommMessages[1], "messageId": didCommMessages[1]._id});
88107
});
89108

90109
it('should handle errors when marking messages as read', async () => {
110+
await messageProvider.fetchMessages();
91111
wallet.removeDocument = jest.fn().mockRejectedValue(new Error('Removal failed'));
92112

93-
await expect(messageProvider.markMessageAsRead('someId')).rejects.toThrow('Failed to mark message as read: Removal failed');
113+
await expect(messageProvider.markMessageAsRead('651e965410fc3fcfffdd17f1')).rejects.toThrow('Failed to mark message as read: Removal failed');
94114
});
95115
});

packages/core/src/message-provider.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,16 @@ export function createMessageProvider({
6666
decryptedMessage,
6767
messageId: message.id
6868
});
69+
count++;
6970
// the wallet app will call markMessageAsRead after the message is processed
7071
} catch(err) {
72+
if(err.message?.includes('the DID in question does not exist')) {
73+
// the DID lookup failed (a testnet credential was issued to a mainnet did), so we can't
74+
// decrypt the message remove the message from the wallet
75+
await wallet.removeDocument(message.id);
76+
}
7177
captureException(err);
7278
}
73-
count++;
7479
}
7580
} catch (error) {
7681
captureException(error);

0 commit comments

Comments
 (0)