1import{f as q,A as H}from"./index-CElrfSEu.js";import{a as L,_ as p}from"./BaseButton.vue_vue_type_script_setup_true_lang-DRiV47cE.js";import{r as S,B as I,_ as J}from"./BaseAlert.vue_vue_type_script_setup_true_lang-Doi8BVhY.js";import{_ as R}from"./BaseCheckbox.vue_vue_type_script_setup_true_lang-DTLb4uKD.js";import{_ as Z}from"./BaseInput.vue_vue_type_script_setup_true_lang--p99ZloW.js";import{r as Y}from"./CheckIcon-CSYBh55v.js";import{v as u,y as k,z as i,k as E,w as K,q as $,T as G,A as t,B as l,u as f,I as z,J as D,C as g,H as C,F as j,c as r,E as O}from"./headlessui-BL2uCV9Q.js";import{_ as Q}from"./SettingsShell.vue_vue_type_script_setup_true_lang-H7Ff8tIJ.js";import{_ as W}from"./BaseCard.vue_vue_type_script_setup_true_lang-B03t88c_.js";import{_ as X}from"./BaseEmptyState.vue_vue_type_script_setup_true_lang-Thqbg2C-.js";import{_ as ee,a as P,b as U}from"./BaseTableHeader.vue_vue_type_script_setup_true_lang-Bq4EsK8c.js";import{u as te}from"./useFormatters-CPVzOXd3.js";import{s as F}from"./form-BxirNHCb.js";import{r as le,a as ae}from"./TrashIcon-B2C9JIS8.js";import"./axios-COha6af4.js";import"./BasePageHeader.vue_vue_type_script_setup_true_lang-B6YVGWRz.js";import"./UserGroupIcon-CjT0ffG6.js";import"./ArrowPathIcon-D0O5kVNQ.js";import"./qz-tray-B5ZuNIeo.js";import"./dinero.js-CX85NucQ.js";function se(n,y){return u(),k("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon"},[i("path",{"fill-rule":"evenodd",d:"M8 7a5 5 0 1 1 3.61 4.804l-1.903 1.903A1 1 0 0 1 9 14H8v1a1 1 0 0 1-1 1H6v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-2a1 1 0 0 1 .293-.707L8.196 8.39A5.002 5.002 0 0 1 8 7Zm5-3a.75.75 0 0 0 0 1.5A1.5 1.5 0 0 1 14.5 7 .75.75 0 0 0 16 7a3 3 0 0 0-3-3Z","clip-rule":"evenodd"})])}function ne(n,y){return u(),k("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true","data-slot":"icon"},[i("path",{d:"M10.75 4.75a.75.75 0 0 0-1.5 0v4.5h-4.5a.75.75 0 0 0 0 1.5h4.5v4.5a.75.75 0 0 0 1.5 0v-4.5h4.5a.75.75 0 0 0 0-1.5h-4.5v-4.5Z"})])}const oe={class:"mt-4 space-y-4"},ie={key:0},ue={class:"mt-2"},re={class:"mt-3 space-y-2"},de=["value"],ce=E({__name:"CreateTokenModal",props:{open:{type:Boolean,default:!1},availableAbilities:{default:()=>[]}},emits:["close","created"],setup(n,{emit:y}){const b=y,{notifySuccess:x}=q(),c=r(""),o=r([]),d=r(!1),v=r(null),A=r(null),T=r(!1),V=()=>{o.value=n.availableAbilities.filter(e=>e.default).map(e=>e.value),d.value=!1};K(()=>n.availableAbilities,()=>{n.availableAbilities.length>0&&V()},{immediate:!0});const h=e=>o.value.includes(e),B=e=>{o.value=h(e)?o.value.filter(m=>m!==e):[...o.value,e]},M=()=>{if(d.value){o.value=[],d.value=!1;return}o.value=n.availableAbilities.map(e=>e.value),d.value=!0},w=()=>{b("close")},N=()=>{v.value=null},a=()=>{T.value=!0,H.settings.createApiToken(c.value,o.value).then(e=>{v.value=e,c.value="",V(),b("created"),w()}).finally(()=>{T.value=!1})},s=()=>{const e=A.value;e!==null&&(e.select(),navigator.clipboard.writeText(e.value).then(()=>{x("API token copied to the clipboard.")}))};return(e,m)=>(u(),$(G,{to:"body"},[t(L,{open:n.open,"close-func":w,size:"lg"},{footer:l(()=>[t(p,{text:"Create",busy:T.value,"click-func":a},null,8,["busy"]),t(p,{text:"Cancel",design:"secondary",colour:f(I).Gray,class:"mr-2","click-func":w},null,8,["colour"])]),default:l(()=>[m[2]||(m[2]=i("h3",{class:"text-lg font-medium text-gray-900"}," Create API Token ",-1)),i("div",oe,[t(Z,{id:"createTokenName",modelValue:c.value,"onUpdate:modelValue":m[0]||(m[0]=_=>c.value=_),label:"Token Name"},null,8,["modelValue"]),n.availableAbilities.length>0?(u(),k("div",ie,[m[1]||(m[1]=i("p",{class:"text-sm font-medium text-gray-700"}," Token Can ",-1)),i("div",ue,[t(p,{text:d.value?"Remove All Abilities":"Assign All Abilities",design:"secondary",size:"xs",icon:d.value?f(S):f(Y),"click-func":M},null,8,["text","icon"])]),i("div",re,[(u(!0),k(z,null,D(n.availableAbilities,_=>(u(),k("div",{key:_.value,class:"flex items-center gap-2"},[t(R,{id:`createTokenAbility-${_.value}`,"model-value":h(_.value),class:"text-sm text-gray-700","onUpdate:modelValue":be=>B(_.value)},{default:l(()=>[g(C(_.name),1)]),_:2},1032,["id","model-value","onUpdate:modelValue"])]))),128))])])):j("",!0)])]),_:1},8,["open"]),t(L,{open:v.value!==null,"close-func":N,size:"lg"},{footer:l(()=>[t(p,{text:"Copy To Clipboard","click-func":s}),t(p,{text:"Close",design:"secondary",colour:f(I).Gray,class:"mr-2","click-func":N},null,8,["colour"])]),default:l(()=>[m[4]||(m[4]=i("h3",{class:"text-lg font-medium text-gray-900"}," API Token ",-1)),t(J,{colour:f(I).Amber,class:"mt-4"},{default:l(()=>[...m[3]||(m[3]=[g(" Here is your new API token. ",-1),i("strong",null,"This is the only time the token will ever be displayed, so be sure not to lose it!",-1),g(" You may revoke the token at any time from your API settings. ",-1)])]),_:1},8,["colour"]),i("textarea",{id:"createdApiToken",ref_key:"tokenTextareaRef",ref:A,class:"mt-4 block w-full rounded-md border-gray-300 font-mono text-sm shadow-xs",rows:"5",readonly:"",value:v.value??""},null,8,de)]),_:1},8,["open"])]))}}),me={class:"flex justify-end gap-2"},fe={class:"mt-4 space-y-4"},ve={key:0},ge={class:"mt-2 space-y-2"},pe=E({__name:"TokenList",props:{tokens:{default:()=>[]},availableAbilities:{default:()=>[]},loading:{type:Boolean,default:!1}},emits:["changed"],setup(n,{emit:y}){const b=y,{formatDateTime:x}
1=te(),c=r(null),o=r(""),d=r([]),v=r(!1),A=r(null),T=r(!1),V=a=>{c.value=a,o.value=a.name,d.value=[...a.metadata.abilities??[]]},h=()=>{c.value=null},B=a=>d.value.includes(a),M=a=>{d.value=B(a)?d.value.filter(s=>s!==a):[...d.value,a]},w=()=>{const a=c.value;a!==null&&F({method:"put",uri:`/settings/api/token/${a.id}`,data:{name:o.value,abilities:d.value},busy:v,successMessage:"The token has been updated."}).then(()=>{h(),b("changed")})},N=a=>{A.value=a.id,F({method:"delete",uri:`/settings/api/token/${a.id}`,busy:T,successMessage:"The token has been deleted."}).then(()=>{A.value=null,b("changed")})};return(a,s)=>(u(),k(z,null,[t(W,{padding:"none"},{header:l(()=>[...s[1]||(s[1]=[i("h3",{class:"px-4 py-5 text-lg font-medium leading-6 text-gray-900 sm:px-6"}," API Tokens ",-1)])]),default:l(()=>[!n.loading&&n.tokens.length===0?(u(),$(X,{key:0,title:"No API tokens",description:"Create a token to start using the AZLabels API.",icon:f(se)},null,8,["icon"])):(u(),$(ee,{key:1,loading:n.loading},{headers:l(()=>[t(U,null,{default:l(()=>[...s[2]||(s[2]=[g("Name",-1)])]),_:1}),t(U,null,{default:l(()=>[...s[3]||(s[3]=[g("Created",-1)])]),_:1}),t(U,null,{default:l(()=>[...s[4]||(s[4]=[g("Last Used",-1)])]),_:1}),t(U)]),default:l(()=>[(u(!0),k(z,null,D(n.tokens,e=>(u(),k("tr",{key:e.id},[t(P,null,{default:l(()=>[g(C(e.name),1)]),_:2},1024),t(P,null,{default:l(()=>[g(C(f(x)(e.created_at)),1)]),_:2},1024),t(P,null,{default:l(()=>[g(C(e.last_used_at==null?"Never":f(x)(e.last_used_at)),1)]),_:2},1024),t(P,{class:"text-right"},{default:l(()=>[i("div",me,[t(p,{icon:f(le),design:"outline",size:"xs","click-func":()=>V(e)},null,8,["icon","click-func"]),t(p,{icon:f(ae),design:"outline",size:"xs",colour:f(I).Red,busy:T.value&&A.value===e.id,"click-func":()=>N(e),"confirm-action":!0,"confirm-title":"Delete Token","confirm-description":"Are you sure you want to delete this token? If deleted, API requests that attempt to authenticate using this token will no longer be accepted."},null,8,["icon","colour","busy","click-func"])])]),_:2},1024)]))),128))]),_:1},8,["loading"]))]),_:1}),(u(),$(G,{to:"body"},[t(L,{open:c.value!==null,"close-func":h,size:"lg"},{footer:l(()=>[t(p,{text:"Update",busy:v.value,"click-func":w},null,8,["busy"]),t(p,{text:"Close",design:"secondary",colour:f(I).Gray,class:"mr-2","click-func":h},null,8,["colour"])]),default:l(()=>[s[6]||(s[6]=i("h3",{class:"text-lg font-medium text-gray-900"}," Edit Token ",-1)),i("div",fe,[t(Z,{id:"updateTokenName",modelValue:o.value,"onUpdate:modelValue":s[0]||(s[0]=e=>o.value=e),label:"Token Name"},null,8,["modelValue"]),n.availableAbilities.length>0?(u(),k("div",ve,[s[5]||(s[5]=i("p",{class:"text-sm font-medium text-gray-700"}," Token Can ",-1)),i("div",ge,[(u(!0),k(z,null,D(n.availableAbilities,e=>(u(),$(R,{id:`updateTokenAbility-${e.value}`,key:e.value,"model-value":B(e.value),class:"text-sm text-gray-700","onUpdate:modelValue":m=>M(e.value)},{default:l(()=>[g(C(e.name),1)]),_:2},1032,["id","model-value","onUpdate:modelValue"]))),128))])])):j("",!0)])]),_:1},8,["open"])]))],64))}}),ke={class:"flex justify-end"},Ee=E({__name:"ApiTokens",setup(n){const y=r([]),b=r([]),x=r(!0),c=r(!1),o=async()=>{y.value=await H.settings.fetchApiTokens()};return O(async()=>{b.value=await H.settings.fetchTokenAbilities(),await o(),x.value=!1}),(d,v)=>(u(),$(Q,{title:"API"},{default:l(()=>[i("div",ke,[t(p,{text:"Create API Token",icon:f(ne),"click-func":()=>c.value=!0},null,8,["icon","click-func"])]),t(pe,{tokens:y.value,"available-abilities":b.value,loading:x.value,onChanged:o},null,8,["tokens","available-abilities","loading"]),t(ce,{open:c.value,"available-abilities":b.value,onClose:v[0]||(v[0]=A=>c.value=!1),onCreated:o},null,8,["open","available-abilities"])]),_:1}))}});export{Ee as default}; 2//# sourceMappingURL=ApiTokens-DsDVhheG.js.map
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.