vendor: 16,384 bytes, line 1
1import{d as Yt,r as x,q as fe,c as p,o as Xt,a as Zt,G as pe,I as ne,A as e,y as c,k as m,C as o,u as n,J as S,z as g,F as U,Q as F,D as y,N as Ce,U as h,W as v,Y as ea,M as Ze,B as d}from"./vendor-vue-CsbjxI08.js";import{_ as ta}from"./AppLayout.vue_vue_type_script_setup_true_lang-DrBsXKZC.js";import{_ as et}from"./BaseDialog.vue_vue_type_script_setup_true_lang-DotL6kcS.js";import{a as aa,_ as k,l as H,k as sa}from"./index-BzylLGuI.js";import{S as _e}from"./Select-D1r8_mRQ.js";import{_ as ie}from"./Toggle.vue_vue_type_script_setup_true_lang-LCczHnCS.js";import{P as ra}from"./Pagination-9mmHDurk.js";import{b as M}from"./apiError-BPX0TiUA.js";import{u as oa}from"./vendor-i18n-5MxlSExE.js";/* empty css */import"./vendor-misc-CU62nypU.js";import"./LocaleSwitcher-DjXczmWf.js";/* empty css */const na={class:"space-y-6"},ia={key:0,class:"flex items-center justify-center py-16"},la={class:"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between"},da={class:"text-2xl font-semibold text-gray-900 dark:text-white"},ua={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},ca={class:"flex flex-wrap items-center gap-2"},ma=["disabled"],pa={class:"grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-4"},_a={class:"flex min-w-0 items-center gap-3"},ga={class:"min-w-0 flex-1"},ka={class:"flex min-w-0 items-center justify-between gap-2"},ya={class:"truncate text-xs font-medium text-gray-500 dark:text-gray-400"},xa={class:"mt-1 flex min-w-0 items-baseline gap-2"},ba={class:"truncate text-xl font-semibold leading-7 text-gray-900 dark:text-white"},ha={key:0,class:"truncate text-xs text-gray-500 dark:text-gray-400"},va={class:"card"},fa={class:"flex flex-col gap-4 border-b border-gray-100 px-6 py-4 dark:border-dark-700 lg:flex-row lg:items-center lg:justify-between"},Ca={class:"text-lg font-semibold text-gray-900 dark:text-white"},wa={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Sa={key:0},Aa={class:"grid grid-cols-1 gap-6 p-6 xl:grid-cols-[minmax(0,360px)_1fr]"},za={class:"space-y-4"},Ha={class:"rounded-lg border border-gray-100 p-4 dark:border-dark-700"},Ta={class:"flex items-center justify-between gap-3"},Va={class:"text-sm font-medium text-gray-900 dark:text-white"},Ua={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Da={class:"text-sm font-semibold text-gray-900 dark:text-white"},ja={class:"mt-4 h-2 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-700"},Fa={class:"grid grid-cols-2 gap-3"},Ma={class:"rounded-lg bg-gray-50 p-4 dark:bg-dark-700/50"},Ia={class:"text-xs text-gray-500 dark:text-gray-400"},Ra={class:"mt-2 text-2xl font-semibold text-gray-900 dark:text-white"},Pa={class:"rounded-lg bg-emerald-50 p-4 dark:bg-emerald-900/10"},$a={class:"text-xs text-gray-500 dark:text-gray-400"},Na={class:"mt-2 text-2xl font-semibold text-emerald-700 dark:text-emerald-300"},Ea={class:"rounded-lg bg-gray-50 p-4 dark:bg-dark-700/50"},La={class:"text-xs text-gray-500 dark:text-gray-400"},qa={class:"mt-2 text-2xl font-semibold text-gray-900 dark:text-white"},Ba={class:"rounded-lg bg-gray-50 p-4 dark:bg-dark-700/50"},Oa={class:"text-xs text-gray-500 dark:text-gray-400"},Ga={class:"mt-2 text-2xl font-semibold text-gray-900 dark:text-white"},Wa={class:"mb-3 flex items-center justify-between gap-3"},Ja={class:"text-sm font-medium text-gray-900 dark:text-white"},Qa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ya={class:"inline-flex items-center rounded-full bg-gray-100 px-2.5 py-1 text-xs font-medium text-gray-600 dark:bg-dark-700 dark:text-gray-300"},Xa={class:"grid grid-cols-2 gap-2 sm:grid-cols-4 md:grid-cols-6 xl:grid-cols-8 2xl:grid-cols-10"},Za=["title"],es={class:"text-sm font-semibold"},ts={class:"card"},as={class:"flex flex-col gap-4 border-b border-gray-100 px-6 py-4 dark:border-dark-700"},ss={class:"flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},rs={class:"text-lg font-semibold text-gray-900 dark:text-white"},os={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},ns=["disabled"],is={class:"grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-6"},ls=["placeholder"],ds=["title"],us=["title"],cs={class:"overflow-x-auto"},ms={class:"min-w-full divide-y divide-gray-200 dark:divide-dark-700"},ps={class:"bg-gray-50 dark:bg-dark-800"},_s={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},gs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},ks={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},ys={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},xs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},bs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},hs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},vs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},fs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},Cs={class:"px-5 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-400"},ws={class:"divide-y divide-gray-100 bg-white dark:divide-dark-800 dark:bg-dark-800"},Ks={key:0},Ss={colspan:"10",class:"px-5 py-12 text-center text-sm text-gray-500 dark:text-gray-400"},As={key:1},zs={colspan:"10",class:"px-5 py-12 text-center text-sm text-gray-500 dark:text-gray-400"},Hs={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},Ts={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},Vs={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},Us={key:0,class:"text-xs text-gray-400"},Ds={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},js={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},Fs={class:"text-xs text-gray-400"},Ms={class:"whitespace-nowrap px-5 py-4"},Is={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},Rs={class:"text-xs text-gray-400"},Ps={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},$s={class:"text-xs text-gray-400"},Ns={key:0},Es=["disabled","onClick"],Ls={class:"whitespace-nowrap px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},qs={key:0,class:"text-xs text-gray-400"},Bs={class:"w-[320px] max-w-sm px-5 py-4 text-sm text-gray-700 dark:text-gray-300"},Os=["title","onClick"],Gs={class:"min-w-0 flex-1 truncate"},Ws={class:"space-y-6"},Js={class:"flex gap-2 overflow-x-auto border-b border-gray-100 pb-3 dark:border-dark-700"},Qs=["onClick"],Ys={key:0,class:"space-y-5"},Xs={class:"grid grid-cols-1 gap-5 lg:grid-cols-2"},Zs={class:"flex items-center justify-between rounded-lg border border-gray-100 p-4 dark:border-dark-700"},er={class:"text-sm font-medium text-gray-900 dark:text-white"},tr={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ar={class:"input-label"},sr={class:"mt-2 text-xs leading-5 text-gray-500 dark:text-gray-400"},rr={class:"input-label"},or={class:"input-label"},nr={class:"input-label"},ir={class:"input-label"},lr={class:"input-label"},dr={class:"relative"},ur={class:"overflow-hidden rounded-xl border border-gray-100 bg-white shadow-sm dark:border-dark-700 dark:bg-dark-800"},cr={class:"flex flex-col gap-4 border-b border-gray-100 bg-gray-50 px-4 py-4 dark:border-dark-700 dark:bg-dark-800/60 lg:flex-row lg:items-center lg:justify-between"},mr={class:"flex items-start gap-3"},pr={class:"mt-0.5 flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-primary-50 text-primary-600 dark:bg-primary-900/30 dark:text-primary-300"},_r={class:"text-sm font-semibold text-gray-900 dark:text-white"},gr={class:"mt-1 max-w-3xl text-xs leading-5 text-gray-500 dark:text-gray-400"},kr={class:"flex flex-wrap items-center gap-2"},yr=["disabled"],xr=["disabled"],br={class:"grid grid-cols-1 gap-4 p-4 xl:grid-cols-[minmax(0,1fr)_minmax(360px,440px)]"},hr={class:"space-y-3"},vr={class:"flex flex-col gap-2 rounded-lg border border-gray-100 bg-gray-50 p-2 dark:border-dark-700 dark:bg-dark-900/30 sm:flex-row sm:items-center sm:justify-between"},fr={class:"text-xs leading-5 text-gray-500 dark:text-gray-400"},Cr={class:"font-medium text-gray-700 dark:text-gray-200"},wr={class:"ml-2"},Kr={class:"inline-flex rounded-lg bg-white p-1 shadow-sm dark:bg-dark-800"},Sr=["disabled"],Ar=["disabled"],zr=["placeholder","disabled"],Hr={class:"flex flex-wrap items-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Tr={class:"inline-flex rounded-md bg-gray-100 px-2 py-1 dark:bg-dark-700"},Vr={key:0,class:"inline-flex rounded-md bg-gray-100 px-2 py-1 dark:bg-dark-700"},Ur={key:1,class:"inline-flex rounded-md bg-red-50 px-2 py-1 text-red-700 dark:bg-red-900/20 dark:text-red-300"},Dr={key:2,class:"inline-flex rounded-md bg-amber-50 px-2 py-1 text-amber-700 dark:bg-amber-900/20 dark:text-amber-300"},jr={key:3,class:"inline-flex rounded-md bg-amber-50 px-2 py-1 text-amber-700 dark:bg-amber-900/20 dark:text-amber-300"},Fr={class:"mb-3 flex items-center justify-between gap-3"},Mr={class:"text-sm font-semibold text-gray-900 dark:text-white"},Ir={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Rr=["placeholder"],Pr={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},$r={class:"flex items-start gap-2"},Nr={class:"text-sm font-medium text-gray-800 dark:text-gray-100"},Er={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Lr={class:"btn btn-secondary inline-flex cursor-pointer items-center gap-2"},qr={key:0,class:"mt-3 grid grid-cols-2 gap-2 sm:grid-cols-4"},Br=["src"],Or=["onClick"],Gr={class:"rounded-lg border border-gray-100 bg-gray-50 p-3 dark:border-dark-700 dark:bg-dark-900/30"},Wr={class:"mb-3 flex items-start justify-between gap-3"},Jr={class:"min-w-0"},Qr={class:"text-sm font-semibold text-gray-900 dark:text-white"},Yr={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Xr={class:"inline-flex shrink-0 items-center whitespace-nowrap rounded-full bg-white px-2 py-0.5 text-[11px] font-medium leading-5 text-gray-600 shadow-sm dark:bg-dark-800 dark:text-gray-300"},Zr={key:0,class:"flex min-h-32 flex-col items-center justify-center rounded-lg border border-dashed border-gray-200 bg-white px-4 py-6 text-center dark:border-dark-700 dark:bg-dark-800"},eo={class:"mt-2 text-sm font-medium text-gray-700 dark:text-gray-200"},to={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ao={key:1,class:"space-y-2"},so={class:"flex items-start justify-between gap-2"},ro={class:"min-w-0"},oo={class:"flex min-w-0 flex-wrap items-center gap-2"},no={class:"truncate font-mono text-sm font-semibold text-gray-900 dark:text-white"},io={class:"mt-1 text-xs leading-5 text-gray-500 dark:text-gray-400"},lo={class:"flex flex-shrink-0 items-center gap-1.5"},uo=["title","onClick"],co={key:0,class:"mt-1.5 rounded-md bg-amber-50 px-2 py-1.5 text-xs leading-5 text-amber-700 dark:bg-amber-900/20 dark:text-amber-300"},mo={key:0,class:"flex items-center justify-between gap-3 rounded-lg border border-dashed border-gray-200 bg-white px-3 py-2 text-xs text-gray-500 dark:border-dark-700 dark:bg-dark-800 dark:text-gray-400"},po={class:"min-w-0 truncate"},_o={key:2,class:"mt-4 rounded-lg border border-gray-100 bg-white p-3 dark:border-dark-700 dark:bg-dark-800"},go={class:"flex items-start justify-between gap-3"},ko={class:"text-sm font-semibold text-gray-900 dark:text-white"},yo={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},xo={class:"mt-3"},bo={class:"mb-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ho={class:"font-semibold text-gray-900 dark:text-white"},vo={class:"h-2 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-700"},fo={class:"mt-3 max-h-52 space-y-2 overflow-y-auto pr-1"},Co={class:"mb-1 flex items-center justify-between gap-3 text-xs"},wo={class:"truncate text-gray-600 dark:text-gray-300"},Ko={class:"font-mono text-gray-500 dark:text-gray-400"},So={class:"h-1.5 overflow-hidden rounded-full bg-gray-100 dark:bg-dark-700"},Ao={key:1,class:"space-y-5"},zo={class:"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between"},Ho={class:"text-base font-semibold text-gray-900 dark:text-white"},To={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Vo={class:"inline-flex rounded-lg bg-gray-100 p-1 dark:bg-dark-700"},Uo={key:0,class:"space-y-4"},Do={class:"relative"},jo=["placeholder"],Fo={class:"grid max-h-[420px] grid-cols-1 gap-3 overflow-y-auto pr-1 md:grid-cols-2 xl:grid-cols-3"},Mo=["onClick"],Io={class:"min-w-0"},Ro={class:"block truncate text-sm font-semibold text-gray-900 dark:text-white"},Po={class:"mt-1 inline-flex rounded-md bg-gray-100 px-2 py-0.5 text-xs text-gray-500 dark:bg-dark-700 dark:text-gray-400"},$o={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},No={key:2,class:"grid grid-cols-1 gap-5 lg:grid-cols-2"},Eo={class:"input-label"},Lo={class:"input-label"},qo={class:"flex items-center justify-between rounded-lg border border-gray-100 p-4 dark:border-dark-700 lg:col-span-2"},Bo={class:"text-sm font-medium text-gray-900 dark:text-white"},Oo={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Go={class:"space-y-4 rounded-lg border border-gray-100 p-4 dark:border-dark-700 lg:col-span-2"},Wo={class:"flex items-center justify-between gap-4"},Jo={class:"text-sm font-medium text-gray-900 dark:text-white"},Qo={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Yo={class:"rounded-lg bg-gray-50 p-3 dark:bg-dark-900/30"},Xo={class:"flex flex-col gap-3 xl:flex-row xl:items-center xl:justify-between"},Zo={class:"text-sm font-medium text-gray-900 dark:text-white"},en={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},tn=["disabled"],an={class:"mt-3 flex flex-col gap-2 sm:flex-row"},sn=["placeholder"],rn=["disabled"],on={key:3,class:"space-y-5"},nn={class:"grid grid-cols-1 gap-5 lg:grid-cols-2"},ln={class:"input-label"},dn={class:"input-label"},un={class:"flex items-center justify-between rounded-lg border border-gray-100 p-4 dark:border-dark-700"},cn={class:"text-sm font-medium text-gray-900 dark:text-white"},mn={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pn={class:"flex items-center justify-between rounded-lg border border-gray-100 p-4 dark:border-dark-700"},_n={class:"text-sm font-medium text-gray-900 dark:text-white"},gn={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},kn={class:"input-label"},yn={class:"input-label"},xn={key:4,class:"grid grid-cols-1 gap-5 lg:grid-cols-2"},bn={class:"input-label"},hn={class:"input-label"},vn={class:"rounded-lg border border-gray-100 p-4 text-sm text-gray-500 dark:border-dark-700 dark:text-gray-400 lg:col-span-2"},fn={class:"flex flex-wrap items-center gap-3"},Cn={class:"flex justify-end gap-2"},wn=["disabled"],Kn={key:0,class:"space-y-5"},Sn={class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4"},An={class:"rounded-lg border border-gray-100 bg-gray-50 p-4 dark:border-dark-700 dark:bg-dark-800/70"},zn={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Hn={class:"mt-1 truncate text-sm font-semibold text-gray-900 dark:text-white"},Tn={class:"rounded-lg border border-gray-100 bg-gray-50 p-4 dark:border-dark-700 dark:bg-dark-800/70"},Vn={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Un={class:"mt-1 truncate text-sm font-semibold text-gray-900 dark:text-white"},Dn={class:"rounded-lg border border-gray-100 bg-gray-50 p-4 dark:border-dark-700 dark:bg-dark-800/70"},jn={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Fn={class:"rounded-lg border border-gray-100 bg-gray-50 p-4 dark:border-dark-700 dark:bg-dark-800/70"},Mn={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},In={class:"mt-1 truncate text-sm font-semibold text-gray-900 dark:text-white"},Rn={class:"rounded-xl border border-gray-100 bg-white p-4 shadow-sm dark:border-dark-700 dark:bg-dark-800"},Pn={class:"flex flex-wrap items-center justify-be
1tween gap-3"},$n={class:"text-sm font-semibold text-gray-900 dark:text-white"},Nn={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},En={key:0,class:"inline-flex rounded-md bg-sky-50 px-2.5 py-1 text-xs font-medium text-sky-700 dark:bg-sky-900/20 dark:text-sky-300"},Ln={class:"mt-4 max-h-[420px] overflow-auto whitespace-pre-wrap break-words rounded-lg bg-gray-950 p-4 text-sm leading-6 text-gray-100 shadow-inner dark:bg-black/50"},qn={class:"flex justify-end"},tt=1,Bn=8*1024*1024,at=3,ni=Yt({__name:"RiskControlView",setup(On){const{t:a}=oa(),f=aa(),ge=x(!0),J=x(!1),Q=x(!1),le=x(!1),I=x(!1),T=x(!1),$=x(null),Y=x(!1),R=x("basic"),ke=x(""),X=x(""),de=x([]),Z=x([]),_=x(null),ee=x([]),A=x([]),D=x(!1),N=x(""),V=x([]),z=x(null),C=x(null);let ue=null;const r=fe({enabled:!1,mode:"pre_block",base_url:"https://api.openai.com",model:"omni-moderation-latest",api_keys_text:"",api_key_configured:!1,api_key_masked:"",api_key_count:0,api_key_masks:[],api_key_statuses:[],api_keys_mode:"append",clear_api_key:!1,timeout_ms:3e3,retry_count:2,sample_rate:100,all_groups:!0,group_ids:[],record_non_hits:!1,worker_count:4,queue_size:32768,block_status:403,block_message:"å
容审计å½ä¸é£é©è§åï¼è¯·è°æ´è¾å
¥åéè¯",email_on_hit:!0,auto_ban_enabled:!0,ban_threshold:10,violation_window_hours:720,hit_retention_days:180,non_hit_retention_days:3,pre_hash_check_enabled:!1}),K=fe({page:1,page_size:20,total:0,pages:1}),w=fe({result:"",group_id:0,endpoint:"",search:"",from:"",to:""}),we=p(()=>Array.isArray(Z.value)?Z.value:[]),st=p(()=>[{id:"basic",label:a("admin.riskControl.tabs.basic")},{id:"scope",label:a("admin.riskControl.tabs.scope")},{id:"runtime",label:a("admin.riskControl.tabs.runtime")},{id:"response",label:a("admin.riskControl.tabs.response")},{id:"retention",label:a("admin.riskControl.tabs.retention")}]),Ke=p(()=>[{value:"pre_block",label:a("admin.riskControl.modePreBlock")},{value:"observe",label:a("admin.riskControl.modeObserve")},{value:"off",label:a("admin.riskControl.modeOff")}]),rt=p(()=>[{value:"",label:a("admin.riskControl.result.all")},{value:"hit",label:a("admin.riskControl.result.hit")},{value:"blocked",label:a("admin.riskControl.result.blocked")},{value:"pass",label:a("admin.riskControl.result.pass")},{value:"error",label:a("admin.riskControl.result.error")}]),ot=p(()=>[{value:"",label:a("admin.riskControl.filters.allEndpoints")},{value:"/v1/messages",label:"/v1/messages"},{value:"/v1/responses",label:"/v1/responses"},{value:"/v1/chat/completions",label:"/v1/chat/completions"},{value:"/v1beta/models",label:"/v1beta/models"},{value:"/v1/images/generations",label:"/v1/images/generations"},{value:"/v1/images/edits",label:"/v1/images/edits"}]),nt=p(()=>[{value:0,label:a("admin.riskControl.filters.allGroups")},...de.value.map(t=>({value:t.id,label:`${t.name} (${t.platform})`}))]),it=p(()=>String(r.group_ids.length)),Se=p(()=>{const t=ke.value.trim().toLowerCase();return t?de.value.filter(s=>s.name.toLowerCase().includes(t)||String(s.platform).toLowerCase().includes(t)):de.value}),Ae=p(()=>he(r.api_keys_text).length),ce=p(()=>A.value.length),ye=p(()=>Math.max(0,r.api_key_count-ce.value)),lt=p(()=>r.api_keys_mode==="replace"?a("admin.riskControl.apiKeysPlaceholderReplace"):a("admin.riskControl.apiKeysPlaceholder")),dt=p(()=>r.api_keys_mode==="replace"?a("admin.riskControl.apiKeysModeReplaceHint"):a("admin.riskControl.apiKeysModeAppendHint")),ze=p(()=>N.value.trim()!==""||V.value.length>0),He=p(()=>/^[a-fA-F0-9]{64}$/.test(X.value.trim())),ut=p(()=>I.value?a("admin.riskControl.testingApiKeys"):ze.value?a("admin.riskControl.testContentWithStoredApiKey"):a("admin.riskControl.testStoredApiKeys")),xe=p(()=>{var s,u;const t=(u=(s=_.value)==null?void 0:s.api_key_statuses)!=null&&u.length?_.value.api_key_statuses:r.api_key_statuses;return Array.isArray(t)?t:[]}),P=p(()=>[...xe.value,...ee.value]),Te=p(()=>D.value?P.value:P.value.slice(0,at)),ct=p(()=>Math.max(0,P.value.length-Te.value.length)),mt=p(()=>P.value.length>at),Ve=p(()=>xe.value.filter(t=>!te(t))),Ue=p(()=>{const t={ok:0,error:0,frozen:0,unknown:0};for(const s of Ve.value)t[s.status]=(t[s.status]??0)+1;return Ve.value.length===0&&ye.value>0&&(t.unknown=ye.value),["ok","frozen","error","unknown"].map(s=>({status:s,count:t[s]})).filter(s=>s.count>0)}),pt=p(()=>
1r.api_key_configured?Ue.value.length===0?a("admin.riskControl.apiKeyStatusUnknown"):Ue.value.map(t=>`${Be(t.status)} ${t.count}`).join(" · "):""),_t=p(()=>[{key:"status",label:a("admin.riskControl.overview.status"),value:r.enabled?a("admin.riskControl.overview.enabled"):a("admin.riskControl.overview.disabled"),meta:Ne(r.mode),icon:"shield",iconClass:r.enabled?"bg-emerald-50 text-emerald-600 dark:bg-emerald-900/20 dark:text-emerald-300":"bg-gray-100 text-gray-500 dark:bg-dark-700 dark:text-gray-400",badge:bt.value,badgeClass:ht.value},{key:"api-key",label:a("admin.riskControl.overview.apiKey"),value:r.api_key_configured?a("admin.riskControl.apiKeyCount",{count:r.api_key_count}):a("admin.riskControl.notConfigured"),meta:r.api_key_configured?pt.value||r.model||"-":r.model||"-",icon:"key",iconClass:"bg-sky-50 text-sky-600 dark:bg-sky-900/20 dark:text-sky-300"},{key:"scope",label:a("admin.riskControl.overview.groupScope"),value:r.all_groups?a("admin.riskControl.allGroups"):it.value,meta:r.all_groups?a("admin.riskControl.allGroupsHint"):a("admin.riskControl.selectedGroupsHint"),icon:"users",iconClass:"bg-violet-50 text-violet-600 dark:bg-violet-900/20 dark:text-violet-300"},{key:"logs",label:a("admin.riskControl.overview.logs"),value:O(K.total),meta:a("admin.riskControl.overview.currentFilter"),icon:"document",iconClass:"bg-amber-50 text-amber-600 dark:bg-amber-900/20 dark:text-amber-300"}]),gt=p(()=>{const t=z.value;return t?Object.entries(t.category_scores||{}).map(([s,u])=>{var j;const b=((j=t.thresholds)==null?void 0:j[s])??1;return{category:s,score:u,threshold:b,hit:u>=b}}).sort((s,u)=>u.score-s.score):[]}),kt=p(()=>C.value&&(C.value.input_excerpt||C.value.error)||"-"),De=p(()=>{var t;return`${Math.min(100,Math.max(0,((t=_.value)==null?void 0:t.queue_usage_percent)??0)).toFixed(1)}%`}),yt=p(()=>({width:De.value})),xt=p(()=>{var b,j,se,re,oe;const t=Math.max(0,((b=_.value)==null?void 0:b.worker_count)??r.worker_count),s=Math.max(0,((j=_.value)==null?void 0:j.active_workers)??0),u=!!((se=_.value)!=null&&se.risk_control_enabled&&((re=_.value)!=null&&re.enabled)&&((oe=_.value)==null?void 0:oe.mode)!=="off");return Array.from({length:t},(ve,G)=>({id:G+1,state:u?G<s?"active":"idle":"disabled",label:u?G<s?a("admin.riskControl.workerActive"):a("admin.riskControl.workerIdle"):a("admin.riskControl.workerDisabled")}))}),bt=p(()=>{var t;return(t=_.value)!=null&&t.risk_control_enabled?!r.enabled||r.mode==="off"?a("admin.riskControl.overview.disabled"):a("admin.riskControl.overview.enabled"):a("admin.riskControl.riskSwitchOff")}),ht=p(()=>{var t;return!((t=_.value)!=null&&t.risk_control_enabled)||!r.enabled||r.mode==="off"?"bg-gray-100 text-gray-600 dark:bg-dark-700 dark:text-gray-300":"bg-emerald-50 text-emerald-700 dark:bg-emerald-900/20 dark:text-emerald-300"});function je(t){r.enabled=t.enabled,r.mode=t.mode,r.base_url=t.base_url||"https://api.openai.com",r.model=t.model||"omni-moderation-latest",r.api_keys_text="",r.api_key_configured=t.api_key_configured,r.api_key_masked=t.api_key_masked||"",r.api_key_count=t.api_key_count||0,r.api_key_masks=Array.isArray(t.api_key_masks)?[...t.api_key_masks]:[],r.api_key_statuses=Array.isArray(t.api_key_statuses)?[...t.api_key_statuses]:[],r.api_keys_mode="append",r.clear_api_key=!1,A.value=[],ee.value=[],D.value=!1,r.timeout_ms=t.timeout_ms||3e3,r.retry_count=t.retry_count??2,r.sample_rate=t.sample_rate??100,r.all_groups=t.all_groups,r.group_ids=Array.isArray(t.group_ids)?[...t.group_ids]:[],r.record_non_hits=t.record_non_hits,r.worker_count=t.worker_count||4,r.queue_size=t.queue_size||32768,r.block_status=t.block_status||403,r.block_message=t.block_message||"å
容审计å½ä¸é£é©è§åï¼è¯·è°æ´è¾å
¥åéè¯",r.email_on_hit=t.email_on_hit??!0,r.auto_ban_enabled=t.auto_ban_enabled??!0,r.ban_threshold=t.ban_threshold||10,r.violation_window_hours=t.violation_window_hours||720,r.hit_retention_days=t.hit_retention_days||180,r.non_hit_retention_days=Math.min(Math.max(t.non_hit_retention_days||3,1),3),r.pre_hash_check_enabled=t.pre_hash_check_enabled??!1}async function vt(){ge.value=!0;try{const[t,s,u]=await Promise.all([H.riskControl.getConfig(),H.groups.getAll(),H.riskControl.getStatus()]);je(t),de.value=s,_.value=u,Array.isArray(u.api_key_statuses)&&(r.api_key_statuses=[...u.api_key_statuses],Pe()),await L()}
1catch(t){f.showError(M(t,a("admin.riskControl.loadFailed")))}finally{ge.value=!1}}async function E(t=!0){le.value=!0;try{const s=await H.riskControl.getStatus();_.value=s,Array.isArray(s.api_key_statuses)&&(r.api_key_statuses=[...s.api_key_statuses],Pe())}catch(s){t||f.showError(M(s,a("admin.riskControl.statusFailed")))}finally{le.value=!1}}async function ft(){J.value=!0;try{const t={enabled:r.enabled,mode:r.mode,base_url:r.base_url,model:r.model,timeout_ms:Number(r.timeout_ms)||3e3,retry_count:Number(r.retry_count)||0,sample_rate:Number(r.sample_rate)||0,all_groups:r.all_groups,group_ids:r.all_groups?[]:[...r.group_ids],record_non_hits:r.record_non_hits,clear_api_key:r.clear_api_key,worker_count:Number(r.worker_count)||4,queue_size:Number(r.queue_size)||32768,block_status:Number(r.block_status)||403,block_message:r.block_message||"å
容审计å½ä¸é£é©è§åï¼è¯·è°æ´è¾å
¥åéè¯",email_on_hit:r.email_on_hit,auto_ban_enabled:r.auto_ban_enabled,ban_threshold:Number(r.ban_threshold)||10,violation_window_hours:Number(r.violation_window_hours)||720,hit_retention_days:Number(r.hit_retention_days)||180,non_hit_retention_days:Math.min(Math.max(Number(r.non_hit_retention_days)||3,1),3),pre_hash_check_enabled:r.pre_hash_check_enabled},s=he(r.api_keys_text);if(!t.clear_api_key&&r.api_keys_mode==="replace"&&s.length===0){f.showError(a("admin.riskControl.apiKeysReplaceNoInput"));return}s.length>0&&(t.api_keys=s,t.api_keys_mode=r.api_keys_mode,t.clear_api_key=!1),!t.clear_api_key&&r.api_keys_mode!=="replace"&&A.value.length>0&&(t.delete_api_key_hashes=[...A.value]);const u=await H.riskControl.updateConfig(t);je(u),Y.value=!1,f.showSuccess(a("admin.riskControl.saved")),await Promise.all([E(!0),L()])}catch(t){f.showError(M(t,a("admin.riskControl.saveFailed")))}finally{J.value=!1}}async function L(){Q.value=!0;try{const t={page:K.page,page_size:K.page_size,result:w.result||void 0,group_id:w.group_id||void 0,endpoint:w.endpoint||void 0,search:w.search||void 0,from:Oe(w.from),to:Oe(w.to)},s=await H.riskControl.listLogs(t);Z.value=s.items,K.total=s.total,K.page=s.page,K.page_size=s.page_size,K.pages=s.pages}catch(t){f.showError(M(t,a("admin.riskControl.logsFailed")))}finally{Q.value=!1}}function Ct(t){return!!(t.auto_banned&&t.user_id&&t.user_status==="disabled")}function Fe(t){return t.input_excerpt||t.error||"-"}function wt(t){C.value=t}function Me(){C.value=null}async function Kt(t){if(!(!t.user_id||$.value!==null)){$.value=t.user_id;try{const s=await H.riskControl.unbanUser(t.user_id);Z.value=Z.value.map(u=>u.user_id!==t.user_id?u:{...u,user_status:s.status}),f.showSuccess(a("admin.riskControl.unbanSuccess"))}catch(s){f.showError(M(s,a("admin.riskControl.unbanFailed")))}finally{$.value=null}}}async function St(){if(!(!He.value||T.value)){T.value=!0;try{const t=await H.riskControl.deleteFlaggedHash(X.value);X.value="",await E(!0),f.showSuccess(t.deleted?a("admin.riskControl.flaggedHashDeleted"):a("admin.riskControl.flaggedHashNotFound"))}catch(t){f.showError(M(t,a("admin.riskControl.flaggedHashDeleteFailed")))}finally{T.value=!1}}}async function At(){if(!(T.value||!window.confirm(a("admin.riskControl.clearFlaggedHashesConfirm")))){T.value=!0;try{const s=await H.riskControl.clearFlaggedHashes();await E(!0),f.showSuccess(a("admin.riskControl.flaggedHashesCleared",{count:s.deleted}))}catch(s){f.showError(M(s,a("admin.riskControl.flaggedHashesClearFailed")))}finally{T.value=!1}}}function zt(){R.value="basic",Y.value=!0}function q(){K.page=1,L()}function Ht(t){K.page=t,L()}function Tt(t){K.page=1,K.page_size=t,L()}function Vt(){r.clear_api_key=!r.clear_api_key,r.clear_api_key&&(r.api_keys_text="",r.api_keys_mode="append",ee.value=[],A.value=[])}function Ie(t){r.api_keys_mode=t,t==="replace"&&(A.value=[])}async function Re(t){const s=t?he(r.api_keys_text):[];if(t&&s.length===0){f.showError(a("admin.riskControl.apiKeyTestNoInput"));return}I.value=!0;try{const u=await H.riskControl.testAPIKeys({api_keys:s,base_url:r.base_url,model:r.model,timeout_ms:Number(r.timeout_ms)||3e3,prompt:N.value,images:V.value});z.value=u.audit_result??null,t?ee.value=u.items.map(b=>({...b,configured:!1})):(Ut(u.items),ee.value=[],await E(!0)),f.showSuccess(a("admin.r
1iskControl.apiKeyTestDone",{count:u.items.length}))}catch(u){f.showError(M(u,a("admin.riskControl.apiKeyTestFailed")))}finally{I.value=!1}}function Ut(t){if(!ze.value||r.api_key_statuses.length===0){r.api_key_statuses=t;return}const s=new Map(t.map(u=>[u.key_hash,u]));r.api_key_statuses=r.api_key_statuses.map(u=>s.get(u.key_hash)??u)}function Dt(t){if(!t.configured||!t.key_hash)return;const s=A.value.indexOf(t.key_hash);if(s>=0){A.value.splice(s,1);return}A.value.push(t.key_hash)}function te(t){return t.configured&&t.key_hash!==""&&A.value.includes(t.key_hash)}function Pe(){const t=new Set(xe.value.map(s=>s.key_hash).filter(Boolean));A.value=A.value.filter(s=>t.has(s))}function jt(){N.value="",V.value=[],z.value=null}function Ft(t){V.value.splice(t,1)}async function Mt(t){const s=t.target;await be(s.files),s.value=""}async function It(t){var s;await be(((s=t.dataTransfer)==null?void 0:s.files)??null)}async function Rt(t){var u;const s=Array.from(((u=t.clipboardData)==null?void 0:u.files)??[]).filter(b=>b.type.startsWith("image/"));s.length!==0&&(t.preventDefault(),await be(s))}async function be(t){if(!t)return;const s=Array.from(t).filter(u=>u.type.startsWith("image/"));for(const u of s){if(V.value.length>=tt){f.showError(a("admin.riskControl.auditTestImageLimit",{count:tt}));return}if(u.size>Bn){f.showError(a("admin.riskControl.auditTestImageTooLarge"));continue}try{V.value.push(await Pt(u))}catch{f.showError(a("admin.riskControl.auditTestImageReadFailed"))}}}function Pt(t){return new Promise((s,u)=>{const b=new FileReader;b.onload=()=>s(String(b.result||"")),b.onerror=()=>u(b.error),b.readAsDataURL(t)})}function $t(t){const s=r.group_ids.indexOf(t);s>=0?r.group_ids.splice(s,1):r.group_ids.push(t)}function $e(t){return r.group_ids.includes(t)}function Ne(t){const s=Ke.value.find(u=>u.value===t);return(s==null?void 0:s.label)??t}function Nt(t){return{pre_block:a("admin.riskControl.modePreBlockDesc"),observe:a("admin.riskControl.modeObserveDesc"),off:a("admin.riskControl.modeOffDesc")}[t]??""}function Ee(t){return t.action==="block"?a("admin.riskControl.action.block"):t.action==="error"||t.error?a("admin.riskControl.action.error"):t.flagged?a("admin.riskControl.result.hit"):a("admin.riskControl.result.pass")}function Le(t){return t.action==="block"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300":t.action==="error"||t.error?"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300":t.flagged?"bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-300":"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300"}function Et(t){return t==="active"?"border-sky-200 bg-sky-50 text-sky-700 dark:border-sky-900/60 dark:bg-sky-900/20 dark:text-sky-300":t==="idle"?"border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900/60 dark:bg-emerald-900/20 dark:text-emerald-300":"border-gray-100 bg-white text-gray-400 dark:border-dark-700 dark:bg-dark-800 dark:text-gray-500"}function Lt(t){return t==="active"?"bg-sky-500":t==="idle"?"bg-emerald-500":"bg-gray-300 dark:bg-dark-500"}function B(t){return Number.isFinite(t)?`${(t*100).toFixed(1)}%`:"-"}function qe(t){return Number.isFinite(t)?`${Math.min(100,Math.max(0,t*100)).toFixed(1)}%`:"0%"}function qt(t){return t==null?"-":`${t} ms`}function Bt(t,s){return`${t.configured?"saved":"test"}-${t.key_hash||s}`}function Be(t){const s={ok:a("admin.riskControl.apiKeyStatusOk"),error:a("admin.riskControl.apiKeyStatusError"),frozen:a("admin.riskControl.apiKeyStatusFrozen"),unknown:a("admin.riskControl.apiKeyStatusUnknown")};return s[t]??s.unknown}function Ot(t){const s={ok:"bg-emerald-50 text-emerald-700 dark:bg-emerald-900/20 dark:text-emerald-300",error:"bg-amber-50 text-amber-700 dark:bg-amber-900/20 dark:text-amber-300",frozen:"bg-red-50 text-red-700 dark:bg-red-900/20 dark:text-red-300",unknown:"bg-gray-100 text-gray-600 dark:bg-dark-700 dark:text-gray-300"};return s[t]??s.unknown}function Gt(t){const s={ok:"bg-emerald-500",error:"bg-amber-500",frozen:"bg-red-500",unknown:"bg-gray-400"};return s[t]??s.unknown}function Wt(t){const s=[];
1return s.push(a("admin.riskControl.apiKeyFailureCount",{count:t.failure_count||0})),t.last_latency_ms>0&&s.push(a("admin.riskControl.apiKeyLatency",{ms:t.last_latency_ms})),t.last_http_status>0&&s.push(a("admin.riskControl.apiKeyHTTPStatus",{status:t.last_http_status})),t.frozen_until?s.push(a("admin.riskControl.apiKeyFrozenUntil",{time:ae(t.frozen_until)})):t.last_checked_at?s.push(a("admin.riskControl.apiKeyLastChecked",{time:ae(t.last_checked_at)})):s.push(a("admin.riskControl.apiKeyNotTested")),s.join(" / ")}function he(t){return t.split(/\r?\n/).map(s=>s.trim()).filter((s,u,b)=>s&&b.indexOf(s)===u)}function Jt(t){return t.flagged?a("admin.riskControl.violationCount",{count:t.violation_count||1}):"-"}function Oe(t){if(!t)return;const s=new Date(t);if(!Number.isNaN(s.getTime()))return s.toISOString()}function ae(t){return sa(t)||"-"}function O(t){return new Intl.NumberFormat().format(t)}return Xt(()=>{vt(),ue=window.setInterval(()=>{E(!0)},15e3)}),Zt(()=>{ue!==null&&(window.clearInterval(ue),ue=null)}),(t,s)=>(d(),pe(ta,null,{default:ne(()=>{var u,b,j,se,re,oe,ve,G,Ge,We,Je,Qe;return[e("div",na,[ge.value?(d(),c("div",ia,[...s[40]||(s[40]=[e("div",{class:"h-8 w-8 animate-spin rounded-full border-b-2 border-primary-600"},null,-1)])])):(d(),c(U,{key:1},[e("div",la,[e("div",null,[e("h1",da,o(n(a)("admin.riskControl.title")),1),e("p",ua,o(n(a)("admin.riskControl.description")),1)]),e("div",ca,[e("button",{type:"button",class:"btn btn-secondary inline-flex items-center gap-2",disabled:le.value,onClick:s[0]||(s[0]=l=>E(!1))},[m(k,{name:"refresh",size:"sm",class:g(le.value?"animate-spin":"")},null,8,["class"]),S(" "+o(n(a)("admin.riskControl.refreshStatus")),1)],8,ma),e("button",{type:"button",class:"btn btn-primary inline-flex items-center gap-2",onClick:zt},[m(k,{name:"cog",size:"sm"}),S(" "+o(n(a)("admin.riskControl.openSettings")),1)])])]),e("div",pa,[(d(!0),c(U,null,F(_t.value,l=>(d(),c("div",{key:l.key,class:"rounded-lg border border-gray-100 bg-white px-4 py-3 shadow-sm dark:border-dark-700 dark:bg-dark-800"},[e("div",_a,[e("div",{class:g(["flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-lg",l.iconClass])},[m(k,{name:l.icon,size:"sm"},null,8,["name"])],2),e("div",ga,[e("div",ka,[e("p",ya,o(l.label),1),l.badge?(d(),c("span",{key:0,class:g(["inline-flex flex-shrink-0 items-center rounded-full px-2 py-0.5 text-xs font-medium",l.badgeClass])},o(l.badge),3)):y("",!0)]),e("div",xa,[e("p",ba,o(l.value),1),l.meta?(d(),c("p",ha,o(l.meta),1)):y("",!0)])])])]))),128))]),e("div",va,[e("div",fa,[e("div",null,[e("h2",Ca,o(n(a)("admin.riskControl.workerStatus")),1),e("p",wa,o(n(a)("admin.riskControl.workerStatusHint")),1)]),e("div",Ka,[e("span",null,o(n(a)("admin.riskControl.autoRefresh")),1),(u=_.value)!=null&&u.last_cleanup_at?(d(),c("span",Sa,o(n(a)("admin.riskControl.lastCleanup",{time:ae(_.value.last_cleanup_at)})),1)):y("",!0)])]),e("div",Aa,[e("div",za,[e("div",Ha,[e("div",Ta,[e("div",null,[e("p",Va,o(n(a)("admin.riskControl.queueUsage")),1),e("p",Ua,o(O(((b=_.value)==null?void 0:b.queue_length)??0))+" / "+o(O(((j=_.value)==null?void 0:j.queue_size)??r.queue_size)),1)]),e("span",Da,o(De.value),1)]),e("div",ja,[e("div",{class:"h-full rounded-full bg-primary-500 transition-all duration-300",style:Ce(yt.value)},null,4)])]),e("div",Fa,[e("div",Ma,[e("p",Ia,o(n(a)("admin.riskControl.activeWorkers")),1),e("p",Ra,o(((se=_.value)==null?void 0:se.active_workers)??0),1)]),e("div",Pa,[e("p",$a,o(n(a)("admin.riskControl.idleWorkers")),1),e("p",Na,o(((re=_.value)==null?void 0:re.idle_workers)??r.worker_count),1)]),e("div",Ea,[e("p",La,o(n(a)("admin.riskControl.processed")),1),e("p",qa,o(O(((oe=_.value)==null?void 0:oe.processed)??0)),1)]),e("div",Ba,[e("p",Oa,o(n(a)("admin.riskControl.droppedErrors")),1),e("p",Ga,o(O((((ve=_.value)==null?void 0:ve.dropped)??0)+(((G=_.value)==null?void 0:G.errors)??0))),1)])])]),e("div",null,[e("div",Wa,[e("div",null,[e("p",Ja,o(n(a)("admin.riskControl.workerPool")),1),e("p",Qa,o(n(a)("admin.riskControl.workerPoolMeta",{active:((Ge=_.value)==null?void 0:Ge.active_workers)??0,idle:((We=_.value)==null?void 0:We.idle_workers)??r.worker_count,total:((Je=_.value)==null?void 0:Je.worker_count)??r.worker_count})),1)]),e("span",Ya,o(Ne(((Qe=_.value)==null?void 0:Qe.mode)??r.mode)),1)]),e("div",Xa,[(d(!0),c(U,null,F(xt.value,l=>(d(),c("div",{key:l.id,class:g(["flex h-12 items-center justify-between rounded-lg border px-3 transition-colors",Et(l.state)]),title:l.label},[e("span",es,"#"+o(l.id),1),e("span",{class:g(["h-2.5 w-2.5 rounded-full",Lt(l.state)])},null,2)],10,Za))),128))])])])]),e("div",ts,[e("div",as,[e("div",ss,[e("div",null,[e("h2",rs,o(n(a)("admin.r
1iskControl.records")),1),e("p",os,o(n(a)("admin.riskControl.recordsHint")),1)]),e("button",{type:"button",class:"btn btn-secondary inline-flex items-center gap-2",disabled:Q.value,onClick:L},[m(k,{name:"refresh",size:"sm",class:g(Q.value?"animate-spin":"")},null,8,["class"]),S(" "+o(n(a)("admin.riskControl.refresh")),1)],8,ns)]),e("div",is,[m(_e,{modelValue:w.result,"onUpdate:modelValue":s[1]||(s[1]=l=>w.result=l),options:rt.value,onChange:q},null,8,["modelValue","options"]),m(_e,{modelValue:w.group_id,"onUpdate:modelValue":s[2]||(s[2]=l=>w.group_id=l),options:nt.value,onChange:q},null,8,["modelValue","options"]),m(_e,{modelValue:w.endpoint,"onUpdate:modelValue":s[3]||(s[3]=l=>w.endpoint=l),options:ot.value,onChange:q},null,8,["modelValue","options"]),h(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>w.search=l),type:"search",class:"input",placeholder:n(a)("admin.riskControl.filters.search"),onKeyup:ea(q,["enter"])},null,40,ls),[[v,w.search,void 0,{trim:!0}]]),h(e("input",{"onUpdate:modelValue":s[5]||(s[5]=l=>w.from=l),type:"datetime-local",class:"input",title:n(a)("admin.riskControl.filters.from"),onChange:q},null,40,ds),[[v,w.from]]),h(e("input",{"onUpdate:modelValue":s[6]||(s[6]=l=>w.to=l),type:"datetime-local",class:"input",title:n(a)("admin.riskControl.filters.to"),onChange:q},null,40,us),[[v,w.to]])])]),e("div",cs,[e("table",ms,[e("thead",ps,[e("tr",null,[e("th",_s,o(n(a)("admin.riskControl.table.time")),1),e("th",gs,o(n(a)("admin.riskControl.table.group")),1),e("th",ks,o(n(a)("admin.riskControl.table.user")),1),e("th",ys,o(n(a)("admin.riskControl.table.apiKey")),1),e("th",xs,o(n(a)("admin.riskControl.table.endpoint")),1),e("th",bs,o(n(a)("admin.riskControl.table.result")),1),e("th",hs,o(n(a)("admin.riskControl.table.highest")),1),e("th",vs,o(n(a)("admin.riskControl.table.actionMeta")),1),e("th",fs,o(n(a)("admin.riskControl.table.latency")),1),e("th",Cs,o(n(a)("admin.riskControl.table.input")),1)])]),e("tbody",ws,[Q.value?(d(),c("tr",Ks,[e("td",Ss,o(n(a)("common.loading")),1)])):we.value.length===0?(d(),c("tr",As,[e("td",zs,o(n(a)("admin.riskControl.emptyLogs")),1)])):(d(!0),c(U,{key:2},F(we.value,l=>(d(),c("tr",{key:l.id,class:"hover:bg-gray-50 dark:hover:bg-dark-700/60"},[e("td",Hs,o(ae(l.created_at)),1),e("td",Ts,o(l.group_name||"-"),1),e("td",Vs,[e("div",null,o(l.user_email||"-"),1),l.user_id?(d(),c("div",Us,"UID "+o(l.user_id),1)):y("",!0)]),e("td",Ds,o(l.api_key_name||"-"),1),e("td",js,[e("div",null,o(l.endpoint||"-"),1),e("div",Fs,o(l.provider||"-")+" / "+o(l.model||"-"),1)]),e("td",Ms,[e("span",{class:g(["inline-flex rounded-md px-2 py-1 text-xs font-medium",Le(l)])},o(Ee(l)),3)]),e("td",Is,[e("div",null,o(l.highest_category||"-"),1),e("div",Rs,o(B(l.highest_score)),1)]),e("td",Ps,[e("div",null,o(Jt(l)),1),e("div",$s,[S(o(l.email_sent?n(a)("admin.riskControl.emailSent"):n(a)("admin.riskControl.emailNotSent"))+" ",1),l.auto_banned?(d(),c("span",Ns," / "+o(n(a)("admin.riskControl.autoBanned")),1)):y("",!0)]),Ct(l)?(d(),c("button",{key:0,type:"button",class:"mt-2 inline-flex items-center gap-1 rounded-md border border-emerald-200 bg-emerald-50 px-2 py-1 text-xs font-medium text-emerald-700 transition-colors hover:bg-emerald-100 disabled:cursor-not-allowed disabled:opacity-60 dark:border-emerald-900/60 dark:bg-emerald-900/20 dark:text-emerald-300 dark:hover:bg-emerald-900/30",disabled:$.value===l.user_id,onClick:me=>Kt(l)},[m(k,{name:"checkCircle",size:"xs",class:g($.value===l.user_id?"animate-spin":"")},null,8,["class"]),S(" "+o($.value===l.user_id?n(a)("common.processing"):n(a)("admin.riskControl.unbanUser")),1)],8,Es)):y("",!0)]),e("td",Ls,[e("div",null,o(qt(l.upstream_latency_ms)),1),l.queue_delay_ms!==null&&l.queue_delay_ms!==void 0?(d(),c("div",qs,o(n(a)("admin.riskControl.queueDelay",{ms:l.queue_delay_ms})),1)):y("",!0)]),e("td",Bs,[e("button",{type:"button",class:"group flex w-full min-w-0 items-center gap-2 rounded-lg px-2 py-1.5 text-left transition-colors hover:bg-gray-100 dark:hover:bg-dark-700",title:Fe(l),onClick:me=>wt(l)},[e("span",Gs,o(Fe(l)),1),m(k,{name:"eye",size:"xs",class:"flex-shrink-0 text-gray-300 transition-colors group-hover:text-primary-500 dark:text-gray-500"})],8,Os)])]))),128))])])]),K.total>0?(d(),pe(ra,{key:0,page:K.page,total:K.total,"page-size":K.page_size,"onUpdate:page":Ht,"onUpdate:pageSize":Tt},null,8,["page","total","page-size"])):y("",!0)]),m(et,{show:Y.value,title:n(a)("admin.r
1iskControl.settingsTitle"),width:"extra-wide",onClose:s[39]||(s[39]=l=>Y.value=!1)},{footer:ne(()=>[e("div",Cn,[e("button",{type:"button",class:"btn btn-secondary",onClick:s[38]||(s[38]=l=>Y.value=!1)},o(n(a)("common.cancel")),1),e("button",{type:"button",class:"btn btn-primary inline-flex items-center gap-2",disabled:J.value,onClick:ft},[J.value?(d(),pe(k,{key:0,name:"refresh",size:"sm",class:"animate-spin"})):(d(),pe(k,{key:1,name:"check",size:"sm"})),S(" "+o(J.value?n(a)("common.saving"):n(a)("admin.riskControl.saveConfig")),1)],8,wn)])]),default:ne(()=>{var l,me,Ye,Xe;return[e("div",Ws,[e("div",Js,[(d(!0),c(U,null,F(st.value,i=>(d(),c("button",{key:i.id,type:"button",class:g(["inline-flex whitespace-nowrap rounded-lg px-3 py-2 text-sm font-medium transition-colors",R.value===i.id?"bg-primary-50 text-primary-700 dark:bg-primary-900/30 dark:text-primary-300":"text-gray-500 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-dark-700 dark:hover:text-white"]),onClick:W=>R.value=i.id},o(i.label),11,Qs))),128))]),R.value==="basic"?(d(),c("div",Ys,[e("div",Xs,[e("div",Zs,[e("div",null,[e("p",er,o(n(a)("admin.riskControl.enabled")),1),e("p",tr,o(n(a)("admin.riskControl.enabledHint")),1)]),m(ie,{modelValue:r.enabled,"onUpdate:modelValue":s[7]||(s[7]=i=>r.enabled=i)},null,8,["modelValue"])]),e("div",null,[e("label",ar,o(n(a)("admin.riskControl.mode")),1),m(_e,{modelValue:r.mode,"onUpdate:modelValue":s[8]||(s[8]=i=>r.mode=i),options:Ke.value},null,8,["modelValue","options"]),e("p",sr,o(Nt(r.mode)),1)]),e("div",null,[e("label",rr,o(n(a)("admin.riskControl.baseUrl")),1),h(e("input",{"onUpdate:modelValue":s[9]||(s[9]=i=>r.base_url=i),type:"url",class:"input",placeholder:"https://api.openai.com"},null,512),[[v,r.base_url,void 0,{trim:!0}]])]),e("div",null,[e("label",or,o(n(a)("admin.riskControl.model")),1),h(e("input",{"onUpdate:modelValue":s[10]||(s[10]=i=>r.model=i),type:"text",class:"input",placeholder:"omni-moderation-latest"},null,512),[[v,r.model,void 0,{trim:!0}]])]),e("div",null,[e("label",nr,o(n(a)("admin.riskControl.timeoutMs")),1),h(e("input",{"onUpdate:modelValue":s[11]||(s[11]=i=>r.timeout_ms=i),type:"number",min:"500",max:"30000",class:"input"},null,512),[[v,r.timeout_ms,void 0,{number:!0}]])]),e("div",null,[e("label",ir,o(n(a)("admin.riskControl.retryCount")),1),h(e("input",{"onUpdate:modelValue":s[12]||(s[12]=i=>r.retry_count=i),type:"number",min:"0",max:"5",class:"input"},null,512),[[v,r.retry_count,void 0,{number:!0}]])]),e("div",null,[e("label",lr,o(n(a)("admin.riskControl.sampleRate")),1),e("div",dr,[h(e("input",{"onUpdate:modelValue":s[13]||(s[13]=i=>r.sample_rate=i),type:"number",min:"0",max:"100",step:"1",class:"input pr-8"},null,512),[[v,r.sample_rate,void 0,{number:!0}]]),s[41]||(s[41]=e("span",{class:"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-gray-400"},"%",-1))])])]),e("div",ur,[e("div",cr,[e("div",mr,[e("span",pr,[m(k,{name:"key",size:"md"})]),e("div",null,[e("label",_r,o(n(a)("admin.riskControl.apiKeys")),1),e("p",gr,o(n(a)("admin.riskControl.apiKeysHint",{count:r.api_key_count})),1)])]),e("div",kr,[e("button",{type:"button",class:"btn btn-secondary inline-flex items-center gap-2",disabled:I.value||Ae.value===0||r.clear_api_key,onClick:s[14]||(s[14]=i=>Re(!0))},[m(k,{name:"beaker",size:"sm",class:g(I.value?"animate-pulse":"")},null,8,["class"]),S(" "+o(I.value?n(a)("admin.riskControl.testingApiKeys"):n(a)("admin.riskControl.testInputApiKeys")),1)],8,yr),e("button",{type:"button",class:"btn btn-secondary inline-flex items-center gap-2",disabled:I.value||ye.value===0||ce.value>0||r.clear_api_key||r.api_keys_mode==="replace",onClick:s[15]||(s[15]=i=>Re(!1))},[m(k,{name:"shield",size:"sm"}),S(" "+o(ut.value),1)],8,xr),r.api_key_configured?(d(),c("button",{key:0,type:"button",class:"btn btn-secondary inline-flex items-center gap-2",onClick:Vt},[m(k,{name:r.clear_api_key?"x":"trash",size:"sm"},null,8,["name"]),S(" "+o(r.clear_api_key?n(a)("admin.riskControl.keepApiKey"):n(a)("admin.riskControl.clearApiKey")),1)])):y("",!0)])]),e("div",br,[e("div",hr,[e("div",vr,[e("div",fr,[e("span",Cr,o(n(a)("admin.r
1iskControl.apiKeysWriteMode")),1),e("span",wr,o(dt.value),1)]),e("div",Kr,[e("button",{type:"button",class:g(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",r.api_keys_mode==="append"?"bg-primary-500 text-white shadow-sm":"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"]),disabled:r.clear_api_key,onClick:s[16]||(s[16]=i=>Ie("append"))},o(n(a)("admin.riskControl.apiKeysModeAppend")),11,Sr),e("button",{type:"button",class:g(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",r.api_keys_mode==="replace"?"bg-amber-500 text-white shadow-sm":"text-gray-600 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-dark-700"]),disabled:r.clear_api_key,onClick:s[17]||(s[17]=i=>Ie("replace"))},o(n(a)("admin.riskControl.apiKeysModeReplace")),11,Ar)])]),h(e("textarea",{"onUpdate:modelValue":s[18]||(s[18]=i=>r.api_keys_text=i),class:"input min-h-44 resize-y font-mono text-sm",placeholder:lt.value,autocomplete:"new-password",disabled:r.clear_api_key},null,8,zr),[[v,r.api_keys_text]]),e("div",Hr,[e("span",Tr,o(n(a)("admin.riskControl.inputApiKeyCount",{count:Ae.value})),1),r.api_key_configured?(d(),c("span",Vr,o(n(a)("admin.riskControl.storedApiKeyCount",{count:r.api_key_count})),1)):y("",!0),r.clear_api_key?(d(),c("span",Ur,o(n(a)("admin.riskControl.apiKeyWillClear")),1)):ce.value>0?(d(),c("span",Dr,o(n(a)("admin.riskControl.apiKeyPendingDeleteCount",{count:ce.value})),1)):y("",!0),r.api_keys_mode==="replace"?(d(),c("span",jr,o(n(a)("admin.riskControl.apiKeysReplaceWarning")),1)):y("",!0)]),e("div",{class:"rounded-lg border border-gray-100 bg-gray-50 p-3 dark:border-dark-700 dark:bg-dark-900/30",onPaste:Rt},[e("div",Fr,[e("div",null,[e("p",Mr,o(n(a)("admin.riskControl.auditTestInput")),1),e("p",Ir,o(n(a)("admin.riskControl.auditTestInputHint")),1)]),N.value||V.value.length>0||z.value?(d(),c("button",{key:0,type:"button",class:"inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-gray-500 hover:bg-white hover:text-gray-900 dark:text-gray-400 dark:hover:bg-dark-800 dark:hover:text-white",onClick:jt},[m(k,{name:"x",size:"xs"}),S(" "+o(n(a)("admin.riskControl.clearAuditTest")),1)])):y("",!0)]),h(e("textarea",{"onUpdate:modelValue":s[19]||(s[19]=i=>N.value=i),class:"input min-h-24 resize-y text-sm",placeholder:n(a)("admin.riskControl.auditTestPromptPlaceholder")},null,8,Rr),[[v,N.value]]),e("div",{class:"mt-3 rounded-lg border border-dashed border-gray-200 bg-white p-3 dark:border-dark-700 dark:bg-dark-800",onDragover:s[20]||(s[20]=Ze(()=>{},["prevent"])),onDrop:Ze(It,["prevent"])},[e("div",Pr,[e("div",$r,[m(k,{name:"upload",size:"md",class:"mt-0.5 text-gray-400"}),e("div",null,[e("p",Nr,o(n(a)("admin.riskControl.auditTestImages")),1),e("p",Er,o(n(a)("admin.riskControl.auditTestImagesHint")),1)])]),e("label",Lr,[m(k,{name:"plus",size:"sm"}),S(" "+o(n(a)("admin.riskControl.addAuditTestImage"))+" ",1),e("input",{type:"file",accept:"image/*",multiple:"",class:"sr-only",onChange:Mt},null,32)])]),V.value.length>0?(d(),c("div",qr,[(d(!0),c(U,null,F(V.value,(i,W)=>(d(),c("div",{key:i.slice(0,64)+W,class:"group relative aspect-square overflow-hidden rounded-lg border border-gray-100 bg-gray-100 dark:border-dark-700 dark:bg-dark-700"},[e("img",{src:i,alt:"",class:"h-full w-full object-cover"},null,8,Br),e("button",{type:"button",class:"absolute right-1.5 top-1.5 flex h-7 w-7 items-center justify-center rounded-full bg-black/60 text-white opacity-0 transition-opacity group-hover:opacity-100",onClick:Qt=>Ft(W)},[m(k,{name:"x",size:"xs","stroke-width":2})],8,Or)]))),128))])):y("",!0)],32)],32)]),e("div",Gr,[e("div",Wr,[e("div",Jr,[e("p",Qr,o(n(a)("admin.riskControl.apiKeyHealth")),1),e("p",Yr,o(n(a)("admin.riskControl.apiKeyFreezeRule")),1)]),e("span",Xr,o(n(a)("admin.riskControl.apiKeyRows",{count:P.value.length})),1)]),P.value.length===0?(d(),c("div",Zr,[m(k,{name:"infoCircle",size:"lg",class:"text-gray-300 dark:text-dark-500"}),e("p",eo,o(n(a)("admin.riskControl.apiKeyHealthEmpty")),1),e("p",to,o(n(a)("admin.riskControl.apiKeyHealthEmptyHint")),1)])):(d(),c("div",ao,[e("div",{class:g(["space-y-2",D.value?"max-h-72 overflow-y-auto pr-1":""])},[(d(!0),c(U,null,F(Te.value,(i,W)=>(d(),c("div",{key:Bt(i,W),class:g(["rounded-lg border bg-white p-2.5 shadow-sm dark:bg-dark-800",te(i)?"border-amber-200 opacity-70 dark:border-amber-800/60":"border-gray-100 dark:border-dark-700"])},[e("div",so,[e("div",ro,[e("div",oo,[e("span",no,o(i.masked||"-"),1),e("span",{class:g(["inline-flex rounded-md px-1.5 py-0.5 text-[11px] font-medium",i.configured?"bg-primary-50 text-primary-700 dark:bg-primary-900/30 dark:text-primary-300":"bg-purple-50 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"])}
1,o(te(i)?n(a)("admin.riskControl.apiKeyPendingDelete"):i.configured?n(a)("admin.riskControl.apiKeyConfigured"):n(a)("admin.riskControl.apiKeyTemporary")),3)]),e("p",io,o(Wt(i)),1)]),e("div",lo,[e("span",{class:g(["inline-flex items-center gap-1.5 whitespace-nowrap rounded-full px-2 py-0.5 text-xs font-medium",Ot(i.status)])},[e("span",{class:g(["h-1.5 w-1.5 rounded-full",Gt(i.status)])},null,2),S(" "+o(Be(i.status)),1)],2),i.configured&&!r.clear_api_key?(d(),c("button",{key:0,type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-md text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:hover:bg-dark-700 dark:hover:text-gray-200",title:te(i)?n(a)("admin.riskControl.undoDeleteApiKey"):n(a)("admin.riskControl.deleteApiKey"),onClick:Qt=>Dt(i)},[m(k,{name:te(i)?"refresh":"trash",size:"xs"},null,8,["name"])],8,uo)):y("",!0)])]),i.last_error?(d(),c("p",co,o(i.last_error),1)):y("",!0)],2))),128))],2),mt.value?(d(),c("div",mo,[e("span",po,o(D.value?n(a)("admin.riskControl.apiKeyRowsExpanded",{count:P.value.length}):n(a)("admin.riskControl.apiKeyRowsCollapsed",{count:ct.value})),1),e("button",{type:"button",class:"inline-flex shrink-0 items-center gap-1 rounded-md px-2 py-1 font-medium text-primary-600 transition-colors hover:bg-primary-50 hover:text-primary-700 dark:text-primary-300 dark:hover:bg-primary-900/20",onClick:s[21]||(s[21]=i=>D.value=!D.value)},[m(k,{name:D.value?"chevronUp":"chevronDown",size:"xs"},null,8,["name"]),S(" "+o(D.value?n(a)("admin.riskControl.collapseApiKeyRows"):n(a)("admin.riskControl.expandApiKeyRows")),1)])])):y("",!0)])),z.value?(d(),c("div",_o,[e("div",go,[e("div",null,[e("p",ko,o(n(a)("admin.riskControl.auditTestResult")),1),e("p",yo,o(n(a)("admin.riskControl.auditTestHighest",{category:z.value.highest_category||"-",score:B(z.value.highest_score)})),1)]),e("span",{class:g(["inline-flex rounded-full px-2 py-1 text-xs font-medium",z.value.flagged?"bg-red-50 text-red-700 dark:bg-red-900/20 dark:text-red-300":"bg-emerald-50 text-emerald-700 dark:bg-emerald-900/20 dark:text-emerald-300"])},o(z.value.flagged?n(a)("admin.riskControl.auditTestFlagged"):n(a)("admin.riskControl.auditTestPassed")),3)]),e("div",xo,[e("div",bo,[e("span",null,o(n(a)("admin.riskControl.auditTestComposite")),1),e("span",ho,o(B(z.value.composite_score)),1)]),e("div",vo,[e("div",{class:g(["h-full rounded-full",z.value.flagged?"bg-red-500":"bg-emerald-500"]),style:Ce({width:qe(z.value.composite_score)})},null,6)])]),e("div",fo,[(d(!0),c(U,null,F(gt.value,i=>(d(),c("div",{key:i.category},[e("div",Co,[e("span",wo,o(i.category),1),e("span",Ko,o(B(i.score))+" / "+o(B(i.threshold)),1)]),e("div",So,[e("div",{class:g(["h-full rounded-full",i.hit?"bg-red-500":"bg-primary-500"]),style:Ce({width:qe(i.score)})},null,6)])]))),128))])])):y("",!0)])])])])):R.value==="scope"?(d(),c("div",Ao,[e("div",zo,[e("div",null,[e("h3",Ho,o(n(a)("admin.riskControl.groupScope")),1),e("p",To,o(n(a)("admin.riskControl.groupScopeHint")),1)]),e("div",Vo,[e("button",{type:"button",class:g(["rounded-md px-3 py-1.5 text-sm font-medium transition-colors",r.all_groups?"bg-white text-gray-900 shadow-sm dark:bg-dark-800 dark:text-white":"text-gray-500 dark:text-gray-400"]),onClick:s[22]||(s[22]=i=>r.all_groups=!0)},o(n(a)("admin.riskControl.allGroups")),3),e("button",{type:"button",class:g(["rounded-md px-3 py-1.5 text-sm font-medium transition-colors",r.all_groups?"text-gray-500 dark:text-gray-400":"bg-white text-gray-900 shadow-sm dark:bg-dark-800 dark:text-white"]),onClick:s[23]||(s[23]=i=>r.all_groups=!1)},o(n(a)("admin.riskControl.selectedGroups")),3)])]),r.all_groups?y("",!0):(d(),c("div",Uo,[e("div",Do,[m(k,{name:"search",size:"sm",class:"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-gray-400"}),h(e("input",{"onUpdate:modelValue":s[24]||(s[24]=i=>ke.value=i),type:"search",class:"input pl-9",placeholder:n(a)("admin.riskControl.searchGroups")},null,8,jo),[[v,ke.value,void 0,{trim:!0}]])]),e("div",Fo,[(d(!0),c(U,null,F(Se.value,i=>(d(),c("button",{key:i.id,type:"button",class:g(["flex min-h-20 items-center justify-between rounded-lg border p-4 text-left transition-colors",$e(i.id)?"border-primary-300 bg-primary-50 dark:border-primary-700 dark:bg-primary-900/20":"border-gray-100 hover:bg-gray-50 dark:border-dark-700 dark:hover:bg-dark-700/60"]),onClick:W=>$t(i.id)},[e("span",Io,[e("span",Ro,o(i.name),1),e("span",Po,o(i.platform),1)]),e("span",{class:g(["flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full border",$e(i.id)?"border-primary-500 bg-primary-500 text-white":"border-gray-300 text-transparent dark:border-dark-500"])},[m(k,{name:"check",size:"xs","stroke-width":2})],2)],10,Mo))),128)),Se.value.length===0?(d(),c("p",$o,o(n(a)("admin.r
1iskControl.noGroups")),1)):y("",!0)])]))])):R.value==="runtime"?(d(),c("div",No,[e("div",null,[e("label",Eo,o(n(a)("admin.riskControl.workerCount")),1),h(e("input",{"onUpdate:modelValue":s[25]||(s[25]=i=>r.worker_count=i),type:"number",min:"1",max:"32",class:"input"},null,512),[[v,r.worker_count,void 0,{number:!0}]])]),e("div",null,[e("label",Lo,o(n(a)("admin.riskControl.queueSize")),1),h(e("input",{"onUpdate:modelValue":s[26]||(s[26]=i=>r.queue_size=i),type:"number",min:"100",max:"100000",class:"input"},null,512),[[v,r.queue_size,void 0,{number:!0}]])]),e("div",qo,[e("div",null,[e("p",Bo,o(n(a)("admin.riskControl.recordNonHits")),1),e("p",Oo,o(n(a)("admin.riskControl.recordNonHitsHint")),1)]),m(ie,{modelValue:r.record_non_hits,"onUpdate:modelValue":s[27]||(s[27]=i=>r.record_non_hits=i)},null,8,["modelValue"])]),e("div",Go,[e("div",Wo,[e("div",null,[e("p",Jo,o(n(a)("admin.riskControl.preHashCheck")),1),e("p",Qo,o(n(a)("admin.riskControl.preHashCheckHint")),1)]),m(ie,{modelValue:r.pre_hash_check_enabled,"onUpdate:modelValue":s[28]||(s[28]=i=>r.pre_hash_check_enabled=i)},null,8,["modelValue"])]),e("div",Yo,[e("div",Xo,[e("div",null,[e("p",Zo,o(n(a)("admin.riskControl.flaggedHashCount",{count:O(((l=_.value)==null?void 0:l.flagged_hash_count)??0)})),1),e("p",en,o(n(a)("admin.riskControl.flaggedHashHint")),1)]),e("button",{type:"button",class:"btn btn-secondary inline-flex items-center justify-center gap-2 text-red-600 hover:text-red-700 dark:text-red-300",disabled:T.value||(((me=_.value)==null?void 0:me.flagged_hash_count)??0)===0,onClick:At},[m(k,{name:"trash",size:"sm",class:g(T.value?"animate-pulse":"")},null,8,["class"]),S(" "+o(n(a)("admin.riskControl.clearFlaggedHashes")),1)],8,tn)]),e("div",an,[h(e("input",{"onUpdate:modelValue":s[29]||(s[29]=i=>X.value=i),type:"text",class:"input font-mono text-sm",placeholder:n(a)("admin.riskControl.flaggedHashPlaceholder")},null,8,sn),[[v,X.value,void 0,{trim:!0}]]),e("button",{type:"button",class:"btn btn-secondary inline-flex items-center justify-center gap-2",disabled:T.value||!He.value,onClick:St},[m(k,{name:"trash",size:"sm"}),S(" "+o(n(a)("admin.riskControl.deleteFlaggedHash")),1)],8,rn)])])])])):R.value==="response"?(d(),c("div",on,[e("div",nn,[e("div",null,[e("label",ln,o(n(a)("admin.riskControl.blockStatus")),1),h(e("input",{"onUpdate:modelValue":s[30]||(s[30]=i=>r.block_status=i),type:"number",min:"400",max:"599",class:"input"},null,512),[[v,r.block_status,void 0,{number:!0}]])]),e("div",null,[e("label",dn,o(n(a)("admin.riskControl.blockMessage")),1),h(e("input",{"onUpdate:modelValue":s[31]||(s[31]=i=>r.block_message=i),type:"text",class:"input"},null,512),[[v,r.block_message,void 0,{trim:!0}]])]),e("div",un,[e("div",null,[e("p",cn,o(n(a)("admin.riskControl.emailOnHit")),1),e("p",mn,o(n(a)("admin.riskControl.emailOnHitHint")),1)]),m(ie,{modelValue:r.email_on_hit,"onUpdate:modelValue":s[32]||(s[32]=i=>r.email_on_hit=i)},null,8,["modelValue"])]),e("div",pn,[e("div",null,[e("p",_n,o(n(a)("admin.riskControl.autoBan")),1),e("p",gn,o(n(a)("admin.riskControl.autoBanHint")),1)]),m(ie,{modelValue:r.auto_ban_enabled,"onUpdate:modelValue":s[33]||(s[33]=i=>r.auto_ban_enabled=i)},null,8,["modelValue"])]),e("div",null,[e("label",kn,o(n(a)("admin.riskControl.banThreshold")),1),h(e("input",{"onUpdate:modelValue":s[34]||(s[34]=i=>r.ban_threshold=i),type:"number",min:"1",max:"1000",class:"input"},null,512),[[v,r.ban_threshold,void 0,{number:!0}]])]),e("div",null,[e("label",yn,o(n(a)("admin.riskControl.violationWindowHours")),1),h(e("input",{"onUpdate:modelValue":s[35]||(s[35]=i=>r.violation_window_hours=i),type:"number",min:"1",max:"8760",class:"input"},null,512),[[v,r.violation_window_hours,void 0,{number:!0}]])])])])):(d(),c("div",xn,[e("div",null,[e("label",bn,o(n(a)("admin.riskControl.hitRetentionDays")),1),h(e("input",{"onUpdate:modelValue":s[36]||(s[36]=i=>r.hit_retention_days=i),type:"number",min:"1",max:"3650",class:"input"},null,512),[[v,r.hit_retention_days,void 0,{number:!0}]])]),e("div",null,[e("label",hn,o(n(a)("admin.riskControl.nonHitRetentionDays")),1),h(e("input",{"onUpdate:modelValue":s[37]||(s[37]=i=>r.non_hit_retention_days=i),type:"number",min:"1",max:"3",class:"input"},null,512),[[v,r.non_hit_retention_days,void 0,{number:!0}]])]),e("div",vn,[e("div",fn,[m(k,{name:"database",size:"md",class:"text-gray-400"}
1),e("span",null,o(n(a)("admin.riskControl.cleanupStats",{hit:((Ye=_.value)==null?void 0:Ye.last_cleanup_deleted_hit)??0,nonHit:((Xe=_.value)==null?void 0:Xe.last_cleanup_deleted_non_hit)??0})),1)])])]))])]}),_:1},8,["show","title"]),m(et,{show:C.value!==null,title:n(a)("admin.riskControl.inputDetailTitle"),width:"wide",onClose:Me},{footer:ne(()=>[e("div",qn,[e("button",{type:"button",class:"btn btn-secondary",onClick:Me},o(n(a)("common.close")),1)])]),default:ne(()=>[C.value?(d(),c("div",Kn,[e("div",Sn,[e("div",An,[e("p",zn,o(n(a)("admin.riskControl.table.time")),1),e("p",Hn,o(ae(C.value.created_at)),1)]),e("div",Tn,[e("p",Vn,o(n(a)("admin.riskControl.table.user")),1),e("p",Un,o(C.value.user_email||"-"),1)]),e("div",Dn,[e("p",jn,o(n(a)("admin.riskControl.table.result")),1),e("span",{class:g(["mt-1 inline-flex rounded-md px-2 py-1 text-xs font-medium",Le(C.value)])},o(Ee(C.value)),3)]),e("div",Fn,[e("p",Mn,o(n(a)("admin.riskControl.table.highest")),1),e("p",In,o(C.value.highest_category||"-")+" / "+o(B(C.value.highest_score)),1)])]),e("div",Rn,[e("div",Pn,[e("div",null,[e("p",$n,o(n(a)("admin.riskControl.inputDetailContent")),1),e("p",Nn,o(C.value.endpoint||"-")+" · "+o(C.value.provider||"-")+" / "+o(C.value.model||"-"),1)]),C.value.group_name?(d(),c("span",En,o(C.value.group_name),1)):y("",!0)]),e("pre",Ln,o(kt.value),1)])])):y("",!0)]),_:1},8,["show","title"])],64))])]}),_:1}))}});export{ni 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.