vendor: 4,862 bytes, line 1
1import{Ht as o,I as n,N as $e,R as v,c as e,d,ft as p,h as F,m as Ue,r as m,s as P,tt as c,u,ut as K,v as Ve,zt as B}from"./runtime-core.esm-bundler-BHqpc6Kw.js";import{s as b,t as _}from"./axios-DzksfLA5.js";import{t as Le}from"./useAuth-BQcW12Bq.js";import{It as ce,Mt as g,Nt as R,kt as W,wt as Pe}from"./index-BopVZjtL.js";var We={class:"space-y-8"},He={class:"space-y-4"},je={class:"flex flex-wrap items-start justify-between gap-3"},Ge=["disabled"],Je={key:0,class:"loading loading-spinner loading-xs mr-1"},ze=["open"],Be={class:"flex cursor-pointer list-none items-center justify-between gap-3 md:hidden"},Ye={class:"text-sm font-semibold text-base-content/80"},qe={class:"pt-4 md:pt-0"},Ke={class:"hidden text-sm font-semibold text-base-content/80 mb-3 md:block"},Qe={class:"grid gap-3 md:grid-cols-2"},Xe={class:"form-control"},Ze={class:"form-control"},et={class:"form-control"},tt={class:"form-control"},st={class:"form-control md:col-span-2"},at={class:"label-text-alt text-xs text-base-content/60"},lt={class:"mt-4"},ot={class:"flex flex-wrap gap-2"},nt=["name","checked","onChange"],dt={class:"label-text text-xs"},rt={key:0,class:"mt-4 rounded-lg border border-base-300 bg-base-100 p-3 space-y-3"},it={class:"grid gap-3 md:grid-cols-3"},ut={class:"form-control"},ct={class:"form-control"},bt={key:0,class:"form-control"},pt={class:"grid grid-cols-2 md:grid-cols-5 gap-2"},vt={class:"label cursor-pointer gap-2"},mt={class:"label cursor-pointer gap-2"},xt={class:"label cursor-pointer gap-2"},ft={class:"label cursor-pointer gap-2"},gt={class:"label cursor-pointer gap-2"},ht={class:"text-[11px] leading-4 rounded-lg border border-base-300 bg-base-200/50 p-3 overflow-x-auto"},_t={class:"mt-4 flex flex-wrap gap-2"},yt=["disabled"],kt={key:0,class:"loading loading-spinner loading-xs mr-2"},wt=["disabled"],Ct=["disabled"],Et={class:"space-y-3 md:hidden"},It={class:"flex items-start justify-between gap-3"},St={class:"min-w-0"},Dt={class:"font-semibold"},At={class:"mt-1 truncate text-xs text-base-content/60"},Nt={class:"mt-3 flex flex-wrap gap-1"},Ot={class:"badge badge-outline badge-sm"},Mt={key:0,class:"badge badge-warning badge-outline badge-sm"},Tt={class:"mt-3 space-y-1 text-xs text-base-content/70"},Ft={key:0,class:"text-warning"},Rt={key:1,class:"text-error"},$t={class:"mt-3 flex flex-wrap gap-2"},Ut=["data-test","onClick"],Vt=["data-test","onClick"],Lt=["data-test","onClick"],Pt=["data-test","onClick"],Wt={key:0,class:"rounded-lg border border-base-300 py-6 text-center text-xs text-base-content/60"},Ht={class:"hidden overflow-x-auto rounded-lg border border-base-300 bg-base-100 md:block"},jt={class:"table table-sm"},Gt={key:0},Jt={class:"font-semibold"},zt={class:"max-w-xs truncate text-xs text-base-content/70"},Bt={class:"text-xs"},Yt={class:"text-xs"},qt={class:"flex flex-wrap gap-1"},Kt={class:"text-xs"},Qt={key:0,class:"badge badge-warning badge-outline badge-sm ml-1"},Xt={key:1,class:"text-error text-xs mt-1"},Zt={class:"text-xs text-base-content/70"},es={key:0,class:"text-warning"},ts={class:"text-xs text-base-content/70"},ss={class:"text-right"},as={class:"flex flex-wrap justify-end gap-2"},ls=["data-test","onClick"],os=["data-test","onClick"],ns=["data-test","onClick"],ds=["data-test","onClick"],rs={class:"space-y-4"},is={class:"flex flex-wrap items-center justify-between gap-2"},us=["disabled"],cs={key:0,class:"loading loading-spinner loading-xs mr-1"},bs=["open"],ps={class:"grid gap-2 pt-3 md:grid-cols-3 md:pt-0 lg:grid-cols-6"},vs={class:"form-control"},ms=["value"],xs={class:"form-control"},fs=["value"],gs={class:"form-control"},hs={class:"form-control"},_s=["value"],ys={class:"form-control"},ks={class:"form-control"},ws={class:"space-y-3 md:hidden"},Cs={class:"flex items-start justify-between gap-3"},Es={class:"min-w-0"},Is={class:"font-semibold"},Ss={class:"mt-1 text-xs text-base-content/60"},Ds={class:"badge badge-outline badge-sm shrink-0"},As={class:"mt-3 flex flex-wrap gap-1 text-xs"},Ns={class:"badge badge-ghost badge-sm"},Os={class:"badge badge-ghost badge-sm"},Ms={class:"badge badge-ghost badge-sm"},Ts={key:0,class:"badge badge-warning badge-outline badge-sm"},Fs={class:"mt-3 text-xs text-base-content/70"},Rs={class:"mt-3 flex flex-wrap gap-2"},$s=["data-test","onClick"],Us=["data-test","onClick"],Vs=["data-test","onClick"],Ls=["data-test","onClick"],Ps={key:0,class:"rounded-lg border border-base-300 py-6 text-center text-xs text-base-content/60"},Ws={class:"hidden overflow-x-auto rounded-lg border border-base-300 bg-base-100 md:block"},Hs={class:"table table-sm"},js={key:0},Gs={class:"text-xs"},Js={key:0,class:"badge badge-warning badge-outline badge-xs ml-1"},zs={class:"text-xs"},Bs={class:"text-xs"},Ys={class:"text-xs"},qs={class:"badge badge-ghost badge-sm"},Ks={class:"badge badge-ghost badge-sm"},Qs={class:"badge badge-ghost badge-sm"},Xs={class:"text-xs"}
1,Zs={key:0},ea={key:1},ta={class:"text-xs text-base-content/70"},sa={class:"text-right"},aa={class:"flex flex-wrap justify-end gap-2"},la=["data-test","onClick"],oa=["data-test","onClick"],na=["data-test","onClick"],da=["data-test","onClick"],ra={key:0,class:"flex justify-center"},ia=["disabled"],ua={key:0,class:"loading loading-spinner loading-xs mr-2"},ca={class:"modal-box max-w-5xl"},ba={class:"text-xs text-base-content/70 mt-1"},pa={class:"mt-3 grid gap-2 md:grid-cols-3"},va={class:"form-control"},ma=["value"],xa={class:"form-control"},fa=["value"],ga={class:"mt-4 space-y-3 md:hidden"},ha={key:0,class:"rounded-lg border border-base-300 py-6 text-center text-xs text-base-content/60"},_a={key:1,class:"rounded-lg border border-base-300 py-6 text-center text-xs text-base-content/60"},ya={class:"flex items-start justify-between gap-3"},ka={class:"min-w-0"},wa={class:"font-semibold"},Ca={class:"mt-1 truncate text-xs text-base-content/60"},Ea={class:"badge badge-outline badge-sm shrink-0"},Ia={class:"mt-3 grid grid-cols-2 gap-2 text-xs"},Sa={class:"rounded-md bg-base-200/60 p-2"},Da={class:"rounded-md bg-base-200/60 p-2"},Aa={class:"mt-3 space-y-1 text-xs text-base-content/70"},Na={key:0,class:"break-words text-error"},Oa={key:1,class:"break-words"},Ma={class:"mt-4 hidden overflow-x-auto rounded-lg border border-base-300 bg-base-100 md:block"},Ta={class:"table table-sm"},Fa={key:0},Ra={key:1},$a={class:"text-xs"},Ua={class:"font-semibold"},Va={class:"text-base-content/60"},La={class:"text-xs"},Pa={class:"text-xs"},Wa={class:"text-xs"},Ha={class:"text-xs"},ja={class:"text-xs"},Ga={class:"text-xs text-error"},Ja={class:"text-xs max-w-xs break-words"},za={class:"modal-box max-w-4xl"},Ba={class:"text-xs text-base-content/70 mt-1"},Ya={class:"mt-3 text-[11px] leading-4 rounded-lg border border-base-300 bg-base-200/50 p-3 overflow-x-auto"},qa={class:"modal-action"},Ka={key:0,class:"text-success text-xs self-center"},Qa={key:1,class:"text-error text-xs self-center"},Xa=Ve({__name:"WebhookAdminView",setup(Za){const Q=["model.scheduled","model.published","model.auto_published","model.imported","model.version.imported","article.published","feedback.created","feedback.updated","feedback.status_changed"],be=["PENDING","DELIVERED","FAILED"],pe=["PENDING","SENDING","SUCCESS","FAILED"],ve=Le(),me=P(()=>ve.currentUser.value?.role==="ADMIN"),{width:xe}=Pe(),$=P(()=>xe.value<768),y=p([]),U=p([]),C=p(!1),E=p(!1),H=p(!1),h=p([]),I=p(!1),j=p(!1),S=p(null),fe=P(()=>S.value!==null),D=p([]),V=p(!1),A=p(null),k=p(null),N=p("idle"),O=p(null),G=p(!1),a=K({name:"",url:"",format:"DISCORD",enabled:!0,eventTypes:[],secret:"",discordPreset:"SHOWCASE_RICH",discordMentionMode:"NONE",discordMentionId:"",discordIncludeDescription:!0,discordIncludeVersion:!0,discordIncludeType:!0,discordIncludeUploader:!0,discordIncludeCover:!0}),i=K({type:"",status:"",source:"",endpointId:"",from:"",to:""}),J=p(!1),x=K({status:"",endpointId:""}),w=P(()=>O.value!==null),ge=P(()=>{if(a.format!=="DISCORD")return"";const l=De(),t={description:a.discordIncludeDescription,version:a.discordIncludeVersion,type:a.discordIncludeType,uploader:a.discordIncludeUploader,cover:a.discordIncludeCover},s=[];t.version&&s.push({name:"Version",value:"v1.0",inline:!0}),t.type&&s.push({name:"Type",value:"LORA",inline:!0}),a.discordPreset==="SHOWCASE_COMPACT"&&t.uploader&&s.push({name:"Uploader",value:"artist_name",inline:!0});const r={content:l||void 0,embeds:[{author:t.uploader?{name:"artist_name"}:void 0,title:"Preview Model",url:"https://arcenciel.io/models/123",description:t.description?"Preview description text":null,image:a.discordPreset==="SHOWCASE_RICH"&&t.cover?{url:"https://arcenciel.io/uploads/images/cover.thumbnail.webp"}:void 0,thumbnail:a.discordPreset==="SHOWCASE_COMPACT"&&t.cover?{url:"https://arcenciel.io/uploads/images/cover.thumbnail.webp"}:void 0,fields:s,timestamp:new Date().toISOString()}]};return JSON.stringify(r,null,2)});$e(()=>{M(),T()});async function M(){C.value=!0;try{const l=await _.get("/admin/webhooks");y.value=l.data?.endpoints??[],U.value=l.data?.eventTypes??Q,U.value.length||(U.value=Q)}catch(l){b(l?.response?.data?.error??"Failed to load webhooks.")}finally{C.value=!1}}function X(l){if(!l)return null;const t=new Date(l);return Number.isNaN(t.getTime())?null:t.toISOString()}function he(l){const t={limit:25};l!==null&&(t.cursor=l),i.type&&(t.type=i.type),i.status&&(t.status=i.status),i.source&&(t.source=i.source),i.endpointId&&(t.endpointId=Number.parseInt(i.endpointId,10));const s=X(i.from),r=X(i.to);return s&&(t.from=s),r&&(t.to=r),t}async function T(l={}){const t=!!l.append;if(t){if(!S.value)return;j.value=!0}else I.value=!0,S.value=null;try{const s=await _.get("/admin/webhooks/events",{params:he(t?S.value:null)}),r=s.data?.events??[];if(t){const Fe=new Set(h.value.map(q=>q.id)),Re=r.filter(q=>!Fe.has(q.id));h.value=[...h.value,...Re]}else h.value=r;const ue=s.data?.nextCursor;S.value=typeof ue=="number"?ue:null}catch(s){b(s?.response?.data?.error??"Failed to load webhook events."),t||(h.value=[],S.value=null)}finally{I.value=!1,j.value=!1}}async function _e(){$.value&&(J.value=!1),await T({append:!1})}async function ye(){i.type="",i.status="",i.source="",i.endpointId="",i.from="",i.to="",$.value&&(J.value=!1),await T({append:!1})}async function ke(){await T({append:!0})}function Z(){O.value=null,a.name="",a.url="",a.format="DISCORD",a.enabled=!0,a.eventTypes=[],a.secret="",a.discordPreset="SHOWCASE_RICH",a.discordMentionMode="NONE",a.discordMentionId="",a.discordIncludeDescription=!0,a.discordIncludeVersion=!0,a.discordIncludeType=!0,a.discordIncludeUploader=!0,a.discordIncludeCover=!0,G.value=!1,$.value&&(H.value=!1)}function we(l){const t=a.eventTypes.indexOf(l);t>=0?a.eventTypes.splice(t,1):a.eventTypes.push(l)}function Ce(l){const t=l&&typeof l=="object"&&l.discord?l.discord:l;a.discordPreset=t?.preset==="SHOWCASE_COMPACT"?"SHOWCASE_COMPACT":"SHOWCASE_RICH",a.discordMentionMode=t?.mention?.mode??"NONE",a.discordMentionId=t?.mention?.id??"",a.discordIncludeDescription=t?.includeFields?.description??!0,a.discordIncludeVersion=t?.includeFields?.version??!0,a.discordIncludeType=t?.includeFields?.type??!0,a.discordIncludeUploader=t?.includeFields?.uploader??!0,a.discordIncludeCover=t?.includeFields?.cover??!0}function ee(l){O.value=l.id,H.value=!0,a.name=l.name,a.url=l.url,a.format=l.format,a.enabled=l.enabled,a.eventTypes=[...l.eventTypes],a.secret="",G.value=!1,Ce(l.formatConfig)}function Ee(l){H.value=l.currentTarget.open}function Ie(l){J.value=l.currentTarget.open}function te(){G.value=!0}function Se(){a.secret="",te()}function L(l){return l.replace(/\./g," ").replace(/_/g," ")}function f(l){if(!l)return"Never";const t=new Date(l);
1return Number.isNaN(t.valueOf())?"Unknown":t.toLocaleString()}function se(l){return l.payload?.model?.title??"Unknown"}function De(){return a.discordMentionMode==="ROLE"&&/^\d+$/.test(a.discordMentionId.trim())?`<@&${a.discordMentionId.trim()}>`:a.discordMentionMode==="USER"&&/^\d+$/.test(a.discordMentionId.trim())?`<@${a.discordMentionId.trim()}>`:""}function Ae(){const l=a.discordMentionMode,t=a.discordMentionId.trim();return{preset:a.discordPreset,mention:{mode:l,...l==="NONE"?{}:{id:t||void 0}},includeFields:{description:a.discordIncludeDescription,version:a.discordIncludeVersion,type:a.discordIncludeType,uploader:a.discordIncludeUploader,cover:a.discordIncludeCover}}}async function Ne(){const l=a.name.trim(),t=a.url.trim();if(!l||!t){b("Name and URL are required.");return}if(!a.eventTypes.length){b("Select at least one event type.");return}if(a.format==="DISCORD"&&(a.discordMentionMode==="ROLE"||a.discordMentionMode==="USER")&&!/^\d+$/.test(a.discordMentionId.trim())){b("Discord mention id must be numeric.");return}const s={name:l,url:t,format:a.format,enabled:a.enabled,eventTypes:a.eventTypes};a.format==="DISCORD"&&(s.formatConfig=Ae()),G.value&&(s.secret=a.secret),E.value=!0;try{w.value&&O.value!==null?(await _.patch(`/admin/webhooks/${O.value}`,s),b("Webhook updated.","success")):(await _.post("/admin/webhooks",s),b("Webhook created.","success")),Z(),await M()}catch(r){b(r?.response?.data?.error??"Failed to save webhook.")}finally{E.value=!1}}async function ae(l){if(window.confirm(`Delete webhook "${l.name}"?`))try{await _.delete(`/admin/webhooks/${l.id}`),b("Webhook deleted.","success"),await M()}catch(t){b(t?.response?.data?.error??"Failed to delete webhook.")}}async function le(l){try{await _.post(`/admin/webhooks/${l.id}/reenable`),b("Webhook re-enabled.","success"),await M()}catch(t){b(t?.response?.data?.error??"Failed to re-enable webhook.")}}async function oe(l){try{const t=await _.post(`/admin/webhooks/${l.id}/test`,{message:"Webhook test from admin dashboard."});t.data?.ok?b(`Test delivered (${t.data?.status??"ok"}).`,"success"):b(`Test failed (${t.data?.status??"unknown"}).`),await M()}catch(t){b(t?.response?.data?.error??"Webhook test failed.")}}async function z(l,t){try{await _.post(`/admin/webhooks/events/${l.id}/replay`,{mode:t}),b("Replay queued.","success"),await T({append:!1})}catch(s){b(s?.response?.data?.error??"Failed to replay webhook event.")}}async function ne(l){A.value=l,x.status="",x.endpointId="",await Y()}async function Y(){if(A.value){V.value=!0;try{const l={};x.status&&(l.status=x.status),x.endpointId&&(l.endpointId=Number.parseInt(x.endpointId,10));const t=await _.get(`/admin/webhooks/events/${A.value.id}/deliveries`,{params:l});D.value=t.data?.deliveries??[]}catch(l){b(l?.response?.data?.error??"Failed to load deliveries.")}finally{V.value=!1}}}async function Oe(){await Y()}async function Me(){x.status="",x.endpointId="",await Y()}function de(){A.value=null,D.value=[],V.value=!1}function re(l){k.value=l,N.value="idle"}function ie(){k.value=null,N.value="idle"}async function Te(){if(!k.value)return;const l=JSON.stringify(k.value.payload??{},null,2);try{if(navigator?.clipboard?.writeText){await navigator.clipboard.writeText(l),N.value="copied";return}throw new Error("clipboard unavailable")}catch{N.value="error"}}return(l,t)=>(n(),d("div",We,[e("section",He,[e("div",je,[t[23]||(t[23]=e("div",null,[e("h2",{class:"text-xl font-semibold text-base-content"},"Staff Webhook Endpoints"),e("p",{class:"text-xs text-base-content/70"}," Internal operations plane for global model, article, importer, and feedback events. Developer-owned JSON webhooks are isolated from these staff endpoints. Secrets are encrypted and never returned after they are saved. ")],-1)),e("button",{class:"btn btn-outline btn-xs",disabled:C.value,onClick:M,title:"Refresh endpoints"},[C.value?(n(),d("span",Je)):u("",!0),t[22]||(t[22]=F(" Refresh ",-1))],8,Ge)]),e("details",{class:"rounded-lg border border-base-300 bg-base-200/40 p-4",open:!$.value||H.value||w.value,onToggle:Ee},[e("summary",Be,[e("span",Ye,o(w.value?"Edit endpoint":"Create endpoint"),1),t[24]||(t[24]=e("i",{class:"ri-arrow-down-s-line text-lg","aria-hidden":"true"},null,-1))]),e("div",qe,[e("h3",Ke,o(w.value?"Edit endpoint":"Create endpoint"),1),e("div",Qe,[e("label",Xe,[t[25]||(t[25]=e("span",{class:"label-text text-xs"},"Name",-1)),c(e("input",{"data-test":"endpoint-name","onUpdate:modelValue":t[0]||(t[0]=s=>a.name=s),class:"input input-bordered input-sm",placeholder:"Discord publish feed",name:"endpointform-name"},null,512),[[R,a.name]])]),e("label",Ze,[t[26]||(t[26]=e("span",{class:"label-text text-xs"},"Webhook URL",-1)),c(e("input",{"data-test":"endpoint-url","onUpdate:modelValue":t[1]||(t[1]=s=>a.url=s),class:"input input-bordered input-sm",placeholder:"https://discord.com/api/webhooks/...",name:"endpointform-url"},null,512),[[R,a.url]])]),e("label",et,[t[28]||(t[28]=e("span",{class:"label-text text-xs"},"Format",-1)),c(e("select",{"onUpdate:modelValue":t[2]||(t[2]=s=>a.format=s),class:"select select-bordered select-sm",name:"endpointform-format"},[...t[27]||(t[27]=[e("option",{value:"DISCORD"},"DISCORD",-1),e("option",{value:"GENERIC"},"GENERIC",-1)])],512),[[g,a.format]])]),e("label",tt,[t[30]||(t[30]=e("span",{class:"label-text text-xs"},"Enabled",-1)),c(e("select",{"onUpdate:modelValue":t[3]||(t[3]=s=>a.enabled=s),class:"select select-bordered select-sm",name:"endpointform-enabled"},[...t[29]||(t[29]=[e("option",{value:!0},"Enabled",-1),e("option",{value:!1},"Disabled",-1)])],512),[[g,a.enabled]])]),e("label",st,[t[31]||(t[31]=e("span",{class:"label-text text-xs"},"Signing secret (optional)",-1)),c(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>a.secret=s),type:"password",class:"input input-bordered input-sm",placeholder:"HMAC secret",autocomplete:"off","data-1p-ignore":"true","data-bwignore":"true","data-keepassxc-browser-ignore":"true","data-keeper-ignore":"true","data-lpignore":"true",onInput:te,name:"endpointform-secret"},null,544),[[R,a.secret]]),e("span",at,o(w.value&&y.value.find(s=>
1s.id===O.value)?.hasSecret?"A secret is stored. Leave blank to keep it, or enter a replacement.":"Optional HMAC signing secret. It will not be shown again.")+' Click "Clear secret" to remove it. ',1)])]),e("div",lt,[t[32]||(t[32]=e("p",{class:"text-xs font-semibold text-base-content/80 mb-2"},"Event types",-1)),e("div",ot,[(n(!0),d(m,null,v(U.value,s=>(n(),d("label",{key:s,class:"label cursor-pointer gap-2"},[e("input",{type:"checkbox",name:`webhook-event-type-${s}`,class:"checkbox checkbox-xs",checked:a.eventTypes.includes(s),onChange:r=>we(s)},null,40,nt),e("span",dt,o(L(s)),1)]))),128))])]),a.format==="DISCORD"?(n(),d("div",rt,[t[45]||(t[45]=e("h4",{class:"text-xs font-semibold text-base-content/80"},"Discord Config",-1)),e("div",it,[e("label",ut,[t[34]||(t[34]=e("span",{class:"label-text text-xs"},"Preset",-1)),c(e("select",{"onUpdate:modelValue":t[5]||(t[5]=s=>a.discordPreset=s),name:"webhookDiscordPreset",class:"select select-bordered select-sm","data-test":"discord-preset"},[...t[33]||(t[33]=[e("option",{value:"SHOWCASE_RICH"},"SHOWCASE_RICH",-1),e("option",{value:"SHOWCASE_COMPACT"},"SHOWCASE_COMPACT",-1)])],512),[[g,a.discordPreset]])]),e("label",ct,[t[36]||(t[36]=e("span",{class:"label-text text-xs"},"Mention mode",-1)),c(e("select",{"onUpdate:modelValue":t[6]||(t[6]=s=>a.discordMentionMode=s),name:"webhookDiscordMentionMode",class:"select select-bordered select-sm","data-test":"discord-mention-mode"},[...t[35]||(t[35]=[e("option",{value:"NONE"},"NONE",-1),e("option",{value:"ROLE"},"ROLE",-1),e("option",{value:"USER"},"USER",-1)])],512),[[g,a.discordMentionMode]])]),a.discordMentionMode!=="NONE"?(n(),d("label",bt,[t[37]||(t[37]=e("span",{class:"label-text text-xs"},"Mention id",-1)),c(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>a.discordMentionId=s),name:"webhookDiscordMentionId",class:"input input-bordered input-sm",placeholder:"123456789","data-test":"discord-mention-id"},null,512),[[R,a.discordMentionId]])])):u("",!0)]),e("div",null,[t[43]||(t[43]=e("p",{class:"text-xs font-semibold text-base-content/80 mb-2"},"Include fields",-1)),e("div",pt,[e("label",vt,[c(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>a.discordIncludeDescription=s),type:"checkbox",name:"webhookDiscordIncludeDescription",class:"checkbox checkbox-xs"},null,512),[[W,a.discordIncludeDescription]]),t[38]||(t[38]=e("span",{class:"label-text text-xs"},"Description",-1))]),e("label",mt,[c(e("input",{"onUpdate:modelValue":t[9]||(t[9]=s=>a.discordIncludeVersion=s),type:"checkbox",name:"webhookDiscordIncludeVersion",class:"checkbox checkbox-xs"},null,512),[[W,a.discordIncludeVersion]]),t[39]||(t[39]=e("span",{class:"label-text text-xs"},"Version",-1))]),e("label",xt,[c(e("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>a.discordIncludeType=s),type:"checkbox",name:"webhookDiscordIncludeType",class:"checkbox checkbox-xs"},null,512),[[W,a.discordIncludeType]]),t[40]||(t[40]=e("span",{class:"label-text text-xs"},"Type",-1))]),e("label",ft,[c(e("input",{"onUpdate:modelValue":t[11]||(t[11]=s=>a.discordIncludeUploader=s),type:"checkbox",name:"webhookDiscordIncludeUploader",class:"checkbox checkbox-xs"},null,512),[[W,a.discordIncludeUploader]]),t[41]||(t[41]=e("span",{class:"label-text text-xs"},"Uploader",-1))]),e("label",gt,[c(e("input",{"onUpdate:modelValue":t[12]||(t[12]=s=>a.discordIncludeCover=s),type:"checkbox",name:"webhookDiscordIncludeCover",class:"checkbox checkbox-xs"},null,512),[[W,a.discordIncludeCover]]),t[42]||(t[42]=e("span",{class:"label-text text-xs"},"Cover",-1))])])]),e("div",null,[t[44]||(t[44]=e("p",{class:"text-xs font-semibold text-base-content/80 mb-2"},"Preview payload",-1)),e("pre",ht,o(ge.value),1)])])):u("",!0),e("div",_t,[e("button",{"data-test":"endpoint-save",class:"btn btn-primary btn-sm",disabled:E.value||!me.value,onClick:Ne},[E.value?(n(),d("span",kt)):u("",!0),F(" "+o(w.value?"Save changes":"Create endpoint"),1)],8,yt),e("button",{class:"btn btn-ghost btn-sm",disabled:E.value,"data-test":"endpoint-cancel",onClick:Z},"Reset",8,wt),w.value?(n(),d("button",{key:0,class:"btn btn-outline btn-sm",disabled:E.value,onClick:Se},"Clear secret",8,Ct)):u("",!0)])])],40,ze),e("div",Et,[(n(!0),d(m,null,v(y.value,s=>(n(),d("article",{key:s.id,class:"rounded-lg border border-base-300 bg-base-100 p-4 shadow-sm"},[e("header",It,[e("div",St,[e("h3",Dt,o(s.name),1),e("p",At,o(s.url),1)]),e("span",{class:B(["badge badge-sm shrink-0",s.enabled?"badge-success badge-outline":"badge-ghost"])},o(s.enabled?"Enabled":"Disabled"),3)]),e("div",Nt,[e("span",Ot,o(s.format),1),s.autoDisabledAt?(n(),d("span",Mt,"Auto-disabled")):u("",!0),(n(!0),d(m,null,v(s.eventTypes,r=>(n(),d("span",{key:r,class:"badge badge-ghost badge-sm"},o(L(r)),1))),128))]),e("div",Tt,[e("p",null,"Failures: "+o(s.consecutiveFailureCount??0),1),e("p",null,"Last delivery: "+o(f(s.lastDeliveredAt??null)),1),s.autoDisabledAt?(n(),d("p",Ft,"Since: "+o(f(s.autoDisabledAt)),1)):u("",!0),s.lastError?(n(),d("p",Rt,"Last error: "+o(s.lastError),1)):u("",!0)]),e("footer",$t,[e("button",{class:"btn btn-ghost btn-xs","data-test":`endpoint-mobile-edit-${s.id}`,onClick:r=>ee(s)}," Edit ",8,Ut),e("button",{class:"btn btn-outline btn-xs","data-test":`endpoint-mobile-test-${s.id}`,onClick:r=>oe(s)}," Test ",8,Vt),s.autoDisabledAt?(n(),d("button",{key:0,class:"btn btn-warning btn-xs","data-test":`endpoint-mobile-reenable-${s.id}`,onClick:r=>le(s)}," Re-enable ",8,Lt)):u("",!0),e("button",{class:"btn btn-error bt
1n-xs","data-test":`endpoint-mobile-delete-${s.id}`,onClick:r=>ae(s)}," Delete ",8,Pt)])]))),128)),!y.value.length&&!C.value?(n(),d("div",Wt," No webhooks configured. ")):u("",!0)]),e("div",Ht,[e("table",jt,[t[47]||(t[47]=e("thead",null,[e("tr",null,[e("th",null,"Name"),e("th",null,"URL"),e("th",null,"Format"),e("th",null,"Events"),e("th",null,"Status"),e("th",null,"Health"),e("th",null,"Last delivery"),e("th")])],-1)),e("tbody",null,[!y.value.length&&!C.value?(n(),d("tr",Gt,[...t[46]||(t[46]=[e("td",{colspan:"8",class:"text-center text-xs text-base-content/60 py-6"},"No webhooks configured.",-1)])])):u("",!0),(n(!0),d(m,null,v(y.value,s=>(n(),d("tr",{key:s.id},[e("td",Jt,o(s.name),1),e("td",zt,o(s.url),1),e("td",Bt,o(s.format),1),e("td",Yt,[e("div",qt,[(n(!0),d(m,null,v(s.eventTypes,r=>(n(),d("span",{key:r,class:"badge badge-ghost badge-sm"},o(L(r)),1))),128))])]),e("td",Kt,[e("span",{class:B(["badge badge-sm",s.enabled?"badge-success badge-outline":"badge-ghost"])},o(s.enabled?"Enabled":"Disabled"),3),s.autoDisabledAt?(n(),d("span",Qt,"Auto-disabled")):u("",!0),s.lastError?(n(),d("p",Xt,"Last error: "+o(s.lastError),1)):u("",!0)]),e("td",Zt,[F(" Failures: "+o(s.consecutiveFailureCount??0)+" ",1),s.autoDisabledAt?(n(),d("p",es,"Since: "+o(f(s.autoDisabledAt)),1)):u("",!0)]),e("td",ts,o(f(s.lastDeliveredAt??null)),1),e("td",ss,[e("div",as,[e("button",{class:"btn btn-ghost btn-xs","data-test":`endpoint-edit-${s.id}`,onClick:r=>ee(s)}," Edit ",8,ls),e("button",{class:"btn btn-outline btn-xs","data-test":`endpoint-test-${s.id}`,onClick:r=>oe(s)}," Test ",8,os),s.autoDisabledAt?(n(),d("button",{key:0,class:"btn btn-warning btn-xs","data-test":`endpoint-reenable-${s.id}`,onClick:r=>le(s)}," Re-enable ",8,ns)):u("",!0),e("button",{class:"btn btn-error bt
1n-xs","data-test":`endpoint-delete-${s.id}`,onClick:r=>ae(s)}," Delete ",8,ds)])])]))),128))])])])]),e("section",rs,[e("div",is,[t[49]||(t[49]=e("div",null,[e("h2",{class:"text-xl font-semibold text-base-content"},"Recent Events"),e("p",{class:"text-xs text-base-content/70"},"Latest webhook events, filters, and replay controls.")],-1)),e("button",{class:"btn btn-outline btn-xs",disabled:I.value,onClick:t[13]||(t[13]=s=>T({append:!1})),title:"Refresh events"},[I.value?(n(),d("span",cs)):u("",!0),t[48]||(t[48]=F(" Refresh ",-1))],8,us)]),e("details",{class:"rounded-lg border border-base-300 bg-base-200/40 p-3",open:!$.value||J.value,onToggle:Ie},[t[60]||(t[60]=e("summary",{class:"flex cursor-pointer list-none items-center justify-between gap-3 md:hidden"},[e("span",{class:"text-sm font-semibold text-base-content/80"},"Event filters"),e("i",{class:"ri-arrow-down-s-line text-lg","aria-hidden":"true"})],-1)),e("div",ps,[e("label",vs,[t[51]||(t[51]=e("span",{class:"label-text text-xs"},"Type",-1)),c(e("select",{"onUpdate:modelValue":t[14]||(t[14]=s=>i.type=s),name:"webhookEventTypeFilter",class:"select select-bordered select-xs"},[t[50]||(t[50]=e("option",{value:""},"All",-1)),(n(!0),d(m,null,v(U.value,s=>(n(),d("option",{key:s,value:s},o(s),9,ms))),128))],512),[[g,i.type]])]),e("label",xs,[t[53]||(t[53]=e("span",{class:"label-text text-xs"},"Status",-1)),c(e("select",{"onUpdate:modelValue":t[15]||(t[15]=s=>i.status=s),name:"webhookEventStatusFilter",class:"select select-bordered select-xs"},[t[52]||(t[52]=e("option",{value:""},"All",-1)),(n(),d(m,null,v(be,s=>e("option",{key:s,value:s},o(s),9,fs)),64))],512),[[g,i.status]])]),e("label",gs,[t[55]||(t[55]=e("span",{class:"label-text text-xs"},"Source",-1)),c(e("select",{"onUpdate:modelValue":t[16]||(t[16]=s=>i.source=s),name:"webhookEventSourceFilter",class:"select select-bordered select-xs"},[...t[54]||(t[54]=[Ue('<option value="">All</option><option value="manual">manual</option><option value="scheduler">scheduler</option><option value="importer">importer</option><option value="system">system</option>',5)])],512),[[g,i.source]])]),e("label",hs,[t[57]||(t[57]=e("span",{class:"label-text text-xs"},"Endpoint",-1)),c(e("select",{"onUpdate:modelValue":t[17]||(t[17]=s=>i.endpointId=s),name:"webhookEventEndpointFilter",class:"select select-bordered select-xs"},[t[56]||(t[56]=e("option",{value:""},"All",-1)),(n(!0),d(m,null,v(y.value,s=>(n(),d("option",{key:s.id,value:String(s.id)},o(s.name),9,_s))),128))],512),[[g,i.endpointId]])]),e("label",ys,[t[58]||(t[58]=e("span",{class:"label-text text-xs"},"From",-1)),c(e("input",{"onUpdate:modelValue":t[18]||(t[18]=s=>i.from=s),type:"datetime-local",name:"webhookEventFromFilter",class:"input input-bordered input-xs"},null,512),[[R,i.from]])]),e("label",ks,[t[59]||(t[59]=e("span",{class:"label-text text-xs"},"To",-1)),c(e("input",{"onUpdate:modelValue":t[19]||(t[19]=s=>i.to=s),type:"datetime-local",name:"webhookEventToFilter",class:"input input-bordered input-xs"},null,512),[[R,i.to]])])]),e("div",{class:"mt-3 flex gap-2"},[e("button",{class:"btn btn-primary btn-xs",onClick:_e,"data-test":"events-apply-filters"},"Apply filters"),e("button",{class:"btn btn-ghost btn-xs",onClick:ye,"data-test":"events-reset-filters"},"Reset")])],40,bs),e("div",ws,[(n(!0),d(m,null,v(h.value,s=>(n(),d("article",{key:s.id,class:"rounded-lg border border-base-300 bg-base-100 p-4 shadow-sm"},[e("header",Cs,[e("div",Es,[e("h3",Is,o(L(s.type)),1),e("p",Ss,o(se(s)),1)]),e("span",Ds,o(s.status),1)]),e("div",As,[e("span",Ns,"Success "+o(s.deliverySummary?.success??0),1),e("span",Os,"Pending "+o(s.deliverySummary?.pending??0),1),e("span",Ms,"Failed "+o(s.deliverySummary?.failed??0),1),s.replayOfEventId?(n(),d("span",Ts,"Replay of #"+o(s.replayOfEventId),1)):u("",!0)]),e("p",Fs,o(f(s.createdAt)),1),e("footer",Rs,[e("button",{class:"btn btn-ghost btn-xs","data-test":`event-mobile-deliveries-${s.id}`,onClick:r=>ne(s)}," Deliveries ",8,$s),e("button",{class:"btn btn-outline btn-xs","data-test":`event-mobile-payload-${s.id}`,onClick:r=>re(s)}," Payload ",8,Us),e("button",{class:"btn btn-outline btn-xs","data-test":`event-mobile-replay-failed-${s.id}`,onClick:r=>z(s,"FAILED_ONLY")}," Replay Failed ",8,Vs),e("button",{class:"btn btn-outline btn-xs","data-test":`event-mobile-replay-all-${s.id}`,onClick:r=>z(s,"ALL")}," Replay All ",8,Ls)])]))),128)),!h.value.length&&!I.value?(n(),d("div",Ps," No webhook events yet. ")):u("",!0)]),e("div",Ws,[e("table",Hs,[t[62]||(t[62]=e("thead",null,[e("tr",null,[e("th",
1null,"Event"),e("th",null,"Model"),e("th",null,"Status"),e("th",null,"Deliveries"),e("th",null,"Replay"),e("th",null,"Created"),e("th")])],-1)),e("tbody",null,[!h.value.length&&!I.value?(n(),d("tr",js,[...t[61]||(t[61]=[e("td",{colspan:"7",class:"text-center text-xs text-base-content/60 py-6"},"No webhook events yet.",-1)])])):u("",!0),(n(!0),d(m,null,v(h.value,s=>(n(),d("tr",{key:s.id},[e("td",Gs,[F(o(L(s.type))+" ",1),s.replayOfEventId?(n(),d("span",Js,"Replay")):u("",!0)]),e("td",zs,o(se(s)),1),e("td",Bs,o(s.status),1),e("td",Ys,[e("span",qs,"Success "+o(s.deliverySummary?.success??0),1),e("span",Ks,"Pending "+o(s.deliverySummary?.pending??0),1),e("span",Qs,"Failed "+o(s.deliverySummary?.failed??0),1)]),e("td",Xs,[s.replayOfEventId?(n(),d("span",Zs,"of #"+o(s.replayOfEventId),1)):(n(),d("span",ea,"-"))]),e("td",ta,o(f(s.createdAt)),1),e("td",sa,[e("div",aa,[e("button",{class:"btn btn-ghost btn-xs","data-test":`event-deliveries-${s.id}`,onClick:r=>ne(s)}," Deliveries ",8,la),e("button",{class:"btn btn-outline btn-xs","data-test":`event-payload-${s.id}`,onClick:r=>re(s)}," Payload ",8,oa),e("button",{class:"btn btn-outline btn-xs","data-test":`event-replay-failed-${s.id}`,onClick:r=>z(s,"FAILED_ONLY")}," Replay Failed ",8,na),e("button",{class:"btn btn-outline btn-xs","data-test":`event-replay-all-${s.id}`,onClick:r=>z(s,"ALL")}," Replay All ",8,da)])])]))),128))])])]),fe.value?(n(),d("div",ra,[e("button",{class:"btn btn-outline btn-sm",disabled:j.value,"data-test":"events-load-older",onClick:ke},[j.value?(n(),d("span",ua)):u("",!0),t[63]||(t[63]=F(" Load older ",-1))],8,ia)])):u("",!0)]),e("dialog",{class:B(["modal",{"modal-open":A.value}]),onClick:ce(de,["self"])},[e("div",ca,[t[73]||(t[73]=e("h3",{class:"font-bold text-lg"},"Deliveries",-1)),e("p",ba,"Event: "+o(A.value?.type??"Unknown"),1),e("div",pa,[e("label",va,[t[65]||(t[65]=e("span",{class:"label-text text-xs"},"Status",-1)),c(e("select",{"onUpdate:modelValue":t[20]||(t[20]=s=>x.status=s),name:"webhookDeliveryStatusFilter",class:"select select-bordered select-xs"},[t[64]||(t[64]=e("option",{value:""},"All",-1)),(n(),d(m,null,v(pe,s=>e("option",{key:s,value:s},o(s),9,ma)),64))],512),[[g,x.status]])]),e("label",xa,[t[67]||(t[67]=e("span",{class:"label-text text-xs"},"Endpoint",-1)),c(e("select",{"onUpdate:modelValue":t[21]||(t[21]=s=>x.endpointId=s),name:"webhookDeliveryEndpointFilter",class:"select select-bordered select-xs"},[t[66]||(t[66]=e("option",{value:""},"All",-1)),(n(!0),d(m,null,v(y.value,s=>(n(),d("option",{key:s.id,value:String(s.id)},o(s.name),9,fa))),128))],512),[[g,x.endpointId]])]),e("div",{class:"flex items-end gap-2"},[e("button",{class:"btn btn-primary btn-xs",onClick:Oe},"Apply"),e("button",{class:"btn btn-ghost btn-xs",onClick:Me},"Reset")])]),e("div",ga,[V.value?(n(),d("div",ha," Loading deliveries... ")):D.value.length?(n(!0),d(m,{key:2},v(D.value,s=>(n(),d("article",{key:s.id,class:"rounded-lg border border-base-300 bg-base-100 p-4"},[e("header",ya,[e("div",ka,[e("h4",wa,o(s.endpoint.name),1),e("p",Ca,o(s.endpoint.url),1)]),e("span",Ea,o(s.status),1)]),e("div",Ia,[e("div",Sa,[t[68]||(t[68]=e("p",{class:"font-semibold uppercase tracking-wide text-base-content/60"},"HTTP",-1)),e("p",null,o(s.lastStatusCode??"-"),1)]),e("div",Da,[t[69]||(t[69]=e("p",{class:"font-semibold uppercase tracking-wide text-base-content/60"},"Attempts",-1)),e("p",null,o(s.attemptCount),1)])]),e("div",Aa,[e("p",null,"Last attempt: "+o(f(s.lastAttemptAt??null)),1),e("p",null,"Next try: "+o(f(s.nextAttemptAt??null)),1),s.lastError?(n(),d("p",Na,"Error: "+o(s.lastError),1)):u("",!0),s.responseSnippet?(n(),d("p",Oa,"Response: "+o(s.responseSnippet),1)):u("",!0)])]))),128)):(n(),d("div",_a," No deliveries yet. "))]),e("div",Ma,[e("table",Ta,[t[72]||(t[72]=e("thead",null,[e("tr",null,[e("th",null,"Endpoint"),e("th",null,"Status"),e("th",null,"HTTP"),e("th",null,"Attempts"),e("th",null,"Last attempt"),e("th",null,"Next try"),e("th",null,"Error"),e("th",null,"Response")])],-1)),e("tbody",null,[V.value?(n(),d("tr",Fa,[...t[70]||(t[70]=[e("td",{colspan:"8",class:"text-center text-xs text-base-content/60 py-6"},"Loading deliveries...",-1)])])):D.value.length?u("",!0):(n(),d("tr",Ra,[...t[71]||(t[71]=[e("td",{colspan:"8",class:"text-center text-xs text-base-content/60 py-6"},"No deliveries yet.",-1)])])),(n(!0),d(m,null,v(D.value,s=>(n(),d("tr",{key:s.id},[e("td",$a,[e("div",Ua,o(s.endpoint.name),1),e("div",Va,o(s.endpoint.url),1)]),e("td",La,o(s.status),1),e("td",Pa,o(s.lastStatusCode??"-"),1),e("td",Wa,o(s.attemptCount),1),e("td",Ha,o(f(s.lastAttemptAt??null)),1),e("td",ja,o(f(s.nextAttemptAt??null)),1),e("td",Ga,o(s.lastError??"-"),1),e("td",Ja,o(s.responseSnippet??"-"),1)]))),128))])])]),e("div",{class:"modal-action"},[e("button",{class:"btn",onClick:de},"Close")])])],2),e("dialog",{class:B(["modal",{"modal-open":k.value}
1]),onClick:ce(ie,["self"])},[e("div",za,[t[74]||(t[74]=e("h3",{class:"font-bold text-lg"},"Event Payload",-1)),e("p",Ba,"Event #"+o(k.value?.id??"Unknown"),1),e("pre",Ya,o(JSON.stringify(k.value?.payload??{},null,2)),1),e("div",qa,[e("button",{class:"btn btn-outline","data-test":"payload-copy",onClick:Te},"Copy JSON"),N.value==="copied"?(n(),d("span",Ka,"Copied")):N.value==="error"?(n(),d("span",Qa,"Copy failed")):u("",!0),e("button",{class:"btn",onClick:ie},"Close")])])],2)]))}}),ll=Xa;export{ll 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.