From dc6ab3cf272d0dac9b207380cff4af56e6bde6eb Mon Sep 17 00:00:00 2001 From: Brice Stacey Date: Thu, 9 Feb 2023 15:14:48 -0500 Subject: [PATCH] fix: add serializers for encrypted payloads The encrypted functions have slightly different APIs, so we decorate the WakuMessage and only change its toJSON function. --- src/index.tsx | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 4f1ebf9..1814483 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -377,6 +377,27 @@ export function peerCnt(): Promise { }); } +export class EncryptedPayload extends WakuMessage { + constructor(msg: WakuMessage) { + super(); + this.contentTopic = msg.contentTopic; + this.version = msg.version; + this.timestamp = msg.timestamp; + this.payload = msg.payload; + } + + toJSON() { + return { + contentTopic: this.contentTopic, + version: this.version, + timestamp: this.timestamp + ? bigInt(this.timestamp.valueOf()).multiply(OneMillion).toJSNumber() + : 0, + payload: Buffer.from(Array.from(this.payload)).toString('base64'), + }; + } +} + export class DecodedPayload { payload: Uint8Array = new Uint8Array(); padding: Uint8Array = new Uint8Array(); @@ -404,7 +425,8 @@ export function decodeSymmetric( symmetricKey: String ): Promise { return new Promise(async (resolve, reject) => { - let messageJSON = JSON.stringify(msg); + let message = new EncryptedPayload(msg); + let messageJSON = JSON.stringify(message); let response = JSON.parse( await ReactNative.decodeSymmetric(messageJSON, symmetricKey) ); @@ -432,7 +454,8 @@ export function decodeAsymmetric( privateKey: String ): Promise { return new Promise(async (resolve, reject) => { - let messageJSON = JSON.stringify(msg); + let message = new EncryptedPayload(msg); + let messageJSON = JSON.stringify(message); let response = JSON.parse( await ReactNative.decodeAsymmetric(messageJSON, privateKey) ); @@ -534,7 +557,8 @@ export function lightpushPublishEncAsymmetric( timeoutMs: Number = 0 ): Promise { return new Promise(async (resolve, reject) => { - let messageJSON = JSON.stringify(msg); + let message = new EncryptedPayload(msg); + let messageJSON = JSON.stringify(message); let response = JSON.parse( await ReactNative.lightpushPublishEncodeAsymmetric( messageJSON, @@ -572,7 +596,8 @@ export function lightpushPublishEncSymmetric( timeoutMs: Number = 0 ): Promise { return new Promise(async (resolve, reject) => { - let messageJSON = JSON.stringify(msg); + let message = new EncryptedPayload(msg); + let messageJSON = JSON.stringify(message); let response = JSON.parse( await ReactNative.lightpushPublishEncodeAsymmetric( messageJSON,