Add merkle proof validation message bus

This commit is contained in:
Sosthene 2025-07-03 18:00:52 +02:00
parent 56fe4fbcd3
commit c87ad8fed5

View File

@ -643,6 +643,41 @@ export default class MessageBus {
}); });
} }
public verifyMerkleProof(merkleProof: string, documentHash: string): Promise<boolean> {
return new Promise<boolean>((resolve: (isValid: boolean) => void, reject: (error: string) => void) => {
this.checkToken().then(() => {
const messageId = `VALIDATE_MERKLE_PROOF_${uuidv4()}`;
const unsubscribe = EventBus.getInstance().on('MERKLE_PROOF_VALIDATED', (responseId: string, isValid: boolean) => {
if (responseId !== messageId) {
return;
}
unsubscribe();
resolve(isValid);
});
const unsubscribeError = EventBus.getInstance().on('ERROR_MERKLE_PROOF_VALIDATED', (responseId: string, error: string) => {
if (responseId !== messageId) {
return;
}
unsubscribeError();
reject(error);
});
const user = User.getInstance();
const accessToken = user.getAccessToken()!;
this.sendMessage({
type: 'VALIDATE_MERKLE_PROOF',
accessToken,
merkleProof,
documentHash,
messageId
});
}).catch(reject);
});
}
private validateToken(): Promise<boolean> { private validateToken(): Promise<boolean> {
return new Promise<boolean>((resolve: (isValid: boolean) => void, reject: (error: string) => void) => { return new Promise<boolean>((resolve: (isValid: boolean) => void, reject: (error: string) => void) => {
const messageId = `VALIDATE_TOKEN_${uuidv4()}`; const messageId = `VALIDATE_TOKEN_${uuidv4()}`;
@ -733,7 +768,9 @@ export default class MessageBus {
console.error('[MessageBus] sendMessage: iframe not found'); console.error('[MessageBus] sendMessage: iframe not found');
return; return;
} }
// console.log('[MessageBus] sendMessage:', message); if (message.type === 'VALIDATE_MERKLE_PROOF') {
console.log('[MessageBus] sendMessage:', message);
}
iframe.contentWindow?.postMessage(message, targetOrigin); iframe.contentWindow?.postMessage(message, targetOrigin);
} }
@ -836,10 +873,14 @@ export default class MessageBus {
this.doHandleMessage(message.messageId, 'VALUE_HASHED', message, (message: any) => message.hash); this.doHandleMessage(message.messageId, 'VALUE_HASHED', message, (message: any) => message.hash);
break; break;
case 'MERKLE_PROOF_RETRIEVED': // GENERATE_MERKLE_PROOF case 'MERKLE_PROOF_RETRIEVED': // GET_MERKLE_PROOF
this.doHandleMessage(message.messageId, 'MERKLE_PROOF_RETRIEVED', message, (message: any) => message.proof); this.doHandleMessage(message.messageId, 'MERKLE_PROOF_RETRIEVED', message, (message: any) => message.proof);
break; break;
case 'MERKLE_PROOF_VALIDATED': // VALIDATE_MERKLE_PROOF
this.doHandleMessage(message.messageId, 'MERKLE_PROOF_VALIDATED', message, (message: any) => message.isValid);
break;
case 'ERROR': case 'ERROR':
console.error('Error:', message); console.error('Error:', message);
this.errors[message.messageId] = message.error; this.errors[message.messageId] = message.error;