PageSourceSearch

https://app.sulus.ai/build/assets/AiMcpStudio-CES_jNpX.js

js sulus.ai collected 2026-10-05 15:26:50 UTC 6,318 bytes, 1 lines download raw bytes

1import{a as j,b as h,O as H,r as l,g as z,i as K,w as E,E as Y,c as R,a7 as G,u as Q,y as X,o as g,f as u,t as P,j as B,C as N,d as C,p as O,n as J}from"./vendor-BT_BAke6.js";import{_ as Z,b as $}from"./app-BH2jH3fP.js";import{N as ee}from"./NewUILayout-DNQOOXgC.js";import{A as te}from"./AdminNewUILayout-BYHvYaBZ.js";import{S as re}from"./SuperAdminLayout-DUGaMTRO.js";import"./ui-BJdZ1jTR.js";import"./NewUI-bgndS6gK.js";const oe=new Set(["/servers","/builder","/catalog","/credentials","/keys"]),ne=new Set(["expired_ticket","replayed_ticket"]),ae=2,x={invalid_ticket:"MCPConnect rejected the sign-in ticket. Confirm MCPCONNECT_EMBED_SSO_SECRET matches SULUS_EMBED_SSO_SECRET on mcp.sulus.ai.",expired_ticket:"Sign-in ticket expired. Try Reload.",replayed_ticket:"Sign-in ticket was already used. Try Reload.",misconfigured:"MCP Studio embed SSO is not configured on MCPConnect.",missing_ticket:"Sign-in ticket was missing.",nonce_store_unavailable:"MCPConnect could not store the sign-in nonce. Try again shortly.",server_error:"MCPConnect sign-in failed unexpectedly."};function S(a){if(typeof a!="string")return"/servers";const t=a.trim().split("?")[0];return!t.startsWith("/")||t.startsWith("//")?"/servers":oe.has(t)?t:t.startsWith("/builder")?"/builder":t.startsWith("/catalog")?"/catalog":t.startsWith("/credentials")?"/credentials":t.startsWith("/keys")?"/keys":(t.startsWith("/servers"),"/servers")}function se(a){return typeof a=="string"&&x[a]?x[a]:"Could not open MCP Studio (embed sign-in failed)."}const ie={name:"AiMcpStudio",components:{NewUILayout:ee,AdminNewUILayout:te,SuperAdminLayout:re},props:{adminBasePath:{type:String,default:""}},setup(a){const t=G("getToast",()=>
1null),s=Y(),r=Q(),k=R(()=>a.adminBasePath?.startsWith("/super-admin")?"SuperAdminLayout":a.adminBasePath?"AdminNewUILayout":"NewUILayout"),w=R(()=>a.adminBasePath||"/agents"),m=l(!0),i=l(!1),_=l(""),d=l(""),M=l(0),f=l(S(s.query.studio)),b=l(0),W=R(()=>_.value?!1:m.value?!0:!!d.value&&!i.value),p=(o=f.value)=>{const e=S(o),n=typeof s.query.server=="string"?s.query.server.trim():"";return e==="/builder"&&n!==""?`/builder?server=${encodeURIComponent(n)}`:e},I=async(o=p())=>{const{data:e}=await $.post("/api/mcpconnect/embed-session",{return_path:o});if(!e?.embedUrl)throw new Error("No embed URL returned");return e.embedUrl},v=async(o=p(),{resetAuthRetries:e=!0}={})=>{m.value=!0,i.value=!1,_.value="",e&&(b.value=0);try{d.value=await I(o),M.value+=1}catch(n){const y=n?.response?.status,c=n?.response?.data?.message||(y===403?"You are not a member of this reseller.":"Could not open MCP Studio.");_.value=c,d.value="",t()?.error?.(c)}finally{m.value=!1}},V=o=>{const e=se(o);_.value=e,d.value="",i.value=!0,t()?.error?.(e)},L=()=>{i.value=!0},D=()=>{T(),L()},F=()=>v(p()),U=()=>{const o=s.query.oauth_ok,e=s.query.oauth_error;if(o==="1"||o==="true"?t()?.success?.("Connected. Returning you to MCP Studio."):typeof e=="string"&&e!==""&&t()?.error?.(`OAuth failed: ${e}`),o||e){const n={...s.query};delete n.oauth_ok,delete n.oauth_error,r.replace({query:n}).catch(()=>{})}},A=l(null),T=()=>{const o=A.value?.contentWindow;if(!o)return;const e=getComputedStyle(document.documentElement),n=e.getPropertyValue("--accent-orange").trim()||e.getPropertyValue("--brand-primary").trim()||"#ff791a",y=e.getPropertyValue("--accent-orange-hover").trim()||e.getPropertyValue("--brand-secondary").trim()||"#e56a15";let c="*";try{d.value&&(c=new URL(d.value).origin)}catch{}o.postMessage({type:"mcpconnect:set-theme",primary:n,secondary:y},c)},q=o=>{const e=o?.data;if(!(!e||typeof e!="object")){try{if(d.value&&o.origin!==new URL(d.value).origin)return}catch{}if(e.type==="mcpconnect:auth-error"){const n=typeof e.code=="string"?e.code:"";if(!(e.retryable===!0||e.retryable!==!1&&ne.has(n))||b.value>=ae){V(n||"invalid_ticket");return}b.value+=1,v(f.value,{resetAuthRetries:!1});return}(e.type==="mcpconnect:ready"||e.type==="mcpconnect:theme-request")&&(b.value=0,T(),L())}};return z(()=>{window.addEventListener("message",q),U(),f.value=S(s.query.studio),v(p(f.value))}),K(()=>{window.removeEventListener("message",q)}),E(()=>a.adminBasePath,()=>{f.value="/servers",v("/servers")}),E(()=>[s.query.oauth_ok,s.query.oauth_error],()=>{U()}),E(()=>[s.query.studio,s.query.server],([o,e],[n,y])=>{if(o===n&&e===y)return;const c=S(o);f.value=c,v(p(c))}),{layoutComponent:k,basePath:w,loading:m,showLoader:W,frameReady:i,error:_,embedUrl:d,frameKey:M,iframeRef:A,reloadEmbed:F,onFrameLoad:D}}},ue={class:"studio"},de={class:"studio__toolbar"},ce={class:"studio__actions"},le=["disabled"],me={key:0,class:"studio__error"},fe={key:1,class:"studio__frame-wrap"},ye={key:0,class:"studio__loading",role:"status","aria-live":"polite"},_e={class:"studio__loading-text"},pe=["src"];function ve(a,t,s,r,k,w){const m=X("router-link");return g(),j(H(r.layoutComponent),{"breadcrumb-current":"MCP Studio"},{breadcrumb:h(()=>[B(m,{to:r.basePath},{default:h(()=>[...t[3]||(t[3]=[N("Agents",-1)])]),_:1},8,["to"]),t[4]||(t[4]=u("span",{class:"breadcrumb-separator"},"›",-1)),t[5]||(t[5]=u("span",{class:"breadcrumb-current"},"MCP Studio",-1))]),default:h(()=>[u("div",ue,[u("div",de,[u("div",ce,[u("button",{type:"button",class:"studio__btn",disabled:r.showLoader,onClick:t[0]||(t[0]=(...i)=>r.reloadEmbed&&r.reloadEmbed(...i))},P(r.showLoader?"Loading…":"Reload"),9,le),B(m,{to:`${r.basePath}/connectors`,class:"studio__btn studio__btn--ghost"},{default:h(()=>[...t[6]||(t[6]=[N(" MCP Connectors ",-1)])]),_:1},8,["to"])])]),r.error?(g(),C("div",me,[u("p",null,P(r.error),1),u("button",{type:"button",class:"studio__btn",onClick:t[1]||(t[1]=(...i)=>r.reloadEmbed&&r.reloadEmbed(...i))},"Try again")])):(g(),C("div",fe,[r.showLoader?(g(),C("div",ye,[t[7]||(t[7]=u("div",{class:"studio__spinner","aria-hidden":"true"},null,-1)),u("p",_e,P(r.loading?"Connecting to MCP Studio…":"Loading MCP Studio…"),1)])):O("",!0),r.embedUrl?(g(),C("iframe",{ref:"iframeRef",key:r.frameKey,class:J(["studio__frame",{"studio__frame--ready":r.frameReady}]),title:"MCP Studio",src:r.embedUrl,allow:"clipboard-read;
1 clipboard-write",referrerpolicy:"strict-origin-when-cross-origin",onLoad:t[2]||(t[2]=(...i)=>r.onFrameLoad&&r.onFrameLoad(...i))},null,42,pe)):O("",!0)]))])]),_:1})}const Pe=Z(ie,[["render",ve],["__scopeId","data-v-c0c34fe2"]]);export{Pe 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.