From 3ecbe0da2494d702cde1174d85fa71b2e3ae9db5 Mon Sep 17 00:00:00 2001 From: Pascal Date: Wed, 8 Jan 2025 14:27:49 +0100 Subject: [PATCH] implement_message_in_code_only --- src/pages/chat/chat.ts | 126 ++++++++++++++++++++++++++++++++--------- 1 file changed, 100 insertions(+), 26 deletions(-) diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index 724c8ce..407f170 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -9,21 +9,21 @@ declare global { import { groupsMock } from '../../mocks/mock-signature/groupsMock'; import { messagesMock as initialMessagesMock, messagesMock } from '../../mocks/mock-signature/messagesMock'; import { membersMock } from '../../mocks/mock-signature/membersMocks'; +import { ApiReturn, Device, Member } from '../../../pkg/sdk_client'; import { Message, DocumentSignature, } from '../../models/signature.models'; import { messageStore } from '../../utils/messageMock'; -import { Member } from '../../interface/memberInterface'; import { Group } from '../../interface/groupInterface'; import { getCorrectDOM } from '../../utils/document.utils'; import chatStyle from '../../../public/style/chat.css?inline'; import { addressToEmoji } from '../../utils/sp-address.utils'; +import Database from '../../services/database.service'; +const storageUrl = `/storage`; -let currentUser: Member = membersMock[0]; - interface LocalNotification { memberId: string; text: string; @@ -44,6 +44,7 @@ class ChatElement extends HTMLElement { return ['process-id']; } + private sdkClient: any; private processId: string | null = null; private selectedMemberId: string | null = null; private messagesMock: any[] = []; @@ -107,7 +108,6 @@ class ChatElement extends HTMLElement { `; window.toggleUserList = this.toggleUserList.bind(this); - window.switchUser = this.switchUser.bind(this); window.loadMemberChat = this.loadMemberChat.bind(this); // Initialiser les événements de notification @@ -217,6 +217,102 @@ class ChatElement extends HTMLElement { this.updateNotificationBadge(); } + public isPaired(): boolean { + try { + return this.sdkClient.is_paired(); + } catch (e) { + throw new Error(`isPaired ~ Error: ${e}`); + } + } + + public async createMessagingProcess(otherMembers: Member[],relayAddress: string, feeRate: number): Promise { + if (!this.isPaired()) { + throw new Error('Device not paired'); + } + const me = await this.getMemberFromDevice(); + if (!me) { + throw new Error('No paired member in device'); + } + const allMembers: Member[] = otherMembers; + allMembers.push({ sp_addresses: me }); + const meAndOne = [{ sp_addresses: me }, otherMembers.pop()!]; + const everyOneElse = otherMembers; + const messagingTemplate = { + description: 'messaging', + roles: { + public: { + members: allMembers, + validation_rules: [ + { + quorum: 0.0, + fields: ['description', 'roles'], + min_sig_member: 0.0, + }, + ], + storages: [storageUrl] + }, + owner: { + members: meAndOne, + validation_rules: [ + { + quorum: 1.0, + fields: ['description', 'roles'], + min_sig_member: 1.0, + }, + ], + storages: [storageUrl] + }, + users: { + members: everyOneElse, + validation_rules: [ + { + quorum: 0.0, + fields: ['description', 'roles'], + min_sig_member: 0.0, + }, + ], + storages: [storageUrl] + }, + }, + }; + try { + return this.sdkClient.create_new_process(JSON.stringify(messagingTemplate), null, relayAddress, feeRate); + } catch (e) { + throw new Error(`Creating process failed: ${e}`); + } + } + + async getMemberFromDevice(): Promise { + try { + const device = await this.getDeviceFromDatabase(); + if (device) { + const parsed: Device = JSON.parse(device); + const pairedMember = parsed['paired_member']; + return pairedMember.sp_addresses; + } else { + return null; + } + } catch (e) { + throw new Error(`Failed to retrieve paired_member from device: ${e}`); + } + } + + async getDeviceFromDatabase(): Promise { + const db = await Database.getInstance(); + const walletStore = 'wallet'; + try { + const dbRes = await db.getObject(walletStore, '1'); + if (dbRes) { + const wallet = dbRes['device']; + return wallet; + } else { + return null; + } + } catch (e) { + throw new Error(`Failed to retrieve device from db: ${e}`); + } + } + // Send a messsage private sendMessage() { const messageInput = this.shadowRoot?.querySelector('#message-input') as HTMLInputElement; @@ -534,27 +630,6 @@ class ChatElement extends HTMLElement { (userList as HTMLElement).classList.toggle('show'); } - private switchUser(userId: string | number) { - const user = membersMock.find(member => member.id === userId); - if (!user) return; - currentUser = user; - this.updateCurrentUserDisplay(); - const userList = getCorrectDOM('userList') as HTMLElement; - userList?.classList.remove('show'); - } - - // Function to update the display of the current user - private updateCurrentUserDisplay() { - const userDisplay = getCorrectDOM('current-user') as HTMLElement; - if (userDisplay) { - userDisplay.innerHTML = ` - - `; - } - } // Generate an automatic response private generateAutoReply(senderName: string): Message { return { @@ -599,7 +674,6 @@ class ChatElement extends HTMLElement { } connectedCallback() { - this.updateCurrentUserDisplay(); if (this.processId) { console.log('🔍 Loading chat with process ID:', this.processId);