From d8105fa3cf6f1c3c257067f76773aff1a90075d9 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Wed, 11 Jun 2025 15:13:51 +0200 Subject: [PATCH] Keep the isReady value for multiple calls --- src/sdk/MessageBus.ts | 73 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/src/sdk/MessageBus.ts b/src/sdk/MessageBus.ts index 3961f76..be2b100 100644 --- a/src/sdk/MessageBus.ts +++ b/src/sdk/MessageBus.ts @@ -10,6 +10,8 @@ export default class MessageBus { private readonly origin: string; private messageListener: ((event: MessageEvent) => void) | null = null; private errors: { [key: string]: string } = {}; + private readyPromise: Promise | null = null; + private isReadyFlag = false; private constructor(origin: string) { this.origin = origin; @@ -23,19 +25,28 @@ export default class MessageBus { } public isReady(): Promise { - return new Promise((resolve: () => void) => { + if (this.isReadyFlag) { + return Promise.resolve(); + } + + if (this.readyPromise) { + return this.readyPromise; + } + + this.readyPromise = new Promise((resolve) => { const correlationId = uuidv4(); this.initMessageListener(correlationId); const unsubscribe = EventBus.getInstance().on('IS_READY', (responseId: string) => { - if (responseId !== correlationId) { - return; - } + if (responseId !== correlationId) return; unsubscribe(); this.destroyMessageListener(); + this.isReadyFlag = true; resolve(); }); }); + + return this.readyPromise; } public requestLink(): Promise { @@ -68,6 +79,41 @@ export default class MessageBus { }); } + public getUserPairingId(): Promise { + return new Promise((resolve: (userPairingId: string) => void, reject: (error: string) => void) => { + this.checkToken().then(() => { + const userStore = UserStore.getInstance(); + const accessToken = userStore.getAccessToken()!; + + const correlationId = uuidv4(); + this.initMessageListener(correlationId); + + const unsubscribe = EventBus.getInstance().on('PAIRING_ID', (responseId: string, userPairingId: string) => { + if (responseId !== correlationId) { + return; + } + unsubscribe(); + this.destroyMessageListener(); + resolve(userPairingId); + }); + + const unsubscribeError = EventBus.getInstance().on('ERROR_PAIRING_ID', (responseId: string, error: string) => { + if (responseId !== correlationId) { + return; + } + unsubscribeError(); + this.destroyMessageListener(); + reject(error); + }); + + this.sendMessage({ + type: 'GET_PAIRING_ID', + accessToken, + }); + }).catch(console.error); + }); + } + public validateToken(): Promise { return new Promise((resolve: (isValid: boolean) => void, reject: (error: string) => void) => { const userStore = UserStore.getInstance(); @@ -148,10 +194,15 @@ export default class MessageBus { public getProcesses(): Promise { return new Promise((resolve: (processes: any) => void, reject: (error: string) => void) => { this.checkToken().then(() => { + const userStore = UserStore.getInstance(); + const accessToken = userStore.getAccessToken()!; + const correlationId = uuidv4(); + console.log(correlationId); this.initMessageListener(correlationId); const unsubscribe = EventBus.getInstance().on('PROCESSES_RETRIEVED', (responseId: string, processes: any) => { + console.log(responseId); if (responseId !== correlationId) { return; } @@ -170,7 +221,8 @@ export default class MessageBus { }); this.sendMessage({ - type: 'GET_PROCESSES' + type: 'GET_PROCESSES', + accessToken, }); }).catch(console.error); }); @@ -371,6 +423,17 @@ export default class MessageBus { EventBus.getInstance().emit('TOKEN_RENEWED', correlationId, message.accessToken, message.refreshToken); break; + case 'GET_PAIRING_ID': + if (this.errors[correlationId]) { + const error = this.errors[correlationId]; + delete this.errors[correlationId]; + EventBus.getInstance().emit('ERROR_PAIRING_ID', correlationId, error); + return; + } + EventBus.getInstance().emit('MESSAGE_RECEIVED', message); + EventBus.getInstance().emit('PAIRING_ID', correlationId, message.userPairingId); + break; + case 'PROCESSES_RETRIEVED': // GET_PROCESSES if (this.errors[correlationId]) { const error = this.errors[correlationId];