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> {
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);
}
}
}