diff --git a/CHANGELOG.md b/CHANGELOG.md index e4642ba344..e471f0cb6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - `Message` interface changed to ensure implementations do not omit fields. +- `Decoder` and `Encoder` interfaces change to better express what the function members do. ## [0.29.0] - 2022-09-21 diff --git a/src/lib/interfaces.ts b/src/lib/interfaces.ts index 80d35fe92e..3d158de236 100644 --- a/src/lib/interfaces.ts +++ b/src/lib/interfaces.ts @@ -78,14 +78,14 @@ export interface Message { export interface Encoder { contentTopic: string; - encode: (message: Partial) => Promise; - encodeProto: (message: Partial) => Promise; + toWire: (message: Partial) => Promise; + toProtoObj: (message: Partial) => Promise; } export interface Decoder { contentTopic: string; - decodeProto: (bytes: Uint8Array) => Promise; - decode: (proto: ProtoMessage) => Promise; + fromWireToProtoObj: (bytes: Uint8Array) => Promise; + fromProtoObj: (proto: ProtoMessage) => Promise; } export interface SendResult { diff --git a/src/lib/waku_filter/index.ts b/src/lib/waku_filter/index.ts index 10914021ae..65e6b45981 100644 --- a/src/lib/waku_filter/index.ts +++ b/src/lib/waku_filter/index.ts @@ -199,7 +199,7 @@ export class WakuFilter { // noinspection ES6MissingAwait decoders.forEach(async (dec) => { if (msg) return; - const decoded = await dec.decode(toProtoMessage(protoMessage)); + const decoded = await dec.fromProtoObj(toProtoMessage(protoMessage)); if (!decoded) { log("Not able to decode message"); return; diff --git a/src/lib/waku_light_push/index.ts b/src/lib/waku_light_push/index.ts index 5e4dbd7dba..0674213dcd 100644 --- a/src/lib/waku_light_push/index.ts +++ b/src/lib/waku_light_push/index.ts @@ -79,7 +79,7 @@ export class WakuLightPush { const recipients: PeerId[] = []; try { - const protoMessage = await encoder.encodeProto(message); + const protoMessage = await encoder.toProtoObj(message); if (!protoMessage) { log("Failed to encode to protoMessage, aborting push"); return { recipients }; diff --git a/src/lib/waku_message/topic_only_message.ts b/src/lib/waku_message/topic_only_message.ts index 3b543e93ae..f72bb8bd63 100644 --- a/src/lib/waku_message/topic_only_message.ts +++ b/src/lib/waku_message/topic_only_message.ts @@ -20,7 +20,7 @@ export class TopicOnlyMessage implements Message { export class TopicOnlyDecoder implements Decoder { public contentTopic = ""; - decodeProto(bytes: Uint8Array): Promise { + fromWireToProtoObj(bytes: Uint8Array): Promise { const protoMessage = proto.TopicOnlyMessage.decode(bytes); log("Message decoded", protoMessage); return Promise.resolve({ @@ -32,7 +32,9 @@ export class TopicOnlyDecoder implements Decoder { }); } - async decode(proto: ProtoMessage): Promise { + async fromProtoObj( + proto: ProtoMessage + ): Promise { return new TopicOnlyMessage(proto); } } diff --git a/src/lib/waku_message/version_0.spec.ts b/src/lib/waku_message/version_0.spec.ts index 1eaa79550f..29961a655a 100644 --- a/src/lib/waku_message/version_0.spec.ts +++ b/src/lib/waku_message/version_0.spec.ts @@ -10,10 +10,10 @@ describe("Waku Message version 0", function () { await fc.assert( fc.asyncProperty(fc.uint8Array({ minLength: 1 }), async (payload) => { const encoder = new EncoderV0(TestContentTopic); - const bytes = await encoder.encode({ payload }); + const bytes = await encoder.toWire({ payload }); const decoder = new DecoderV0(TestContentTopic); - const protoResult = await decoder.decodeProto(bytes); - const result = (await decoder.decode(protoResult!)) as MessageV0; + const protoResult = await decoder.fromWireToProtoObj(bytes); + const result = (await decoder.fromProtoObj(protoResult!)) as MessageV0; expect(result.contentTopic).to.eq(TestContentTopic); expect(result.version).to.eq(0); diff --git a/src/lib/waku_message/version_0.ts b/src/lib/waku_message/version_0.ts index 683f67da75..aa83150f8d 100644 --- a/src/lib/waku_message/version_0.ts +++ b/src/lib/waku_message/version_0.ts @@ -63,11 +63,11 @@ export class MessageV0 implements Message { export class EncoderV0 implements Encoder { constructor(public contentTopic: string) {} - async encode(message: Partial): Promise { - return proto.WakuMessage.encode(await this.encodeProto(message)); + async toWire(message: Partial): Promise { + return proto.WakuMessage.encode(await this.toProtoObj(message)); } - async encodeProto(message: Partial): Promise { + async toProtoObj(message: Partial): Promise { const timestamp = message.timestamp ?? new Date(); return { @@ -83,7 +83,7 @@ export class EncoderV0 implements Encoder { export class DecoderV0 implements Decoder { constructor(public contentTopic: string) {} - decodeProto(bytes: Uint8Array): Promise { + fromWireToProtoObj(bytes: Uint8Array): Promise { const protoMessage = proto.WakuMessage.decode(bytes); log("Message decoded", protoMessage); return Promise.resolve({ @@ -95,7 +95,7 @@ export class DecoderV0 implements Decoder { }); } - async decode(proto: ProtoMessage): Promise { + async fromProtoObj(proto: ProtoMessage): Promise { // https://github.com/status-im/js-waku/issues/921 if (proto.version === undefined) { proto.version = 0; diff --git a/src/lib/waku_message/version_1.spec.ts b/src/lib/waku_message/version_1.spec.ts index 00574d5ae7..91b75c2e0c 100644 --- a/src/lib/waku_message/version_1.spec.ts +++ b/src/lib/waku_message/version_1.spec.ts @@ -28,12 +28,12 @@ describe("Waku Message version 1", function () { const publicKey = getPublicKey(privateKey); const encoder = new AsymEncoder(TestContentTopic, publicKey); - const bytes = await encoder.encode({ payload }); + const bytes = await encoder.toWire({ payload }); const decoder = new AsymDecoder(TestContentTopic, privateKey); - const protoResult = await decoder.decodeProto(bytes!); + const protoResult = await decoder.fromWireToProtoObj(bytes!); if (!protoResult) throw "Failed to proto decode"; - const result = await decoder.decode(protoResult); + const result = await decoder.fromProtoObj(protoResult); if (!result) throw "Failed to decode"; expect(result.contentTopic).to.equal(TestContentTopic); @@ -63,12 +63,12 @@ describe("Waku Message version 1", function () { bobPublicKey, alicePrivateKey ); - const bytes = await encoder.encode({ payload }); + const bytes = await encoder.toWire({ payload }); const decoder = new AsymDecoder(TestContentTopic, bobPrivateKey); - const protoResult = await decoder.decodeProto(bytes!); + const protoResult = await decoder.fromWireToProtoObj(bytes!); if (!protoResult) throw "Failed to proto decode"; - const result = await decoder.decode(protoResult); + const result = await decoder.fromProtoObj(protoResult); if (!result) throw "Failed to decode"; expect(result.contentTopic).to.equal(TestContentTopic); @@ -88,12 +88,12 @@ describe("Waku Message version 1", function () { fc.uint8Array({ min: 1, minLength: 32, maxLength: 32 }), async (payload, symKey) => { const encoder = new SymEncoder(TestContentTopic, symKey); - const bytes = await encoder.encode({ payload }); + const bytes = await encoder.toWire({ payload }); const decoder = new SymDecoder(TestContentTopic, symKey); - const protoResult = await decoder.decodeProto(bytes!); + const protoResult = await decoder.fromWireToProtoObj(bytes!); if (!protoResult) throw "Failed to proto decode"; - const result = await decoder.decode(protoResult); + const result = await decoder.fromProtoObj(protoResult); if (!result) throw "Failed to decode"; expect(result.contentTopic).to.equal(TestContentTopic); @@ -116,12 +116,12 @@ describe("Waku Message version 1", function () { const sigPubKey = getPublicKey(sigPrivKey); const encoder = new SymEncoder(TestContentTopic, symKey, sigPrivKey); - const bytes = await encoder.encode({ payload }); + const bytes = await encoder.toWire({ payload }); const decoder = new SymDecoder(TestContentTopic, symKey); - const protoResult = await decoder.decodeProto(bytes!); + const protoResult = await decoder.fromWireToProtoObj(bytes!); if (!protoResult) throw "Failed to proto decode"; - const result = await decoder.decode(protoResult); + const result = await decoder.fromProtoObj(protoResult); if (!result) throw "Failed to decode"; expect(result.contentTopic).to.equal(TestContentTopic); diff --git a/src/lib/waku_message/version_1.ts b/src/lib/waku_message/version_1.ts index a2b588dd77..0a9a6117c6 100644 --- a/src/lib/waku_message/version_1.ts +++ b/src/lib/waku_message/version_1.ts @@ -52,14 +52,14 @@ export class AsymEncoder implements Encoder { private sigPrivKey?: Uint8Array ) {} - async encode(message: Partial): Promise { - const protoMessage = await this.encodeProto(message); + async toWire(message: Partial): Promise { + const protoMessage = await this.toProtoObj(message); if (!protoMessage) return; return proto.WakuMessage.encode(protoMessage); } - async encodeProto( + async toProtoObj( message: Partial ): Promise { const timestamp = message.timestamp ?? new Date(); @@ -88,14 +88,14 @@ export class SymEncoder implements Encoder { private sigPrivKey?: Uint8Array ) {} - async encode(message: Partial): Promise { - const protoMessage = await this.encodeProto(message); + async toWire(message: Partial): Promise { + const protoMessage = await this.toProtoObj(message); if (!protoMessage) return; return proto.WakuMessage.encode(protoMessage); } - async encodeProto( + async toProtoObj( message: Partial ): Promise { const timestamp = message.timestamp ?? new Date(); @@ -121,7 +121,9 @@ export class AsymDecoder extends DecoderV0 implements Decoder { super(contentTopic); } - async decode(protoMessage: ProtoMessage): Promise { + async fromProtoObj( + protoMessage: ProtoMessage + ): Promise { const cipherPayload = protoMessage.payload; if (protoMessage.version !== Version) { @@ -177,7 +179,9 @@ export class SymDecoder extends DecoderV0 implements Decoder { super(contentTopic); } - async decode(protoMessage: ProtoMessage): Promise { + async fromProtoObj( + protoMessage: ProtoMessage + ): Promise { const cipherPayload = protoMessage.payload; if (protoMessage.version !== Version) { diff --git a/src/lib/waku_relay/index.ts b/src/lib/waku_relay/index.ts index a4ebe04747..b5cbeb48e6 100644 --- a/src/lib/waku_relay/index.ts +++ b/src/lib/waku_relay/index.ts @@ -96,7 +96,7 @@ export class WakuRelay extends GossipSub { encoder: Encoder, message: Partial ): Promise { - const msg = await encoder.encode(message); + const msg = await encoder.toWire(message); if (!msg) { log("Failed to encode message, aborting publish"); return { recipients: [] }; @@ -139,7 +139,7 @@ export class WakuRelay extends GossipSub { if (event.detail.msg.topic !== pubSubTopic) return; log(`Message received on ${pubSubTopic}`); - const topicOnlyMsg = await this.defaultDecoder.decodeProto( + const topicOnlyMsg = await this.defaultDecoder.fromWireToProtoObj( event.detail.msg.data ); if (!topicOnlyMsg || !topicOnlyMsg.contentTopic) { @@ -153,14 +153,16 @@ export class WakuRelay extends GossipSub { } await Promise.all( Array.from(observers).map(async ({ decoder, callback }) => { - const protoMsg = await decoder.decodeProto(event.detail.msg.data); + const protoMsg = await decoder.fromWireToProtoObj( + event.detail.msg.data + ); if (!protoMsg) { log( "Internal error: message previously decoded failed on 2nd pass." ); return; } - const msg = await decoder.decode(protoMsg); + const msg = await decoder.fromProtoObj(protoMsg); if (msg) { callback(msg); } else { diff --git a/src/lib/waku_store/index.ts b/src/lib/waku_store/index.ts index ce53bf97e2..bc9c096905 100644 --- a/src/lib/waku_store/index.ts +++ b/src/lib/waku_store/index.ts @@ -342,7 +342,7 @@ async function* paginate( if (typeof contentTopic !== "undefined") { const decoder = decoders.get(contentTopic); if (decoder) { - return decoder.decode(toProtoMessage(protoMsg)); + return decoder.fromProtoObj(toProtoMessage(protoMsg)); } } return Promise.resolve(undefined);