From 2266f31d30abb11c89fb9228a3557ff9f72500b3 Mon Sep 17 00:00:00 2001 From: Franck Royer Date: Tue, 6 Jul 2021 15:29:02 +1000 Subject: [PATCH] Move optional parameters to a single `Options` object. --- CHANGELOG.md | 1 + examples/cli-chat/src/chat.ts | 4 +++- examples/eth-dm/src/BroadcastPublicKey.tsx | 4 +++- examples/eth-dm/src/messaging/SendMessage.tsx | 4 +++- examples/web-chat/src/Room.tsx | 9 ++++---- src/lib/waku_message/index.ts | 23 ++++++++++--------- src/lib/waku_relay/index.spec.ts | 23 ++++++++++--------- 7 files changed, 38 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 700e300483..500e514d2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **Breaking**: Auto select peer if none provided for store and light push protocols. - Upgrade to `libp2p@0.31.7` and `libp2p-gossipsub@0.10.0` to avoid `TextEncoder` errors in ReactJS tests. - Disable keep alive by default as latest nim-waku release does not support ping protocol. +- **Breaking**: Optional parameters for `WakuMessage.fromBytes` and `WakuMessage.fromUtf8String` are now passed in a single `Options` object. ### Fixed - Disable `keepAlive` if set to `0`. diff --git a/examples/cli-chat/src/chat.ts b/examples/cli-chat/src/chat.ts index 6961ddca2c..ac86ec77d0 100644 --- a/examples/cli-chat/src/chat.ts +++ b/examples/cli-chat/src/chat.ts @@ -104,7 +104,9 @@ export default async function startChat(): Promise { rl.prompt(); const chatMessage = ChatMessage.fromUtf8String(new Date(), nick, line); - const msg = WakuMessage.fromBytes(chatMessage.encode(), ChatContentTopic); + const msg = WakuMessage.fromBytes(chatMessage.encode(), { + contentTopic: ChatContentTopic, + }); if (opts.lightPush) { await waku.lightPush.push(msg); } else { diff --git a/examples/eth-dm/src/BroadcastPublicKey.tsx b/examples/eth-dm/src/BroadcastPublicKey.tsx index 1cf2fb7f02..ccde53371b 100644 --- a/examples/eth-dm/src/BroadcastPublicKey.tsx +++ b/examples/eth-dm/src/BroadcastPublicKey.tsx @@ -60,5 +60,7 @@ function encodePublicKeyWakuMessage( publicKeyMessage: PublicKeyMessage ): WakuMessage { const payload = publicKeyMessage.encode(); - return WakuMessage.fromBytes(payload, PublicKeyContentTopic); + return WakuMessage.fromBytes(payload, { + contentTopic: PublicKeyContentTopic, + }); } diff --git a/examples/eth-dm/src/messaging/SendMessage.tsx b/examples/eth-dm/src/messaging/SendMessage.tsx index fb61bfd315..cb9e4cd40e 100644 --- a/examples/eth-dm/src/messaging/SendMessage.tsx +++ b/examples/eth-dm/src/messaging/SendMessage.tsx @@ -117,7 +117,9 @@ async function encodeEncryptedWakuMessage( }; const payload = encode(directMsg); - return WakuMessage.fromBytes(payload, DirectMessageContentTopic); + return WakuMessage.fromBytes(payload, { + contentTopic: DirectMessageContentTopic, + }); } function sendMessage( diff --git a/examples/web-chat/src/Room.tsx b/examples/web-chat/src/Room.tsx index 55eb0ad5c9..6b93a7d10f 100644 --- a/examples/web-chat/src/Room.tsx +++ b/examples/web-chat/src/Room.tsx @@ -55,11 +55,10 @@ async function handleMessage( } else { const timestamp = new Date(); const chatMessage = ChatMessage.fromUtf8String(timestamp, nick, message); - const wakuMsg = WakuMessage.fromBytes( - chatMessage.encode(), - ChatContentTopic, - timestamp - ); + const wakuMsg = WakuMessage.fromBytes(chatMessage.encode(), { + contentTopic: ChatContentTopic, + timestamp, + }); return messageSender(wakuMsg); } } diff --git a/src/lib/waku_message/index.ts b/src/lib/waku_message/index.ts index f4cb78d6a7..fc95f5260e 100644 --- a/src/lib/waku_message/index.ts +++ b/src/lib/waku_message/index.ts @@ -7,29 +7,30 @@ import * as proto from '../../proto/waku/v2/message'; export const DefaultContentTopic = '/waku/2/default-content/proto'; const DefaultVersion = 0; +export interface Options { + contentTopic?: string; + timestamp?: Date; +} + export class WakuMessage { public constructor(public proto: proto.WakuMessage) {} /** * Create Message with a utf-8 string as payload. */ - static fromUtf8String( - utf8: string, - contentTopic: string = DefaultContentTopic, - timestamp: Date = new Date() - ): WakuMessage { + static fromUtf8String(utf8: string, opts?: Options): WakuMessage { const payload = Buffer.from(utf8, 'utf-8'); - return WakuMessage.fromBytes(payload, contentTopic, timestamp); + return WakuMessage.fromBytes(payload, opts); } /** * Create Message with a byte array as payload. */ - static fromBytes( - payload: Uint8Array, - contentTopic: string = DefaultContentTopic, - timestamp: Date = new Date() - ): WakuMessage { + static fromBytes(payload: Uint8Array, opts?: Options): WakuMessage { + const { timestamp, contentTopic } = Object.assign( + { timestamp: new Date(), contentTopic: DefaultContentTopic }, + opts ? opts : {} + ); return new WakuMessage({ payload, timestamp: timestamp.valueOf() / 1000, diff --git a/src/lib/waku_relay/index.spec.ts b/src/lib/waku_relay/index.spec.ts index a3d9a2ac20..a2fbf042bb 100644 --- a/src/lib/waku_relay/index.spec.ts +++ b/src/lib/waku_relay/index.spec.ts @@ -79,11 +79,9 @@ describe('Waku Relay', () => { const messageText = 'JS to JS communication works'; const messageTimestamp = new Date('1995-12-17T03:24:00'); - const message = WakuMessage.fromUtf8String( - messageText, - undefined, - messageTimestamp - ); + const message = WakuMessage.fromUtf8String(messageText, { + timestamp: messageTimestamp, + }); const receivedMsgPromise: Promise = new Promise( (resolve) => { @@ -108,8 +106,12 @@ describe('Waku Relay', () => { const fooMessageText = 'Published on content topic foo'; const barMessageText = 'Published on content topic bar'; - const fooMessage = WakuMessage.fromUtf8String(fooMessageText, 'foo'); - const barMessage = WakuMessage.fromUtf8String(barMessageText, 'bar'); + const fooMessage = WakuMessage.fromUtf8String(fooMessageText, { + contentTopic: 'foo', + }); + const barMessage = WakuMessage.fromUtf8String(barMessageText, { + contentTopic: 'bar', + }); const receivedBarMsgPromise: Promise = new Promise( (resolve) => { @@ -144,10 +146,9 @@ describe('Waku Relay', () => { const messageText = 'Published on content topic with added then deleted observer'; - const message = WakuMessage.fromUtf8String( - messageText, - 'added-then-deleted-observer' - ); + const message = WakuMessage.fromUtf8String(messageText, { + contentTopic: 'added-then-deleted-observer', + }); // The promise **fails** if we receive a message on this observer. const receivedMsgPromise: Promise = new Promise(