akenomainx4 commited on
Commit
d07ec39
Β·
verified Β·
1 Parent(s): 368f964

fix: poll checkSetup every 4s independently of QR render

Browse files
Files changed (1) hide show
  1. public/app.js +19 -12
public/app.js CHANGED
@@ -252,7 +252,6 @@ async function fetchAndRenderQR() {
252
  correctLevel: QRCode.CorrectLevel.M,
253
  });
254
  qrRendered = true;
255
- checkSetup(); // show one-time setup panel if secrets not yet saved
256
  return;
257
  } catch (err) {
258
  console.warn('fetchAndRenderQR attempt', i, err);
@@ -301,28 +300,36 @@ async function authFetch(url, method = 'GET') {
301
  }
302
 
303
  /* ── First-time setup panel ──────────────────────────────────────────────── */
304
- const setupCard = $('setup-card');
 
305
 
306
  async function checkSetup() {
 
307
  try {
308
  const r1 = await authFetch('/api/setup-status');
309
  if (!r1 || !r1.ok) return;
310
  const { seeded } = await r1.json();
311
- if (seeded) return; // secrets already saved β€” nothing to show
312
 
313
- // Secrets not yet saved β€” fetch credentials and show the panel
314
  const r2 = await authFetch('/api/shellular/credentials');
315
- if (!r2 || !r2.ok) return;
316
- const { hostId, machineId, keyB64 } = await r2.json();
317
- if (!hostId) return;
318
-
319
- $('val-host-id').textContent = hostId;
320
- $('val-machine-id').textContent = machineId;
321
- $('val-key').textContent = keyB64;
 
322
  setupCard.classList.remove('hidden');
323
- } catch { /* silent */ }
 
324
  }
325
 
 
 
 
 
326
  // Copy-to-clipboard buttons
327
  document.addEventListener('click', (e) => {
328
  const btn = e.target.closest('.btn-copy');
 
252
  correctLevel: QRCode.CorrectLevel.M,
253
  });
254
  qrRendered = true;
 
255
  return;
256
  } catch (err) {
257
  console.warn('fetchAndRenderQR attempt', i, err);
 
300
  }
301
 
302
  /* ── First-time setup panel ──────────────────────────────────────────────── */
303
+ const setupCard = $('setup-card');
304
+ let setupDone = false; // true once panel is shown OR secrets are already seeded
305
 
306
  async function checkSetup() {
307
+ if (setupDone || !token) return;
308
  try {
309
  const r1 = await authFetch('/api/setup-status');
310
  if (!r1 || !r1.ok) return;
311
  const { seeded } = await r1.json();
312
+ if (seeded) { setupDone = true; return; } // secrets already saved
313
 
314
+ // Try to read credentials (shellular must have registered first)
315
  const r2 = await authFetch('/api/shellular/credentials');
316
+ if (!r2 || !r2.ok) return; // not ready yet β€” poll will retry
317
+ const data = await r2.json();
318
+ if (!data.hostId) return;
319
+
320
+ // Populate and show the panel
321
+ $('val-host-id').textContent = data.hostId;
322
+ $('val-machine-id').textContent = data.machineId;
323
+ $('val-key').textContent = data.keyB64;
324
  setupCard.classList.remove('hidden');
325
+ setupDone = true;
326
+ } catch { /* retry on next poll */ }
327
  }
328
 
329
+ // Poll every 4 s so the panel appears as soon as credentials are available,
330
+ // regardless of whether the QR has rendered yet.
331
+ setInterval(checkSetup, 4000);
332
+
333
  // Copy-to-clipboard buttons
334
  document.addEventListener('click', (e) => {
335
  const btn = e.target.closest('.btn-copy');