PageSourceSearch

https://featherless.ai/_nuxt/C6PgOIOn.js

js featherless.ai collected 2026-09-24 18:29:05 UTC 21,631 bytes, 3 lines download raw bytes

1import{aN as c,x as f,a_ as Ce,P as Se,eT as Te,eH as ze,eI as Oe,r as w,eO as Ee,eP as x,eK as Fe,eS as Le,aF as De,u as k,bK as o,y as n,M as s,eJ as Pe,bm as t,L as r,bd as d,bP as ae,F as R,aZ as U,aw as Ne,v as P,h4 as $,aW as V,eF as Ge}from"./uKV8ELha.js";import{_ as Be}from"./Bwff905y.js";import{_ as qe}from"./BwzcsAmW.js";import{_ as je,a as Me,b as Ye,c as Ve,d as He}from"./DBXADX12.js";import{_ as We}from"./odHdk3A0.js";import{_ as me}from"./1Fh_g1AI.js";import{_ as Je,a as Ke}from"./XZAPoU8m.js";import{_ as Xe}from"./BhfY9hyJ.js";import{c as Ze,b as le,a as A}from"./CnIKvb8j.js";import{I as u}from"./D9N4QPNq.js";import{_ as Qe}from"./CRliR9m2.js";import{_ as p}from"./CKuPrOTA.js";import{_ as C}from"./Bpqx5VFr.js";import{a as S,_ as T}from"./BmsNUfcx.js";import{_ as z}from"./Mx6S0X-R.js";import{_ as O}from"./BxLDCxJc.js";import{_ as et,c as tt,a as st,b as ot}from"./grhQHHll.js";import{_ as H}from"./FifX-Uep.js";import{_ as ie,a as ce,b as de,c as ue}from"./DVd7eX9v.js";import{_ as pe}from"./B483Al3u.js";import{_ as fe}from"./Bl-Ubt9I.js";import"./iOpeB5ah.js";import"./fgJUs3lo.js";import"./Bffxfc44.js";import"./xBsWRliO.js";import"./CaoggYkt.js";try{let m=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},I=new m.Error().stack;I&&(m._sentryDebugIds=m._sentryDebugIds||{},m._sentryDebugIds[I]="9061d0ec-1ae9-460f-8207-cab73aedf84e",m._sentryDebugIdIdentifier="sentry-dbid-9061d0ec-1ae9-460f-8207-cab73aedf84e")}catch{}const nt={},rt={class:"z-fixed-control fixed bottom-0 left-0 right-0 flex flex-row justify-end gap-2 border-t bg-background p-4 lg:static lg:z-auto lg:border-t-0 lg:px-0"};function at(m,I){return c(),f("div",rt,[Ce(m.$slots,"default")])}const lt=me(nt,[["render",at]]),it={class:"flex flex-col gap-1"},ct={class:"flex items-center gap-2 text-sm font-medium"},dt={class:"list-decimal space-y-3 pl-5 marker:text-foreground"},ut={class:"mt-2"},pt={class:"flex items-start justify-between gap-4"},ft={class:"space-y-1.5"},mt={class:"space-y-6"},_t={class:"text-sm font-medium mb-2"},ht={class:"flex flex-wrap gap-2"},yt={class:"space-y-4"},vt={class:"space-y-2"},gt={class:"relative"},bt={class:"px-4 py-2 pr-12 bg-surface-hover rounded-lg font-mono text-sm break-all"},wt={class:"space-y-2"},xt={class:"flex justify-between items-center"},kt={class:"space-y-4 border-t pt-6"},Rt={class:"space-y-2"},Ut={class:"relative"},It={class:"px-4 py-4 pr-12 bg-surface-hover rounded-lg font-mono text-sm overflow-x-auto whitespace-pre-wrap break-all"},$t={class:"flex items-start justify-between gap-4"},At={class:"space-y-1.5"},Ct={class:"max-h-96 overflow-auto whitespace-pre-wrap"},St={class:"space-y-4"},Tt={class:"list-disc list-inside space-y-1"},zt=Se({__name:"[id]",setup(m){const I=Te(),{id:v}=I.params,E=ze(),{user:Ot,getUser:Et}=Oe(),_=V(null),_e=w(()=>{const a={};return Object.values($).forEach(e=>{a[e.category]||(a[e.category]=[]),a[e.category].push(e)}),a}),W=[{value:"code",label:"Authorization Code"},{value:"token",label:"Implicit Grant"}],N=Ge(),G=w(()=>{if(!l.name||!l.urlGenerator.selectedRedirectUri)return"";const a=typeof window<"u"?window.location.origin:N.public.baseURL||"http://feather.localhost:4000",e=new URLSearchParams({client_id:l.client_id,response_type:l.urlGenerator.responseType,redirect_uri:l.urlGenerator.selectedRedirectUri,scope:l.scopes.join(" ")});return`${a}/oauth/authorize?${e.toString()}`}),B=w(()=>N.public.apiBaseUrl),he=w(()=>{const a=l.urlGenerator.selectedRedirectUri||l.redirectURI?.[0]||"YOUR_REDIRECT_URI";return[`curl -X POST ${B.value}/oauth/token \\`,'  -H "Content-Type: application/x-www-form-urlencoded" \\','  -d "grant_type=authorization_code" \\','  -d "code=AUTHORIZATION_CODE_FROM_REDIRECT" \\',`  -d "client_id=${l.client_id||"YOUR_CLIENT_ID"}" \\`,'  -d "client_secret=YOUR_CLIENT_SECRET" \\',`  -d "redirect_uri=${a}"`].join(`
2`)}),J=w(()=>`${typeof window<"u"?window.location.origin:N.public.baseURL||"http://feather.localhost:4000"}/oauth/authorize`),K=w(()=>{const a=l.client_id||"YOUR_CLIENT_ID",e=l.redirectURI?.[0]||"YOUR_REGISTERED_REDIRECT_URI",L=l.scopes.join(" ")||"YOUR_SCOPES",h=`${B.value}/oauth/token`,Y=`${J.value}?client_id=${a}&response_type=code&redirect_uri=${encodeURIComponent(e)}&scope=${encodeURIComponent(L)}`;return["Build an OAuth 2.0 client that signs users in with Featherless (authorization code grant)","and calls the Featherless API on their behalf. Implement it in the language/framework I","specify below; if I have not specified one, ask me first.","","## My Featherless OAuth application",`- App name: ${l.name||"My App"}`,`- client_id: ${a}`,"- client_secret: server-side only — I will supply it via an env var; never hard-code or expose it.",`- Registered redirect URI: ${e}`,`- Scopes: ${L}`,"","## Endpoints",`- Authorization (redirect the user's browser here): ${J.value}`,`- Token exchange (server-to-server POST): ${h}`,`- API base URL (authenticated calls): ${B.value}`,"","## Flow to implement","1. Redirect the user to the authorization URL:",`   ${Y}`,"   response_type=code; redirect_uri must EXACTLY match the registered one above.","2. The user signs in and approves on Featherless, then is redirected back to the redirect","   URI with a one-time ?code=... (or ?error=access_de
2nied if they decline).","3. On your server, exchange the code by POSTing application/x-www-form-urlencoded to the","   token endpoint with: grant_type=authorization_code, code=<code>, client_id,","   client_secret, redirect_uri (same as above).",'   Response JSON: { access_token, refresh_token, token_type: "Bearer", expires_in, scope }.',"4. Call the API with header  Authorization: Bearer <access_token>  against the API base URL.","5. When the access token expires, refresh via the token endpoint with","   grant_type=refresh_token, refresh_token=<token>, client_id, client_secret.","","## Requirements","- Perform the code→token exchange and all client_secret use strictly server-side.","- Handle the ?error= case, store tokens securely, and implement token refresh.","- Deliver: the authorize redirect, the callback handler that exchanges the code, a sample","  authenticated API request, and setup/run instructions.","",'Language/framework: <fill in, e.g. "Node + Express", "Python + FastAPI", "Go net/http">'].join(`
3`)}),F=V(!1),q=V(""),ye=async()=>{try{const a=await E.applications.regenerateSecret(v);a.client_secret&&(q.value=a.client_secret,F.value=!0)}catch{x({title:"Error",description:"Failed to reset client secret",variant:"destructive"})}},ve=async()=>{try{await navigator.clipboard.writeText(q.value),x({title:"Copied",description:"Client secret copied to clipboard",variant:"success"})}catch(a){console.error("Failed to copy:",a)}},X=/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$|^https?:\/\/localhost(:[0-9]+)?(\/.*)?$/,{handleSubmit:ge,values:l,setFieldValue:j,resetForm:be,setErrors:we,errors:g,isSubmitting:Z}=Ee({initialValues:{name:"",description:"",documentationUrl:"",redirectURI:[""],scopes:[],status:"pending",usage_count:0,client_id:"",client_secret:"",urlGenerator:{responseType:"code",selectedRedirectUri:""}},validationSchema:Ze({name:A().max(50).required().label("Name"),description:A().max(255).required().label("Description"),documentationUrl:A().matches(X,"Must be a valid URL").nullable().label("Documentation URL"),redirectURI:le(A().matches(X,"Must be a valid URL (including localhost)").required()).min(1).label("Redirect URI"),scopes:le(A()).min(1).label("Scopes")})}),Q=ge(async a=>{try{if(v==="new"){const e=await E.post("/application",a);e?.id&&(x({title:"Success",description:"OAuth Application created successfully",variant:"success"}),Fe(`/account/developer-apps/${e.id}`))}else await E.put(`/application/${v}`,a),x({title:"Success",description:"OAuth Application updated successfully",variant:"success"})}catch(e){e instanceof Le&&e.statusCode===422?we(e.data.issues):x({title:"Error",description:"Failed to save OAuth Application",variant:"destructive"})}}),ee=w(()=>l.redirectURI.map(a=>({value:a,label:a}))),xe=async()=>{try{const a=await E.get(`/application/${v}`);be({values:{...a,redirectURI:a.redirectURI.length?a.redirectURI:[""],scopes:a.scopes??[],urlGenerator:{state:"",responseType:"code",selectedRedirectUri:""}}})}catch{x({title:"Error",description:"Failed to fetch application details",variant:"destructive"})}},M=async a=>{try{await navigator.clipboard.writeText(a),x({title:"Copied to clipboard",description:"The generated URL has been copied to your clipboard",variant:"success"})}catch(e){console.error("Failed to copy text: ",e)}};return De(()=>{v&&v!=="new"&&xe()}),(a,e)=>{const L=Pe,h=Be,Y=qe,te=Ye,se=Me,oe=He,ne=Ve,re=je,ke=We,Re=lt,Ue=Ke,Ie=Je,$e=Xe;return c(),k($e,{class:"space-y-6"},{default:o(()=>[n("header",it,[s(L,{to:"/account/developer-apps",class:"flex items-center gap-1 text-xs text-content-secondary hover:underline"},{default:o(()=>[s(t(u),{icon:"lucide:arrow-left",class:"w-3.5 h-3.5"}),e[9]||(e[9]=r(" Developer Applications ",-1))]),_:1}),e[10]||(e[10]=n("h1",{class:"text-xl font-semibold"}," Manage OAuth Application ",-1)),e[11]||(e[11]=n("p",{class:"text-sm text-content-secondary"}," Create and manage your OAuth application settings. ",-1))]),s(t(et),{type:"single",collapsible:"",class:"oauth-help mb-6 rounded-lg border bg-surface-minimal px-4"},{default:o(()=>[s(t(tt),{value:"how-it-works",class:"border-none"},{default:o(()=>[s(t(st),{class:"text-left hover:no-underline"},{default:o(()=>[n("span",ct,[s(t(u),{icon:"lucide:book-open",class:"w-4 h-4"}),e[12]||(e[12]=r(" New to OAuth? How the authorization flow works ",-1))])]),_:1}),s(t(ot),{class:"space-y-4 text-sm text-content-secondary"},{default:o(()=>[e[25]||(e[25]=n("p",null,[r(" OAuth lets your application act on behalf of a Featherless user without ever seeing their password. You send the user to Featherless to sign in and approve the scopes you request, then your server exchanges a one-time "),n("strong",{class:"font-medium text-foreground"},"authorization code"),r(" for an access token. ")],-1)),n("ol",dt,[e[21]||(e[21]=n("li",null,[n("span",{class:"font-medium text-foreground"},"Send the user to the authorization URL."),r(" Redirect them to the URL generated further down this page — it carries your "),n("code",null,"client_id"),r(", your "),n("code",null,"redirect_uri"),r(", and the "),n("code",null,"scope"),r("s you need. Use the "),n("strong",{class:"font-medium text-foreground"},"Authorization Code"),r(" response type. ")],-1)),e[22]||(e[22]=n("li",null,[n("span",{class:"font-medium text-foreground"},"The user approves."),r(" They sign in and consent to the requested scopes on the Featherless consent screen. ")],-1)),e[23]||(e[23]=n("li",null,[n("span",{class:"font-medium text-foreground"},"We send them back to your Redirect URI."),r(" The browser is redirected to your registered redirect URI with a one-time "),n("code",null,"?code=…"),r(" appended — or "),n("code",null,"?error=access_de
3nied"),r(" if the user declines. ")],-1)),n("li",null,[e[13]||(e[13]=n("span",{class:"font-medium text-foreground"},"Exchange the code for tokens.",-1)),e[14]||(e[14]=r(" From your ",-1)),e[15]||(e[15]=n("em",null,"server",-1)),e[16]||(e[16]=r(" (never the browser — it needs your client secret), POST the code to the token endpoint to receive an ",-1)),e[17]||(e[17]=n("code",null,"access_token",-1)),e[18]||(e[18]=r(" and a ",-1)),e[19]||(e[19]=n("code",null,"refresh_token",-1)),e[20]||(e[20]=r(": ",-1)),n("pre",ut,[n("code",null,d(he.value),1)])]),e[24]||(e[24]=n("li",null,[n("span",{class:"font-medium text-foreground"},"Call the API."),r(" Send the token as an "),n("code",null,"Authorization: Bearer <access_token>"),r(" header. With the "),n("strong",{class:"font-medium text-foreground"},"API Access"),r(" scope you can mint API keys on the user's behalf; when a token expires, get a new one with "),n("code",null,"grant_type=refresh_token"),r(". ")],-1))])]),_:1})]),_:1})]),_:1}),n("form",{id:"feather-form-pages-account-developer-apps-id",name:"feather-form-pages-account-developer-apps-id",class:"oauth-help space-y-6",onSubmit:e[4]||(e[4]=ae((...i)=>t(Q)&&t(Q)(...i),["prevent"]))},[s(t(C),null,{default:o(()=>[s(t(S),null,{default:o(()=>[s(t(T),null,{default:o(()=>[...e[26]||(e[26]=[r("Application Details",-1)])]),_:1}),s(t(z),null,{default:o(()=>[...e[27]||(e[27]=[r(" Basic information shown to users on the consent screen. ",-1)])]),_:1})]),_:1}),s(t(O),{class:"space-y-6"},{default:o(()=>[s(h,{name:"name",label:"Application Name",error:t(g).name},{default:o(()=>[s(t(H),{placeholder:"My Amazing App"})]),_:1},8,["error"]),s(h,{name:"description",label:"Description",error:t(g).description},{default:o(()=>[s(Y,{placeholder:"Describe your application"})]),_:1},8,["error"]),s(h,{name:"documentationUrl",label:"Documentation URL",error:t(g).documentationUrl,optional:""},{default:o(()=>[s(t(H),{placeholder:"https://your-app.com/docs"})]),_:1},8,["error"])]),_:1})]),_:1}),s(t(C),null,{default:o(()=>[s(t(S),null,{default:o(()=>[n("div",pt,[n("div",ft,[s(t(T),null,{default:o(()=>[...e[28]||(e[28]=[r("Redirect URIs",-1)])]),_:1}),s(t(z),null,{default:o(()=>[...e[29]||(e[29]=[r(" Where we send users back to after they approve your app. ",-1)])]),_:1})]),s(t(p),{variant:"outline",size:"sm",type:"button",class:"shrink-0",onClick:e[0]||(e[0]=()=>t(j)("redirectURI",[...t(l).redirectURI,""]))},{default:o(()=>[s(t(u),{icon:"lucide:plus",class:"w-4 h-4 mr-2"}),e[30]||(e[30]=r(" Add URI ",-1))]),_:1})])]),_:1}),s(t(O),{class:"space-y-4"},{default:o(()=>[e[31]||(e[31]=n("p",{class:"text-sm text-content-secondary"},[r(" After a user approves your app we redirect their browser to one of these URLs with a one-time "),n("code",null,"?code=…"),r(" query parameter. The "),n("code",null,"redirect_uri"),r(" you pass in the authorization request must "),n("span",{class:"font-medium text-foreground"},"exactly match"),r(" one of the URIs registered here (scheme, host, port, and path). Point it at your app's callback endpoint — e.g. "),n("code",null,"https://your-app.com/oauth/callback"),r(", or "),n("code",null,"http://localhost:3000/callback"),r(" while developing. ")],-1)),(c(!0),f(R,null,U(t(l).redirectURI,(i,b)=>(c(),f("div",{key:b,class:"flex gap-2"},[s(h,{name:`redirectURI.${b}`,error:t(g)?.redirectURI?.[b],class:"flex-1"},{default:o(()=>[s(t(H),{placeholder:"https://your-app.com/oauth/callback"})]),_:1},8,["name","error"]),s(t(p),{variant:"ghost",size:"sm",type:"button",disabled:t(l).redirectURI.length===1,onClick:()=>t(j)("redirectURI",t(l).redirectURI.filter((y,D)=>D!==b))},{default:o(()=>[s(t(u),{icon:"lucide:x",class:"w-4 h-4"})]),_:1},8,["disabled","onClick"])]))),128))]),_:1})]),_:1}),s(t(C),null,{default:o(()=>[s(t(S),null,{default:o(()=>[s(t(T),null,{default:o(()=>[...e[32]||(e[32]=[r("Required Scopes",-1)])]),_:1}),s(t(z),null,{default:o(()=>[...e[33]||(e[33]=[r(" The permissions your app asks each user to grant. Click a scope to toggle it, or the info icon to see exactly what it allows. ",-1)])]),_:1})]),_:1}),s(t(O),null,{default:o(()=>[s(h,{name:"scopes",error:t(g).scopes},{default:o(()=>[n("div",mt,[(c(!0),f(R,null,U(_e.value,(i,b)=>(c(),f("div",{key:b},[n("h4",_t,d(b),1),n("div",ht,[(c(!0),f(R,null,U(i,y=>(c(),k(t(Qe),{key:y.id,variant:"outline",class:Ne(["cursor-pointer",{"bg-primary text-primary-foreground":t(l).scopes.includes(y.id)}]),onClick:()=>{const D=t(l).scopes.includes(y.id)?t(l).scopes.filter(Ae=>Ae!==y.id):[...t(l).scopes,y.id];t(j)("scopes",D)}},{default:o(()=>[r(d(y.name)+" ",1),s(t(p),{type:"button",variant:"ghost",size:"xs",class:"ml-2",onClick:ae(D=>_.value=y.id,["stop"])},{default:o(()=>[s(t(u),{icon:"lucide:info",class:"w-4 h-4"})]),_:1},8,["onClick"])]),_:2},1032,["class","onClick"]))),128))])]))),128))])]),_:1},8,["error"])]),_:1})]),_:1}
3),t(l).client_id&&t(l).client_secret&&t(l).redirectURI.length?(c(),k(t(C),{key:0},{default:o(()=>[s(t(S),null,{default:o(()=>[s(t(T),null,{default:o(()=>[...e[34]||(e[34]=[r("Credentials & Authorization URL",-1)])]),_:1}),s(t(z),null,{default:o(()=>[...e[35]||(e[35]=[r(" Your client credentials and a ready-to-use link that starts the OAuth flow. ",-1)])]),_:1})]),_:1}),s(t(O),{class:"space-y-8"},{default:o(()=>[n("div",yt,[n("div",vt,[e[36]||(e[36]=n("span",{class:"text-sm font-medium"},"Client ID",-1)),n("div",gt,[n("p",bt,d(t(l).client_id),1),s(t(p),{variant:"ghost",size:"sm",class:"absolute right-2 top-1",type:"button",onClick:e[1]||(e[1]=i=>M(t(l).client_id))},{default:o(()=>[s(t(u),{icon:"lucide:copy",class:"w-4 h-4"})]),_:1})])]),n("div",wt,[n("div",xt,[e[38]||(e[38]=n("span",{class:"text-sm font-medium"},"Client Secret",-1)),s(t(p),{variant:"outline",size:"sm",type:"button",onClick:ye},{default:o(()=>[s(t(u),{icon:"lucide:refresh-cw",class:"w-4 h-4 mr-2"}),e[37]||(e[37]=r(" Reset Secret ",-1))]),_:1})]),e[39]||(e[39]=n("p",{class:"text-sm text-content-secondary"}," The client secret is only shown once, when it's created or reset. ",-1))])]),n("div",kt,[e[42]||(e[42]=n("div",{class:"space-y-1"},[n("h4",{class:"text-sm font-medium"}," Authorization URL "),n("p",{class:"text-sm text-content-secondary"}," Pick a response type and redirect URI to build the link you send your users to. ")],-1)),s(h,{name:"urlGenerator.responseType",label:"Response Type",error:t(g)?.urlGenerator},{default:o(()=>[s(re,{options:W,placeholder:"Select a response type"},{default:o(()=>[s(se,null,{default:o(()=>[s(te)]),_:1}),s(ne,null,{default:o(()=>[(c(),f(R,null,U(W,i=>s(oe,{key:i.value,value:i.value},{default:o(()=>[r(d(i.label),1)]),_:2},1032,["value"])),64))]),_:1})]),_:1})]),_:1},8,["error"]),s(h,{name:"urlGenerator.selectedRedirectUri",label:"Select Redirect URI",error:t(g)?.urlGenerator},{default:o(()=>[s(re,{options:ee.value,placeholder:"Select a redirect URI"},{default:o(()=>[s(se,null,{default:o(()=>[s(te)]),_:1}),s(ne,null,{default:o(()=>[(c(!0),f(R,null,U(ee.value,i=>(c(),k(oe,{key:i.value,value:i.value},{default:o(()=>[r(d(i.label),1)]),_:2},1032,["value"]))),128))]),_:1})]),_:1},8,["options"])]),_:1},8,["error"]),n("div",Rt,[s(ke,null,{default:o(()=>[...e[40]||(e[40]=[r("Generated Authorization URL",-1)])]),_:1}),n("div",Ut,[n("p",It,d(G.value||"Complete the form to generate URL"),1),G.value?(c(),k(t(p),{key:0,variant:"ghost",size:"sm",class:"absolute top-2 right-2",type:"button",onClick:e[2]||(e[2]=i=>M(G.value))},{default:o(()=>[s(t(u),{icon:"lucide:copy",class:"w-4 h-4"})]),_:1})):P("",!0)]),e[41]||(e[41]=n("p",{class:"text-sm text-content-secondary"},[r(" This link starts the flow — send your users here (e.g. from a “Connect with Featherless” button). After they approve, they land back on the selected redirect URI with a "),n("code",null,"?code=…"),r(" to exchange for a token. See the guide at the top of this page for the full sequence. ")],-1))])])]),_:1})]),_:1})):P("",!0),s(t(C),null,{default:o(()=>[s(t(S),null,{default:o(()=>[n("div",$t,[n("div",At,[s(t(T),null,{default:o(()=>[...e[43]||(e[43]=[r("Build a client with AI",-1)])]),_:1}),s(t(z),null,{default:o(()=>[...e[44]||(e[44]=[r(" Copy this prompt and paste it into an AI assistant (e.g. Claude) along with the language you want — it embeds this app's settings and everything needed to scaffold a working OAuth client. ",-1)])]),_:1})]),s(t(p),{variant:"outline",size:"sm",type:"button",class:"shrink-0",onClick:e[3]||(e[3]=i=>M(K.value))},{default:o(()=>[s(t(u),{icon:"lucide:copy",class:"w-4 h-4 mr-2"}),e[45]||(e[45]=r(" Copy prompt ",-1))]),_:1})])]),_:1}),s(t(O),null,{default:o(()=>[n("pre",Ct,[n("code",null,d(K.value),1)])]),_:1})]),_:1}),s(Re,null,{default:o(()=>[s(t(p),{type:"submit",disabled:t(Z),class:"w-full sm:w-auto"},{default:o(()=>[t(Z)?(c(),k(t(u),{key:0,icon:"lucide:loader-2",class:"w-4 h-4 mr-2 animate-spin"})):P("",!0),r(" "+d(t(v)==="new"?"Create Application":"Update Application"),1)]),_:1},8,["disabled"])]),_:1})],32),s(t(ie),{open:!!_.value,"onUpdate:open":e[6]||(e[6]=i=>_.value=null)},{default:o(()=>[_.value&&t($)[_.value]?(c(),k(t(ce),{key:0},{default:o(()=>[s(t(de),null,{default:o(()=>[s(t(ue),null,{default:o(()=>[r(d(t($)[_.value].name),1)]),_:1}),s(t(pe),null,{default:o(()=>[r(d(t($)[_.value].description),1)]),_:1})]),_:1}),n("div",St,[n("div",null,[e[46]||(e[46]=n("h4",{class:"text-sm font-medium mb-2"}," Permissions Granted ",-1)),n("ul",Tt,[(c(!0),f(R,null,U(t($)[_.value].permissions,i=>(c(),f("li",{key:i,class:"text-sm text-content-secondary"},d(i),1))),128))])])]),s(t(fe),null,{default:o(()=>[s(t(p),{onClick:e[5]||(e[5]=i=>_.value=null)},{default:o(()=>[...e[47]||(e[47]=[r(" Close ",-1)])]),_:1})]),_:1})]),_:1})):P("",!0)]),_:1},8,["open"]),s(t(ie),{open:F.value,"onUpdate:open":e[8]||(e[8]=i=>F.value=!1)},{default:o(()=>[s(t(ce),{size:"md"},{default:o(()=>[s(t(de),null,{default:o(()=>[s(t(ue),null,{default:o(()=>[...e[48]||(e[48]=[r("New Client Secret Generated",-1)])]),_:1}),s(t(pe),null,{default:o(()=>[...e[49]||(e[49]=[r(" Please copy your new client secret now. You won't be able to see it again! ",-1)])]),_:1})]),_:1}),s(Ie,{class:"mt-4"},{default:o(()=>[s(Ue,{class:"break-all font-mono text-sm"},{default:o(()=>[r(d(q.value),1)]),_:1})]),_:1}),s(t(fe),{class:"flex sm:justify-between gap-3 mt-6"},{default:o(()=>[s(t(p),{variant:"outline",class:"flex-1",onClick:ve},{default:o(()=>[s(t(u),{icon:"lucide:copy",class:"w-4 h-4 mr-2"}),e[50]||(e[50]=r(" Copy ",-1))]),_:1}),s(t(p),{class:"flex-1",onClick:e[7]||(e[7]=i=>F.value=!1)},{default:o(()=>[...e[51]||(e[51]=[r(" Done ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])]),_:1})}}}),ls=me(zt,[["__scopeId","data-v-b84f8e08"]]);export{ls 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.