PageSourceSearch

https://wildowl.ai/assets/AdminAbuseDomains-BzkE08M7.js

js wildowl.ai collected 2026-10-05 13:51:29 UTC 13,588 bytes, 1 lines download raw bytes

1import{a as te,r as o,j as e,au as ie,B as r,am as G,av as ce,C as b,o as w,p as _,aw as re,e as y,I as J,q as l,T as de,k as oe,l as k,Q as C,a2 as X,n as xe,w as me,M as x}from"./index-CLXnG26Q.js";import{T as S,a as D,b as i,c as t,d as A,e as a}from"./table-Bw1Y2bwr.js";import{B as he}from"./ban-DMv41_w6.js";import{f as L}from"./formatDistanceToNow-BVWz0Vo_.js";import"./endOfDay-3fqMHIi-.js";import"./en-US-_pJbXdef.js";import"./endOfMonth-CvoUCuXv.js";function z(d,h){if(!d)return e.jsx(l,{variant:"outline",className:"text-[10px]",children:"—"});const N=d.toLowerCase(),m=N==="safe"?"secondary":N==="invalid"?"destructive":N==="risky"?"default":"outline";return e.jsxs(l,{variant:m,className:"text-[10px]",title:h||void 0,children:[d,h?` · ${h}`:""]})}const be=()=>{const{adminAction:d}=te(),[h,N]=o.useState("pending"),[m,Y]=o.useState(null),[u,Z]=o.useState(null),[j,ee]=o.useState(null),[T,E]=o.useState(null),[g,B]=o.useState("all"),[F,P]=o.useState(!1),[I,M]=o.useState(""),[$,se]=o.useState(""),[p,H]=o.useState(null),[q,W]=o.useState(!1),f=async()=>{try{const[s,n,c]=await Promise.all([d("list_abuse_alerts",{status:"pending"}),d("list_abuse_alerts",{status:"blocked"}),d("manage_domain_allowlist",{operation:"list"})]);Y(s||[]),Z(n||[]),ee(c||[])}catch(s){x.error("Failed to load: "+s.message)}},K=async()=>{E(null);try{const s={limit:200};g==="safe_but_blocked"&&(s.only_safe_but_blocked=!0),g==="blocked"&&(s.decision="block_debounce");const n=await d("list_email_validation_log",s);E(n||[])}catch(s){x.error("Failed to load logs: "+s.message)}};o.useEffect(()=>{f()},[]),o.useEffect(()=>{h==="logs"&&K()},[h,g]);const ae=async()=>{var s,n;P(!0);try{const c=await d("run_abuse_domain_monitor",{});x.success(`Monitor: ${((s=c.auto_blocked)==null?void 0:s.length)||0} blocked, ${((n=c.pending_review)==null?void 0:n.length)||0} pending`),await f()}catch(c){x.error("Run failed: "+c.message)}finally{P(!1)}},v=async(s,n)=>{try{await d("resolve_abuse_alert",{id:s,action:n}),x.success(`Domain ${n}`),await f()}catch(c){x.error(c.message)}},O=async()=>{const s=I.trim().toLowerCase();if(!s||!s.includes("."))return x.error("Invalid domain");try{await d("manage_domain_allowlist",{operation:"add",domain:s,reason:"manual"}),M(""),await f()}catch(n){x.error(n.message)}},ne=async(s,n)=>{if(confirm(`Remove ${n} from allowlist?`))try{await d("manage_domain_allowlist",{operation:"delete",id:s}),await f()}catch(c){x.error(c.message)}},Q=async()=>{const s=$.trim().toLowerCase();if(!s||!s.includes("."))return x.error("Enter a domain like example.com");W(!0),H(null);try{const n=await d("debounce_test_domain",{domain:s});H(n)}catch(n){x.error(n.message)}finally{W(!1)}},U=({a:s})=>{const n=s.metrics,c=Number(n.unique_subdomains??0),V=Number(n.wildcard_subdomain_ratio??0),le=c>0&&V>=.7&&s.signup_count>=5,R=n.debounce??null;return e.jsxs("div",{className:"text-xs text-muted-foreground space-y-0.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsxs("span",{children:[s.signup_count," signups · ",n.generations_total??0," gens"]}),c>0&&e.jsxs(l,{variant:le?"destructive":"outline",className:"text-[10px] px-1.5 py-0 h-4",children:[c," subs · ",(V*100).toFixed(0),"%"]}),n.source==="realtime_signup_guard"&&e.jsx(l,{variant:"secondary",className:"text-[10px] px-1.5 py-0 h-4",children:"realtime"}),R&&z(R.result??null,R.reason??null)]}),e.jsxs("div",{children:[n.pct_users_with_1_gen??0,"% one-shot · ",n.ip_repetition_pct??0,"% IP reuse · ",n.pct_emails_digit_suffix??0,"% digit-suffix"]})]})};return e.jsxs("div",{className:"p-4 md:p-6 space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(ie,{className:"h-6 w-6"})," Abuse Domains"]}),e.jsxs("p",{className:"text-muted-foreground text-sm max-w-3xl",children:["DeBounce catches ",e.jsx("em",{children:"known"})," disposables; our velocity + wildcard monitor catches ",e.jsx("em",{children:"new"})," ones. Domains are grouped by registrable parent (eTLD+1). Realtime block triggers on ≥20 signups + ≥80% unique subdomains + 0 paid purchases."]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(r,{variant:"outline",size:"sm",onClick:f,children:[e.jsx(G,{className:"h-3 w-3 mr-1"}),"Refresh"]}),e.jsxs(r,{size:"sm",onClick:ae,disabled:F,children:[e.jsx(ce,{className:"h-3 w-3 mr-1"}),F?"Running…":"Run now"]})]})]}),e.jsxs(b,{children:[e.jsx(w,{className:"pb-3",children:e.jsxs(_,{className:"text-base flex items-center gap-2",children:[e.jsx(re,{className:"h-4 w-4"})," Test domain against DeBounce"]})}),e.jsxs(y,{className:"space-y-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(J,{placeholder:"example.com or [email protected]",value:$,onChange:s=>se(s.target.value),onKeyDown:s=>s.key==="Enter"&&Q(),className:"max-w-sm"}),e.jsx(r,{onClick:Q,disabled:q,variant:"secondary",children:q?"Testing…":"Check"})]}),p&&e.jsx("div",{className:"text-xs space-y-2 rounded-md border bg-muted/30 p-3",children:p.ok===!1?e.jsx("div",{className:"text-destructive",children:String(p.error||"Failed")}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Tested email:"})," ",e.jsx("span",{className:"font-mono",children:String(p.email)})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-muted-foreground",children:"DeBounce:"}),(()=>{const s=p.debounce;return s?e.jsxs(e.Fragment,{children:[z(s.result,s.reason),s.disposable==="true"&&e.jsx(l,{variant:"destructive",className:"text-[10px]",children:"disposable"}),s.accept_all==="true"&&e.jsx(l,{variant:"default",className:"text-[10px]",children:"catch-all"}),s.role==="true"&&e.jsx(l,{variant:"outline",className:"text-[10px]",children:"role"}),s.free_email==="true"&&e.jsx(l,{variant:"outline",className:"text-[10px]",children:"free"}),s.send_transactional!==void 0&&e.jsxs(l,{variant:"outline",className:"text-[10px]",children:["send_score ",s.send_transactional,"/10"]})]}):e.jsx("span",{children:"no data"})})()]}),e.jsxs("div",{className:"flex gap-4 pt-1",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Our blocklist:"})," ",p.our_blocklist?e.jsx(l,{variant:"destructive",className:"text-[10px] ml-1",children:"blocked"}):e.jsx(l,{variant:"outline",className:"text-[10px] ml-1",children:"no"})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Our allowlist:"})," ",p.our_allowlist?e.jsx(l,{variant:"secondary",className:"text-[10px] ml-1",children:"allowed"}):e.jsx(l,{variant:"outline",className:"text-[10px] ml-1",children:"no"})]})]})]})})]})]}),e.jsxs(de,{value:h,onValueChange:N,children:[e.jsxs(oe,{children:[e.jsxs(k,{value:"pending",children:["Pending review ",m!=null&&m.length?e.jsx(l,{variant:"secondary",className:"ml-2",children:m.length}):null]}),e.jsxs(k,{value:"blocked",children:["Auto-blocked ",u!=null&&u.length?e.jsx(l,{variant:"secondary",className:"ml-2",children:u.length}):null]}),e.jsxs(k,{value:"allowlist",children:["Allowlist ",j!=null&&j.length?e.jsx(l,{variant:"secondary",className:"ml-2",children:j.length}):null]}),e.jsx(k,{value:"logs",children:"DeBounce log"})]}),e.jsx(C,{value:"pending",children:e.jsxs(b,{children:[e.jsx(w,{children:e.jsx(_,{children:"Pending review"})}),e.jsx(y,{children:e.jsxs(S,{children:[e.jsx(D,{children:e.jsxs(i,{children:[e.jsx(t,{children:"Domain"}),e.jsx(t,{children:"Metrics"}),e.jsx(t,{children:"AI reason"}),e.jsx(t,{children:"Seen"}),e.jsx(t,{className:"text-right",children:"Actions"})]})}),e.jsx(A,{children:m?m.length===0?e.jsx(i,{children:e.jsx(a,{colSpan:5,className:"text-center py-6 text-muted-foreground",children:"No pending alerts."})}):m.map(s=>e.jsxs(i,{children:[e.jsx(a,{className:"font-mono text-sm",children:s.domain}),e.jsx(a,{children:e.jsx(U,{a:s})}),e.jsx(a,{className:"text-xs max-w-md",children:s.gemini_reason}),e.jsx(a,{className:"text-xs text-muted-foreground",children:L(new Date(s.created_at),{addSuffix:!0})}),e.jsxs(a,{className:"text-right space-x-1",children:[e.jsxs(r,{size:"sm",variant:"destructive",onClick:()=>v(s.id,"block"),children:[e.jsx(he,{className:"h-3 w-3 mr-1"}),"Block"]}),e.jsxs(r,{size:"sm",variant:"outline",onClick:()=>v(s.id,"allowlist"),children:[e.jsx(X,{className:"h-3 w-3 mr-1"}),"Allow"]}),e.jsx(r,{size:"sm",variant:"ghost",onClick:()=>v(s.id,"dismiss"),children:"Dismiss"})]})]},s.id)):e.jsx(i,{children:e.jsx(a,{colSpan:5,className:"text-center py-6 text-muted-foreground",children:"Loading…"})})})]})})]})}),e.jsx(C,{value:"blocked",children:e.jsxs(b,{children:[e.jsx(w,{children:e.jsx(_,{children:"Auto-blocked (last 200)"})}),e.jsx(y,{children:e.jsxs(S,{children:[e.jsx(D,{children:e.jsxs(i,{children:[e.jsx(t,{children:"Domain"}),e.jsx(t,{children:"Metrics"}),e.jsx(t,{children:"AI reason"}),e.jsx(t,{children:"Blocked"}),e.jsx(t,{className:"text-right",children:"Actions"})]})}),e.jsx(A,{children:u?u.length===0?e.jsx(i,{children:e.jsx(a,{colSpan:5,className:"text-center py-6 text-muted-foreground",children:"Nothing auto-blocked yet."})}):u.map(s=>e.jsxs(i,{children:[e.jsx(a,{className:"font-mono text-sm",children:s.domain}),e.jsx(a,{children:e.jsx(U,{a:s})}),e.jsx(a,{className:"text-xs max-w-md",children:s.gemini_reason}),e.jsx(a,{className:"text-xs text-muted-foreground",children:L(new Date(s.created_at),{addSuffix:!0})}),e.jsxs(a,{className:"text-right space-x-1",children:[e.jsx(r,{size:"sm",variant:"outline",onClick:()=>v(s.id,"unblock"),children:"Unblock"}),e.jsxs(r,{size:"sm",variant:"ghost",onClick:()=>v(s.id,"allowlist"),children:[e.jsx(X,{className:"h-3 w-3 mr-1"}),"Allowlist"]})]})]},s.id)):e.jsx(i,{children:e.jsx(a,{colSpan:5,className:"text-center py-6 text-muted-foreground",children:"Loading…"})})})]})})]})}),e.jsx(C,{value:"allowlist",children:e.jsxs(b,{children:[e.jsx(w,{children:e.jsx(_,{children:"Allowlist (never auto-block)"})}),e.jsxs(y,{className:"space-y-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(J,{placeholder:"domain.com",value:I,onChange:s=>M(s.target.value),onKeyDown:s=>s.key==="Enter"&&O(),className:"max-w-xs"}),e.jsxs(r,{onClick:O,variant:"secondary",children:[e.jsx(xe,{className:"h-3 w-3 mr-1"}),"Add"]})]}),e.jsxs(S,{children:[e.jsx(D,{children:e.jsxs(i,{children:[e.jsx(t,{children:"Domain"}),e.jsx(t,{children:"Reason"}),e.jsx(t,{children:"Added"}),e.jsx(t,{className:"text-right",children:"Actions"})]})}),e.jsx(A,{children:j?j.length===0?e.jsx(i,{children:e.jsx(a,{colSpan:4,className:"text-center py-6 text-muted-foreground",children:"Empty."})}):j.map(s=>e.jsxs(i,{children:[e.jsx(a,{className:"font-mono text-sm",children:s.domain}),e.jsx(a,{className:"text-sm",children:s.reason||"—"}),e.jsx(a,{className:"text-xs text-muted-foreground",children:new Date(s.created_at).toLocaleDateString()}),e.jsx(a,{className:"text-right",children:e.jsx(r,{size:"sm",variant:"destructive",onClick:()=>ne(s.id,s.domain),children:e.jsx(me,{className:"h-3 w-3"})})})]},s.id)):e.jsx(i,{children:e.jsx(a,{colSpan:4,className:"text-center py-6 text-muted-foreground",children:"Loading…"})})})]})]})]})}),e.jsx(C,{value:"logs",children:e.jsxs(b,{children:[e.jsxs(w,{className:"flex flex-row items-center justify-between gap-3",children:[e.jsx(_,{children:"Email validation log (last 200)"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(r,{size:"sm",variant:g==="all"?"default":"outline",onClick:()=>B("all"),children:"All"}),e.jsx(r,{size:"sm",variant:g==="blocked"?"default":"outline",onClick:()=>B("blocked"),children:"DeBounce blocks"}),e.jsx(r,{size:"sm",variant:g==="safe_but_blocked"?"default":"outline",onClick:()=>B("safe_but_blocked"),children:"Safe but blocked (gap)"}),e.jsx(r,{size:"sm",variant:"ghost",onClick:K,children:e.jsx(G,{className:"h-3 w-3"})})]})]}),e.jsx(y,{children:e.jsxs(S,{children:[e.jsx(D,{children:e.jsxs(i,{children:[e.jsx(t,{children:"When"}),e.jsx(t,{children:"Hostname"}),e.jsx(t,{children:"Root"}),e.jsx(t,{children:"DeBounce"}),e.jsx(t,{children:"Decision"}),e.jsx(t,{children:"Why"})]})}),e.jsx(A,{children:T?T.length===0?e.jsx(i,{children:e.jsx(a,{colSpan:6,className:"text-center py-6 text-muted-foreground",children:"No rows."})}):T.map(s=>e.jsxs(i,{children:[e.jsx(a,{className:"text-xs text-muted-foreground whitespace-nowrap",children:L(new Date(s.created_at),{addSuffix:!0})}),e.jsx(a,{className:"font-mono text-xs",children:s.hostname||"—"}),e.jsx(a,{className:"font-mono text-xs",children:s.root_domain||"—"}),e.jsx(a,{children:e.jsxs("div",{className:"flex items-center gap-1 flex-wrap",children:[z(s.debounce_result,s.debounce_reason),s.debounce_disposable&&e.jsx(l,{variant:"destructive",className:"text-[10px]",children:"disp"}),s.debounce_accept_all&&e.jsx(l,{variant:"default",className:"text-[10px]",children:"catch-all"}),s.debounce_role&&e.jsx(l,{variant:"outline",className:"text-[10px]",children:"role"}),s.debounce_send_transactional!==null&&s.debounce_send_transactional<=3&&e.jsxs(l,{variant:"outline",className:"text-[10px]",children:["score ",s.debounce_send_transactional]})]})}),e.jsx(a,{children:e.jsx(l,{variant:s.decision==="allow"?"secondary":"destructive",className:"text-[10px]",children:s.decision})}),e.jsx(a,{className:"text-xs text-muted-foreground max-w-md",children:s.block_reason||"—"})]},s.id)):e.jsx(i,{children:e.jsx(a,{colSpan:6,className:"text-center py-6 text-muted-foreground",children:"Loading…"})})})]})})]})})]})]})};export{be as default};

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.