Added createUserPairing
This commit is contained in:
parent
bbcc5000cd
commit
0ca6fd6e6d
68
src/App.tsx
68
src/App.tsx
@ -27,47 +27,55 @@ function App() {
|
|||||||
const [userPairingId, setUserPairingId] = useState<string | null>(null)
|
const [userPairingId, setUserPairingId] = useState<string | null>(null)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
// Met à jour la connexion au montage
|
||||||
setIsConnected(UserStore.getInstance().isConnected());
|
setIsConnected(UserStore.getInstance().isConnected());
|
||||||
});
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
// Charge le pairingId s’il existe déjà
|
||||||
setUserPairingId(UserStore.getInstance().getUserPairingId());
|
setUserPairingId(UserStore.getInstance().getUserPairingId());
|
||||||
});
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isConnected) {
|
const handleConnectionFlow = async () => {
|
||||||
|
if (!isConnected) return;
|
||||||
|
|
||||||
|
const userStore = UserStore.getInstance();
|
||||||
const messageBus = MessageBus.getInstance(iframeUrl);
|
const messageBus = MessageBus.getInstance(iframeUrl);
|
||||||
messageBus.isReady().then(() => {
|
|
||||||
messageBus.getProcesses().then((processes: any) => {
|
try {
|
||||||
|
await messageBus.isReady();
|
||||||
|
|
||||||
|
let pairingId = userStore.getUserPairingId();
|
||||||
|
|
||||||
|
// 1️⃣ Créer le pairing si non existant
|
||||||
|
if (!pairingId) {
|
||||||
|
console.log("🚀 No pairing found — creating new pairing...");
|
||||||
|
pairingId = await messageBus.createUserPairing();
|
||||||
|
console.log("✅ Pairing created:", pairingId);
|
||||||
|
|
||||||
|
userStore.pair(pairingId);
|
||||||
|
setUserPairingId(pairingId);
|
||||||
|
} else {
|
||||||
|
console.log("🔗 Already paired with ID:", pairingId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2️⃣ Charger les processes
|
||||||
|
const processes = await messageBus.getProcesses();
|
||||||
setProcesses(processes);
|
setProcesses(processes);
|
||||||
});
|
|
||||||
});
|
// 3️⃣ Charger les myProcesses
|
||||||
|
const myProcesses = await messageBus.getMyProcesses();
|
||||||
|
setMyProcesses(myProcesses);
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.error("❌ Error during pairing or process loading:", err);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
handleConnectionFlow();
|
||||||
}, [isConnected, iframeUrl]);
|
}, [isConnected, iframeUrl]);
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (isConnected && processes !== null) {
|
|
||||||
const messageBus = MessageBus.getInstance(iframeUrl);
|
|
||||||
messageBus.isReady().then(() => {
|
|
||||||
messageBus.getMyProcesses().then((res: string[]) => {
|
|
||||||
setMyProcesses(res);
|
|
||||||
})
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, [isConnected, processes]);
|
|
||||||
|
|
||||||
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, processes]);
|
|
||||||
|
|
||||||
// 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
|
||||||
|
|||||||
@ -80,6 +80,48 @@ export default class MessageBus {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public createUserPairing(): Promise<string> {
|
||||||
|
return new Promise<string>((resolve, reject) => {
|
||||||
|
this.checkToken().then(async () => {
|
||||||
|
const userStore = UserStore.getInstance();
|
||||||
|
const accessToken = userStore.getAccessToken();
|
||||||
|
if (!accessToken) {
|
||||||
|
return reject('No access token found');
|
||||||
|
}
|
||||||
|
|
||||||
|
const correlationId = uuidv4();
|
||||||
|
this.initMessageListener(correlationId);
|
||||||
|
|
||||||
|
// ✅ Success listener
|
||||||
|
const unsubscribeSuccess = EventBus.getInstance().on('PAIRING_CREATED', (responseId: string, pairingId: string) => {
|
||||||
|
if (responseId !== correlationId) return;
|
||||||
|
unsubscribeSuccess();
|
||||||
|
unsubscribeError();
|
||||||
|
this.destroyMessageListener();
|
||||||
|
resolve(pairingId);
|
||||||
|
});
|
||||||
|
|
||||||
|
// ❌ Error listener
|
||||||
|
const unsubscribeError = EventBus.getInstance().on('ERROR_CREATE_PAIRING', (responseId: string, error: string) => {
|
||||||
|
if (responseId !== correlationId) return;
|
||||||
|
unsubscribeError();
|
||||||
|
unsubscribeSuccess();
|
||||||
|
this.destroyMessageListener();
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 📨 Send CREATE_PAIRING message to iframe
|
||||||
|
this.sendMessage({
|
||||||
|
type: 'CREATE_PAIRING',
|
||||||
|
accessToken,
|
||||||
|
messageId: correlationId,
|
||||||
|
});
|
||||||
|
}).catch((err) => {
|
||||||
|
reject(`Failed to validate token before pairing: ${err}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public getUserPairingId(): Promise<string> {
|
public getUserPairingId(): Promise<string> {
|
||||||
return new Promise<string>((resolve: (userPairingId: string) => void, reject: (error: string) => void) => {
|
return new Promise<string>((resolve: (userPairingId: string) => void, reject: (error: string) => void) => {
|
||||||
this.checkToken().then(() => {
|
this.checkToken().then(() => {
|
||||||
@ -740,6 +782,17 @@ export default class MessageBus {
|
|||||||
EventBus.getInstance().emit('PUBLIC_DATA_DECODED', correlationId, message.decodedData);
|
EventBus.getInstance().emit('PUBLIC_DATA_DECODED', correlationId, message.decodedData);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'PAIRING_CREATED':
|
||||||
|
if (this.errors[correlationId]) {
|
||||||
|
const error = this.errors[correlationId];
|
||||||
|
delete this.errors[correlationId];
|
||||||
|
EventBus.getInstance().emit('ERROR_PAIRING_CREATED', correlationId, error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
EventBus.getInstance().emit('MESSAGE_RECEIVED', message);
|
||||||
|
EventBus.getInstance().emit('PAIRING_CREATED', correlationId, message.decodedData);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'ERROR':
|
case 'ERROR':
|
||||||
console.error('Error:', message);
|
console.error('Error:', message);
|
||||||
this.errors[correlationId] = message.error;
|
this.errors[correlationId] = message.error;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user