fix: Refactoring prepareAndSendPairingTx to ensure auto-pairing workflow

This commit is contained in:
NicolasCantu 2025-11-14 09:35:18 +01:00
parent 99e7793fbb
commit 2ab9bd2976

View File

@ -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<void> { export async function prepareAndSendPairingTx(): Promise<void> {
const service = await Services.getInstance(); const service = await Services.getInstance();
try { try {
const relayAddress = service.getAllRelays(); // 1. Création du processus d'appairage
const createPairingProcessReturn = await service.createPairingProcess('', []); // const relayAddress = service.getAllRelays(); // <-- Cette variable n'était pas utilisée
const createPairingProcessReturn = await service.createPairingProcess(DEFAULT_PAIRING_PAYLOAD, []);
if (!createPairingProcessReturn.updated_process) { if (!createPairingProcessReturn.updated_process) {
throw new Error('createPairingProcess returned an empty new process'); throw new Error('createPairingProcess returned an empty new process');
} }
try { // Utilisation du "destructuring" pour assigner les variables
await service.ensureConnections(createPairingProcessReturn.updated_process.current_process, createPairingProcessReturn.updated_process.current_process.states[0].state_id); const { process_id: pairingId, current_process: process } = createPairingProcessReturn.updated_process;
} catch (e) {
throw e; // 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); // 2. Assurer les connexions
service.setStateId(createPairingProcessReturn.updated_process.current_process.states[0].state_id); 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 { try {
const currentDevice = await service.getDeviceFromDatabase(); const currentDevice = await service.getDeviceFromDatabase();
if (currentDevice) { if (currentDevice) {
currentDevice.pairing_process_commitment = createPairingProcessReturn.updated_process.process_id; currentDevice.pairing_process_commitment = pairingId;
await service.saveDeviceInDatabase(currentDevice); await service.saveDeviceInDatabase(currentDevice);
} }
} catch (err) { } 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); 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) { } 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) { } catch (err) {
console.error(err); console.error(err);
} }
} }