From 053b6545ad0c2450af5687495eb7b6049c0f21ad Mon Sep 17 00:00:00 2001 From: "fryorcraken.eth" Date: Thu, 21 Sep 2023 11:32:34 +1000 Subject: [PATCH] feat!: return `REMOTE_PEER_REJECTED` if remote peer rejected the message --- packages/core/src/lib/light_push/index.ts | 13 +++++++++---- packages/interfaces/src/protocols.ts | 10 ++++++++-- packages/tests/tests/light-push/index.spec.ts | 4 ++-- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/packages/core/src/lib/light_push/index.ts b/packages/core/src/lib/light_push/index.ts index de78c3b144..f4ffcb7fc2 100644 --- a/packages/core/src/lib/light_push/index.ts +++ b/packages/core/src/lib/light_push/index.ts @@ -146,14 +146,19 @@ class LightPush extends BaseProtocol implements ILightPush { return { recipients, error: SendError.DECODE_FAILED }; } - if (response?.isSuccess) { - recipients.some((recipient) => recipient.equals(peer.id)) || - recipients.push(peer.id); - } else { + if (!response) { log("Remote peer fault: No response in PushRPC"); return { recipients, error: SendError.REMOTE_PEER_FAULT }; } + if (!response.isSuccess) { + log("Remote peer rejected the message: ", response.info); + return { recipients, error: SendError.REMOTE_PEER_REJECTED }; + } + + recipients.some((recipient) => recipient.equals(peer.id)) || + recipients.push(peer.id); + return { recipients }; }); diff --git a/packages/interfaces/src/protocols.ts b/packages/interfaces/src/protocols.ts index 62daf66df2..d84172f6e7 100644 --- a/packages/interfaces/src/protocols.ts +++ b/packages/interfaces/src/protocols.ts @@ -79,10 +79,16 @@ export enum SendError { */ NO_PEER_AVAILABLE = "No peer available", /** - * The remote peer did not behave as expected. Mitigation from `NO_PEER_AVAILABLE` + * The remote peer did not behave as expected. Mitigation for `NO_PEER_AVAILABLE` * or `DECODE_FAILED` can be used. */ - REMOTE_PEER_FAULT = "Remote peer fault" + REMOTE_PEER_FAULT = "Remote peer fault", + /** + * The remote peer rejected the message. Information provided by the remote peer + * is logged. Review message validity, or mitigation for `NO_PEER_AVAILABLE` + * or `DECODE_FAILED` can be used. + */ + REMOTE_PEER_REJECTED = "Remote peer rejected" } export interface SendResult { diff --git a/packages/tests/tests/light-push/index.spec.ts b/packages/tests/tests/light-push/index.spec.ts index 3334cd76fb..5281cb1222 100644 --- a/packages/tests/tests/light-push/index.spec.ts +++ b/packages/tests/tests/light-push/index.spec.ts @@ -86,7 +86,7 @@ describe("Waku Light Push [node only]", function () { }); } else { expect(pushResponse.recipients.length).to.eq(0); - expect(pushResponse.errors).to.include(SendError.NO_RPC_RESPONSE); + expect(pushResponse.errors).to.include(SendError.REMOTE_PEER_REJECTED); expect(await messageCollector.waitForMessages(1)).to.eq(false); } }); @@ -158,7 +158,7 @@ describe("Waku Light Push [node only]", function () { }); } else { expect(pushResponse.recipients.length).to.eq(0); - expect(pushResponse.errors).to.include(SendError.NO_RPC_RESPONSE); + expect(pushResponse.errors).to.include(SendError.REMOTE_PEER_REJECTED); expect(await messageCollector.waitForMessages(1)).to.eq(false); } });