PageSourceSearch

https://puggy.dev/assets/YouTrackIntegration-CSYlfweS.js

js puggy.dev collected 2026-10-02 01:53:49 UTC 11,708 bytes, 1 lines download raw bytes

1import{d as N,c4 as V,q as r,u as s,bu as U,w as d,a as e,t as C,m as Q,b as u,bw as B,e as g,cm as X,cn as Z,_ as w,c5 as ee,c6 as te,f as x,ai as j,c7 as F,i as se,o as n,b1 as oe,c as $,co as ne,F as M,y as ae,h as re,br as A,I as ie,cp as le,aP as ue,z as h,Y as v,T as P,U as I}from"./index-C-VYsWS7.js";import{_ as de}from"./SectionPage.vue_vue_type_script_setup_true_lang-deIpAYVR.js";import{_ as O}from"./ConnectionBanner.vue_vue_type_script_setup_true_lang-yUU3rFNl.js";import{_ as L}from"./Input.vue_vue_type_script_setup_true_lang-CWkrzf_U.js";import{_ as ce}from"./EmptyState.vue_vue_type_script_setup_true_lang-eUt8rA-a.js";import{_ as me}from"./ListSkeleton.vue_vue_type_script_setup_true_lang-9UzBmckg.js";import"./Loader.vue_vue_type_script_setup_true_lang-DhiOmN82.js";import"./AlertTitle.vue_vue_type_script_setup_true_lang-wafEwFhA.js";const fe={class:"border-b px-4 py-3"},pe={class:"text-base font-semibold text-foreground"},ke={class:"space-y-4 p-4"},ve={class:"space-y-2"},ge={class:"relative"},_e={class:"space-y-2"},ye={class:"relative"},be={class:"flex items-center justify-between border-t px-4 py-3"},Te={class:"flex items-center gap-3"},xe=N({__name:"YouTrackConnectForm",props:F({isConfigured:{type:Boolean},loading:{type:Boolean},error:{},testResult:{},showToken:{type:Boolean}},{baseUrl:{required:!0},baseUrlModifiers:{},permanentToken:{required:!0},permanentTokenModifiers:{}}),emits:F(["test","submit","disconnect","toggle-token"],["update:baseUrl","update:permanentToken"]),setup(T){const t=T,c=V(T,"baseUrl"),i=V(T,"permanentToken"),f=se(()=>t.loading||!c.value||!i.value&&!t.isConfigured);function y(m){var o;return m.connected?`Connection successful! Signed in as ${((o=m.user)==null?void 0:o.name)||"unknown"}`:m.error??"Connection failed."}return(m,o)=>(n(),r(s(U),{class:"rounded-md shadow-none"},{default:d(()=>[e("div",fe,[e("h3",pe,C(t.isConfigured?"Update Configuration":"Connect to YouTrack"),1),o[6]||(o[6]=e("p",{class:"mt-1 text-sm text-muted-foreground"}," Create YouTrack issues with full session evidence attached. ",-1))]),e("form",{onSubmit:o[5]||(o[5]=Q(_=>m.$emit("submit"),["prevent"]))},[e("div",ke,[e("div",ve,[u(s(B),{for:"base_url"},{default:d(()=>[...o[7]||(o[7]=[g("YouTrack Base URL",-1)])]),_:1}),e("div",ge,[u(s(X),{class:"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),u(s(L),{id:"base_url",modelValue:c.value,"onUpdate:modelValue":o[0]||(o[0]=_=>c.value=_),type:"url",placeholder:"https://your-team.youtrack.cloud",class:"w-full pl-9"},null,8,["modelValue"])]),o[8]||(o[8]=e("p",{class:"text-xs text-muted-foreground"}," Your YouTrack instance URL (e.g., https://your-team.youtrack.cloud) ",-1))]),e("div",_e,[u(s(B),{for:"permanent_token"},{default:d(()=>[...o[9]||(o[9]=[g("Permanent Token",-1)])]),_:1}),e("div",ye,[u(s(Z),{class:"absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),u(s(L),{id:"permanent_token",modelValue:i.value,"onUpdate:modelValue":o[1]||(o[1]=_=>i.value=_),type:t.showToken?"text":"password",required:!t.isConfigured,placeholder:t.isConfigured?"••••••••••••••••":"perm:xxxx...",class:"w-full pl-9 pr-10"},null,8,["modelValue","type","required","placeholder"]),u(s(w),{type:"button",variant:"ghost",size:"sm",class:"absolute right-0 top-0 h-full px-3",onClick:o[2]||(o[2]=_=>m.$emit("toggle-token"))},{default:d(()=>[t.showToken?(n(),r(s(ee),{key:0,class:"size-4"})):(n(),r(s(te),{key:1,class:"size-4"}))]),_:1})]),o[10]||(o[10]=e("p",{class:"text-xs text-muted-foreground"},[g(" Generate a permanent token in "),e("span",{class:"text-primary"}," Profile → Account Security → Tokens "),g(" in your YouTrack instance. ")],-1))]),t.error?(n(),r(O,{key:0,tone:"error",message:t.error},null,8,["message"])):x("",!0),t.testResult?(n(),r(O,{key:1,tone:t.testResult.connected?"success":"error",message:y(t.testResult)},null,8,["tone","message"])):x("",!0)]),e("div",be,[e("div",Te,[u(s(w),{size:"sm",type:"button",variant:"outline",disabled:f.value,onClick:o[3]||(o[3]=_=>m.$emit("test"))},{default:d(()=>[t.loading?(n(),r(s(j),{key:0,class:"mr-2 size-4 animate-spin"})):x("",!0),o[11]||(o[11]=g(" Test Connection ",-1))]),_:1},8,["disabled"]),t.isConfigured?(n(),r(s(w),{key:0,size:"sm",type:"button",variant:"destructive-ghost",onClick:o[4]||(o[4]=_=>m.$emit("disconnect"))},{default:d(()=>[...o[12]||(o[12]=[g(" Disconnect ",-1)])]),_:1})):x("",!0)]),u(s(w),{size:"sm",type:"submit",disabled:f.value},{default:d(()=>[t.loading?(n(),r(s(j),{key:0,class:"mr-2 size-4 animate-spin"})):x("",!0),g(" "+C(t.isConfigured?"Update":"Connect"),1)]),_:1},8,["disabled"])])],32)]),_:1}))}}),we={class:"flex items-center justify-between border-b px-4 py-3"},Ce={key:0,class:"p-4"},he={key:2,class:"max-h-96 divide-y overflow-y-auto"},$e={class:"flex size-8 shrink-0 items-center justify-center rounded bg-muted"},Ye={class:"text-xs font-bold text-muted-foreground"},Ue={class:"min-w-0 flex-1"},je={class:"truncate text-sm font-medium text-foreground"},Ne={class:"text-xs text-muted-foreground"},ze={class:"shrink-0"},Ee=N({__name:"YouTrackProjectList",props:{projects:{},loading:{type:Boolean},savingDefault:{type:Boolean},selectedProjectId:{}},emits:["refresh","set-default"],setup(T){const t=T;return(c,i)=>(n(),r(s(U),{class:"rounded-md shadow-none"},{default:d(()=>[e("div",we,[i[2]||(i[2]=e("h3",{class:"text-base font-semibold text-foreground"}," Available Projects ",-1)),u(s(w),{type:"button",variant:"ghost",size:"sm",disabled:t.loading,onClick:i[0]||(i[0]=f=>c.$emit("refresh"))},{default:d(()=>[t.loading?(n(),r(s(j),{key:0,class:"size-4 animate-spin"})):(n(),r(s(oe),{key:1,class:"size-4"})),i[1]||(i[1]=g(" Refresh ",-1))]),_:1},8,["disabled"])]),t.loading?(n(),$("div",Ce,[u(me,{rows:4})])):t.projects.length===0?(n(),r(ce,{key:1,icon:s(ne),tone:"muted",compact:"",title:"No projects found",description:"Make sure your token has access to projects."},null,8,["icon"])):(n(),$("ul",he,[(n(!0),$(M,null,ae(t.projects,f=>{var y;return n(),$("li",{key:f.id,class:re(["flex items-center gap-4 px-4 py-3 transition-colors hover:bg-muted/50",{"bg-primary/5":t.selectedProjectId===f.id}])},[e("div",$e,[e("span",Ye,C((y=f.shortName)==null?void 0:y.slice(0,2)),1)]),e("div",Ue,[e("p",je,C(f.name),1),e("p",Ne,C(f.shortName),1)]),e("div",ze,[t.selectedProjectId===f.id?(n(),r(s(A),{key:0,variant:"outline",class:"bg-primary/10 text-primary"},{default:d(()=>[...i[3]||(i[3]=[g(" Default ",-1)])]),_:1})):(n(),r(s(w),{key:1,type:"button",variant:"ghost",size:"sm",disabled:t.savingDefault,onClick:m=>c.$emit("set-default",f.id)},{default:d(()=>[t.savingDefault?(n(),r(s(j),{key:0,class:"mr-2 size-4 animate-spin"})):x("",!0),i[4]||(i[4]=g(" Set as default ",-1))]),_:1},8,["disabled","onClick"]))])],2)}),128))]))]),_:1}))}}),Re=N({__name:"YouTrackSetupGuide",setup(T){return(t,c)=>(n(),$(M,null,[u(s(U),{class:"rounded-md p-4 shadow-none"},{default:d(()=>[...c[0]||(c[0]=[e("h3",{class:"mb-3 text-base font-semibold text-foreground"},"How to use",-1),e("ol",{class:"list-inside list-decimal space-y-2 text-sm text-muted-foreground"},[e("li",null,[g(" In YouTrack, go to "),e("span",{class:"font-medium"},"Profile → Account Security → Tokens")]),e("li",null,"Create a new permanent token with issue read/write scope"),e("li",null,"Enter your YouTrack base URL and paste the token above"),e("li",null,"Test the connection to verify your credentials"),e("li",null," Once connected, create YouTrack issues directly from session recordings ")],-1)])]),_:1}),u(s(U),{class:"rounded-md p-4 shadow-none"},{default:d(()=>[...c[1]||(c[1]=[e("h3",{class:"mb-3 text-base font-semibold text-foreground"}," Security & access ",-1),e("ul",{class:"space-y-2 text-sm text-muted-foreground"},[e("li",null,"Permanent tokens are stored encrypted for your workspace."),e("li",null,"We use them only to create and link YouTrack issues."),e("li",null,"Revoke anytime from your YouTrack profile settings.")],-1)])]),_:1})],64))}}),De={class:"mx-auto w-full max-w-5xl px-4 py-5 sm:px-6 lg:px-8"},Se={class:"grid grid-cols-12 gap-4"},Pe={class:"col-span-12 space-y-4 lg:col-span-8"},Ie={class:"col-span-12 h-fit space-y-4 lg:col-span-4"},qe=N({__name:"YouTrackIntegration",setup(T){const{config:t,connectionStatus:c,projects:i,loading:f,error:y,isConfigured:m,loadConfig:o,saveConfig:_,deleteConfig:G,testConnection:z,loadProjects:q}=le(),k=ue({base_url:"",permanent_token:""}),E=h(!1),R=h(!1),D=h(!1),Y=h(null),b=h(void 0);ie(async()=>{await o(),t.value&&(k.base_url=t.value.base_url,b.value=t.value.default_project_id??void 0,await z(),c.value.connected&&await S())});async function J(){var a;Y.value=null;const p={organization_id:"",base_url:k.base_url,permanent_token:k.permanent_token||((a=t.value)==null?void 0:a.permanent_token)||"",is_active:!0};try{const l=await z(p);Y.value=l,l.connected?(P(I.INTEGRATION_TEST_RUN,{provider:"youtrack",success:!0}),v.success("YouTrack connection verified.")):v.error("YouTrack connection failed.",{description:l.error??"Unknown error"})}catch(l){v.error("YouTrack connection failed.",{description:l instanceof Error?l.message:"Unknown error"})}}async function K(){var p;try{const a=m.value;await _({base_url:k.base_url,permanent_token:k.permanent_token||((p=t.value)==null?void 0:p.permanent_token)||"",default_project_id:b.value,is_active:!0})?(await z(),c.value.connected&&await S(),k.permanent_token="",P(I.INTEGRATION_CONNECTED,{provider:"youtrack",first_time:!a}),v.success(a?"YouTrack configuration updated.":"YouTrack connected.")):v.error("Failed to save YouTrack configuration.",{description:y.value??"Unknown error"})}catch(a){v.error("Failed to save YouTrack configuration.",{description:a instanceof Error?a.message:"Unknown error"})}}async function S(){R.value=!0,await q(),R.value=!1}async function H(p){const a=b.value;b.value=p,D.value=!0;try{await _({base_url:t.value.base_url,permanent_token:"",default_project_id:p,is_active:!0})?v.success("Default project updated."):(b.value=a,v.error("Failed to set default project.",{description:y.value??"Unknown error"}))}catch(l){b.value=a,v.error("Failed to set default project.",{description:l instanceof Error?l.message:"Unknown error"})}finally{D.value=!1}}async function W(){try{const p=await G();k.base_url="",k.permanent_token="",b.value=void 0,Y.value=null,p?(P(I.INTEGRATION_DISCONNECTED,{provider:"youtrack"}),v.success("YouTrack disconnected.")):v.error("Failed to disconnect YouTrack.",{description:y.value??"Unknown error"})}catch(p){v.error("Failed to disconnect YouTrack.",{description:p instanceof Error?p.message:"Unknown error"})}}return(p,a)=>(n(),r(de,{title:"YouTrack Integration",subtitle:"Connect your YouTrack instance to create issues directly from session recordings.","show-back-button":"","show-loader":!1},{"header-actions":d(()=>[u(s(A),{variant:s(m)?"success":"metadata"},{default:d(()=>[g(C(s(m)?"Active":"Not Connected"),1)]),_:1},8,["variant"])]),default:d(()=>
1[e("div",De,[e("div",Se,[e("main",Pe,[u(xe,{"base-url":k.base_url,"onUpdate:baseUrl":a[0]||(a[0]=l=>k.base_url=l),"permanent-token":k.permanent_token,"onUpdate:permanentToken":a[1]||(a[1]=l=>k.permanent_token=l),"is-configured":s(m),loading:s(f),error:s(y),"test-result":Y.value,"show-token":E.value,onToggleToken:a[2]||(a[2]=l=>E.value=!E.value),onTest:J,onSubmit:K,onDisconnect:W},null,8,["base-url","permanent-token","is-configured","loading","error","test-result","show-token"]),s(c).connected?(n(),r(Ee,{key:0,projects:s(i),loading:R.value,"saving-default":D.value,"selected-project-id":b.value,onRefresh:S,onSetDefault:H},null,8,["projects","loading","saving-default","selected-project-id"])):x("",!0)]),e("aside",Ie,[u(Re)])])])]),_:1}))}});export{qe 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.