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 tokenService = await TokenService.getInstance();
const errorResponse = (errorMsg: string, origin: string) => {
const errorResponse = (errorMsg: string, origin: string, messageId?: string) => {
window.parent.postMessage(
{
type: MessageType.ERROR,
error: errorMsg
error: errorMsg,
messageId
},
origin
);
}
// --- Handler functions ---
const handleRequestLink = async (event: MessageEvent) => {
if (event.data.type !== MessageType.REQUEST_LINK) {
return;
@ -212,7 +214,7 @@ export async function registerAllListeners() {
}
} catch (error) {
const errorMsg = `Failed to pair device: ${error}`;
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
}
try {
@ -220,7 +222,8 @@ export async function registerAllListeners() {
const acceptedMsg = {
type: MessageType.LINK_ACCEPTED,
accessToken: tokens.accessToken,
refreshToken: tokens.refreshToken
refreshToken: tokens.refreshToken,
messageId: event.data.messageId
};
window.parent.postMessage(
acceptedMsg,
@ -228,7 +231,7 @@ export async function registerAllListeners() {
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -255,13 +258,14 @@ export async function registerAllListeners() {
window.parent.postMessage(
{
type: MessageType.GET_MY_PROCESSES,
myProcesses
myProcesses,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -291,13 +295,14 @@ export async function registerAllListeners() {
window.parent.postMessage(
{
type: MessageType.PROCESSES_RETRIEVED,
processes
processes,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -348,12 +353,13 @@ export async function registerAllListeners() {
{
type: MessageType.DATA_RETRIEVED,
data: res,
messageId: event.data.messageId
},
event.origin
);
} catch (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 refreshToken = event.data.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);
@ -375,7 +381,8 @@ export async function registerAllListeners() {
type: MessageType.VALIDATE_TOKEN,
accessToken: accessToken,
refreshToken: refreshToken,
isValid: isValid
isValid: isValid,
messageId: event.data.messageId
},
event.origin
);
@ -403,13 +410,14 @@ export async function registerAllListeners() {
{
type: MessageType.RENEW_TOKEN,
accessToken: newAccessToken,
refreshToken: refreshToken
refreshToken: refreshToken,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -435,12 +443,13 @@ export async function registerAllListeners() {
{
type: MessageType.GET_PAIRING_ID,
userPairingId,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -481,12 +490,13 @@ export async function registerAllListeners() {
{
type: MessageType.PROCESS_CREATED,
processCreated: res,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -516,12 +526,13 @@ export async function registerAllListeners() {
window.parent.postMessage(
{
type: MessageType.UPDATE_NOTIFIED,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -548,12 +559,13 @@ export async function registerAllListeners() {
{
type: MessageType.STATE_VALIDATED,
validatedProcess: res.updated_process,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
}
try {
@ -638,12 +650,13 @@ export async function registerAllListeners() {
{
type: MessageType.PROCESS_UPDATED,
updatedProcess: res.updated_process,
messageId: event.data.messageId
},
event.origin
);
} catch (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()) {
const errorMsg = 'Device not paired';
errorResponse(errorMsg, event.origin);
errorResponse(errorMsg, event.origin, event.data.messageId);
return;
}
@ -669,41 +682,66 @@ export async function registerAllListeners() {
{
type: MessageType.PUBLIC_DATA_DECODED,
decodedData,
messageId: event.data.messageId
},
event.origin
);
} catch (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', handleUpdateProcess);
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.removeEventListener('message', handleMessage);
window.addEventListener('message', handleMessage);
window.addEventListener('message', handleUpdateProcess);
window.addEventListener('message', handleRequestLink);
window.addEventListener('message', handleGetProcesses);
window.addEventListener('message', handleGetMyProcesses);
window.addEventListener('message', handleDecryptState);
window.addEventListener('message', handleValidateToken);
window.addEventListener('message', handleRenewToken);
window.addEventListener('message', handleGetPairingId);
window.addEventListener('message', handleCreateProcess);
window.addEventListener('message', handleValidateState);
window.addEventListener('message', handleNotifyUpdate);
window.addEventListener('message', handleDecodePublicData);
async function handleMessage(event: MessageEvent) {
try {
switch (event.data.type) {
case MessageType.REQUEST_LINK:
await handleRequestLink(event);
break;
case MessageType.GET_MY_PROCESSES:
await handleGetMyProcesses(event);
break;
case MessageType.GET_PROCESSES:
await handleGetProcesses(event);
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');