From 48194dd2de0798d6717108f8c41b85f5ceea1671 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Sat, 23 Aug 2025 15:55:39 +0200 Subject: [PATCH 1/2] Add CREATE_PAIRING MessageType --- src/models/process.model.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/models/process.model.ts b/src/models/process.model.ts index 6bcdf3c..b2eae72 100755 --- a/src/models/process.model.ts +++ b/src/models/process.model.ts @@ -27,6 +27,8 @@ export enum MessageType { LISTENING = 'LISTENING', REQUEST_LINK = 'REQUEST_LINK', LINK_ACCEPTED = 'LINK_ACCEPTED', + CREATE_PAIRING = 'CREATE_PAIRING', + PAIRING_CREATED = 'PAIRING_CREATED', ERROR = 'ERROR', VALIDATE_TOKEN = 'VALIDATE_TOKEN', RENEW_TOKEN = 'RENEW_TOKEN', From 8a0a8e2df2fb8593cee9aeed4de52f5c940749e5 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Sat, 23 Aug 2025 15:58:30 +0200 Subject: [PATCH 2/2] Add handleCreatePairing --- src/router.ts | 59 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/src/router.ts b/src/router.ts index 8720137..a750915 100755 --- a/src/router.ts +++ b/src/router.ts @@ -207,19 +207,8 @@ export async function registerAllListeners() { cancelText: 'Annuler' }, true); - try { - if (!result) { - throw new Error('User refused to link'); - } - - if (!services.isPaired()) { - // New device - do pairing process - console.log('🚀 The device is not paired'); - await prepareAndSendPairingTx(); - await services.confirmPairing(); - } - } catch (error) { - const errorMsg = `Failed to pair device: ${error}`; + if (!result) { + const errorMsg = 'Failed to pair device: User refused to link'; errorResponse(errorMsg, event.origin, event.data.messageId); } @@ -241,6 +230,47 @@ export async function registerAllListeners() { } } + const handleCreatePairing = async (event: MessageEvent) => { + if (event.data.type !== MessageType.CREATE_PAIRING) { + return; + } + + if (services.isPaired()) { + const errorMsg = 'Device already paired'; + errorResponse(errorMsg, event.origin, event.data.messageId); + return; + } + + try { + const { accessToken } = event.data; + + if (!accessToken || !(await tokenService.validateToken(accessToken, event.origin))) { + throw new Error('Invalid or expired session token'); + } + + console.log('🚀 Starting pairing process'); + await prepareAndSendPairingTx(); + await services.confirmPairing(); + + const pairingId = services.getPairingProcessId(); + + if (!pairingId) { + throw new Error('Failed to get pairing process id'); + } + + // Send success response + const successMsg = { + type: MessageType.PAIRING_CREATED, + pairingId, + messageId: event.data.messageId + }; + window.parent.postMessage(successMsg, event.origin); + } catch (e) { + const errorMsg = `Failed to create pairing process: ${e}`; + errorResponse(errorMsg, event.origin, event.data.messageId); + } + } + const handleGetMyProcesses = async (event: MessageEvent) => { if (event.data.type !== MessageType.GET_MY_PROCESSES) { return; @@ -814,6 +844,9 @@ export async function registerAllListeners() { case MessageType.REQUEST_LINK: await handleRequestLink(event); break; + case MessageType.CREATE_PAIRING: + await handleCreatePairing(event); + break; case MessageType.GET_MY_PROCESSES: await handleGetMyProcesses(event); break;