1import{P as e}from"./CrK_MUeO.js";import{r as t,e as a,V as s,p as n,_ as o}from"#entry";import{u as i}from"./inpFMjNm.js";import{u as l}from"./nqyftWTI.js";import{V as r}from"./B9goy8s8.js";import{V as d}from"./DS5vur34.js";import{V as m}from"./Ch9sftxZ.js";import{V as c,a as u,b as p,c as v}from"./BWrehKB2.js";import{V as _}from"./CVi8ooJQ.js";import{V as y}from"./Bpq7MrYI.js";import{V as f}from"./BWNBbf6k.js";import{V as k}from"./BzdmcfQK.js";import{B as g,r as b,d as h,c as j,x as A,aG as V,ay as x,aw as I,R as C,av as P,$ as T,C as w,az as z,aq as S,i as G,aH as U}from"./nX7w3--X.js";import"./CzuCJjyz.js";import"./CNAuE06t.js";import"./C-u_YpPl.js";import"./CtG27aky.js";import"./CzdGDBjF.js";import"./D7YexoFe.js";import"./7ukZPocg.js";import"./egkXgMqP.js";import"./DeYW9Fiz.js";import"./gjBqqy30.js";import"./m8SgQgoF.js";import"./Bs0o2c6W.js";import"./Boy9wtnx.js";import"./C2U5VtnP.js";import"./DZ6T0PiR.js";import"./BCcckLnV.js";import"./369w539r.js";import"./CnLvr--j.js";import"./DG_9ismW.js";import"./CFQTgrnx.js";const N={class:"page-top"},W={class:"page-intro"},L={class:"intro-actions"},M={key:0,class:"loading-state"},q={key:1,class:"error-state"},B={key:2,class:"empty-state"},D={key:3,class:"tenants-content"},E={class:"name-text"},F={class:"key-code"},R={class:"boost-text"},K={class:"date-text"},$={class:"actions-cell"},H={class:"modal-title"},O=o(g({__name:"tenants",setup(o){const{setSEO:g}=i();g({title:"Admin - API Tenants",description:"Manage API partner tenants.",noIndex:!0});const O=l(),Q=t(),X=b([]),Y=b(!0),Z=b(!1),J=b(null),ee=b(!1),te=b(null),ae=h({name:"",api_key:"",gc_vetted_boost:0}),se=b(null),ne=b(!1),oe=j((()=>null!==te.value)),ie=j((()=>oe.value?"Edit Tenant":"New Tenant"));async function le(){Y.value=!0,J.value=null;const{data:e,error:t}=await O.listTenants();Y.value=!1,Z.value=!0,t?J.value=t?.data?.detail||t?.message||"Failed to load tenants":e&&(X.value=e.tenants)}function re(){te.value=null,ae.name="",ae.api_key="",ae.gc_vetted_boost=0,se.value=null,ee.value=!0}async function de(){if(se.value=null,ae.name.trim())if(oe.value||ae.api_key.trim()){if(ne.value=!0,oe.value){const e={name:ae.name.trim(),settings:{gc_vetted_boost:ae.gc_vetted_boost}},t=ae.api_key.trim();t&&(e.api_key=t);const{data:a,error:s}=await O.updateTenant(te.value.id,e);if(ne.value=!1,s)return void(se.value=s?.data?.detail||"Failed to update tenant.");const n=X.value.findIndex((e=>e.id===te.value.id));-1!==n&&a&&(X.value[n]=a),Q.showSnackbar({message:"Tenant updated.",color:"success",timeout:3e3})}else{const{data:e,error:t}=await O.createTenant({name:ae.name.trim(),api_key:ae.api_key.trim(),settings:{gc_vetted_boost:ae.gc_vetted_boost}});if(ne.value=!1,t)return void(se.value=t?.data?.detail||"Failed to create tenant.");e&&X.value.unshift(e),Q.showSnackbar({message:"Tenant created.",color:"success",timeout:3e3})}ee.value=!1}else se.value="API key is required for new tenants.";else se.value="Name is required."}function me(e){if(!e)return"â";try{return new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch{return e}}return A((()=>{le()})),(t,o)=>(I(),V(e,{title:"Admin - API Tenants",subtitle:"Manage API partner tenants for the AI chat API"},{default:x((()=>[C("div",N,[C("div",W,[o[8]||(o[8]=C("p",{class:"intro-text"}," A tenant maps an API key to a partner. The key itself is created in AWS API Gateway â paste its value here. ",-1)),C("div",L,[T(a,{icon:"",variant:"text",size:"small",color:"grey",loading:w(Y),onClick:le},{default:x((()=>[T(s,{icon:"mdi-refresh",size:"20"}),T(r,{activator:"parent",location:"top"},{default:x((()=>[...o[6]||(o[6]=[z("Refresh",-1)])])),_:1})])),_:1},8,["loading"]),T(a,{color:"primary",variant:"flat",size:"small",class:"text-none",onClick:re},{default:x((()=>[T(s,{icon:"mdi-plus",size:"18",start:""}),o[7]||(o[7]=z(" Add Tenant ",-1))])),_:1})])])]),w(Y)||!w(Z)?(I(),P("div",M,[T(n,{indeterminate:"",color:"primary",size:"48"}),o[9]||(o[9]=C("p",null,"Loading tenants...",-1))])):w(J)?(I(),P("div",q,[T(s,{icon:"mdi-alert-circle",size:"48",color:"error"}),o[11]||(o[11]=C("h3",null,"Unable to Load Tenants",-1)),C("p",null,S(w(J)),1),T(a,{onClick:le,color:"primary",variant:"outlined",class:"text-none"},{default:x((()=>[T(s,{icon:"mdi-refresh",start:""}),o[10]||(o[10]=z(" Try Again ",-1))])),_:1}
1)])):0===w(X).length?(I(),P("div",B,[T(s,{icon:"mdi-domain-off",size:"64",color:"grey"}),o[13]||(o[13]=C("h3",null,"No Tenants",-1)),o[14]||(o[14]=C("p",null,"Create a tenant to give an API partner access to the AI chat API.",-1)),T(a,{color:"primary",variant:"flat",class:"text-none",onClick:re},{default:x((()=>[T(s,{icon:"mdi-plus",start:""}),o[12]||(o[12]=z(" Add Tenant ",-1))])),_:1})])):(I(),P("div",D,[T(d,{headers:[{title:"Name",key:"name",sortable:!0},{title:"API Key",key:"api_key",sortable:!1},{title:"GC Vetted Boost",key:"gc_vetted_boost",sortable:!1},{title:"Updated",key:"updated_at",sortable:!0},{title:"Actions",key:"actions",sortable:!1,align:"end"}],items:w(X),"items-per-page":25,"item-value":"id",density:"comfortable",class:"tenants-table"},{"item.name":x((({item:e})=>[C("span",E,S(e.name),1)])),"item.api_key":x((({item:e})=>[C("code",F,S(e.api_key),1)])),"item.gc_vetted_boost":x((({item:e})=>[C("span",R,S(e.settings?.gc_vetted_boost??0),1)])),"item.updated_at":x((({item:e})=>[C("span",K,S(me(e.updated_at)),1)])),"item.actions":x((({item:e})=>[C("div",$,[T(a,{icon:"",variant:"text",size:"x-small",onClick:t=>{return a=e,te.value=a,ae.name=a.name,ae.api_key="",ae.gc_vetted_boost=a.settings?.gc_vetted_boost??0,se.value=null,void(ee.value=!0);var a}},{default:x((()=>[T(s,{icon:"mdi-pencil-outline",size:"20"}),T(r,{activator:"parent",location:"top"},{default:x((()=>[...o[15]||(o[15]=[z("Edit",-1)])])),_:1})])),_:1},8,["onClick"])])])),_:1},8,["items"])])),T(m,{modelValue:w(ee),"onUpdate:modelValue":o[5]||(o[5]=e=>G(ee)?ee.value=e:null),"max-width":"560",persistent:""},{default:x((()=>[T(c,{rounded:"xl"},{default:x((()=>[T(u,{class:"modal-header"},{default:x((()=>[C("span",H,S(w(ie)),1),T(a,{icon:"mdi-close",variant:"text",size:"small",onClick:o[0]||(o[0]=e=>ee.value=!1)})])),_:1}),T(_),T(p,{class:"modal-body"},{default:x((()=>[w(se)?(I(),V(y,{key:0,type:"error",variant:"tonal",density:"compact",class:"mb-4"},{default:x((()=>[z(S(w(se)),1)])),_:1})):U("",!0),T(f,{modelValue:w(ae).name,"onUpdate:modelValue":o[1]||(o[1]=e=>w(ae).name=e),label:"Name",placeholder:"e.g., Charity Navigator",variant:"outlined",density:"comfortable",class:"mb-3","hide-details":""},null,8,["modelValue"]),T(f,{modelValue:w(ae).api_key,"onUpdate:modelValue":o[2]||(o[2]=e=>w(ae).api_key=e),label:"API Key",placeholder:w(oe)?w(te)?.api_key||"":"Paste the key created in AWS API Gateway",variant:"outlined",density:"comfortable",class:"mb-3",hint:w(oe)?"Leave blank to keep the current key":"The key value you created in AWS API Gateway","persistent-hint":""},null,8,["modelValue","placeholder","hint"]),T(f,{modelValue:w(ae).gc_vetted_boost,"onUpdate:modelValue":o[3]||(o[3]=e=>w(ae).gc_vetted_boost=e),modelModifiers:{number:!0},label:"GC Vetted Boost",type:"number",step:"0.05",min:"0",variant:"outlined",density:"comfortable",hint:"Search-ranking boost for GC-vetted nonprofits (e.g. 0.2). 0 = no boost.","persistent-hint":""},null,8,["modelValue"])])),_:1}),T(_),T(v,{class:"modal-actions"},{default:x((()=>[T(k),T(a,{variant:"text",class:"text-none",onClick:o[4]||(o[4]=e=>ee.value=!1)},{default:x((()=>[...o[16]||(o[16]=[z(" Cancel ",-1)])])),_:1}),T(a,{color:"primary",variant:"flat",class:"text-none",loading:w(ne),onClick:de},{default:x((()=>[z(S(w(oe)?"Save Changes":"Create"),1)])),_:1},8,["loading"])])),_:1})])),_:1})])),_:1},8,["modelValue"])])),_:1}))}}),[["__scopeId","data-v-60789a7c"]]);export{O 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.