From b1674f2a1cd3753ffe85a1f089f7efe8b69b8901 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Mon, 3 Jun 2024 16:03:29 +0200 Subject: [PATCH 01/22] remove pending from BE and DS --- .../backend/src/persistence/getDatabase.ts | 9 --- .../src/persistence/pending/addPending.ts | 11 --- .../src/persistence/pending/deletePending.ts | 10 --- .../src/persistence/pending/getPending.ts | 10 --- .../backend/src/persistence/pending/index.ts | 5 -- packages/backend/src/profile.test.ts | 1 - packages/backend/src/profile.ts | 3 - .../delivery-service/src/delivery.test.ts | 43 ---------- packages/delivery-service/src/delivery.ts | 12 --- .../delivery-service/src/messaging.test.ts | 33 -------- packages/delivery-service/src/messaging.ts | 81 ------------------- .../src/persistence/getDatabase.ts | 13 +-- .../src/persistence/pending/addPending.ts | 11 --- .../src/persistence/pending/deletePending.ts | 10 --- .../src/persistence/pending/getPending.ts | 10 --- .../src/persistence/pending/index.ts | 5 -- packages/delivery-service/src/profile.test.ts | 2 - packages/delivery-service/src/profile.ts | 2 - packages/lib/delivery-api/src/messaging-ws.ts | 35 -------- packages/lib/delivery/src/UserProfile.test.ts | 64 --------------- packages/lib/delivery/src/UserProfile.ts | 35 +------- 21 files changed, 5 insertions(+), 400 deletions(-) delete mode 100644 packages/backend/src/persistence/pending/addPending.ts delete mode 100644 packages/backend/src/persistence/pending/deletePending.ts delete mode 100644 packages/backend/src/persistence/pending/getPending.ts delete mode 100644 packages/backend/src/persistence/pending/index.ts delete mode 100644 packages/delivery-service/src/persistence/pending/addPending.ts delete mode 100644 packages/delivery-service/src/persistence/pending/deletePending.ts delete mode 100644 packages/delivery-service/src/persistence/pending/getPending.ts delete mode 100644 packages/delivery-service/src/persistence/pending/index.ts diff --git a/packages/backend/src/persistence/getDatabase.ts b/packages/backend/src/persistence/getDatabase.ts index 2de971c8b..f6d89a63c 100644 --- a/packages/backend/src/persistence/getDatabase.ts +++ b/packages/backend/src/persistence/getDatabase.ts @@ -3,7 +3,6 @@ import { ISessionDatabase } from '@dm3-org/dm3-lib-server-side'; import { UserStorage } from '@dm3-org/dm3-lib-storage'; import { PrismaClient } from '@prisma/client'; import { createClient } from 'redis'; -import Pending from './pending'; import Session from './session'; import Storage from './storage'; import { MessageRecord } from './storage/postgres/utils/MessageRecord'; @@ -14,7 +13,6 @@ export enum RedisPrefix { Sync = 'sync:', Session = 'session:', UserStorage = 'user.storage:', - Pending = 'pending:', NotificationChannel = 'notificationChannel:', GlobalNotification = 'globalNotification:', Otp = 'otp:', @@ -68,10 +66,6 @@ export async function getDatabase( //Legacy remove after storage has been merged getUserStorage: Storage.getUserStorageOld(redis), setUserStorage: Storage.setUserStorageOld(redis), - //Pending - addPending: Pending.addPending(redis), - getPending: Pending.getPending(redis), - deletePending: Pending.deletePending(redis), //Storage AddConversation addConversation: Storage.addConversation(prisma), getConversationList: Storage.getConversationList(prisma), @@ -105,9 +99,6 @@ export interface IDatabase extends ISessionDatabase { //Legacy remove after storage has been merged getUserStorage: (ensName: string) => Promise; setUserStorage: (ensName: string, data: string) => Promise; - addPending: (ensName: string, contactEnsName: string) => Promise; - getPending: (ensName: string) => Promise; - deletePending: (ensName: string) => Promise; addConversation: ( ensName: string, diff --git a/packages/backend/src/persistence/pending/addPending.ts b/packages/backend/src/persistence/pending/addPending.ts deleted file mode 100644 index 67fd1dc2d..000000000 --- a/packages/backend/src/persistence/pending/addPending.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Redis, RedisPrefix } from '../getDatabase'; -import { normalizeEnsName } from '@dm3-org/dm3-lib-profile'; - -export function addPending(redis: Redis) { - return async (ensName: string, contactEnsName: string): Promise => { - await redis.sAdd( - RedisPrefix.Pending + normalizeEnsName(contactEnsName), - normalizeEnsName(ensName), - ); - }; -} diff --git a/packages/backend/src/persistence/pending/deletePending.ts b/packages/backend/src/persistence/pending/deletePending.ts deleted file mode 100644 index 779b5eba3..000000000 --- a/packages/backend/src/persistence/pending/deletePending.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Redis, RedisPrefix } from '../getDatabase'; -import { getIdEnsName } from '../getIdEnsName'; - -export function deletePending(redis: Redis) { - return async (ensName: string): Promise => { - await redis.del( - RedisPrefix.Pending + (await getIdEnsName(redis)(ensName)), - ); - }; -} diff --git a/packages/backend/src/persistence/pending/getPending.ts b/packages/backend/src/persistence/pending/getPending.ts deleted file mode 100644 index 1f0941834..000000000 --- a/packages/backend/src/persistence/pending/getPending.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Redis, RedisPrefix } from '../getDatabase'; -import { getIdEnsName } from '../getIdEnsName'; - -export function getPending(redis: Redis) { - return async (ensName: string): Promise => { - return redis.sMembers( - RedisPrefix.Pending + (await getIdEnsName(redis)(ensName)), - ); - }; -} diff --git a/packages/backend/src/persistence/pending/index.ts b/packages/backend/src/persistence/pending/index.ts deleted file mode 100644 index 7d367e2f2..000000000 --- a/packages/backend/src/persistence/pending/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { addPending } from './addPending'; -import { getPending } from './getPending'; -import { deletePending } from './deletePending'; - -export default { addPending, deletePending, getPending }; diff --git a/packages/backend/src/profile.test.ts b/packages/backend/src/profile.test.ts index d33181f7b..cdae72da7 100644 --- a/packages/backend/src/profile.test.ts +++ b/packages/backend/src/profile.test.ts @@ -110,7 +110,6 @@ describe('Profile', () => { setSession: async (_: string, __: any) => { return (_: any, __: any, ___: any) => {}; }, - getPending: (_: any) => [], getIdEnsName: async (ensName: string) => ensName, }; diff --git a/packages/backend/src/profile.ts b/packages/backend/src/profile.ts index 01bdb45fe..d46d701fa 100644 --- a/packages/backend/src/profile.ts +++ b/packages/backend/src/profile.ts @@ -56,9 +56,6 @@ export default ( ensName, req.body, serverSecret, - // disabled get pending to remove it later - async (ensName: string) => [], //(ensName: string) => db.getPending(ensName), - (socketId: string) => io.sockets.to(socketId).emit('joined'), ); global.logger.debug({ message: 'POST profile', diff --git a/packages/delivery-service/src/delivery.test.ts b/packages/delivery-service/src/delivery.test.ts index 561025824..d3940b4c4 100644 --- a/packages/delivery-service/src/delivery.test.ts +++ b/packages/delivery-service/src/delivery.test.ts @@ -69,49 +69,6 @@ describe('Delivery', () => { }); }); - describe('getPendingMessages', () => { - it('Returns 200 if schema is valid', async () => { - const web3Provider = { - resolveName: async () => - '0x99C19AB10b9EC8aC6fcda9586E81f6B73a298870', - }; - - const token = await createAuthToken( - '0x99C19AB10b9EC8aC6fcda9586E81f6B73a298870', - ); - - const db = { - getSession: async (ensName: string) => ({ - challenge: 'deprecated challenge', - token: 'deprecated token that is not used anymore', - }), - setSession: async (_: string, __: any) => { - return (_: any, __: any, ___: any) => {}; - }, - getPending: (_: any) => [], - deletePending: (_: any) => [], - getIdEnsName: async (ensName: string) => ensName, - }; - const app = express(); - app.use(bodyParser.json()); - app.use( - delivery(web3Provider as any, db as any, keysA, serverSecret), - ); - - const { status } = await request(app) - .post( - '/messages/0x99C19AB10b9EC8aC6fcda9586E81f6B73a298870/pending', - ) - .set({ - authorization: `Bearer ${token}`, - }) - - .send(); - - expect(status).toBe(200); - }); - }); - describe('syncAcknoledgment', () => { it('Returns 200 if schema is valid', async () => { const web3Provider = { diff --git a/packages/delivery-service/src/delivery.ts b/packages/delivery-service/src/delivery.ts index 9ae1589ba..c72f407a0 100644 --- a/packages/delivery-service/src/delivery.ts +++ b/packages/delivery-service/src/delivery.ts @@ -97,18 +97,6 @@ export default ( }, ); - router.post('/messages/:ensName/pending', async (req, res, next) => { - try { - const account = await db.getIdEnsName(req.params.ensName); - const pending = await db.getPending(account); - await db.deletePending(account); - - res.json(pending); - } catch (e) { - next(e); - } - }); - //TODO remove after storage refactoring router.post( '/messages/:ensName/syncAcknoledgment/:last_message_pull', diff --git a/packages/delivery-service/src/messaging.test.ts b/packages/delivery-service/src/messaging.test.ts index f7ae1d360..459e17bbf 100644 --- a/packages/delivery-service/src/messaging.test.ts +++ b/packages/delivery-service/src/messaging.test.ts @@ -249,37 +249,4 @@ describe('Messaging', () => { )(getSocketMock()); }); }); - - describe('pendingMessage', () => { - it('returns error if schema is invalid', async () => { - const data = { - accountAddress: '', - contactAddress: '', - }; - const callback = jest.fn((e: any) => { - if (e.error !== 'invalid schema') { - throw Error(e); - } - expect(e.error).toBe('invalid schema'); - }); - const getSocketMock = jest.fn(() => { - return { - on: async (name: string, onPendingMessage: any) => { - //We just want to test the submitMessage callback fn - if (name === 'pendingMessage') { - await onPendingMessage(data, callback); - } - }, - } as unknown as Socket; - }); - onConnection( - io as any, - web3Provider as any, - db as any, - keysA, - serverSecret, - mockWsManager, - )(getSocketMock()); - }); - }); }); diff --git a/packages/delivery-service/src/messaging.ts b/packages/delivery-service/src/messaging.ts index 4b90f195f..6bde06d57 100644 --- a/packages/delivery-service/src/messaging.ts +++ b/packages/delivery-service/src/messaging.ts @@ -11,17 +11,6 @@ import { getDeliveryServiceProperties } from './config/getDeliveryServicePropert import { IDatabase } from './persistence/getDatabase'; import { IWebSocketManager } from '@dm3-org/dm3-lib-shared'; -const pendingMessageSchema = { - type: 'object', - properties: { - ensName: { type: 'string' }, - contactEnsName: { type: 'string' }, - token: { type: 'string' }, - }, - required: ['ensName', 'contactEnsName', 'token'], - additionalProperties: false, -}; - export function onConnection( io: Server, web3Provider: ethers.providers.JsonRpcProvider, @@ -103,75 +92,5 @@ export function onConnection( } }, ); - - /** - * Queue a message for a user that has not yet published their profile. - * The queue is managed on the delivery service of the sending user. - */ - socket.on('pendingMessage', async (data, callback) => { - const isSchemaValid = validateSchema(pendingMessageSchema, data); - - if (!isSchemaValid) { - const error = 'invalid schema'; - global.logger.warn({ - method: 'WS PENDING MESSAGE', - error, - }); - - return callback({ error }); - } - - let idEnsName: string; - let idContactEnsName: string; - const ensName = normalizeEnsName(data.ensName); - const contactEnsName = normalizeEnsName(data.contactEnsName); - - try { - idEnsName = await db.getIdEnsName(ensName); - idContactEnsName = await db.getIdEnsName(contactEnsName); - } catch (error) { - global.logger.warn({ - method: 'WS PENDING MESSAGE', - error, - }); - - return callback({ error }); - } - - global.logger.info({ - method: 'WS PENDING MESSAGE', - ensName, - contactEnsName, - }); - try { - if ( - !(await checkToken( - web3Provider, - db.getSession, - idEnsName, - data.token, - serverSecret, - )) - ) { - const error = 'Token check failed'; - global.logger.warn({ - method: 'WS PENDING MESSAGE', - error, - }); - return callback({ error }); - } - - await db.addPending(ensName, idContactEnsName); - - callback({ response: 'success' }); - } catch (error) { - global.logger.warn({ - method: 'WS PENDING MESSAGE', - error: (error as Error).toString(), - }); - - return callback({ error: "Can't add pending message" }); - } - }); }; } diff --git a/packages/delivery-service/src/persistence/getDatabase.ts b/packages/delivery-service/src/persistence/getDatabase.ts index 11b8717c5..14c0631e4 100644 --- a/packages/delivery-service/src/persistence/getDatabase.ts +++ b/packages/delivery-service/src/persistence/getDatabase.ts @@ -1,20 +1,18 @@ import { IGlobalNotification, IOtp } from '@dm3-org/dm3-lib-delivery'; import { EncryptionEnvelop } from '@dm3-org/dm3-lib-messaging'; -import { UserStorage } from '@dm3-org/dm3-lib-storage'; import { NotificationChannel, NotificationChannelType, } from '@dm3-org/dm3-lib-shared'; // import { PrismaClient } from '@prisma/client'; +import { ISessionDatabase } from '@dm3-org/dm3-lib-server-side'; import { createClient } from 'redis'; import { getIdEnsName } from './getIdEnsName'; import Messages from './messages'; import { syncAcknowledge } from './messages/syncAcknowledge'; import Notification from './notification'; import Otp from './otp'; -import Pending from './pending'; import Session from './session'; -import { ISessionDatabase } from '@dm3-org/dm3-lib-server-side'; export enum RedisPrefix { Conversation = 'conversation:', @@ -22,7 +20,6 @@ export enum RedisPrefix { Sync = 'sync:', Session = 'session:', UserStorage = 'user.storage:', - Pending = 'pending:', NotificationChannel = 'notificationChannel:', GlobalNotification = 'globalNotification:', Otp = 'otp:', @@ -74,11 +71,8 @@ export async function getDatabase( //Session setSession: Session.setSession(redis), getSession: Session.getSession(redis), - //Pending - addPending: Pending.addPending(redis), - getPending: Pending.getPending(redis), - deletePending: Pending.deletePending(redis), getIdEnsName: getIdEnsName(redis), + //Sync syncAcknowledge: syncAcknowledge(redis), //Notification getUsersNotificationChannels: @@ -117,9 +111,6 @@ export interface IDatabase extends ISessionDatabase { createdAt?: number, ) => Promise; deleteExpiredMessages: (time: number) => Promise; - addPending: (ensName: string, contactEnsName: string) => Promise; - getPending: (ensName: string) => Promise; - deletePending: (ensName: string) => Promise; getIdEnsName: (ensName: string) => Promise; syncAcknowledge: ( conversationId: string, diff --git a/packages/delivery-service/src/persistence/pending/addPending.ts b/packages/delivery-service/src/persistence/pending/addPending.ts deleted file mode 100644 index 67fd1dc2d..000000000 --- a/packages/delivery-service/src/persistence/pending/addPending.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Redis, RedisPrefix } from '../getDatabase'; -import { normalizeEnsName } from '@dm3-org/dm3-lib-profile'; - -export function addPending(redis: Redis) { - return async (ensName: string, contactEnsName: string): Promise => { - await redis.sAdd( - RedisPrefix.Pending + normalizeEnsName(contactEnsName), - normalizeEnsName(ensName), - ); - }; -} diff --git a/packages/delivery-service/src/persistence/pending/deletePending.ts b/packages/delivery-service/src/persistence/pending/deletePending.ts deleted file mode 100644 index 779b5eba3..000000000 --- a/packages/delivery-service/src/persistence/pending/deletePending.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Redis, RedisPrefix } from '../getDatabase'; -import { getIdEnsName } from '../getIdEnsName'; - -export function deletePending(redis: Redis) { - return async (ensName: string): Promise => { - await redis.del( - RedisPrefix.Pending + (await getIdEnsName(redis)(ensName)), - ); - }; -} diff --git a/packages/delivery-service/src/persistence/pending/getPending.ts b/packages/delivery-service/src/persistence/pending/getPending.ts deleted file mode 100644 index 1f0941834..000000000 --- a/packages/delivery-service/src/persistence/pending/getPending.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Redis, RedisPrefix } from '../getDatabase'; -import { getIdEnsName } from '../getIdEnsName'; - -export function getPending(redis: Redis) { - return async (ensName: string): Promise => { - return redis.sMembers( - RedisPrefix.Pending + (await getIdEnsName(redis)(ensName)), - ); - }; -} diff --git a/packages/delivery-service/src/persistence/pending/index.ts b/packages/delivery-service/src/persistence/pending/index.ts deleted file mode 100644 index 7d367e2f2..000000000 --- a/packages/delivery-service/src/persistence/pending/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { addPending } from './addPending'; -import { getPending } from './getPending'; -import { deletePending } from './deletePending'; - -export default { addPending, deletePending, getPending }; diff --git a/packages/delivery-service/src/profile.test.ts b/packages/delivery-service/src/profile.test.ts index 18c0dce36..a52ab219d 100644 --- a/packages/delivery-service/src/profile.test.ts +++ b/packages/delivery-service/src/profile.test.ts @@ -64,7 +64,6 @@ describe('Profile', () => { setSession: async (_: string, __: any) => { return (_: any, __: any, ___: any) => {}; }, - getPending: (_: any) => [], getIdEnsName: async (ensName: string) => ensName, }; const app = express(); @@ -110,7 +109,6 @@ describe('Profile', () => { setSession: async (_: string, __: any) => { return (_: any, __: any, ___: any) => {}; }, - getPending: (_: any) => [], getIdEnsName: async (ensName: string) => ensName, }; diff --git a/packages/delivery-service/src/profile.ts b/packages/delivery-service/src/profile.ts index 54d21646e..aa67d4126 100644 --- a/packages/delivery-service/src/profile.ts +++ b/packages/delivery-service/src/profile.ts @@ -56,8 +56,6 @@ export default ( ensName, req.body, serverSecret, - (ensName: string) => db.getPending(ensName), - (socketId: string) => io.sockets.to(socketId).emit('joined'), ); global.logger.debug({ message: 'POST profile', diff --git a/packages/lib/delivery-api/src/messaging-ws.ts b/packages/lib/delivery-api/src/messaging-ws.ts index 3454309e1..58f25102f 100644 --- a/packages/lib/delivery-api/src/messaging-ws.ts +++ b/packages/lib/delivery-api/src/messaging-ws.ts @@ -32,38 +32,3 @@ export async function sendMessage( ); } export type SendMessage = typeof sendMessage; - -/** - * creates an pending message entry on the delivery service - * @param socket The socket.io web socket to use - * @param token The auth token - * @param ensName Sender ENS name - * @param contactEnsName Receiver ENS name - * @param onSuccess Callback in case of success - * @param onError Callback in case that an error occured - */ -export async function createPendingEntry( - socket: Socket, - token: string, - ensName: string, - contactEnsName: string, - onSuccess: () => void, - onError: () => void, -): Promise { - socket.emit( - 'pendingMessage', - { - ensName, - contactEnsName, - token, - }, - (result: any) => { - if (result.response === 'success') { - onSuccess(); - } else { - onError(); - } - }, - ); -} -export type CreatePendingEntry = typeof createPendingEntry; diff --git a/packages/lib/delivery/src/UserProfile.test.ts b/packages/lib/delivery/src/UserProfile.test.ts index decd7d7f2..1c8fc63ed 100644 --- a/packages/lib/delivery/src/UserProfile.test.ts +++ b/packages/lib/delivery/src/UserProfile.test.ts @@ -44,8 +44,6 @@ describe('UserProfile', () => { it('rejects a userProfile with a wrong signature', async () => { const setSession = jest.fn(); const getSession = () => Promise.resolve(null); - const getPendingConversations = () => Promise.resolve([]); - const send = () => {}; const singedUserProfile = await signProfile(emptyProfile); @@ -57,8 +55,6 @@ describe('UserProfile', () => { RANDO_NAME, singedUserProfile, 'my-secret', - getPendingConversations, - send, ); }).rejects.toEqual(Error('Signature invalid.')); expect(setSession).not.toBeCalled(); @@ -87,8 +83,6 @@ describe('UserProfile', () => { return session(SENDER_NAME, '123', emptyProfile); }; - const getPendingConversations = () => Promise.resolve([]); - const send = () => {}; const singedUserProfile = await signProfile(emptyProfile); @@ -100,69 +94,13 @@ describe('UserProfile', () => { SENDER_NAME, singedUserProfile, 'my-secret', - getPendingConversations, - send, ); }).rejects.toEqual(Error('Profile exists already')); }); - it('skips pending contact without a session', async () => { - const setSession = jest.fn(); - const getSession = (address: string) => Promise.resolve(null); - const getPendingConversations = () => Promise.resolve([RANDO_NAME]); - const send = jest.fn(); - - const singedUserProfile = await signProfile(emptyProfile); - - await submitUserProfile( - { resolveName: () => SENDER_ADDRESS } as any, - getSession, - setSession, - SENDER_NAME, - singedUserProfile, - 'my-secret', - getPendingConversations, - send, - ); - - expect(setSession).toBeCalled(); - expect(send).not.toBeCalled(); - }); - - it('notifies pending contact with a socketId', async () => { - const setSession = jest.fn(); - const getSession = (address: string) => { - if (address === RANDO_NAME) { - return Promise.resolve({ - socketId: 'foo', - } as Session); - } - return Promise.resolve(null); - }; - const getPendingConversations = () => Promise.resolve([RANDO_NAME]); - const send = jest.fn(); - - const singedUserProfile = await signProfile(emptyProfile); - - await submitUserProfile( - { resolveName: () => SENDER_ADDRESS } as any, - getSession, - setSession, - SENDER_NAME, - singedUserProfile, - 'my-secret', - getPendingConversations, - send, - ); - - expect(setSession).toBeCalled(); - expect(send).toBeCalled(); - }); - it('stores a newly created user profile', async () => { const setSession = jest.fn(); const getSession = () => Promise.resolve(null); - const getPendingConversations = () => Promise.resolve([]); const send = () => {}; const singedUserProfile = await signProfile(emptyProfile); @@ -174,8 +112,6 @@ describe('UserProfile', () => { SENDER_NAME, singedUserProfile, 'my-secret', - getPendingConversations, - send, ); expect(setSession).toBeCalled(); diff --git a/packages/lib/delivery/src/UserProfile.ts b/packages/lib/delivery/src/UserProfile.ts index 6eb4d7f8f..a8339933d 100644 --- a/packages/lib/delivery/src/UserProfile.ts +++ b/packages/lib/delivery/src/UserProfile.ts @@ -1,34 +1,13 @@ import { SignedUserProfile, checkUserProfile, + getDefaultProfileExtension, normalizeEnsName, } from '@dm3-org/dm3-lib-profile'; -import { getDefaultProfileExtension } from '@dm3-org/dm3-lib-profile'; -import { Session } from './Session'; -import { v4 as uuidv4 } from 'uuid'; -import { ethers } from 'ethers'; import { logDebug } from '@dm3-org/dm3-lib-shared'; +import { ethers } from 'ethers'; import { generateAuthJWT } from './Keys'; - -const handlePendingConversations = async ( - ensName: string, - getSession: (accountAddress: string) => Promise, - getPendingConversations: (accountAddress: string) => Promise, - send: (socketId: string) => void, -) => { - const pending = await getPendingConversations(ensName); - - await Promise.all( - pending.map(async (pendingEntry) => { - const contact = normalizeEnsName(pendingEntry); - const contactSession = await getSession(contact); - - if (contactSession?.socketId) { - send(contactSession.socketId); - } - }), - ); -}; +import { Session } from './Session'; export async function submitUserProfile( provider: ethers.providers.JsonRpcProvider, @@ -37,8 +16,6 @@ export async function submitUserProfile( ensName: string, signedUserProfile: SignedUserProfile, serverSecret: string, - getPendingConversations: (accountAddress: string) => Promise, - send: (socketId: string) => void, ): Promise { const account = normalizeEnsName(ensName); @@ -64,12 +41,6 @@ export async function submitUserProfile( }; logDebug({ text: 'submitUserProfile', session }); await setSession(account.toLocaleLowerCase(), session); - await handlePendingConversations( - account, - getSession, - getPendingConversations, - send, - ); return session.token; } From 1d3a75489a8ddecaa56070fa082a4da1d8cfd0ea Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Tue, 4 Jun 2024 12:19:12 +0200 Subject: [PATCH 02/22] increase message count --- packages/delivery-service/src/delivery.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/delivery-service/src/delivery.ts b/packages/delivery-service/src/delivery.ts index c72f407a0..1b5f36b3b 100644 --- a/packages/delivery-service/src/delivery.ts +++ b/packages/delivery-service/src/delivery.ts @@ -88,7 +88,7 @@ export default ( req.params.ensName, //Fetch the last 10 messages per conversation //If we decide to add pagination for that endpoint we can pass this value as a param - 10, + 1000, ); res.json(incomingMessages); } catch (e) { From 88c5f94fcc564de23e43a1d043039f0372733e21 Mon Sep 17 00:00:00 2001 From: malteish Date: Wed, 26 Jun 2024 12:50:46 +0200 Subject: [PATCH 03/22] use prisma migrate deploy instead of dev --- packages/backend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index ba727c3b2..a310f610e 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -28,7 +28,7 @@ }, "scripts": { "docker:up": "docker-compose up -d", - "prisma-init": "prisma generate && prisma migrate dev ", + "prisma-init": "prisma generate && prisma migrate deploy ", "start": "yarn prisma-init && node ./dist/index.js", "start-inspect": "node --inspect=0.0.0.0:9229 ./dist/index.js", "test": "yarn run before:tests && DATABASE_URL='postgresql://prisma:prisma@localhost:5433/tests?schema=public' yarn jest --coverage --runInBand --transformIgnorePatterns 'node_modules/(?!(dm3-lib-\\w*)/)'", From 3d7e8e748164b7cf8d7548dc89bd95eab58c5d0c Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Fri, 5 Jul 2024 17:16:16 +0530 Subject: [PATCH 04/22] fixed contact sticky issue --- packages/messenger-widget/src/components/Contacts/Contacts.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/messenger-widget/src/components/Contacts/Contacts.tsx b/packages/messenger-widget/src/components/Contacts/Contacts.tsx index 63b07132c..c6b98aba7 100644 --- a/packages/messenger-widget/src/components/Contacts/Contacts.tsx +++ b/packages/messenger-widget/src/components/Contacts/Contacts.tsx @@ -172,7 +172,7 @@ export function Contacts() { style={{ display: 'flex', flexDirection: 'column', - overflow: 'hidden', + overflow: 'unset', }} inverse={false} hasMore={hasMoreContact} From 5b3be6fe2ba9b729bcb967019da63f217cfd3a33 Mon Sep 17 00:00:00 2001 From: malteish Date: Mon, 8 Jul 2024 10:49:07 +0200 Subject: [PATCH 05/22] fix environment selection --- .github/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 809f93f7f..4439e980a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -8,10 +8,10 @@ on: jobs: messenger-web-deploy: - environment: ${{ github.ref_name == 'main' && 'prod' || (github.ref == 'develop' && 'staging' || 'testing') }} + environment: ${{ github.ref_name == 'main' && 'prod' || (github.ref_name == 'develop' && 'staging' || 'testing') }} runs-on: ubuntu-latest env: - environment_name: ${{ github.ref_name == 'main' && 'prod' || (github.ref == 'develop' && 'staging' || 'testing') }} + environment_name: ${{ github.ref_name == 'main' && 'prod' || (github.ref_name == 'develop' && 'staging' || 'testing') }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v3 From 72772edc0db2a264c20612b0d69be39677cddd24 Mon Sep 17 00:00:00 2001 From: malteish Date: Tue, 9 Jul 2024 11:35:50 +0200 Subject: [PATCH 06/22] enable manual deployment to testing --- .github/workflows/deploy.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4439e980a..7d1882ac3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,5 +1,6 @@ name: deploy on: + workflow_dispatch: push: branches: - testing From 9ef5607f99135d4accabb7e6e87fd04d062fd3a9 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Wed, 10 Jul 2024 13:32:53 +0530 Subject: [PATCH 07/22] fixed ens avatar url for IPFS --- packages/messenger-widget/src/utils/common-utils.ts | 2 ++ packages/messenger-widget/src/utils/ens-utils.ts | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/messenger-widget/src/utils/common-utils.ts b/packages/messenger-widget/src/utils/common-utils.ts index 396d4774b..9d156092b 100644 --- a/packages/messenger-widget/src/utils/common-utils.ts +++ b/packages/messenger-widget/src/utils/common-utils.ts @@ -128,6 +128,8 @@ export const ACCOUNT_CHANGE_POPUP_MESSAGE = export const ENS_PROFILE_BASE_URL = 'https://app.ens.domains/'; +export const AVATAR_IPFS_URL_PREFIX = 'https://ipfs.euc.li/ipfs/'; + export const MOBILE_SCREEN_WIDTH = 800; export const TERMS_AND_CONDITIONS = 'https://dm3.network/terms-and-conditions'; diff --git a/packages/messenger-widget/src/utils/ens-utils.ts b/packages/messenger-widget/src/utils/ens-utils.ts index f0ee95bc0..0da729be1 100644 --- a/packages/messenger-widget/src/utils/ens-utils.ts +++ b/packages/messenger-widget/src/utils/ens-utils.ts @@ -4,6 +4,7 @@ import { ethers } from 'ethers'; import humanIcon from '../assets/images/human.svg'; import { EnsProfileDetails } from '../interfaces/utils'; import { + AVATAR_IPFS_URL_PREFIX, ENS_PROFILE_BASE_URL, MOBILE_SCREEN_WIDTH, getEtherscanUrl, @@ -33,7 +34,12 @@ export const getAvatarProfilePic = async ( const avatar = await resolver .getText('avatar') .catch(() => null); - if (avatar) return avatar; + if (avatar) { + const splittedIpfsUrl = avatar.split('ipfs://'); + return splittedIpfsUrl.length === 2 + ? AVATAR_IPFS_URL_PREFIX.concat(splittedIpfsUrl[1]) + : avatar; + } } const address = await provider.resolveName(ensName); if (address) { From 75437c8da934e44314bd4fa0de87b5abe73483cf Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Wed, 10 Jul 2024 13:55:31 +0530 Subject: [PATCH 08/22] added image load check for avatar's --- .../messenger-widget/src/utils/ens-utils.ts | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/messenger-widget/src/utils/ens-utils.ts b/packages/messenger-widget/src/utils/ens-utils.ts index 0da729be1..897661f84 100644 --- a/packages/messenger-widget/src/utils/ens-utils.ts +++ b/packages/messenger-widget/src/utils/ens-utils.ts @@ -11,6 +11,20 @@ import { } from './common-utils'; import { RightViewSelected } from './enum-type-utils'; +const isImageLoadable = (url: string) => { + try { + const request = new XMLHttpRequest(); + request.open('GET', url, true); + request.send(); + request.onload = function () { + return request.status == 200 ? true : false; + }; + } catch (error) { + console.log('error in loading image : ', error); + return false; + } +}; + // method to get avatar/image url export const getAvatar = async ( provider: ethers.providers.JsonRpcProvider, @@ -36,9 +50,15 @@ export const getAvatarProfilePic = async ( .catch(() => null); if (avatar) { const splittedIpfsUrl = avatar.split('ipfs://'); - return splittedIpfsUrl.length === 2 - ? AVATAR_IPFS_URL_PREFIX.concat(splittedIpfsUrl[1]) - : avatar; + const imageUrl = + splittedIpfsUrl.length === 2 + ? AVATAR_IPFS_URL_PREFIX.concat( + splittedIpfsUrl[1], + ) + : avatar; + if (isImageLoadable(imageUrl)) { + return imageUrl; + } } } const address = await provider.resolveName(ensName); From bbae67861c0f57ddd789c644bff0c7042d8d39e1 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Thu, 11 Jul 2024 13:39:30 +0530 Subject: [PATCH 09/22] replaced XMLHttpRequest with axios --- .../messenger-widget/src/utils/ens-utils.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/messenger-widget/src/utils/ens-utils.ts b/packages/messenger-widget/src/utils/ens-utils.ts index 897661f84..e6d795535 100644 --- a/packages/messenger-widget/src/utils/ens-utils.ts +++ b/packages/messenger-widget/src/utils/ens-utils.ts @@ -10,15 +10,12 @@ import { getEtherscanUrl, } from './common-utils'; import { RightViewSelected } from './enum-type-utils'; +import axios from 'axios'; -const isImageLoadable = (url: string) => { +const isImageLoadable = async (url: string): Promise => { try { - const request = new XMLHttpRequest(); - request.open('GET', url, true); - request.send(); - request.onload = function () { - return request.status == 200 ? true : false; - }; + const { status } = await axios.get(url); + return status === 200; } catch (error) { console.log('error in loading image : ', error); return false; @@ -49,6 +46,13 @@ export const getAvatarProfilePic = async ( .getText('avatar') .catch(() => null); if (avatar) { + /** + * If the image URL is of IPFS, then it can't be directly loaded by + * the browser, so trim the URL and create a proper IPFS url so that + * image can be rendered. Example :- + * Original URL fetched : ipfs://QmQqzMTavQgT4f4T5v6PWBp7XNKtoPmC9jvn12WPT3gkSE (not loadable in browser) + * Modified URL : https://ipfs.euc.li/ipfs/QmQqzMTavQgT4f4T5v6PWBp7XNKtoPmC9jvn12WPT3gkSE (loadable in browser) + */ const splittedIpfsUrl = avatar.split('ipfs://'); const imageUrl = splittedIpfsUrl.length === 2 @@ -56,7 +60,7 @@ export const getAvatarProfilePic = async ( splittedIpfsUrl[1], ) : avatar; - if (isImageLoadable(imageUrl)) { + if (await isImageLoadable(imageUrl)) { return imageUrl; } } From 408ae7598a25406f8d8ce2abe86443a37db89761 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Fri, 12 Jul 2024 15:45:00 +0530 Subject: [PATCH 10/22] removed react package from messenger-web due to conflicting version --- packages/messenger-web/package.json | 1 - yarn.lock | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/messenger-web/package.json b/packages/messenger-web/package.json index 55fceb933..904c3d003 100644 --- a/packages/messenger-web/package.json +++ b/packages/messenger-web/package.json @@ -17,7 +17,6 @@ "cors": "^2.8.5", "express": "^4.18.2", "postcss": "^8.4.24", - "react": "^18.3.1", "react-dom": "^18.2.0", "typescript": "^4.7.3", "web-vitals": "^2.1.4" diff --git a/yarn.lock b/yarn.lock index a5cedae86..ce9874a41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2384,7 +2384,6 @@ __metadata: path-browserify: ^1.0.1 postcss: ^8.4.24 process: ^0.11.10 - react: ^18.3.1 react-app-rewired: ^2.2.1 react-dom: ^18.2.0 stream-browserify: ^3.0.0 @@ -27215,7 +27214,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^18, react@npm:^18.3.1": +"react@npm:^18": version: 18.3.1 resolution: "react@npm:18.3.1" dependencies: From 4d127a9a96c3e53889dc7d71d9b9dadb7ddeb4b5 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 12 Jul 2024 12:56:41 +0200 Subject: [PATCH 11/22] use messageId input instead of sha256 --- .../storage/postgres/haltedMessage/clearHaltedMessage.ts | 1 + packages/backend/src/storage.ts | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/persistence/storage/postgres/haltedMessage/clearHaltedMessage.ts b/packages/backend/src/persistence/storage/postgres/haltedMessage/clearHaltedMessage.ts index 60d15ded4..1abf02eb5 100644 --- a/packages/backend/src/persistence/storage/postgres/haltedMessage/clearHaltedMessage.ts +++ b/packages/backend/src/persistence/storage/postgres/haltedMessage/clearHaltedMessage.ts @@ -25,6 +25,7 @@ export const clearHaltedMessage = const message = await db.encryptedMessage.findFirst({ where: { id: messageId, + ownerId: account.id, }, }); diff --git a/packages/backend/src/storage.ts b/packages/backend/src/storage.ts index 00288534d..8823b727e 100644 --- a/packages/backend/src/storage.ts +++ b/packages/backend/src/storage.ts @@ -281,11 +281,10 @@ export default ( const ensName = normalizeEnsName(req.params.ensName); //Since the message is fully encrypted, we cannot use the messageHash as an identifier. //Instead we use the hash of the ensName and the messageId to have a unique identifier - const uniqueMessageId = sha256(ensName + messageId); console.log( 'clearHaltedMessage uniqueMessageId ', - uniqueMessageId, + messageId, ensName, messageId, ); @@ -294,7 +293,7 @@ export default ( ensName, //If the aliasName is not provided, we use the ensName as the client has no intention to use an alias aliasName, - uniqueMessageId, + messageId, ); if (success) { From 1a319e2b179cf016cbf855c384a75bfd3cac2a52 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 12 Jul 2024 15:11:32 +0200 Subject: [PATCH 12/22] clean up --- .../src/hooks/haltDelivery/useHaltDelivery.ts | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.ts b/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.ts index f215e0322..17e8f88f4 100644 --- a/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.ts +++ b/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.ts @@ -1,15 +1,15 @@ -import { useContext, useEffect } from 'react'; -import { StorageContext } from '../../context/StorageContext'; -import { TLDContext } from '../../context/TLDContext'; +import { encryptAsymmetric } from '@dm3-org/dm3-lib-crypto'; +import { buildEnvelop } from '@dm3-org/dm3-lib-messaging'; import { Account, DeliveryServiceProfile, getUserProfile, } from '@dm3-org/dm3-lib-profile'; -import { MainnetProviderContext } from '../../context/ProviderContext'; -import { DispatchableEnvelop, buildEnvelop } from '@dm3-org/dm3-lib-messaging'; -import { encryptAsymmetric } from '@dm3-org/dm3-lib-crypto'; +import { useContext, useEffect } from 'react'; import { AuthContext } from '../../context/AuthContext'; +import { MainnetProviderContext } from '../../context/ProviderContext'; +import { StorageContext } from '../../context/StorageContext'; +import { TLDContext } from '../../context/TLDContext'; import { fetchDsProfiles } from '../../utils/deliveryService/fetchDsProfiles'; import { submitEnvelopsToReceiversDs } from '../../utils/deliveryService/submitEnvelopsToReceiversDs'; @@ -47,8 +47,6 @@ export const useHaltDelivery = () => { })), ); - console.log('resolvedAliases', resolvedAliases); - //For each recipient, get the users account const withAccounts = await Promise.all( resolvedAliases.map( @@ -82,12 +80,7 @@ export const useHaltDelivery = () => { return { ...dm3User, messages }; }); - console.log('haltedMessages', dm3UsersWithMessages); - - console.log('withUserProfiles', withAccounts); - console.log('dm3Users', dm3Users); //fetch the ds profiles of every recipient - const withDsProfile = await Promise.all( dm3UsersWithMessages.map(async (dm3User) => ({ ...dm3User, @@ -109,7 +102,7 @@ export const useHaltDelivery = () => { async ( dsProfile: DeliveryServiceProfile, ) => { - //build the dispatchable envelop + //build the dispatchable envelop containing the deliveryInformation of the receiver const dispatchableEnvelop = await buildEnvelop( message.envelop.message, @@ -130,6 +123,10 @@ export const useHaltDelivery = () => { }, ); return { + //To clear the envelop that has been used to store the halted message + haltedEnvelopId: + message.envelop.metadata + ?.encryptedMessageHash!, ...dispatchableEnvelop, //we keep the alias name for the receiver. In case it differes from the ensName aliasName: @@ -146,18 +143,11 @@ export const useHaltDelivery = () => { //The envelops are now ready to be disptched const dispatchableEnvelops = envelops.flat(2); - console.log('flat dispatchableenvelops', dispatchableEnvelops); - await submitEnvelopsToReceiversDs(dispatchableEnvelops); dispatchableEnvelops.map((envelop) => { - clearHaltedMessages( - envelop.envelop.metadata?.encryptedMessageHash!, - envelop.aliasName, - ); + clearHaltedMessages(envelop.haltedEnvelopId, envelop.aliasName); }); - - //Clear messages after they have been dispatched }; handleHaltedMessages(); From 39ba931f337aab1b25d513719f9205c123d21e79 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 12 Jul 2024 15:23:11 +0200 Subject: [PATCH 13/22] clean up tests --- .../lib/storage/src/migrate-storage.test.ts | 166 ------------------ .../haltDelivery/useHaltDelivery.test.tsx | 1 + 2 files changed, 1 insertion(+), 166 deletions(-) delete mode 100644 packages/lib/storage/src/migrate-storage.test.ts diff --git a/packages/lib/storage/src/migrate-storage.test.ts b/packages/lib/storage/src/migrate-storage.test.ts deleted file mode 100644 index a7762b081..000000000 --- a/packages/lib/storage/src/migrate-storage.test.ts +++ /dev/null @@ -1,166 +0,0 @@ -import { - createStorageKey, - getStorageKeyCreationMessage, -} from '@dm3-org/dm3-lib-crypto'; -import { createProfileKeys } from '@dm3-org/dm3-lib-profile'; -import { ethers } from 'ethers'; -import { StorageEnvelopContainer } from './new/types'; -import { Message, Envelop, MessageState } from '@dm3-org/dm3-lib-messaging'; -import { StorageAPI } from '../dist'; -import { Conversation } from './new/types'; -import { migrageStorage } from './new/migrateStorage'; -import { createDB } from './Storage'; - -const USER_1 = 'alice.eth'; -const USER_2 = 'bob.eth'; - -const getMockProfileKeys = async () => { - const nonce = '0'; - const wallet = new ethers.Wallet( - '0xac58f2f021d6f148fd621b355edbd0ebadcf9682019015ef1219cf9c0c2ddc8b', - ); - - const nonceMsg = getStorageKeyCreationMessage(nonce, wallet.address); - const signedMessage = await wallet.signMessage(nonceMsg); - - return await createProfileKeys( - await createStorageKey(signedMessage), - nonce, - ); -}; -const getStorageEnvelopeContainer = (msg: string, timestamp: number = 0) => { - const message: Message = { - metadata: { - to: '', - from: USER_1, - timestamp, - type: 'NEW', - }, - message: msg, - signature: '', - }; - - const envelop: Envelop = { - message, - metadata: { - deliveryInformation: { - from: '', - to: '', - deliveryInstruction: '', - }, - encryptedMessageHash: '', - version: '', - encryptionScheme: '', - signature: '', - }, - }; - - return { - messageState: MessageState.Created, - envelop: envelop, - deliveryServiceIncommingTimestamp: 123, - } as StorageEnvelopContainer; -}; -describe('MigrateStorage', () => { - let newStorage: StorageAPI; - - beforeEach(() => { - //Mock newStorage - newStorage = (() => { - const conversations = new Map(); - - return { - getConversations: async (page: number) => - Array.from(conversations.keys()).map((contactEnsName) => ({ - contactEnsName, - isHidden: false, - previewMessage: undefined, - })), - getMessages: async (contactEnsName: string, page: number) => [], - addMessageBatch: async ( - contactEnsName: string, - batch: StorageEnvelopContainer[], - ) => { - conversations.set(contactEnsName, [ - ...(conversations.get(contactEnsName) ?? []), - ...batch, - ]); - return ''; - }, - editMessageBatch: async ( - contactEnsName: string, - editedMessage: StorageEnvelopContainer[], - ) => {}, - getNumberOfMessages: async (contactEnsName: string) => 0, - getNumberOfConverations: async () => 0, - addConversation: async (contactEnsName: string) => { - conversations.set(contactEnsName, []); - }, - addMessage: async ( - contactEnsName: string, - envelop: StorageEnvelopContainer, - ) => '', - toggleHideConversation: async ( - contactEnsName: string, - isHidden: boolean, - ) => {}, - }; - })(); - }); - it('should migrate storage', async () => { - const profileKeys = await getMockProfileKeys(); - const db = createDB(profileKeys); - db.conversations.set(USER_1, [ - getStorageEnvelopeContainer('hello', 1), - getStorageEnvelopeContainer('dm3', 2), - ]); - db.conversations.set(USER_2, [ - getStorageEnvelopeContainer('123', 1), - getStorageEnvelopeContainer('456', 2), - ]); - - const tldResolver = async (ensName: string) => { - return ensName.replace('.eth', '.addr.user.dm3.eth'); - }; - - await migrageStorage(db, newStorage, tldResolver); - - const newConversations = await newStorage.getConversations(100, 0); - 0.45; - expect(newConversations.length).toBe(2); - expect(newConversations[0].contactEnsName).toBe( - 'alice.addr.user.dm3.eth', - ); - expect(newConversations[1].contactEnsName).toBe( - 'bob.addr.user.dm3.eth', - ); - }); - it('resolve tld names', async () => { - const profileKeys = await getMockProfileKeys(); - const db = createDB(profileKeys); - db.conversations.set(USER_1, [ - getStorageEnvelopeContainer('hello', 1), - getStorageEnvelopeContainer('dm3', 2), - ]); - db.conversations.set('foo.addr.user.dm3.gno', [ - getStorageEnvelopeContainer('123', 1), - getStorageEnvelopeContainer('456', 2), - ]); - - const tldResolver = async (ensName: string) => { - return ensName.replace('.eth', '.addr.user.dm3.eth'); - }; - - await migrageStorage(db, newStorage, tldResolver); - - const newConversations = await newStorage.getConversations(100, 0); - 0.45; - expect(newConversations.length).toBe(2); - expect(newConversations[0].contactEnsName).toBe( - 'alice.addr.user.dm3.eth', - ); - expect(newConversations[1].contactEnsName).toBe( - 'foo.addr.user.dm3.gno', - ); - }); -}); diff --git a/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.test.tsx b/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.test.tsx index 3a6767511..10f5defc1 100644 --- a/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.test.tsx +++ b/packages/messenger-widget/src/hooks/haltDelivery/useHaltDelivery.test.tsx @@ -85,6 +85,7 @@ describe('useConversation hook test cases', () => { }, addConversationAsync: jest.fn(), toggleHideContactAsync: jest.fn(), + getHaltedMessages: () => Promise.resolve([]), initialized: true, }); const deliveryServiceContext: DeliveryServiceContextType = From 1a0da75cf85f0d3dc27c1fa202a8e03153385c5b Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Fri, 12 Jul 2024 16:13:16 +0200 Subject: [PATCH 14/22] fix broken test --- packages/backend/src/storage.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/storage.test.ts b/packages/backend/src/storage.test.ts index 1e27b9d7d..acb4b8d2d 100644 --- a/packages/backend/src/storage.test.ts +++ b/packages/backend/src/storage.test.ts @@ -980,7 +980,7 @@ describe('Storage', () => { .send({ encryptedEnvelopContainer: JSON.stringify(envelop1), encryptedContactName: sha256(receiver.account.ensName), - messageId: '123', + messageId: envelop1.metadata.encryptedMessageHash, createdAt: 1, isHalted: true, }); @@ -1007,7 +1007,7 @@ describe('Storage', () => { authorization: 'Bearer ' + token, }) .send({ - messageId: 123, + messageId: messages[0].messageId, }); expect(deleteStatus).toBe(200); From b3dc03d65f2703ec8f962ef4a67f31a30b6dcda1 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Mon, 15 Jul 2024 09:48:37 +0200 Subject: [PATCH 15/22] remove console.log from storage test --- packages/backend/src/storage.test.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/backend/src/storage.test.ts b/packages/backend/src/storage.test.ts index acb4b8d2d..5f99e60ab 100644 --- a/packages/backend/src/storage.test.ts +++ b/packages/backend/src/storage.test.ts @@ -490,8 +490,6 @@ describe('Storage', () => { }) .send(); - console.log(body); - expect(body.length).toBe(1); expect(body[0].contact).toEqual(sha256(receiver.account.ensName)); expect(JSON.parse(body[0].previewMessage)).toEqual(envelop3); @@ -508,8 +506,6 @@ describe('Storage', () => { }) .send(); - console.log(body); - expect(status).toBe(400); }); @@ -522,8 +518,6 @@ describe('Storage', () => { }) .send(); - console.log(body); - expect(status).toBe(400); }); }); @@ -1162,9 +1156,6 @@ describe('Storage', () => { isHalted: false, }); - console.log('xxxx', x.status); - console.log('xxxx', x.body); - await request(app) .post(`/new/bob.eth/addMessage`) .set({ From f79413fdc99bfeafd345162a83d3b73c43c0283e Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Mon, 15 Jul 2024 09:51:10 +0200 Subject: [PATCH 16/22] remove console.log from storage --- packages/backend/src/storage.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/backend/src/storage.ts b/packages/backend/src/storage.ts index 8823b727e..2c4a122d5 100644 --- a/packages/backend/src/storage.ts +++ b/packages/backend/src/storage.ts @@ -279,15 +279,6 @@ export default ( } const ensName = normalizeEnsName(req.params.ensName); - //Since the message is fully encrypted, we cannot use the messageHash as an identifier. - //Instead we use the hash of the ensName and the messageId to have a unique identifier - - console.log( - 'clearHaltedMessage uniqueMessageId ', - messageId, - ensName, - messageId, - ); const success = await db.clearHaltedMessage( ensName, From 2545d160be22884631a84b8fd4f6d498e6cf038e Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Mon, 15 Jul 2024 09:52:56 +0200 Subject: [PATCH 17/22] clena up getCloudStorage --- packages/lib/storage/src/new/cloudStorage/getCloudStorage.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/lib/storage/src/new/cloudStorage/getCloudStorage.ts b/packages/lib/storage/src/new/cloudStorage/getCloudStorage.ts index c4b4c435b..8ef0b388b 100644 --- a/packages/lib/storage/src/new/cloudStorage/getCloudStorage.ts +++ b/packages/lib/storage/src/new/cloudStorage/getCloudStorage.ts @@ -79,10 +79,6 @@ export const getCloudStorage = ( const decryptedEnvelopContainer = await encryption.decryptAsync( message.encryptedEnvelopContainer, ); - console.log( - 'decryptedEnvelopContainer haltedMessages', - decryptedEnvelopContainer, - ); return JSON.parse(decryptedEnvelopContainer); }), From 6f3566901b5b7c6a445638cb26c19cd41f9bff01 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Mon, 15 Jul 2024 13:23:58 +0530 Subject: [PATCH 18/22] fixed messenger-web issue --- packages/messenger-demo/package.json | 1 + yarn.lock | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/messenger-demo/package.json b/packages/messenger-demo/package.json index 6f0f391e0..668c3ffdf 100644 --- a/packages/messenger-demo/package.json +++ b/packages/messenger-demo/package.json @@ -16,6 +16,7 @@ "bootstrap": "^5.1.3", "express": "^4.18.2", "postcss": "^8.4.24", + "react": "^18.3.1", "react-dom": "^18.2.0", "typescript": "^4.7.3", "web-vitals": "^2.1.4" diff --git a/yarn.lock b/yarn.lock index ce9874a41..97c19a8dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2344,6 +2344,7 @@ __metadata: path-browserify: ^1.0.1 postcss: ^8.4.24 process: ^0.11.10 + react: ^18.3.1 react-app-rewired: ^2.2.1 react-dom: ^18.2.0 stream-browserify: ^3.0.0 @@ -27214,7 +27215,7 @@ __metadata: languageName: node linkType: hard -"react@npm:^18": +"react@npm:^18, react@npm:^18.3.1": version: 18.3.1 resolution: "react@npm:18.3.1" dependencies: From 802882f8b19667c17cd4f14971563342b97189e5 Mon Sep 17 00:00:00 2001 From: AlexNi245 Date: Mon, 15 Jul 2024 10:12:26 +0200 Subject: [PATCH 19/22] optimize imports --- .../hooks/conversation/useConversation.test.tsx | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/packages/messenger-widget/src/hooks/conversation/useConversation.test.tsx b/packages/messenger-widget/src/hooks/conversation/useConversation.test.tsx index 50d0ee4ef..9fc82a286 100644 --- a/packages/messenger-widget/src/hooks/conversation/useConversation.test.tsx +++ b/packages/messenger-widget/src/hooks/conversation/useConversation.test.tsx @@ -38,22 +38,6 @@ import { getMockedStorageContext } from '../../context/testHelper/getMockedStora import { getMockedTldContext } from '../../context/testHelper/getMockedTldContext'; import { DM3Configuration } from '../../widget'; import { useConversation } from './useConversation'; -import { - MainnetProviderContext, - MainnetProviderContextType, -} from '../../context/ProviderContext'; -import { getMockedMainnetProviderContext } from '../../context/testHelper/getMockedMainnetProviderContext'; -import { ethers } from 'ethers'; -import { - MockDeliveryServiceProfile, - MockedUserProfile, - getMockDeliveryServiceProfile, - mockUserProfile, -} from '@dm3-org/dm3-lib-test-helper'; -import MockAdapter from 'axios-mock-adapter'; -import axios from 'axios'; -import { Envelop } from '@dm3-org/dm3-lib-messaging'; -import { getDeliveryServiceProfile } from '@dm3-org/dm3-lib-profile'; describe('useConversation hook test cases', () => { let sender: MockedUserProfile; From 038236a731f465874e27b00369c7808c7a5c1cc3 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Mon, 15 Jul 2024 14:21:06 +0530 Subject: [PATCH 20/22] added peer dependecy to msg-web to automatically handle version --- packages/messenger-web/package.json | 4 ++++ packages/messenger-widget/src/version.ts | 2 +- yarn.lock | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/messenger-web/package.json b/packages/messenger-web/package.json index 904c3d003..33ab159f6 100644 --- a/packages/messenger-web/package.json +++ b/packages/messenger-web/package.json @@ -21,6 +21,10 @@ "typescript": "^4.7.3", "web-vitals": "^2.1.4" }, + "peerDependencies": { + "react": "^16.8.0", + "react": "^18.3.1" + }, "scripts": { "start:dev": "react-app-rewired start", "start": "node server.js", diff --git a/packages/messenger-widget/src/version.ts b/packages/messenger-widget/src/version.ts index 68549e134..69eea79a3 100644 --- a/packages/messenger-widget/src/version.ts +++ b/packages/messenger-widget/src/version.ts @@ -1 +1 @@ -export const version = '1.4.3'; +export const version = "1.4.3"; diff --git a/yarn.lock b/yarn.lock index 97c19a8dc..5c84bb47f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2393,6 +2393,8 @@ __metadata: url: ^0.11.0 web-vitals: ^2.1.4 yarn: ^1.22.19 + peerDependencies: + react: ^18.3.1 languageName: unknown linkType: soft From 49d96bc20702eafacac7cb12c07e5009ee2e1ec2 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Mon, 15 Jul 2024 14:31:01 +0530 Subject: [PATCH 21/22] prettified --- packages/messenger-widget/src/version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/messenger-widget/src/version.ts b/packages/messenger-widget/src/version.ts index 69eea79a3..68549e134 100644 --- a/packages/messenger-widget/src/version.ts +++ b/packages/messenger-widget/src/version.ts @@ -1 +1 @@ -export const version = "1.4.3"; +export const version = '1.4.3'; From a4bb539a3351d518c0e360649e8990a018977a82 Mon Sep 17 00:00:00 2001 From: Bhupesh-MS Date: Mon, 15 Jul 2024 15:09:08 +0530 Subject: [PATCH 22/22] reverted back to old messenger-web --- packages/messenger-web/package.json | 5 +---- yarn.lock | 3 +-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/messenger-web/package.json b/packages/messenger-web/package.json index 33ab159f6..55fceb933 100644 --- a/packages/messenger-web/package.json +++ b/packages/messenger-web/package.json @@ -17,14 +17,11 @@ "cors": "^2.8.5", "express": "^4.18.2", "postcss": "^8.4.24", + "react": "^18.3.1", "react-dom": "^18.2.0", "typescript": "^4.7.3", "web-vitals": "^2.1.4" }, - "peerDependencies": { - "react": "^16.8.0", - "react": "^18.3.1" - }, "scripts": { "start:dev": "react-app-rewired start", "start": "node server.js", diff --git a/yarn.lock b/yarn.lock index 5c84bb47f..459315227 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2385,6 +2385,7 @@ __metadata: path-browserify: ^1.0.1 postcss: ^8.4.24 process: ^0.11.10 + react: ^18.3.1 react-app-rewired: ^2.2.1 react-dom: ^18.2.0 stream-browserify: ^3.0.0 @@ -2393,8 +2394,6 @@ __metadata: url: ^0.11.0 web-vitals: ^2.1.4 yarn: ^1.22.19 - peerDependencies: - react: ^18.3.1 languageName: unknown linkType: soft