Add merkle proof validation message bus

This commit is contained in:
Sosthene 2025-07-03 18:00:52 +02:00
parent 81b715a730
commit 2270051f1c

View File

@ -646,6 +646,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()}`;
@ -736,7 +771,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);
} }
@ -839,10 +876,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;