Add messageId to each message, refactor listeners

This commit is contained in:
NicolasCantu 2025-06-25 16:59:20 +02:00
parent 929e7ee36d
commit ac11893e93

View File

@ -170,16 +170,18 @@ export async function registerAllListeners() {
const services = await Services.getInstance(); const services = await Services.getInstance();
const tokenService = await TokenService.getInstance(); const tokenService = await TokenService.getInstance();
const errorResponse = (errorMsg: string, origin: string) => { const errorResponse = (errorMsg: string, origin: string, messageId?: string) => {
window.parent.postMessage( window.parent.postMessage(
{ {
type: MessageType.ERROR, type: MessageType.ERROR,
error: errorMsg error: errorMsg,
messageId
}, },
origin origin
); );
} }
// --- Handler functions ---
const handleRequestLink = async (event: MessageEvent) => { const handleRequestLink = async (event: MessageEvent) => {
if (event.data.type !== MessageType.REQUEST_LINK) { if (event.data.type !== MessageType.REQUEST_LINK) {
return; return;
@ -212,7 +214,7 @@ export async function registerAllListeners() {
} }
} catch (error) { } catch (error) {
const errorMsg = `Failed to pair device: ${error}`; const errorMsg = `Failed to pair device: ${error}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
try { try {
@ -220,7 +222,8 @@ export async function registerAllListeners() {
const acceptedMsg = { const acceptedMsg = {
type: MessageType.LINK_ACCEPTED, type: MessageType.LINK_ACCEPTED,
accessToken: tokens.accessToken, accessToken: tokens.accessToken,
refreshToken: tokens.refreshToken refreshToken: tokens.refreshToken,
messageId: event.data.messageId
}; };
window.parent.postMessage( window.parent.postMessage(
acceptedMsg, acceptedMsg,
@ -228,7 +231,7 @@ export async function registerAllListeners() {
); );
} catch (error) { } catch (error) {
const errorMsg = `Failed to generate tokens: ${error}`; const errorMsg = `Failed to generate tokens: ${error}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -239,7 +242,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -255,13 +258,14 @@ export async function registerAllListeners() {
window.parent.postMessage( window.parent.postMessage(
{ {
type: MessageType.GET_MY_PROCESSES, type: MessageType.GET_MY_PROCESSES,
myProcesses myProcesses,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to get processes: ${e}`; const errorMsg = `Failed to get processes: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -274,7 +278,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -291,13 +295,14 @@ export async function registerAllListeners() {
window.parent.postMessage( window.parent.postMessage(
{ {
type: MessageType.PROCESSES_RETRIEVED, type: MessageType.PROCESSES_RETRIEVED,
processes processes,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to get processes: ${e}`; const errorMsg = `Failed to get processes: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -310,7 +315,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -348,12 +353,13 @@ export async function registerAllListeners() {
{ {
type: MessageType.DATA_RETRIEVED, type: MessageType.DATA_RETRIEVED,
data: res, data: res,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to retrieve data: ${e}`; const errorMsg = `Failed to retrieve data: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -365,7 +371,7 @@ export async function registerAllListeners() {
const accessToken = event.data.accessToken; const accessToken = event.data.accessToken;
const refreshToken = event.data.refreshToken; const refreshToken = event.data.refreshToken;
if (!accessToken || !refreshToken) { if (!accessToken || !refreshToken) {
errorResponse('Failed to validate token: missing access, refresh token or both', event.origin); errorResponse('Failed to validate token: missing access, refresh token or both', event.origin, event.data.messageId);
} }
const isValid = await tokenService.validateToken(accessToken, event.origin); const isValid = await tokenService.validateToken(accessToken, event.origin);
@ -375,7 +381,8 @@ export async function registerAllListeners() {
type: MessageType.VALIDATE_TOKEN, type: MessageType.VALIDATE_TOKEN,
accessToken: accessToken, accessToken: accessToken,
refreshToken: refreshToken, refreshToken: refreshToken,
isValid: isValid isValid: isValid,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
@ -403,13 +410,14 @@ export async function registerAllListeners() {
{ {
type: MessageType.RENEW_TOKEN, type: MessageType.RENEW_TOKEN,
accessToken: newAccessToken, accessToken: newAccessToken,
refreshToken: refreshToken refreshToken: refreshToken,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (error) { } catch (error) {
const errorMsg = `Failed to renew token: ${error}`; const errorMsg = `Failed to renew token: ${error}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -418,7 +426,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -435,12 +443,13 @@ export async function registerAllListeners() {
{ {
type: MessageType.GET_PAIRING_ID, type: MessageType.GET_PAIRING_ID,
userPairingId, userPairingId,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to get pairing id: ${e}`; const errorMsg = `Failed to get pairing id: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -449,7 +458,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -481,12 +490,13 @@ export async function registerAllListeners() {
{ {
type: MessageType.PROCESS_CREATED, type: MessageType.PROCESS_CREATED,
processCreated: res, processCreated: res,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to create process: ${e}`; const errorMsg = `Failed to create process: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -495,7 +505,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -516,12 +526,13 @@ export async function registerAllListeners() {
window.parent.postMessage( window.parent.postMessage(
{ {
type: MessageType.UPDATE_NOTIFIED, type: MessageType.UPDATE_NOTIFIED,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to notify update for process: ${e}`; const errorMsg = `Failed to notify update for process: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -530,7 +541,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -548,12 +559,13 @@ export async function registerAllListeners() {
{ {
type: MessageType.STATE_VALIDATED, type: MessageType.STATE_VALIDATED,
validatedProcess: res.updated_process, validatedProcess: res.updated_process,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to validate process: ${e}`; const errorMsg = `Failed to validate process: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -562,7 +574,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
try { try {
@ -638,12 +650,13 @@ export async function registerAllListeners() {
{ {
type: MessageType.PROCESS_UPDATED, type: MessageType.PROCESS_UPDATED,
updatedProcess: res.updated_process, updatedProcess: res.updated_process,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to update process: ${e}`; const errorMsg = `Failed to update process: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
@ -652,7 +665,7 @@ export async function registerAllListeners() {
if (!services.isPaired()) { if (!services.isPaired()) {
const errorMsg = 'Device not paired'; const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
return; return;
} }
@ -669,41 +682,66 @@ export async function registerAllListeners() {
{ {
type: MessageType.PUBLIC_DATA_DECODED, type: MessageType.PUBLIC_DATA_DECODED,
decodedData, decodedData,
messageId: event.data.messageId
}, },
event.origin event.origin
); );
} catch (e) { } catch (e) {
const errorMsg = `Failed to decode data: ${e}`; const errorMsg = `Failed to decode data: ${e}`;
errorResponse(errorMsg, event.origin); errorResponse(errorMsg, event.origin, event.data.messageId);
} }
} }
// Remove before adding to be sure there's no duplicate window.removeEventListener('message', handleMessage);
window.removeEventListener('message', handleUpdateProcess); window.addEventListener('message', handleMessage);
window.removeEventListener('message', handleRequestLink);
window.removeEventListener('message', handleGetProcesses);
window.removeEventListener('message', handleGetMyProcesses);
window.removeEventListener('message', handleDecryptState);
window.removeEventListener('message', handleValidateToken);
window.removeEventListener('message', handleRenewToken);
window.removeEventListener('message', handleGetPairingId);
window.removeEventListener('message', handleCreateProcess);
window.removeEventListener('message', handleValidateState);
window.removeEventListener('message', handleNotifyUpdate);
window.removeEventListener('message', handleDecodePublicData);
window.addEventListener('message', handleUpdateProcess); async function handleMessage(event: MessageEvent) {
window.addEventListener('message', handleRequestLink); try {
window.addEventListener('message', handleGetProcesses); switch (event.data.type) {
window.addEventListener('message', handleGetMyProcesses); case MessageType.REQUEST_LINK:
window.addEventListener('message', handleDecryptState); await handleRequestLink(event);
window.addEventListener('message', handleValidateToken); break;
window.addEventListener('message', handleRenewToken); case MessageType.GET_MY_PROCESSES:
window.addEventListener('message', handleGetPairingId); await handleGetMyProcesses(event);
window.addEventListener('message', handleCreateProcess); break;
window.addEventListener('message', handleValidateState); case MessageType.GET_PROCESSES:
window.addEventListener('message', handleNotifyUpdate); await handleGetProcesses(event);
window.addEventListener('message', handleDecodePublicData); break;
case MessageType.RETRIEVE_DATA:
await handleDecryptState(event);
break;
case MessageType.VALIDATE_TOKEN:
await handleValidateToken(event);
break;
case MessageType.RENEW_TOKEN:
await handleRenewToken(event);
break;
case MessageType.GET_PAIRING_ID:
await handleGetPairingId(event);
break;
case MessageType.CREATE_PROCESS:
await handleCreateProcess(event);
break;
case MessageType.NOTIFY_UPDATE:
await handleNotifyUpdate(event);
break;
case MessageType.VALIDATE_STATE:
await handleValidateState(event);
break;
case MessageType.UPDATE_PROCESS:
await handleUpdateProcess(event);
break;
case MessageType.DECODE_PUBLIC_DATA:
await handleDecodePublicData(event);
break;
default:
console.warn(`Unhandled message type: ${event.data.type}`);
}
} catch (error) {
const errorMsg = `Error handling message: ${error}`;
errorResponse(errorMsg, event.origin, event.data.messageId);
}
}
console.log('Initialized event handlers'); console.log('Initialized event handlers');