1import{dg as T,hL as _,c7 as I,b1 as C,aq as o,b7 as s,ci as E,b8 as u,bP as x,bI as R,dM as O,cc as P,cl as $,bJ as L,ca as M}from"./Skeleton-DChA1aJs.js";import{C as q}from"./CopyToClipboardButton-BF5dSXc2.js";import{c as y,u as B}from"./main-B8bZnICf.js";try{let t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},a=new t.Error().stack;a&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[a]="6a4732da-7a5c-4da8-b077-7b2d40be9605",t._sentryDebugIdIdentifier="sentry-dbid-6a4732da-7a5c-4da8-b077-7b2d40be9605")}catch{}const Q=`${T}/v2/internal/docs/access-codes`;async function b(t,a){const n=await fetch(`${Q}${t}`,{...a,headers:{...await _(),"Content-Type":"application/json",...a?.headers??{}}});if(!n.ok){let c=`Request failed (${n.status})`;try{const l=await n.json();c=l?.error||l?.status||c}catch{}throw new Error(c)}if(n.status!==204)return n.json()}async function V(){return(await b("/")).data}function F(t){return b("/",{method:"POST",body:JSON.stringify(t)})}function H(t){return b(`/${t}/revoke`,{method:"POST"})}const h=["docsAccessCodes"];function z(){return I(h,V,{staleTime:3e4})}function J(){const t=C();return y(a=>F(a),{onSuccess:()=>{t.invalidateQueries(h)}})}function G(){const t=C();return y(a=>H(a),{onSuccess:()=>{t.invalidateQueries(h)}})}const K=[{value:"1_hour",label:"1 hour"},{value:"1_day",label:"1 day"},{value:"1_week",label:"1 week"},{value:"1_month",label:"1 month"},{value:"3_month",label:"3 months"}];function g(t){return t.revoked_at?"Revoked":t.expires_at&&new Date(t.expires_at)<new Date?"Expired":"Active"}function v(t){return t?new Date(t).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}):"Never"}function U(t){return`${window.location.origin}/docs-login?code=${encodeURIComponent(t)}`}function ee(){const{data:t,isLoading:a}=z(),n=J(),c=G(),[l,p]=o.useState(""),[f,k]=o.useState("1_week"),[r,j]=o.useState(!1),[d,m]=o.useState(null),w=o.useMemo(()=>{const e=t??[];return r?e.filter(i=>g(i)==="Active"):e},[t,r]),S=async()=>{try{const e=await n.mutateAsync({description:l,expiry:f});x.success(`Created access code ${e.code}`),p("")}catch(e){x.error(e instanceof Error?e.message:"Something went wrong")}},A=async()=>{if(d)try{await c.mutateAsync(d.id),x.success("Access code revoked"),m(null)}catch(e){x.error(e instanceof Error?e.message:"Something went wrong")}},D=o.useMemo(()=>[{label:"Description",align:"left",CellContent:({row:e})=>s.jsx("div",{className:"text-textDefault line-clamp-2 max-w-md",children:e.description||"â"})},{label:"Code",align:"left",CellContent:({row:e})=>s.jsxs("div",{className:"flex items-center gap-1",children:[s.jsx("span",{className:"text-textDefault font-mono",children:e.code}),s.jsx(q,{text:e.code,title:"Copy code"})]})},{label:"Status",align:"left",CellContent:({row:e})=>{const i=g(e);return s.jsx(E,{text:i,variant:i==="Active"?"success":"unknown",className:"min-w-0"})}},{label:"Expires",align:"left",getCellClassName:()=>"text-textSubtle",getCellText:e=>v(e.expires_at)},{label:"Created",align:"left",getCellClassName:()=>"text-textSubtle",getCellText:e=>v(e.created_at)},{label:"Created by",align:"left",getCellClassName:()=>"text-textSubtle",getCellText:e=>e.created_by_email||"â"},{label:"Actions",align:"right",width:"16rem",CellContent:({row:e})=>{const i=g(e)==="Active";return s.jsxs("div",{className:"flex items-center justify-end gap-2",children:[s.jsx(u,{variant:"outline",size:"sm",onClick:()=>{navigator.clipboard.writeText(U(e.code)),x.success("Auto-login link copied")},children:"Copy login link"}),i&&s.jsx(u,{variant:"destructive",size:"sm",onClick:()=>m(e),children:"Revoke"})]})}}],[]),N=o.useCallback(()=>s.jsx("div",{className:"text-textSubtle p-8 text-center text-sm",children:r&&(t?.length??0)>0?"No active codes. Turn off the filter to see inactive ones.":"No access codes yet. Create one above."}),[r,t]);return B([{label:"Internal Tools",href:"/admin",disabled:!0},{label:"Docs Temp Access",href:"/admin/docs-temp-access"}]),s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:"flex flex-col gap-6",children:[s.jsxs("div",{className:"flex flex-col gap-1",children:[s.jsx("h1",{className:"text-lg font-semibold",children:"Docs Temp Access"}),s.jsx("p",{className:"text-textSubtle text-sm",children:"Generate temporary access codes that let customers into the published docs without a Freshpaint account. Codes are reusable until they expire or are revoked."})]}),s.jsxs("div",{className:"border-borderSubtle flex flex-wrap items-end gap-4 roun
1ded-lg border bg-white p-4 shadow dark:bg-gray-100",children:[s.jsx("div",{className:"min-w-64 flex-1",children:s.jsx(R,{labelPosition:"stacked",id:"docs-code-description",label:"Description",placeholder:"E.g. Acme Corp evaluation",value:l,onChange:e=>p(e.target.value)})}),s.jsxs("div",{className:"flex flex-col gap-2",children:[s.jsx("label",{htmlFor:"docs-code-expiry",className:"text-textDefault text-sm",children:"Expires"}),s.jsx(O,{options:K,getOptionLabel:e=>e.label,getOptionValue:e=>e.value,rootProps:{value:f,onValueChange:e=>k(e)},triggerProps:{id:"docs-code-expiry",className:"w-48"}})]}),s.jsx(u,{loading:n.isLoading,onClick:S,children:"Create code"})]}),s.jsx("div",{className:"flex items-center justify-end",children:s.jsxs("label",{className:"text-textSubtle flex cursor-pointer items-center gap-2 text-sm",children:[s.jsx(P,{checked:r,onCheckedChange:e=>j(e===!0)}),"Hide inactive codes"]})}),s.jsx($,{rows:w,getRowId:e=>e.id,columnConfigs:D,EmptyState:N,loading:a})]}),s.jsx(L,{open:!!d,onOpenChange:()=>m(null),title:"Revoke access code?",description:d?`Revoking "${d.code}" immediately blocks it from signing anyone into the docs. This cannot be undone.`:"",children:s.jsxs(M,{children:[s.jsx(u,{type:"button",variant:"link",className:"text-textSubtle",onClick:()=>m(null),children:"Cancel"}),s.jsx(u,{type:"button",variant:"destructive",loading:c.isLoading,onClick:A,children:"Revoke"})]})})]})}export{ee as default}; 2//# sourceMappingURL=DocsTempAccessPage-BKJJ-dUH.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.