← Files Velox TriFit API DocsARCHIVED FILE

web/admin.mjs

2.64 KB · Nov 7, 2026 · 13:08 UTC

↓ Download file

const base = new URL('./', location.href);
const message = document.querySelector('#requests-status');
async function read(path) {
  const response = await fetch(new URL(path, base), { credentials: 'same-origin', signal: AbortSignal.timeout(30000) });
  const data = await response.json();
  if (!response.ok) throw new Error(data.error || 'Demo temporarily unavailable.');
  return data;
}
async function refresh() {
  const button = document.querySelector('#refresh'); button.disabled = true;
  try {
    const session = await read('api/session');
    document.querySelector('#mode').textContent = session.configured ? `Real DressMe demo · partner demo · one active generation · minimum ${session.gapSeconds} seconds between starts.` : 'Preview only — SDK downloads work; live generation is not enabled.';
    const { requests } = await read('api/requests');
    const list = document.querySelector('#requests'); list.replaceChildren();
    message.textContent = requests.length ? 'Your most recent requests. Status is read from the saved queue, without submitting again.' : 'No requests in this session yet. Open the demo to try DressMe.';
    for (const item of requests) {
      const row = document.createElement('article'); row.className = 'request-row';
      const content = document.createElement('div');
      const state = document.createElement('strong'); state.textContent = item.status.replaceAll('_', ' ');
      const details = document.createElement('p'); details.textContent = `${new Date(item.createdAt).toLocaleString()} · ${item.id}`;
      content.append(state, details); row.append(content);
      if (item.status === 'succeeded') {
        const show = document.createElement('button'); show.type = 'button'; show.textContent = 'View result';
        show.addEventListener('click', async () => {
          show.disabled = true;
          try { const result = await read(`api/requests/${encodeURIComponent(item.id)}/result`); document.querySelector('#result img').src = result.url; document.querySelector('#result').hidden = false; }
          catch { message.textContent = 'Result unavailable or expired. No generation was resubmitted.'; }
          finally { show.disabled = false; }
        }); row.append(show);
      }
      list.append(row);
    }
  } catch (error) { message.textContent = error.message; }
  finally { button.disabled = false; }
}
document.querySelector('#refresh').addEventListener('click', refresh);
read('api/sdk').then(sdk => { document.querySelector('#checksum').textContent = `ZIP SHA-256: ${sdk.sha256}`; }).catch(() => { document.querySelector('#checksum').textContent = 'Download checksum is temporarily unavailable.'; });
await refresh();

SHA-256: e1b8ccb38d359cd7e91bceaadbce488d9e9d80544624972abfba7749b01e1401