Compare commits

..

5 Commits

Author SHA1 Message Date
Sosthene
74ae167e3c Set userPairingId on connect 2025-06-11 15:16:30 +02:00
Sosthene
90b2ed5e6e Add userPairingId state in App 2025-06-11 15:16:30 +02:00
Sosthene
78c7d009c1 Add userPairingId in UserStore 2025-06-11 15:15:03 +02:00
Sosthene
d9851105ab Remove hardcoded getData 2025-06-11 15:14:06 +02:00
Sosthene
d8105fa3cf Keep the isReady value for multiple calls 2025-06-11 15:13:51 +02:00
3 changed files with 94 additions and 9 deletions

View File

@ -23,11 +23,16 @@ function App() {
const [showAuthModal, setShowAuthModal] = useState(false) const [showAuthModal, setShowAuthModal] = useState(false)
const [showFolderModal, setShowFolderModal] = useState(false) const [showFolderModal, setShowFolderModal] = useState(false)
const [processes, setProcesses] = useState<any>(null) const [processes, setProcesses] = useState<any>(null)
const [userPairingId, setUserPairingId] = useState<string | null>(null)
useEffect(() => { useEffect(() => {
setIsConnected(UserStore.getInstance().isConnected()); setIsConnected(UserStore.getInstance().isConnected());
}); });
useEffect(() => {
setUserPairingId(UserStore.getInstance().getUserPairingId());
});
useEffect(() => { useEffect(() => {
if (isConnected) { if (isConnected) {
const messageBus = MessageBus.getInstance(iframeUrl); const messageBus = MessageBus.getInstance(iframeUrl);
@ -51,15 +56,23 @@ function App() {
console.error('Failed to retrieve data:', error); console.error('Failed to retrieve data:', error);
} }
} }
messageBus.getData('467b005278cf516a42a54ba777fcbab29748072b52c01a988a596662e7b7844a:0', 'ada06b5c6e5add8a281b284a31a258355b33a9f0dbc4a5dcfe77dfd4eb904011').then((data: any) => {
console.log(data);
});
}); });
}); });
} }
}, [isConnected, iframeUrl]); }, [isConnected, iframeUrl]);
useEffect(() => {
if (isConnected && userPairingId === null) {
const messageBus = MessageBus.getInstance(iframeUrl);
messageBus.isReady().then(() => {
messageBus.getUserPairingId().then((userPairingId: string) => {
UserStore.getInstance().pair(userPairingId);
setUserPairingId(UserStore.getInstance().getUserPairingId());
})
});
}
}, [isConnected, userPairingId]);
// Gestionnaire pour afficher la modale de connexion // Gestionnaire pour afficher la modale de connexion
const handleLogin = useCallback(() => { const handleLogin = useCallback(() => {
// Afficher la modale de connexion // Afficher la modale de connexion

View File

@ -10,6 +10,8 @@ export default class MessageBus {
private readonly origin: string; private readonly origin: string;
private messageListener: ((event: MessageEvent) => void) | null = null; private messageListener: ((event: MessageEvent) => void) | null = null;
private errors: { [key: string]: string } = {}; private errors: { [key: string]: string } = {};
private readyPromise: Promise<void> | null = null;
private isReadyFlag = false;
private constructor(origin: string) { private constructor(origin: string) {
this.origin = origin; this.origin = origin;
@ -23,19 +25,28 @@ export default class MessageBus {
} }
public isReady(): Promise<void> { public isReady(): Promise<void> {
return new Promise<void>((resolve: () => void) => { if (this.isReadyFlag) {
return Promise.resolve();
}
if (this.readyPromise) {
return this.readyPromise;
}
this.readyPromise = new Promise<void>((resolve) => {
const correlationId = uuidv4(); const correlationId = uuidv4();
this.initMessageListener(correlationId); this.initMessageListener(correlationId);
const unsubscribe = EventBus.getInstance().on('IS_READY', (responseId: string) => { const unsubscribe = EventBus.getInstance().on('IS_READY', (responseId: string) => {
if (responseId !== correlationId) { if (responseId !== correlationId) return;
return;
}
unsubscribe(); unsubscribe();
this.destroyMessageListener(); this.destroyMessageListener();
this.isReadyFlag = true;
resolve(); resolve();
}); });
}); });
return this.readyPromise;
} }
public requestLink(): Promise<void> { public requestLink(): Promise<void> {
@ -68,6 +79,41 @@ export default class MessageBus {
}); });
} }
public getUserPairingId(): Promise<string> {
return new Promise<string>((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<boolean> { public validateToken(): Promise<boolean> {
return new Promise<boolean>((resolve: (isValid: boolean) => void, reject: (error: string) => void) => { return new Promise<boolean>((resolve: (isValid: boolean) => void, reject: (error: string) => void) => {
const userStore = UserStore.getInstance(); const userStore = UserStore.getInstance();
@ -148,10 +194,15 @@ export default class MessageBus {
public getProcesses(): Promise<any> { public getProcesses(): Promise<any> {
return new Promise<any>((resolve: (processes: any) => void, reject: (error: string) => void) => { return new Promise<any>((resolve: (processes: any) => void, reject: (error: string) => void) => {
this.checkToken().then(() => { this.checkToken().then(() => {
const userStore = UserStore.getInstance();
const accessToken = userStore.getAccessToken()!;
const correlationId = uuidv4(); const correlationId = uuidv4();
console.log(correlationId);
this.initMessageListener(correlationId); this.initMessageListener(correlationId);
const unsubscribe = EventBus.getInstance().on('PROCESSES_RETRIEVED', (responseId: string, processes: any) => { const unsubscribe = EventBus.getInstance().on('PROCESSES_RETRIEVED', (responseId: string, processes: any) => {
console.log(responseId);
if (responseId !== correlationId) { if (responseId !== correlationId) {
return; return;
} }
@ -170,7 +221,8 @@ export default class MessageBus {
}); });
this.sendMessage({ this.sendMessage({
type: 'GET_PROCESSES' type: 'GET_PROCESSES',
accessToken,
}); });
}).catch(console.error); }).catch(console.error);
}); });
@ -371,6 +423,17 @@ export default class MessageBus {
EventBus.getInstance().emit('TOKEN_RENEWED', correlationId, message.accessToken, message.refreshToken); EventBus.getInstance().emit('TOKEN_RENEWED', correlationId, message.accessToken, message.refreshToken);
break; 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 case 'PROCESSES_RETRIEVED': // GET_PROCESSES
if (this.errors[correlationId]) { if (this.errors[correlationId]) {
const error = this.errors[correlationId]; const error = this.errors[correlationId];

View File

@ -22,6 +22,7 @@ export default class UserStore {
public disconnect(): void { public disconnect(): void {
sessionStorage.removeItem('accessToken'); sessionStorage.removeItem('accessToken');
sessionStorage.removeItem('refreshToken'); sessionStorage.removeItem('refreshToken');
sessionStorage.removeItem('userPairingId');
} }
public getAccessToken(): string | null { public getAccessToken(): string | null {
@ -31,4 +32,12 @@ export default class UserStore {
public getRefreshToken(): string | null { public getRefreshToken(): string | null {
return sessionStorage.getItem('refreshToken'); return sessionStorage.getItem('refreshToken');
} }
public pair(userPairingId: string): void {
sessionStorage.setItem('userPairingId', userPairingId);
}
public getUserPairingId(): string | null {
return sessionStorage.getItem('userPairingId');
}
} }