diff --git a/CHANGELOG.md b/CHANGELOG.md index 966710ecce..936a23b11a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `WakuRelay.addObserver` now returns a function to delete the observer. +- `WakuLightPush.push` and `WakuRelay.send` returns `SendResult` with the list of recipients. ### Changed diff --git a/src/lib/interfaces.ts b/src/lib/interfaces.ts index 1b210be585..da3e9ee727 100644 --- a/src/lib/interfaces.ts +++ b/src/lib/interfaces.ts @@ -75,3 +75,7 @@ export interface Decoder { decodeProto: (bytes: Uint8Array) => Promise; decode: (proto: ProtoMessage) => Promise; } + +export interface SendResult { + recipients: PeerId[]; +} diff --git a/src/lib/waku_light_push/index.node.spec.ts b/src/lib/waku_light_push/index.node.spec.ts index df7cf29f61..6a9eeb92f6 100644 --- a/src/lib/waku_light_push/index.node.spec.ts +++ b/src/lib/waku_light_push/index.node.spec.ts @@ -47,7 +47,7 @@ describe("Waku Light Push [node only]", () => { const pushResponse = await waku.lightPush.push(TestEncoder, { payload: utf8ToBytes(messageText), }); - expect(pushResponse?.isSuccess).to.be.true; + expect(pushResponse.recipients.length).to.eq(1); let msgs: MessageRpcResponse[] = []; @@ -90,7 +90,7 @@ describe("Waku Light Push [node only]", () => { } ); log("Ack received", pushResponse); - expect(pushResponse?.isSuccess).to.be.true; + expect(pushResponse.recipients[0].toString()).to.eq(nimPeerId.toString()); let msgs: MessageRpcResponse[] = []; diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index 93ae0a6157..3681dfbf90 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -9,7 +9,7 @@ import { Uint8ArrayList } from "uint8arraylist"; import { PushResponse } from "../../proto/light_push"; import { DefaultPubSubTopic } from "../constants"; -import { Encoder, Message } from "../interfaces"; +import { Encoder, Message, SendResult } from "../interfaces"; import { selectConnection } from "../select_connection"; import { getPeersForProtocol, @@ -55,7 +55,7 @@ export class WakuLightPush { encoder: Encoder, message: Message, opts?: PushOptions - ): Promise { + ): Promise { const pubSubTopic = opts?.pubSubTopic ? opts.pubSubTopic : this.pubSubTopic; const res = await selectPeerForProtocol( @@ -75,11 +75,14 @@ export class WakuLightPush { if (!connection) throw "Failed to get a connection to the peer"; const stream = await connection.newStream(LightPushCodec); + + const recipients: PeerId[] = []; + try { const protoMessage = await encoder.encodeProto(message); if (!protoMessage) { log("Failed to encode to protoMessage, aborting push"); - return; + return { recipients }; } const query = PushRPC.createRequest(protoMessage, pubSubTopic); const res = await pipe( @@ -99,17 +102,19 @@ export class WakuLightPush { if (!response) { log("No response in PushRPC"); - return; + return { recipients }; } - return response; + if (response.isSuccess) { + recipients.push(peer.id); + } } catch (err) { log("Failed to decode push reply", err); } } catch (err) { log("Failed to send waku light push request", err); } - return; + return { recipients }; } /** diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index f9eb04fc1a..6dd7f5c729 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -8,11 +8,10 @@ import { TopicStr, } from "@chainsafe/libp2p-gossipsub/dist/src/types"; import { SignaturePolicy } from "@chainsafe/libp2p-gossipsub/types"; -import { PublishResult } from "@libp2p/interface-pubsub"; import debug from "debug"; import { DefaultPubSubTopic } from "../constants"; -import { Decoder, Encoder, Message } from "../interfaces"; +import { Decoder, Encoder, Message, SendResult } from "../interfaces"; import { pushOrInitMapSet } from "../push_or_init_map"; import { TopicOnlyDecoder } from "../waku_message/topic_only_message"; @@ -93,10 +92,7 @@ export class WakuRelay extends GossipSub { /** * Send Waku message. */ - public async send( - encoder: Encoder, - message: Message - ): Promise { + public async send(encoder: Encoder, message: Message): Promise { const msg = await encoder.encode(message); if (!msg) { log("Failed to encode message, aborting publish");