diff --git a/src/components/qrcode-scanner/qrcode-scanner-component.ts b/src/components/qrcode-scanner/qrcode-scanner-component.ts index 8c13d3d..fab8055 100644 --- a/src/components/qrcode-scanner/qrcode-scanner-component.ts +++ b/src/components/qrcode-scanner/qrcode-scanner-component.ts @@ -1,5 +1,6 @@ import QrScanner from 'qr-scanner'; import Services from '../../services/service'; +import { prepareAndSendPairingTx } from '~/utils/sp-address.utils'; export default class QrScannerComponent extends HTMLElement { videoElement: any; @@ -53,20 +54,9 @@ import Services from '../../services/service'; // Extract the 'sp_address' parameter const spAddress = scannedUrl.searchParams.get('sp_address'); if(spAddress) { - const service = await Services.getInstance(); // Call the sendPairingTx function with the extracted sp_address try { - const sharedSecret = await service.getSecretForAddress(spAddress); - if (!sharedSecret) { - const member = { - sp_addresses: [spAddress], - } - await service.connectMember([member]); - } - const mySPAddress = await service.getDeviceAddress() - await service.createPairingProcess([spAddress], mySPAddress, 1); - - // await service.sendPairingTx(spAddress); + await prepareAndSendPairingTx(spAddress) } catch (e) { console.error('Failed to pair:', e); } diff --git a/src/router.ts b/src/router.ts index ba988e8..f9d314b 100755 --- a/src/router.ts +++ b/src/router.ts @@ -4,6 +4,7 @@ import Database from './services/database.service'; import Services from './services/service'; import { cleanSubscriptions } from './utils/subscription.utils'; import { LoginComponent } from './pages/home/home-component'; +import { prepareAndSendPairingTx } from './utils/sp-address.utils'; export {Services}; const routes: { [key: string]: string } = { home: '/src/pages/home/home.html', @@ -123,10 +124,7 @@ export async function init(): Promise { setTimeout(async () => { try { // check if we have a shared secret with that address - const sharedSecret = await services.getSecretForAddress(pairingAddress); - if (!sharedSecret) { - await services.connectMember([{sp_addresses: [pairingAddress]}]); - } + await prepareAndSendPairingTx(pairingAddress) } catch (e) { console.error('Failed to pair:', e); } diff --git a/src/services/service.ts b/src/services/service.ts index 3c42f8f..24cf47b 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -5,7 +5,6 @@ import { IProcess } from '~/models/process.model'; import { initWebsocket, sendMessage } from '../websockets'; import { ApiReturn, Member, PcdUpdates, Process, RoleDefinition } from '../../pkg/sdk_client'; import ModalService from './modal.service'; -import { navigate } from '../router'; import Database from './database.service'; export const U32_MAX = 4294967295; diff --git a/src/utils/sp-address.utils.ts b/src/utils/sp-address.utils.ts index 4f05af5..68e8e99 100755 --- a/src/utils/sp-address.utils.ts +++ b/src/utils/sp-address.utils.ts @@ -149,34 +149,39 @@ export function initAddressInput() { async function onOkButtonClick() { const container = getCorrectDOM('login-4nk-component') as HTMLElement - const service = await Services.getInstance(); - const addressInput = (container.querySelector('#addressInput') as HTMLInputElement).value; + const secondDeviceAddress = (container.querySelector('#addressInput') as HTMLInputElement).value; try { // Connect to target, if necessary - const sharedSecret = await service.getSecretForAddress(addressInput); - if (!sharedSecret) { - const member = { - sp_addresses: [addressInput], - } - const connectMemberResult = await service.connectMember([member]); - await service.handleApiReturn(connectMemberResult); - } - // Create the process - setTimeout(async () => { - const relayAddress = await service.getRelayAddresses(); // Get one (or more?) relay addresses - const createPairingProcessReturn = await service.createPairingProcess([addressInput], relayAddress[0], 1); - - if (!createPairingProcessReturn.updated_process) { - throw new Error('createPairingProcess returned an empty new process'); // This should never happen - } - - await service.handleApiReturn(createPairingProcessReturn); - }, 1000); + await prepareAndSendPairingTx(secondDeviceAddress); } catch (e) { console.error(`onOkButtonClick error: ${e}`); } } +export async function prepareAndSendPairingTx(secondDeviceAddress: string) { + const service = await Services.getInstance(); + + const sharedSecret = await service.getSecretForAddress(secondDeviceAddress); + if (!sharedSecret) { + const member = { + sp_addresses: [secondDeviceAddress], + }; + const connectMemberResult = await service.connectMember([member]); + await service.handleApiReturn(connectMemberResult); + } + // Create the process + setTimeout(async () => { + const relayAddress = await service.getRelayAddresses(); // Get one (or more?) relay addresses + const createPairingProcessReturn = await service.createPairingProcess([secondDeviceAddress], relayAddress[0], 1); + + if (!createPairingProcessReturn.updated_process) { + throw new Error('createPairingProcess returned an empty new process'); // This should never happen + } + + await service.handleApiReturn(createPairingProcessReturn); + }, 1000); +} + export async function generateQRCode(spAddress: string) { try { const container = getCorrectDOM('login-4nk-component') as HTMLElement