PageSourceSearch

https://shieldcart.app/assets/c-BlSW0X-5.js

js shieldcart.app collected 2026-10-02 01:15:24 UTC 4,107 bytes, 1 lines download raw bytes

1import{r as a,b as p,j as e}from"./index-BX-fLFOm.js";import{A as h}from"./c-8kIOWfOX.js";import{R as u}from"./c-ClfjGxlH.js";function x(t){if(!t)return"—";const r=new Date(t);return Number.isNaN(r.getTime())?"—":r.toLocaleString("en-US")}function f(t){return t?[t.platform,t.timezone,t.screen,t.extVersion?`ext ${t.extVersion}`:null].filter(Boolean).join(" · "):""}const g=t=>t.device_mismatch||t.shared_install;function N(){const[t,r]=a.useState([]),[m,l]=a.useState(!0),[d,o]=a.useState(null),c=a.useCallback(async()=>{l(!0),o(null);try{const s=await p("/api/private/admin/setup-links?state=redeemed");r(s.links??[])}catch(s){o(s instanceof Error?s.message:"Could not load setup links.")}l(!1)},[]);a.useEffect(()=>{c()},[c]);const i=t.filter(g),n=t.length;return e.jsxs("div",{className:"space-y-4 pb-10",children:[e.jsx(h,{current:"/dashboard/setup-links"}),e.jsx("header",{children:e.jsx("h1",{className:"text-xl font-semibold tracking-tight text-ink-900",children:"Setup links"})}),e.jsx("p",{className:"text-[11px] text-ink-400",children:"Checks every redeemed link across every account for a browser that ended up on the wrong family. Only links worth a look are listed."}),e.jsx(u,{hasStatus:!1,hasStarred:!1,sweepTimeUtc:"04:00"}),m?e.jsx("p",{className:"text-sm text-ink-500",children:"Checking setup links…"}):d?e.jsx("p",{className:"rounded-2xl border border-red-100 bg-red-50 px-4 py-3 text-sm text-red-800",children:d}):i.length===0?e.jsxs("p",{className:"rounded-2xl border border-[#5F9E8E]/30 bg-[#5F9E8E]/10 px-4 py-3 text-sm text-[#3F7E6E]",children:[e.jsx("span",{className:"font-semibold",children:"All clear."})," ",n===0?"No link has been redeemed in the last 14 days.":`Checked ${n} redeemed link${n===1?"":"s"} — every one is on the family it was meant for.`]}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"rounded-2xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900",children:[e.jsxs("span",{className:"font-semibold",children:[i.length," of ",n," link",n===1?"":"s"," need",i.length===1?"s":""," a look."]})," ","The browser that redeemed it is paired to another profile, or the same install redeemed links under two families. Neither is proof on its own."]}),e.jsx("ul",{className:"space-y-3",children:i.map(s=>e.jsxs("li",{className:"rounded-2xl border border-amber-300 bg-white p-4 shadow-sm",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"min-w-0 flex-1 truncate font-semibold text-ink-900",children:s.family}),s.device_mismatch&&e.jsx("span",{className:"rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-semibold text-amber-900",children:"⚠ Different profile"}),s.shared_install&&e.jsx("span",{className:"rounded-full bg-amber-100 px-2 py-0.5 text-[11px] font-semibold text-amber-900",children:"⚠ Shared browser"}),e.jsxs("span",{className:"font-mono text-[11px] text-ink-400",children:[s.token_prefix,"…"]})]}),e.jsxs("dl",{className:"mt-2 grid gap-x-6 gap-y-1 text-xs text-ink-600 sm:grid-cols-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("dt",{className:"text-ink-400",children:"Guardian"}),e.jsx("dd",{className:"min-w-0 truncate",children:s.guardian_email??"—"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("dt",{className:"text-ink-400",children:"Computer"}),e.jsxs("dd",{className:"min-w-0 truncate",children:[s.device_name??"—",s.device_uninstalled?" (removed)":""]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("dt",{className:"text-ink-400",children:"Created"}),e.jsx("dd",{children:x(s.created_at)})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("dt",{className:"text-ink-400",children:"Redeemed"}),e.jsx("dd",{children:x(s.consumed_at)})]})]}),s.fingerprint&&e.jsxs("p",{className:"mt-2 break-words rounded-xl bg-ink-50/70 px-3 py-2 font-mono text-[11px] text-ink-600",children:[f(s.fingerprint)||"no details reported",s.fingerprint.installId?e.jsxs(e.Fragment,{children:[e.jsx("br",{}),"install ",s.fingerprint.installId]}):null]})]},s.token_prefix+s.created_at))})]})]})}export{N as component};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.