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;