From 86bfc447a81e58857b4ffecbaac5581670397af8 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Sat, 12 Oct 2024 23:18:52 +0200 Subject: [PATCH] Some stability improvements and attempt at mitigating multiple instanciation of Services --- src/index.ts | 33 +++++++++-------- src/services/service.ts | 81 +++++++++++++++++------------------------ src/websockets.ts | 15 +------- 3 files changed, 54 insertions(+), 75 deletions(-) diff --git a/src/index.ts b/src/index.ts index 5f7b2de..e44778d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,23 +4,26 @@ document.addEventListener('DOMContentLoaded', async () => { try { const services = await Services.getInstance(); - let device = await services.getDevice() + setTimeout( async () => { + let device = await services.getDevice() - if(!device) { - device = await services.createNewDevice(); - } else { - await services.restoreDevice(device) - } - await services.recoverInjectHtml(); - await services.restoreProcesses(); - await services.restoreMessages(); + if(!device) { + device = await services.createNewDevice(); + } else { + await services.restoreDevice(device) + } + await services.restoreProcesses(); + await services.restoreMessages(); - const queryString = window.location.search; - const urlParams = new URLSearchParams(queryString) - const pairingAddress = urlParams.get('sp_address') - if(pairingAddress) { - await services.sendPairingTx(pairingAddress) - } + // const queryString = window.location.search; + // const urlParams = new URLSearchParams(queryString) + // const pairingAddress = urlParams.get('sp_address') + + // if(pairingAddress) { + // await services.sendPairingTx(pairingAddress) + // } + + }, 500); } catch (error) { console.error(error); } diff --git a/src/services/service.ts b/src/services/service.ts index 1702697..eba4803 100644 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -46,6 +46,7 @@ export default class Services { })(); } + console.log('initializing services'); Services.instance = await Services.initializing; Services.initializing = null; // Reset for potential future use return Services.instance; @@ -54,7 +55,9 @@ export default class Services { public async init(): Promise { this.notifications = this.getNotifications(); this.sdkClient = await import("../../dist/pkg/sdk_client"); + this.sdkClient.setup(); await this.addWebsocketConnection(wsurl); + await this.recoverInjectHtml(); } public async addWebsocketConnection(url: string): Promise { @@ -85,9 +88,6 @@ export default class Services { if(btn) { this.addSubscription(btn, 'click', 'injectProcessListPage') } - const localAddress = await this.getDeviceAddress(); - - this.generateQRCode(localAddress || '') } private generateQRCode = async (text: string) => { @@ -134,8 +134,7 @@ export default class Services { } - const service = await Services.getInstance(); - const apiReturn = await service.sdkClient.create_update_transaction(undefined, JSON.stringify(paringTemplate), 1) + const apiReturn = await this.sdkClient.create_update_transaction(undefined, JSON.stringify(paringTemplate), 1) return apiReturn } @@ -161,37 +160,32 @@ export default class Services { } async resetDevice() { - const service = await Services.getInstance() - await service.sdkClient.reset_device() + await this.sdkClient.reset_device() } async sendNewTxMessage(message: string) { - const services = await Services.getInstance(); - if (!services.websocketConnection) { + if (!this.websocketConnection) { throw new Error('No websocket connection'); } // console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ newTxMessage:", message) - await services.websocketConnection.sendMessage('NewTx', message) + await this.websocketConnection.sendMessage('NewTx', message) } async sendCommitMessage(message: string) { - const services = await Services.getInstance(); // console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ CommitMessage:", message) - await services.websocketConnection?.sendMessage('Commit', message) + await this.websocketConnection?.sendMessage('Commit', message) } async sendCipherMessages(ciphers: string[]) { - const services = await Services.getInstance(); for (let i = 0; i < ciphers.length; i++) { const cipher = ciphers[i]; - await services.websocketConnection?.sendMessage('Cipher', cipher); + await this.websocketConnection?.sendMessage('Cipher', cipher); } } async sendFaucetMessage(message: string): Promise { - const services = await Services.getInstance(); // console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ faucetMessage:", message) - await services.websocketConnection?.sendMessage('Faucet', message); + await this.websocketConnection?.sendMessage('Faucet', message); } async parseCipher(message: string) { @@ -217,14 +211,13 @@ export default class Services { async parseNewTx(tx: string) { try { // console.log('==============> sending txxxxxxx parser', tx) - const services = await Services.getInstance(); - const parsedTx = await services.sdkClient.parse_new_tx(tx, 0, 0.01) + const parsedTx = await this.sdkClient.parse_new_tx(tx, 0, 0.01) if(parsedTx) { console.log("🚀 ~ Services ~ parseNewTx ~ parsedTx:", parsedTx) try { await this.handleApiReturn(parsedTx); const newDevice = await this.dumpDevice(); - await services.saveDevice(newDevice); + await this.saveDevice(newDevice); } catch (e) { console.error("Failed to update device with new tx"); } @@ -328,22 +321,19 @@ export default class Services { // } async getAmount() { - const services = await Services.getInstance(); - const amount = await services.sdkClient.get_available_amount() + const amount = await this.sdkClient.get_available_amount() console.log("🚀 ~ Services ~ getAmount ~ amount:", amount) return amount } async getDeviceAddress() { - const services = await Services.getInstance(); - const address = await services.sdkClient.get_address() + const address = await this.sdkClient.get_address() console.log("🚀 ~ Services ~ getDeviceAddress ~ address:", address) return address } async dumpDevice() { - const services = await Services.getInstance(); - const device = await services.sdkClient.dump_device() + const device = await this.sdkClient.dump_device() // console.log("🚀 ~ Services ~ dumpDevice ~ device:", device) return device } @@ -358,15 +348,13 @@ export default class Services { } async dumpWallet() { - const services = await Services.getInstance(); - const wallet = await services.sdkClient.dump_wallet() + const wallet = await this.sdkClient.dump_wallet() console.log("🚀 ~ Services ~ dumpWallet ~ wallet:", wallet) return wallet } async createFaucetMessage() { - const services = await Services.getInstance() - const message = await services.sdkClient.create_faucet_msg() + const message = await this.sdkClient.create_faucet_msg() console.log("🚀 ~ Services ~ createFaucetMessage ~ message:", message) return message; } @@ -377,26 +365,29 @@ export default class Services { } async createNewDevice() { - const service = await Services.getInstance(); let spAddress = ''; try { - spAddress = await service.sdkClient.create_new_device(0, 'regtest') - const device = await service.dumpDevice() + spAddress = await this.sdkClient.create_new_device(0, 'regtest') + const device = await this.dumpDevice() console.log("🚀 ~ Services ~ device:", device) - await service.saveDevice(device) + await this.saveDevice(device) } catch (e) { console.error("Services ~ Error:", e); } + + this.generateQRCode(spAddress || '') return spAddress; } async restoreDevice(device: string) { - const services = await Services.getInstance(); - // const sp_wallet = JSON.parse(address)?.sp_wallet - console.log("🚀 ~ Services ~ restoreDevice ~ services?.sdkClient:", device) - const res = await services?.sdkClient?.restore_device(device) - console.log("🚀 ~ Services ~ restoreDevice ~ res:", res) + try { + await this.sdkClient.restore_device(device) + const spAddress = this.sdkClient.get_address(); + this.generateQRCode(spAddress || '') + } catch (e) { + console.error(e); + } } private getProcessesCache(): ProcessesCache { @@ -467,9 +458,8 @@ export default class Services { return; } - const services = await Services.getInstance(); try { - await services.sdkClient.set_process_cache(JSON.stringify(processesCache)); + await this.sdkClient.set_process_cache(JSON.stringify(processesCache)); } catch (e) { console.error('Services ~ restoreProcesses ~ Error:', e); } @@ -484,9 +474,8 @@ export default class Services { return; } - const services = await Services.getInstance(); try { - await services.sdkClient.set_message_cache(JSON.stringify(cachedMessages)); + await this.sdkClient.set_message_cache(JSON.stringify(cachedMessages)); } catch (e) { console.error('Services ~ restoreMessages ~ Error:', e); } @@ -511,7 +500,6 @@ export default class Services { this.cleanSubsciptions() - const services = await Services.getInstance(); // const user = services.sdkClient.create_user('Test', 'test', 10, 1, 'Messaging') // console.log("🚀 ~ Services ~ injectProcessListPage ~ user:", user) @@ -523,9 +511,9 @@ export default class Services { newScript.textContent = processScript; document.head.appendChild(newScript).parentNode?.removeChild(newScript); - this.processes = await services.getProcesses(); + this.processes = await this.getProcesses(); if(this.processes) { - services.setProcessesInSelectElement(this.processes) + this.setProcessesInSelectElement(this.processes) } } @@ -566,9 +554,8 @@ export default class Services { if(elem) { const cardContent = document.querySelector(".card-content"); - const services = await Services.getInstance(); - const processes = await services.getProcesses(); + const processes = await this.getProcesses(); console.log("🚀 ~ Services ~ showSelectedProcess ~ processes:", processes) const process = processes.find((process: any) => process.name === (elem as any).dataset.value); if (process) { diff --git a/src/websockets.ts b/src/websockets.ts index 884741c..d1b45f2 100644 --- a/src/websockets.ts +++ b/src/websockets.ts @@ -13,15 +13,6 @@ class WebSocketClient { if(this.ws !== null) { this.ws.onopen = async (event) => { console.log('WebSocket connection established'); - // Once the connection is open, send all messages in the queue - // this.sendNormalMessage(faucetMessage) - const service = await Services.getInstance(); - const amount = await service.getAmount() as bigint - - if(amount === 0n) { - const faucetMessage = await services.createFaucetMessage() - this.sendNormalMessage(faucetMessage) - } while (this.messageQueue.length > 0) { const message = this.messageQueue.shift(); @@ -35,15 +26,13 @@ class WebSocketClient { this.ws.onmessage = (event) => { const msgData = event.data; - console.log("Received text message: ", msgData); + // console.log("Received text message: ", msgData); (async () => { - const services = await Services.getInstance() - if (typeof msgData === 'string') { try { const feeRate = 0.0001; const parsedMessage = JSON.parse(msgData) - console.log("🚀 ~ WebSocketClient ~ parsedMessage:", parsedMessage) + // console.log("🚀 ~ WebSocketClient ~ parsedMessage:", parsedMessage) const services = await Services.getInstance() switch(parsedMessage.flag) { case 'NewTx':