async function loginWithQR(profile = 'default') {
const res = await fetch('http://localhost:56789/api/auth/login-qr', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ profile })
});
.
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buffer = '';
.
while (true) {
const { done, value } = await reader.read();
if (done) break;
.
buffer += decoder.decode(value, { stream: true });
const lines = buffer.split('\n\n');
buffer = lines.pop();
.
for (const line of lines) {
if (!line.trim()) continue;
.
const eventMatch = line.match(/^event: (.+)$/m);
const dataMatch = line.match(/^data: (.+)$/m);
.
if (eventMatch && dataMatch) {
const event = eventMatch[1];
const data = JSON.parse(dataMatch[1]);
.
switch (event) {
case 'qr_generated':
displayQRCode(data.code); // Show QR to user
break;
case 'qr_scanned':
showUserInfo(data.avatar, data.display_name);
break;
case 'login_success':
redirectToDashboard();
break;
case 'login_error':
showError(data.error);
break;
}
}
}
}
}