PageSourceSearch

https://templateson.com/_nuxt/C2tiGCXI.js

js templateson.com collected 2026-10-05 02:40:14 UTC 11,829 bytes, 1 lines download raw bytes

1import{_ as ie}from"./BoStOfpR.js";import{e as J,c as f,o as i,n as x,j as a,E as Q,r as d,f as de,l as ue,a as r,b as o,w as l,F as L,i as W,d as n,G as I,g,h as C,t as u,s as ce}from"./C_kRKsmz.js";import{c as fe,_ as c}from"./TG5nIkyV.js";import{_ as ve}from"./NIDhVy6u.js";import{_ as G,a as H,b as O,c as X}from"./Cn67RgFy.js";import{_ as Y}from"./Ba-XFEaj.js";import{_ as q}from"./eX8S2i-M.js";import{c as Z}from"./KlaINRS-.js";import{_ as me,a as pe,b as _e,c as ye,d as ge,e as xe,f as ke,g as be}from"./DGuZEIWi.js";import{_ as P}from"./CBq3G936.js";import{_ as R}from"./BZdUMLCF.js";import{_ as we}from"./Bm4W9Oo4.js";import{u as he}from"./c6KYU9E-.js";import{u as M}from"./jbTebY_y.js";import"./DlAUqK2U.js";import"./Dd4laE0G.js";import"./TXtenyZl.js";import"./DUHq3I3C.js";import"./R3c80stq.js";import"./CFTQPojm.js";import"./CPTxyssP.js";import"./BH7S7n13.js";import"./NRo6c83J.js";const Ce=J({__name:"Alert",props:{class:{},variant:{}},setup(k){const p=k;return(_,v)=>(i(),f("div",{"data-slot":"alert",class:x(a(Z)(a(De)({variant:k.variant}),p.class)),role:"alert"},[Q(_.$slots,"default")],2))}}),$e=J({__name:"AlertDescription",props:{class:{}},setup(k){const p=k;return(_,v)=>(i(),f("div",{"data-slot":"alert-description",class:x(a(Z)("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",p.class))},[Q(_.$slots,"default")],2))}}),De=fe("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"}},defaultVariants:{variant:"default"}}),Ke={class:"mx-auto w-full max-w-[1400px]"},Se={class:"mb-6 flex flex-wrap items-center justify-between gap-3"},Te={key:0,class:"space-y-3"},Ae={key:1,class:"flex min-h-[50vh] items-center justify-center"},Fe={class:"max-w-md text-center"},Ve={key:2,class:"space-y-3"},ze={class:"flex flex-wrap items-center gap-x-4 gap-y-3 p-4"},Ie=["title"],Me={class:"min-w-[9rem] flex-1"},Ne={class:"flex items-center gap-2"},je={class:"truncate font-medium"},Pe={class:"mt-0.5 text-xs text-muted-foreground"},Re={class:"rounded-md bg-muted px-2.5 py-1.5 font-mono text-xs"},Ue={class:"ml-auto flex items-center gap-1"},Be={key:0,class:"border-t bg-muted/30 px-4 py-3"},Ee={class:"flex flex-wrap items-center gap-2"},Le={class:"rounded bg-background px-2 py-1 font-mono text-xs"},We={class:"space-y-2"},Ge={class:"space-y-2"},He={class:"flex gap-2"},Oe={key:0,class:"space-y-2"},Xe={class:"flex gap-2"},gt={__name:"keys",setup(k){he({title:"API keys - Templates On"});const p=d([]),_=d(!0),v=d(!1),$=d(""),D=d(!1),K=d(""),b=d(""),S=d(!1),T=d(!1),A=d(null),F=d(null),N=d(null),w=d(""),V=d(null),z=d(null),h=d(null),ee=de(()=>[...p.value].sort((s,e)=>!!s.revoked_at!=!!e.revoked_at?s.revoked_at?1:-1:new Date(e.created_at)-new Date(s.created_at))),te=s=>!s||s.length<12?"••••••••":`${s.slice(0,4)}${"•".repeat(16)}${s.slice(-4)}`,U=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"N/A",ae=s=>{if(!s)return"never";const e=Date.now()-new Date(s).getTime(),m=Math.floor(e/6e4);if(m<1)return"just now";if(m<60)return`${m}m ago`;const t=Math.floor(m/60);if(t<24)return`${t}h ago`;const y=Math.floor(t/24);return y<30?`${y}d ago`:U(s)},j=async()=>{try{_.value=!0;const s=await M("/api/v1/keys");p.value=s.keys||[]}catch(s){console.error("Failed to fetch keys:",s),I.error("Could not load your keys")}finally{_.value=!1}},se=async()=>{try{D.value=!0,K.value="";const s=await M("/api/v1/keys",{method:"POST",body:{label:$.value||void 0}});s.api_key&&(b.value=s.api_key.key,w.value=s.api_key.webhook_secret||"",v.value=!1,$.value="",await j())}catch(s){K.value=s.message||"Failed to create API key"}finally{D.value=!1}},oe=s=>{A.value=s,T.value=!0},le=async()=>{if(A.value)try{await M(`/api/v1/keys/${A.value}`,{method:"DELETE"}),await j(),I.success("Key disabled"),T.value=!1,A.value=null}catch(s){console.error("Failed to revoke key:",s),I.error("Failed to disable key")}},ne=async s=>{try{F.value=s;const e=await M(`/api/v1/keys/${s}`);await navigator.clipboard.writeText(e.key),N.value=s,setTimeout(()=>{N.value=null},2e3)}catch(e){console.error("Failed to copy key:",e),I.error("Could not copy the key")}finally{F.value=null}},re=async()=>{try{await navigator.clipboard.writeText(b.value),S.value=!0,setTimeout(()=>{S.value=!1},2e3)}catch(s){console.error("Failed to copy:",s)}},B=async(s,e)=>{try{await navigator.clipboard.writeText(e),z.value=s,setTimeout(()=>{z.value=null},2e3)}catch(m){console.error("Failed to copy webhook secret:",m)}},E=()=>
1{b.value="",w.value="",S.value=!1};return ue(j),(s,e)=>{const m=ie;return i(),f("div",Ke,[r("div",Se,[e[9]||(e[9]=r("div",null,[r("h1",{class:"text-2xl font-bold tracking-tight"},"API keys"),r("p",{class:"mt-1 text-muted-foreground"},"Keys authenticate your app when it calls the render API")],-1)),o(a(c),{onClick:e[0]||(e[0]=t=>v.value=!0)},{default:l(()=>[...e[8]||(e[8]=[n("Create key",-1)])]),_:1})]),_.value?(i(),f("div",Te,[(i(),f(L,null,W(3,t=>o(a(we),{key:t,class:"h-20 w-full rounded-xl"})),64))])):p.value.length?(i(),f("div",Ve,[(i(!0),f(L,null,W(ee.value,t=>(i(),f("div",{key:t.id,class:x(["rounded-xl border bg-card transition-colors",t.revoked_at?"opacity-60":"hover:border-primary/40"])},[r("div",ze,[r("span",{class:x(["h-2 w-2 shrink-0 rounded-full",t.revoked_at?"bg-muted-foreground/40":"bg-emerald-500"]),title:t.revoked_at?"Disabled":"Active"},null,10,Ie),r("div",Me,[r("div",Ne,[r("h3",je,u(t.label||"Unnamed key"),1),t.revoked_at?(i(),C(a(ve),{key:0,variant:"secondary",class:"shrink-0 text-xs"},{default:l(()=>[...e[13]||(e[13]=[n("Disabled",-1)])]),_:1})):g("",!0)]),r("p",Pe,[n(" Created "+u(U(t.created_at))+" ",1),e[14]||(e[14]=r("span",{"aria-hidden":"true"}," · ",-1)),r("span",{class:x(t.last_used_at?"":"text-muted-foreground/70")},u(t.last_used_at?`last used ${ae(t.last_used_at)}`:"never used"),3)])]),r("code",Re,u(t.key),1),r("div",Ue,[t.revoked_at?g("",!0):(i(),C(a(c),{key:0,variant:"outline",size:"sm",disabled:F.value===t.id,onClick:y=>ne(t.id)},{default:l(()=>[n(u(N.value===t.id?"Copied!":F.value===t.id?"Fetching…":"Copy key"),1)]),_:2},1032,["disabled","onClick"])),t.webhook_secret&&!t.revoked_at?(i(),C(a(c),{key:1,variant:"ghost",size:"sm",class:"text-muted-foreground","aria-expanded":h.value===t.id,onClick:y=>h.value=h.value===t.id?null:t.id},{default:l(()=>[e[16]||(e[16]=n(" Webhook ",-1)),(i(),f("svg",{class:x(["ml-1 h-3.5 w-3.5 transition-transform",h.value===t.id?"rotate-180":""]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...e[15]||(e[15]=[r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 9l-7 7-7-7"},null,-1)])],2))]),_:2},1032,["aria-expanded","onClick"])):g("",!0),t.revoked_at?g("",!0):(i(),C(a(c),{key:2,variant:"ghost",size:"sm",class:"text-muted-foreground hover:bg-destructive/10 hover:text-destructive",onClick:y=>oe(t.id)},{default:l(()=>[...e[17]||(e[17]=[n(" Disable ",-1)])]),_:1},8,["onClick"]))])]),h.value===t.id&&t.webhook_secret?(i(),f("div",Be,[r("div",Ee,[e[18]||(e[18]=r("span",{class:"text-xs font-medium text-muted-foreground"},"Signing secret",-1)),r("code",Le,u(V.value===t.id?t.webhook_secret:te(t.webhook_secret)),1),o(a(c),{variant:"ghost",size:"sm",class:"h-7 px-2 text-xs",onClick:y=>V.value=V.value===t.id?null:t.id},{default:l(()=>[n(u(V.value===t.id?"Hide":"Reveal"),1)]),_:2},1032,["onClick"]),o(a(c),{variant:"ghost",size:"sm",class:"h-7 px-2 text-xs",onClick:y=>B(t.id,t.webhook_secret)},{default:l(()=>[n(u(z.value===t.id?"Copied!":"Copy"),1)]),_:2},1032,["onClick"])]),e[19]||(e[19]=r("p",{class:"mt-2 text-xs text-muted-foreground"},[n(" Verifies the "),r("code",{class:"rounded bg-background px-1"},"X-Webhook-Signature"),n(" header on async and webhook renders. Safe to keep visible. ")],-1))])):g("",!0)],2))),128))])):(i(),f("div",Ae,[r("div",Fe,[o(m,{asset:"api",alt:"Nimo holding an API key",size:"section",class:"mx-auto mb-6"}),e[11]||(e[11]=r("h2",{class:"mb-2 text-xl font-semibold"},"No keys yet",-1)),e[12]||(e[12]=r("p",{class:"mb-6 text-muted-foreground"},[n(" Create a key, then send it as the "),r("code",{class:"rounded bg-muted px-1 py-0.5 text-xs"},"x-api-key"),n(" header on your render calls. ")],-1)),o(a(c),{size:"lg",onClick:e[1]||(e[1]=t=>v.value=!0)},{default:l(()=>[...e[10]||(e[10]=[n("Create your first key",-1)])]),_:1})])])),o(a(X),{open:v.value,"onUpdate:open":e[4]||(e[4]=t=>v.value=t)},{default:l(()=>[o(a(G),null,{default:l(()=>[o(a(H),null,{default:l(()=>[o(a(O),null,{default:l(()=>[...e[20]||(e[20]=[n("Create a new key",-1)])]),_:1}),o(a(Y),null,{default:l(()=>[...e[21]||(e[21]=[n("Give it a label so you can tell your integrations apart later.",-1)])]),_:1})]),_:1}),r("form",{class:"space-y-4",onSubmit:ce(se,["prevent"])},[K.value?(i(),C(a(Ce),{key:0,variant:"destructive"},{default:l(()=>[o(a($e),null,{default:l(()=>[n(u(K.value),1)]),_:1})]),_:1})):g("",!0),r("div",We,[o(a(R),{for:"label"},{default:l(()=>[...e[22]||(e[22]=[n("Label (optional)",-1)])]),_:1}),o(a(P),{id:"label",modelValue:$.value,"onUpdate:modelValue":e[2]||(e[2]=t=>$.value=t),type:"text",placeholder:"e.g. Production n8n"},null,8,["modelValue"])]),o(a(q),null,{default:l(()=>[o(a(c),{type:"button",variant:"outline",onClick:e[3]||(e[3]=t=>v.value=!1)},{default:l(()=>[...e[23]||(e[23]=[n("Cancel",-1)])]),_:1}),o(a(c),{type:"submit",disabled:D.value},{default:l(()=>[n(u(D.value?"Creating…":"Create key"),1)]),_:1},8,["disabled"])]),_:1})],32)]),_:1})]),_:1},8,["open"]),o(a(X),{open:!!b.value,"onUpdate:open":e[6]||(e[6]=t=>!t&&E())},{default:l(()=>[o(a(G),null,{default:l(()=>[o(a(H),null,{default:l(()=>[o(a(O),null,{default:l(()=>[...e[24]||(e[24]=[n("Key created",-1)])]),_:1}),o(a(Y),null,{default:l(()=>[...e[25]||(e[25]=[n("You can copy this again later from the list.",-1)])]),_:1})]),_:1}),r("div",Ge,[o(a(R),null,{default:l(()=>[...e[26]||(e[26]=[n("Your key",-1)])]),_:1}),r("div",He,[o(a(P),{"model-value":b.value,readonly:"",class:"flex-1 bg-muted font-mono text-sm"},null,8,["model-value"]),o(a(c),{variant:"outline",onClick:re},{default:l(()=>[n(u(S.value?"Copied!":"Copy"),1)]),_:1})])]),w.value?(i(),f("div",Oe,[o(a(R),null,{default:l(()=>[...e[27]||(e[27]=[n("Webhook signing secret",-1)])]),_:1}),r("div",Xe,[o(a(P),{"model-value":w.value,readonly:"",class:"flex-1 bg-muted font-mono text-sm"},null,8,["model-value"]),o(a(c),{variant:"outline",onClick:e[5]||(e[5]=t=>B("__new__",w.value))},{default:l(()=>[n(u(z.value==="__new__"?"Copied!":"Copy"),1)]),_:1})]),e[28]||(e[28]=r("p",{class:"text-xs text-muted-foreground"}
1,[n(" Give this to your webhook receiver to verify the "),r("code",{class:"rounded bg-muted px-1"},"X-Webhook-Signature"),n(" header. ")],-1))])):g("",!0),o(a(q),null,{default:l(()=>[o(a(c),{class:"w-full",onClick:E},{default:l(()=>[...e[29]||(e[29]=[n("Done",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["open"]),o(a(be),{open:T.value,"onUpdate:open":e[7]||(e[7]=t=>T.value=t)},{default:l(()=>[o(a(me),null,{default:l(()=>[o(a(pe),null,{default:l(()=>[o(a(_e),null,{default:l(()=>[...e[30]||(e[30]=[n("Disable this key?",-1)])]),_:1}),o(a(ye),null,{default:l(()=>[...e[31]||(e[31]=[n(" Any app still sending this key will start getting 401s immediately. This can't be undone. ",-1)])]),_:1})]),_:1}),o(a(ge),null,{default:l(()=>[o(a(xe),null,{default:l(()=>[...e[32]||(e[32]=[n("Cancel",-1)])]),_:1}),o(a(ke),{class:"bg-destructive hover:bg-destructive/90",onClick:le},{default:l(()=>[...e[33]||(e[33]=[n(" Disable key ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])])}}};export{gt 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.