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 {
|
try {
|
||||||
|
|
||||||
const services = await Services.getInstance();
|
const services = await Services.getInstance();
|
||||||
let device = await services.getDevice()
|
setTimeout( async () => {
|
||||||
|
let device = await services.getDevice()
|
||||||
|
|
||||||
if(!device) {
|
if(!device) {
|
||||||
device = await services.createNewDevice();
|
device = await services.createNewDevice();
|
||||||
} else {
|
} else {
|
||||||
await services.restoreDevice(device)
|
await services.restoreDevice(device)
|
||||||
}
|
}
|
||||||
await services.recoverInjectHtml();
|
await services.restoreProcesses();
|
||||||
await services.restoreProcesses();
|
await services.restoreMessages();
|
||||||
await services.restoreMessages();
|
|
||||||
|
|
||||||
const queryString = window.location.search;
|
// const queryString = window.location.search;
|
||||||
const urlParams = new URLSearchParams(queryString)
|
// const urlParams = new URLSearchParams(queryString)
|
||||||
const pairingAddress = urlParams.get('sp_address')
|
// const pairingAddress = urlParams.get('sp_address')
|
||||||
if(pairingAddress) {
|
|
||||||
await services.sendPairingTx(pairingAddress)
|
// if(pairingAddress) {
|
||||||
}
|
// await services.sendPairingTx(pairingAddress)
|
||||||
|
// }
|
||||||
|
|
||||||
|
}, 500);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,7 @@ export default class Services {
|
|||||||
})();
|
})();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('initializing services');
|
||||||
Services.instance = await Services.initializing;
|
Services.instance = await Services.initializing;
|
||||||
Services.initializing = null; // Reset for potential future use
|
Services.initializing = null; // Reset for potential future use
|
||||||
return Services.instance;
|
return Services.instance;
|
||||||
@ -54,7 +55,9 @@ export default class Services {
|
|||||||
public async init(): Promise<void> {
|
public async init(): Promise<void> {
|
||||||
this.notifications = this.getNotifications();
|
this.notifications = this.getNotifications();
|
||||||
this.sdkClient = await import("../../dist/pkg/sdk_client");
|
this.sdkClient = await import("../../dist/pkg/sdk_client");
|
||||||
|
this.sdkClient.setup();
|
||||||
await this.addWebsocketConnection(wsurl);
|
await this.addWebsocketConnection(wsurl);
|
||||||
|
await this.recoverInjectHtml();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async addWebsocketConnection(url: string): Promise<void> {
|
public async addWebsocketConnection(url: string): Promise<void> {
|
||||||
@ -85,9 +88,6 @@ export default class Services {
|
|||||||
if(btn) {
|
if(btn) {
|
||||||
this.addSubscription(btn, 'click', 'injectProcessListPage')
|
this.addSubscription(btn, 'click', 'injectProcessListPage')
|
||||||
}
|
}
|
||||||
const localAddress = await this.getDeviceAddress();
|
|
||||||
|
|
||||||
this.generateQRCode(localAddress || '')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private generateQRCode = async (text: string) => {
|
private generateQRCode = async (text: string) => {
|
||||||
@ -134,8 +134,7 @@ export default class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const service = await Services.getInstance();
|
const apiReturn = await this.sdkClient.create_update_transaction(undefined, JSON.stringify(paringTemplate), 1)
|
||||||
const apiReturn = await service.sdkClient.create_update_transaction(undefined, JSON.stringify(paringTemplate), 1)
|
|
||||||
return apiReturn
|
return apiReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,37 +160,32 @@ export default class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async resetDevice() {
|
async resetDevice() {
|
||||||
const service = await Services.getInstance()
|
await this.sdkClient.reset_device()
|
||||||
await service.sdkClient.reset_device()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendNewTxMessage(message: string) {
|
async sendNewTxMessage(message: string) {
|
||||||
const services = await Services.getInstance();
|
if (!this.websocketConnection) {
|
||||||
if (!services.websocketConnection) {
|
|
||||||
throw new Error('No websocket connection');
|
throw new Error('No websocket connection');
|
||||||
}
|
}
|
||||||
// console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ newTxMessage:", message)
|
// console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ newTxMessage:", message)
|
||||||
await services.websocketConnection.sendMessage('NewTx', message)
|
await this.websocketConnection.sendMessage('NewTx', message)
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendCommitMessage(message: string) {
|
async sendCommitMessage(message: string) {
|
||||||
const services = await Services.getInstance();
|
|
||||||
// console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ CommitMessage:", message)
|
// console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ CommitMessage:", message)
|
||||||
await services.websocketConnection?.sendMessage('Commit', message)
|
await this.websocketConnection?.sendMessage('Commit', message)
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendCipherMessages(ciphers: string[]) {
|
async sendCipherMessages(ciphers: string[]) {
|
||||||
const services = await Services.getInstance();
|
|
||||||
for (let i = 0; i < ciphers.length; i++) {
|
for (let i = 0; i < ciphers.length; i++) {
|
||||||
const cipher = ciphers[i];
|
const cipher = ciphers[i];
|
||||||
await services.websocketConnection?.sendMessage('Cipher', cipher);
|
await this.websocketConnection?.sendMessage('Cipher', cipher);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async sendFaucetMessage(message: string): Promise<void> {
|
async sendFaucetMessage(message: string): Promise<void> {
|
||||||
const services = await Services.getInstance();
|
|
||||||
// console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ faucetMessage:", message)
|
// console.log("🚀 ~ WebSocketClient ~ this.ws.onopen= ~ faucetMessage:", message)
|
||||||
await services.websocketConnection?.sendMessage('Faucet', message);
|
await this.websocketConnection?.sendMessage('Faucet', message);
|
||||||
}
|
}
|
||||||
|
|
||||||
async parseCipher(message: string) {
|
async parseCipher(message: string) {
|
||||||
@ -217,14 +211,13 @@ export default class Services {
|
|||||||
async parseNewTx(tx: string) {
|
async parseNewTx(tx: string) {
|
||||||
try {
|
try {
|
||||||
// console.log('==============> sending txxxxxxx parser', tx)
|
// console.log('==============> sending txxxxxxx parser', tx)
|
||||||
const services = await Services.getInstance();
|
const parsedTx = await this.sdkClient.parse_new_tx(tx, 0, 0.01)
|
||||||
const parsedTx = await services.sdkClient.parse_new_tx(tx, 0, 0.01)
|
|
||||||
if(parsedTx) {
|
if(parsedTx) {
|
||||||
console.log("🚀 ~ Services ~ parseNewTx ~ parsedTx:", parsedTx)
|
console.log("🚀 ~ Services ~ parseNewTx ~ parsedTx:", parsedTx)
|
||||||
try {
|
try {
|
||||||
await this.handleApiReturn(parsedTx);
|
await this.handleApiReturn(parsedTx);
|
||||||
const newDevice = await this.dumpDevice();
|
const newDevice = await this.dumpDevice();
|
||||||
await services.saveDevice(newDevice);
|
await this.saveDevice(newDevice);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Failed to update device with new tx");
|
console.error("Failed to update device with new tx");
|
||||||
}
|
}
|
||||||
@ -328,22 +321,19 @@ export default class Services {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
async getAmount() {
|
async getAmount() {
|
||||||
const services = await Services.getInstance();
|
const amount = await this.sdkClient.get_available_amount()
|
||||||
const amount = await services.sdkClient.get_available_amount()
|
|
||||||
console.log("🚀 ~ Services ~ getAmount ~ amount:", amount)
|
console.log("🚀 ~ Services ~ getAmount ~ amount:", amount)
|
||||||
return amount
|
return amount
|
||||||
}
|
}
|
||||||
|
|
||||||
async getDeviceAddress() {
|
async getDeviceAddress() {
|
||||||
const services = await Services.getInstance();
|
const address = await this.sdkClient.get_address()
|
||||||
const address = await services.sdkClient.get_address()
|
|
||||||
console.log("🚀 ~ Services ~ getDeviceAddress ~ address:", address)
|
console.log("🚀 ~ Services ~ getDeviceAddress ~ address:", address)
|
||||||
return address
|
return address
|
||||||
}
|
}
|
||||||
|
|
||||||
async dumpDevice() {
|
async dumpDevice() {
|
||||||
const services = await Services.getInstance();
|
const device = await this.sdkClient.dump_device()
|
||||||
const device = await services.sdkClient.dump_device()
|
|
||||||
// console.log("🚀 ~ Services ~ dumpDevice ~ device:", device)
|
// console.log("🚀 ~ Services ~ dumpDevice ~ device:", device)
|
||||||
return device
|
return device
|
||||||
}
|
}
|
||||||
@ -358,15 +348,13 @@ export default class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async dumpWallet() {
|
async dumpWallet() {
|
||||||
const services = await Services.getInstance();
|
const wallet = await this.sdkClient.dump_wallet()
|
||||||
const wallet = await services.sdkClient.dump_wallet()
|
|
||||||
console.log("🚀 ~ Services ~ dumpWallet ~ wallet:", wallet)
|
console.log("🚀 ~ Services ~ dumpWallet ~ wallet:", wallet)
|
||||||
return wallet
|
return wallet
|
||||||
}
|
}
|
||||||
|
|
||||||
async createFaucetMessage() {
|
async createFaucetMessage() {
|
||||||
const services = await Services.getInstance()
|
const message = await this.sdkClient.create_faucet_msg()
|
||||||
const message = await services.sdkClient.create_faucet_msg()
|
|
||||||
console.log("🚀 ~ Services ~ createFaucetMessage ~ message:", message)
|
console.log("🚀 ~ Services ~ createFaucetMessage ~ message:", message)
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
@ -377,26 +365,29 @@ export default class Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async createNewDevice() {
|
async createNewDevice() {
|
||||||
const service = await Services.getInstance();
|
|
||||||
let spAddress = '';
|
let spAddress = '';
|
||||||
try {
|
try {
|
||||||
spAddress = await service.sdkClient.create_new_device(0, 'regtest')
|
spAddress = await this.sdkClient.create_new_device(0, 'regtest')
|
||||||
const device = await service.dumpDevice()
|
const device = await this.dumpDevice()
|
||||||
console.log("🚀 ~ Services ~ device:", device)
|
console.log("🚀 ~ Services ~ device:", device)
|
||||||
await service.saveDevice(device)
|
await this.saveDevice(device)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Services ~ Error:", e);
|
console.error("Services ~ Error:", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.generateQRCode(spAddress || '')
|
||||||
|
|
||||||
return spAddress;
|
return spAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
async restoreDevice(device: string) {
|
async restoreDevice(device: string) {
|
||||||
const services = await Services.getInstance();
|
try {
|
||||||
// const sp_wallet = JSON.parse(address)?.sp_wallet
|
await this.sdkClient.restore_device(device)
|
||||||
console.log("🚀 ~ Services ~ restoreDevice ~ services?.sdkClient:", device)
|
const spAddress = this.sdkClient.get_address();
|
||||||
const res = await services?.sdkClient?.restore_device(device)
|
this.generateQRCode(spAddress || '')
|
||||||
console.log("🚀 ~ Services ~ restoreDevice ~ res:", res)
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private getProcessesCache(): ProcessesCache {
|
private getProcessesCache(): ProcessesCache {
|
||||||
@ -467,9 +458,8 @@ export default class Services {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const services = await Services.getInstance();
|
|
||||||
try {
|
try {
|
||||||
await services.sdkClient.set_process_cache(JSON.stringify(processesCache));
|
await this.sdkClient.set_process_cache(JSON.stringify(processesCache));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Services ~ restoreProcesses ~ Error:', e);
|
console.error('Services ~ restoreProcesses ~ Error:', e);
|
||||||
}
|
}
|
||||||
@ -484,9 +474,8 @@ export default class Services {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const services = await Services.getInstance();
|
|
||||||
try {
|
try {
|
||||||
await services.sdkClient.set_message_cache(JSON.stringify(cachedMessages));
|
await this.sdkClient.set_message_cache(JSON.stringify(cachedMessages));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Services ~ restoreMessages ~ Error:', e);
|
console.error('Services ~ restoreMessages ~ Error:', e);
|
||||||
}
|
}
|
||||||
@ -511,7 +500,6 @@ export default class Services {
|
|||||||
|
|
||||||
this.cleanSubsciptions()
|
this.cleanSubsciptions()
|
||||||
|
|
||||||
const services = await Services.getInstance();
|
|
||||||
// const user = services.sdkClient.create_user('Test', 'test', 10, 1, 'Messaging')
|
// const user = services.sdkClient.create_user('Test', 'test', 10, 1, 'Messaging')
|
||||||
// console.log("🚀 ~ Services ~ injectProcessListPage ~ user:", user)
|
// console.log("🚀 ~ Services ~ injectProcessListPage ~ user:", user)
|
||||||
|
|
||||||
@ -523,9 +511,9 @@ export default class Services {
|
|||||||
newScript.textContent = processScript;
|
newScript.textContent = processScript;
|
||||||
document.head.appendChild(newScript).parentNode?.removeChild(newScript);
|
document.head.appendChild(newScript).parentNode?.removeChild(newScript);
|
||||||
|
|
||||||
this.processes = await services.getProcesses();
|
this.processes = await this.getProcesses();
|
||||||
if(this.processes) {
|
if(this.processes) {
|
||||||
services.setProcessesInSelectElement(this.processes)
|
this.setProcessesInSelectElement(this.processes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -566,9 +554,8 @@ export default class Services {
|
|||||||
if(elem) {
|
if(elem) {
|
||||||
|
|
||||||
const cardContent = document.querySelector(".card-content");
|
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)
|
console.log("🚀 ~ Services ~ showSelectedProcess ~ processes:", processes)
|
||||||
const process = processes.find((process: any) => process.name === (elem as any).dataset.value);
|
const process = processes.find((process: any) => process.name === (elem as any).dataset.value);
|
||||||
if (process) {
|
if (process) {
|
||||||
|
@ -13,15 +13,6 @@ class WebSocketClient {
|
|||||||
if(this.ws !== null) {
|
if(this.ws !== null) {
|
||||||
this.ws.onopen = async (event) => {
|
this.ws.onopen = async (event) => {
|
||||||
console.log('WebSocket connection established');
|
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) {
|
while (this.messageQueue.length > 0) {
|
||||||
const message = this.messageQueue.shift();
|
const message = this.messageQueue.shift();
|
||||||
@ -35,15 +26,13 @@ class WebSocketClient {
|
|||||||
this.ws.onmessage = (event) => {
|
this.ws.onmessage = (event) => {
|
||||||
const msgData = event.data;
|
const msgData = event.data;
|
||||||
|
|
||||||
console.log("Received text message: ", msgData);
|
// console.log("Received text message: ", msgData);
|
||||||
(async () => {
|
(async () => {
|
||||||
const services = await Services.getInstance()
|
|
||||||
|
|
||||||
if (typeof msgData === 'string') {
|
if (typeof msgData === 'string') {
|
||||||
try {
|
try {
|
||||||
const feeRate = 0.0001;
|
const feeRate = 0.0001;
|
||||||
const parsedMessage = JSON.parse(msgData)
|
const parsedMessage = JSON.parse(msgData)
|
||||||
console.log("🚀 ~ WebSocketClient ~ parsedMessage:", parsedMessage)
|
// console.log("🚀 ~ WebSocketClient ~ parsedMessage:", parsedMessage)
|
||||||
const services = await Services.getInstance()
|
const services = await Services.getInstance()
|
||||||
switch(parsedMessage.flag) {
|
switch(parsedMessage.flag) {
|
||||||
case 'NewTx':
|
case 'NewTx':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user