Some stability improvements and attempt at mitigating multiple instanciation of Services
This commit is contained in:
parent
0918185ad9
commit
86bfc447a8
33
src/index.ts
33
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);
|
||||
}
|
||||
|
@ -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<void> {
|
||||
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<void> {
|
||||
@ -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<void> {
|
||||
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) {
|
||||
|
@ -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':
|
||||
|
Loading…
x
Reference in New Issue
Block a user