From 2ab9bd29764f687499f243aa4b74e29a0617022b Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Fri, 14 Nov 2025 09:35:18 +0100 Subject: [PATCH] fix: Refactoring prepareAndSendPairingTx to ensure auto-pairing workflow --- src/utils/sp-address.utils.ts | 51 ++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/utils/sp-address.utils.ts b/src/utils/sp-address.utils.ts index 3b7dcbe..429bc96 100755 --- a/src/utils/sp-address.utils.ts +++ b/src/utils/sp-address.utils.ts @@ -159,40 +159,64 @@ async function onCreateButtonClick() { } } +// Une constante est plus claire qu'une 'magic string' ("") +const DEFAULT_PAIRING_PAYLOAD = ''; + export async function prepareAndSendPairingTx(): Promise { const service = await Services.getInstance(); try { - const relayAddress = service.getAllRelays(); - const createPairingProcessReturn = await service.createPairingProcess('', []); + // 1. Création du processus d'appairage + // const relayAddress = service.getAllRelays(); // <-- Cette variable n'était pas utilisée + const createPairingProcessReturn = await service.createPairingProcess(DEFAULT_PAIRING_PAYLOAD, []); if (!createPairingProcessReturn.updated_process) { throw new Error('createPairingProcess returned an empty new process'); } - try { - await service.ensureConnections(createPairingProcessReturn.updated_process.current_process, createPairingProcessReturn.updated_process.current_process.states[0].state_id); - } catch (e) { - throw e; + // Utilisation du "destructuring" pour assigner les variables + const { process_id: pairingId, current_process: process } = createPairingProcessReturn.updated_process; + + // Ajout d'une vérification pour éviter les erreurs si states est vide + if (!process.states || process.states.length === 0) { + throw new Error('Le processus reçu ne contient aucun état (state)'); } + const stateId = process.states[0].state_id; - service.setProcessId(createPairingProcessReturn.updated_process.process_id); - service.setStateId(createPairingProcessReturn.updated_process.current_process.states[0].state_id); + // 2. Assurer les connexions + await service.ensureConnections(process, stateId); - // Update device.pairing_process_commitment with the process_id + // 3. Mettre à jour l'état du service + service.setProcessId(pairingId); + service.setStateId(stateId); + + // 4. Appairer le 'device' + service.pairDevice(pairingId, [service.getDeviceAddress()]); + + // 5. Mettre à jour la BDD try { const currentDevice = await service.getDeviceFromDatabase(); if (currentDevice) { - currentDevice.pairing_process_commitment = createPairingProcessReturn.updated_process.process_id; + currentDevice.pairing_process_commitment = pairingId; await service.saveDeviceInDatabase(currentDevice); } } catch (err) { - console.error('Failed to update device pairing_process_commitment:', err); + console.error('Échec non-critique de la mise à jour BDD (pairing_process_commitment):', err); } + // 6. Gérer les étapes suivantes du processus await service.handleApiReturn(createPairingProcessReturn); + + const createPrdUpdateReturn = await service.createPrdUpdate(pairingId, stateId); + await service.handleApiReturn(createPrdUpdateReturn); + + const approveChangeReturn = await service.approveChange(pairingId, stateId); + await service.handleApiReturn(approveChangeReturn); + + // await service.confirmPairing(); } catch (err) { - console.error(err); + console.error("Le processus d'appairage a échoué :", err); + throw err; } } @@ -219,4 +243,5 @@ export async function generateCreateBtn() { } catch (err) { console.error(err); } -} \ No newline at end of file +} +