@enigmax/dashboard 0.1.68 → 0.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/assets/index.html CHANGED
@@ -3503,8 +3503,11 @@ export {
3503
3503
  const TRASH_ICON = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 6h18"/><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>';
3504
3504
  const REFRESH_ICON = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M23 4v6h-6"/><path d="M1 20v-6h6"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/></svg>';
3505
3505
  function accountRow(a) {
3506
+ const stateTxt = a.loginState === "expired" ? "session expired" : a.loginState === "empty" ? "signed out" : a.loginState === "absent" ? "not logged in" : "";
3506
3507
  const badges = (a.active ? '<span class="tag meas">active</span>' : "")
3507
- + (a.loggedIn ? '<span class="tag">' + esc(a.email || "logged in") + "</span>" : '<span class="tag warn">not logged in</span>');
3508
+ + (a.loggedIn
3509
+ ? '<span class="tag">' + esc(a.email || "logged in") + "</span>"
3510
+ : '<span class="tag warn">' + (a.email ? esc(a.email) + " · " : "") + (stateTxt || "not logged in") + "</span>");
3508
3511
  const btn = (act, label, cls) => '<button type="button" class="' + (cls || "toggle") + '" data-acc="' + act + '" data-tool="' + esc(a.tool) + '" data-name="' + esc(a.name) + '">' + label + "</button>";
3509
3512
  const removeBtn = '<button type="button" class="btn-danger icon" title="Remove" aria-label="Remove account ' + esc(a.name) + '" data-acc="remove" data-tool="' + esc(a.tool) + '" data-name="' + esc(a.name) + '">' + TRASH_ICON + "</button>";
3510
3513
  // Provider override (e.g. MiniMax) only for tools that support it, and never the
@@ -3512,7 +3515,7 @@ export {
3512
3515
  const provBtn = (a.supportsProvider && a.removable) ? btn("provider", "Provider") : "";
3513
3516
  const acts = '<div class="set-ctl" style="display:flex;gap:6px;flex-wrap:wrap;align-items:center">'
3514
3517
  + (a.active ? "" : btn("activate", "Use"))
3515
- + (a.loggedIn ? "" : btn("login", "Log in..."))
3518
+ + btn("login", a.loggedIn ? "Re-login" : "Log in")
3516
3519
  + provBtn
3517
3520
  + (a.removable ? btn("rename", "Rename") + removeBtn : "")
3518
3521
  + "</div>";
@@ -3560,7 +3563,7 @@ export {
3560
3563
  const r = await fetch("/api/accounts", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object.assign({ op }, payload)) });
3561
3564
  const out = await r.json();
3562
3565
  if (out.data) renderAccounts(out.data);
3563
- if (out.ok) { setNote("accountsNote", "Saved.", "ok"); return; }
3566
+ if (out.ok) { setNote("accountsNote", out.note || "Saved.", "ok"); return; }
3564
3567
  if (rollback && !out.data) rollback();
3565
3568
  setNote("accountsNote", "Error: " + (out.error || "failed"), "err");
3566
3569
  } catch { if (rollback) rollback(); setNote("accountsNote", "Could not reach the server.", "err"); }
@@ -3644,7 +3647,7 @@ export {
3644
3647
  if (op === "activate") accAction("account.activate", { tool, name });
3645
3648
  else if (op === "remove") { if (await askConfirm("Remove account", "Remove account '" + name + "' and delete its local config dir?", true)) accAction("account.remove", { tool, name }); }
3646
3649
  else if (op === "rename") { const taken = accAccounts.filter((a) => a.tool === tool).map((a) => a.name); const nn = await askText("Rename account", name, "Rename '" + name + "' to:", nameValidator(taken, name)); if (nn && nn !== name) accAction("account.rename", { tool, name, newName: nn }); }
3647
- else if (op === "login") { setNote("accountsNote", "To log in, run this in a terminal: enigma " + tool + " " + name); }
3650
+ else if (op === "login") accAction("account.login", { tool, name });
3648
3651
  else if (op === "provider") {
3649
3652
  const a = accAccounts.find((x) => x.tool === tool && x.name === name);
3650
3653
  if (!a) return;
@@ -3808,9 +3811,9 @@ export {
3808
3811
  const stTag = (s) => s === "expired" ? " (login expired)" : s === "empty" ? " (not signed in)" : s === "absent" ? " (no login)" : "";
3809
3812
  const opts = '<option value="">follow active (' + esc(p.resolvedAccount || "default") + ")" + stTag(p.resolvedState) + "</option>"
3810
3813
  + (p.accounts || []).map((a) => '<option value="' + esc(a.name) + '"' + (p.defaultAccount === a.name ? " selected" : "") + ">" + esc(a.name) + (a.label && a.label !== a.name ? " - " + esc(a.label) : "") + stTag(a.state) + "</option>").join("");
3811
- const warn = p.installed && (p.resolvedState === "expired" || p.resolvedState === "empty")
3814
+ const warn = (p.installed && !p.contextReady && (p.resolvedState === "expired" || p.resolvedState === "empty"))
3812
3815
  ? '<div class="set-hint" style="margin-top:6px;color:var(--warn,#e0a020)">This login is ' + (p.resolvedState === "expired" ? "expired" : "not signed in") + ' - the pack may ask you to log in. Refresh it (launch that account once) or pick another above.</div>'
3813
- : "";
3816
+ : (p.installed && p.contextReady ? '<div class="set-hint" style="margin-top:6px;color:var(--ok)">Active session ready - launches without asking to log in.</div>' : "");
3814
3817
  const accountSel = p.installed
3815
3818
  ? '<label class="set-hint" style="display:flex;align-items:center;gap:8px;margin-top:10px">Account that seeds this pack:'
3816
3819
  + '<select data-pack-account data-id="' + esc(p.id) + '">' + opts + "</select></label>" + warn
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enigmax/dashboard",
3
- "version": "0.1.68",
3
+ "version": "0.1.69",
4
4
  "description": "Local browser dashboard UI for enigma: the static page and chart assets enigma serves on its loopback dashboard (savings, real tool usage, in-browser settings). Installed on demand by enigma-cli; not a runtime dependency.",
5
5
  "type": "module",
6
6
  "files": [