diff --git a/src/models/process.model.ts b/src/models/process.model.ts index fe51afa..a72c554 100755 --- a/src/models/process.model.ts +++ b/src/models/process.model.ts @@ -24,6 +24,7 @@ export interface INotification { export enum MessageType { LISTENING = 'LISTENING', + GET_PAIRING_ID = 'GET_PAIRING_ID', REQUEST_LINK = 'REQUEST_LINK', LINK_ACCEPTED = 'LINK_ACCEPTED', CREATE_PROFILE = 'CREATE_PROFILE', diff --git a/src/router.ts b/src/router.ts index 32caecb..2b97eb2 100755 --- a/src/router.ts +++ b/src/router.ts @@ -446,6 +446,40 @@ export async function registerAllListeners() { } } + const handleGetPairingId = async (event: MessageEvent) => { + if (event.data.type !== MessageType.GET_PAIRING_ID) return; + + const tokenService = await TokenService.getInstance(); + + if (!services.isPaired()) { + const errorMsg = 'Device not paired'; + errorResponse(errorMsg, event.origin); + return; + } + + try { + const { accessToken } = event.data; + + // Validate the session token + if (!accessToken || !tokenService.validateToken(accessToken, event.origin)) { + throw new Error('Invalid or expired session token'); + } + + const userPairingId = services.getPairingProcessId(); + + window.parent.postMessage( + { + type: MessageType.GET_PAIRING_ID, + userPairingId, + }, + event.origin + ); + } catch (e) { + const errorMsg = `Failed to get pairing id: ${e}`; + errorResponse(errorMsg, event.origin); + } + } + // Remove before adding to be sure there's no duplicate window.removeEventListener('message', handleRequestLink); window.removeEventListener('message', handleAddProfile); @@ -454,6 +488,7 @@ export async function registerAllListeners() { window.removeEventListener('message', handleDecryptState); window.removeEventListener('message', handleValidateToken); window.removeEventListener('message', handleRenewToken); + window.removeEventListener('message', handleGetPairingId); window.addEventListener('message', handleRequestLink); window.addEventListener('message', handleAddProfile); @@ -462,6 +497,7 @@ export async function registerAllListeners() { window.addEventListener('message', handleDecryptState); window.addEventListener('message', handleValidateToken); window.addEventListener('message', handleRenewToken); + window.addEventListener('message', handleGetPairingId); console.log('Initialized event handlers');