diff --git a/__tests__/ObfuscationService.test.js b/__tests__/ObfuscationService.test.js index 1f6374c237920f867989ba3f5452f37ee81f68f9..115402f3fc146745f64c312ed3a2f530775d55aa 100644 --- a/__tests__/ObfuscationService.test.js +++ b/__tests__/ObfuscationService.test.js @@ -8,6 +8,7 @@ const encodeObject = (object) => { const decodeObject = (arrayBuffer) => { const decoder = new TextDecoder(); + // console.log(decoder.decode(arrayBuffer)); return JSON.parse(decoder.decode(arrayBuffer)); }; diff --git a/__tests__/StatusesService.test.js b/__tests__/StatusesService.test.js index 785d747af37fe75b4d548b44e4bf570f612c6c11..9684f08cc6f8d1db02bf5f9915f737238460d059 100644 --- a/__tests__/StatusesService.test.js +++ b/__tests__/StatusesService.test.js @@ -2,8 +2,19 @@ import { describe, test } from "@jest/globals"; import StatusesService from "../src/services/StatusesService"; describe("StatusesService", () => { - test("test", async () => { + test("encodes and decodes sender status object", async () => { const statusesService = new StatusesService(); - statusesService.test(); + + const textEncoder = new TextEncoder(); // always utf-8 + const stringBytes = textEncoder.encode("test bytes"); + + const statusObjectBytes = statusesService.encodeSenderStatusObject( + 1, + stringBytes, + stringBytes, + { + attachment_1: stringBytes, + } + ); }); }); diff --git a/jest.config.js b/jest.config.js index 65f67c97ba6a5b29cb8939b2ff134a12465b3b90..9914c02cafe204d40942dfd17701be4a7d0be971 100644 --- a/jest.config.js +++ b/jest.config.js @@ -135,7 +135,7 @@ module.exports = { // snapshotSerializers: [], // The test environment that will be used for testing - // testEnvironment: "jest-environment-jsdom", + testEnvironment: "jest-environment-node", // Options that will be passed to the testEnvironment // testEnvironmentOptions: {}, @@ -150,10 +150,7 @@ module.exports = { // ], // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - testPathIgnorePatterns: [ - "/node_modules/", - "setupFiles.js" - ], + testPathIgnorePatterns: ["/node_modules/", "setupFiles.js"], // The regexp pattern or array of patterns that Jest uses to detect test files // testRegex: [], diff --git a/src/services/StatusesService/StatusesService.ts b/src/services/StatusesService/StatusesService.ts index 7d67db923ad2cac393e10e2135f3e32ae070da0b..4c07e4995d138b8f5791744769f3f65a553ff45b 100644 --- a/src/services/StatusesService/StatusesService.ts +++ b/src/services/StatusesService/StatusesService.ts @@ -1,4 +1,4 @@ -// const statuses = require("./objects/statuses_pb"); +const statuses = require("./objects/statuses_pb"); // const { arrayBufferToBase64 } = require("../../../dist/utils"); // var message = new messages.MyMessage(); @@ -41,12 +41,27 @@ class StatusesService { * @param messageSignature * @param attachmentsSignature */ - // createSenderStatusObject( - // signatureTime: number, - // signatureTimeSignature: string, - // messageSignature: string, - // attachmentsSignature: { [key: string]: string } - // ): string {} + encodeSenderStatusObject( + signatureTime: number, + signatureTimeSignature: Uint8Array, + messageSignature: Uint8Array, + attachmentsSignature: { [key: string]: Uint8Array } + ): Uint8Array { + const senderStatusObject = new statuses.SenderStatusObject(); + senderStatusObject.setSignaturetime(signatureTime); + senderStatusObject.setSignaturetimesignature(signatureTimeSignature); + senderStatusObject.setMessagesignature(messageSignature); + + Object.keys(attachmentsSignature).forEach((key) => { + senderStatusObject + .getAttachmentssignatureMap() + .set(key, attachmentsSignature[key]); + }); + + console.log(senderStatusObject.toObject()); + + return senderStatusObject.serializeBinary(); + } } export default StatusesService; diff --git a/src/utils.ts b/src/utils.ts index 2526cf7d85861bd650808321074bf0c5d08b32ba..37af78b36ae02ed714bd65b8cbb24b45125c0615 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,19 +1,15 @@ export const arrayBufferToBase64 = (buffer: ArrayBuffer): string => { - let binary = ""; - const bytes = new Uint8Array(buffer); - const len = bytes.byteLength; - for (let i = 0; i < len; i++) { - binary += String.fromCharCode(bytes[i]); - } - return window.btoa(binary); + return Buffer.from(buffer).toString("base64"); }; export const base64ToArrayBuffer = (base64: string): ArrayBuffer => { - const binaryString = window.atob(base64); + const binaryString = new Buffer(base64, "base64").toString(); const len = binaryString.length; const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } - return bytes.buffer; + + return bytes; };