@swifty.js/swifty 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -251,7 +251,7 @@ ${Te}`,d++}else If(w,b,ne)?m=w.slice(w.charCodeAt(b+6)===Wt?b+7:b+6,j)||void 0:v
|
|
|
251
251
|
${Pl}`,d++;return}if(If(w,b,ne)){m=w.slice(w.charCodeAt(b+6)===Wt?b+7:b+6,j)||void 0;return}if(ne===105&&w.charCodeAt(b+1)===100&&w.charCodeAt(b+2)===58){let mt=w.slice(w.charCodeAt(b+3)===Wt?b+4:b+3,j);u=mt.includes("\0")?void 0:mt;return}if(ne===58){if(o){let mt=w.slice(b,j);o(mt.slice(w.charCodeAt(b+1)===Wt?2:1))}return}let oe=w.slice(b,j),Te=oe.indexOf(":");if(Te===-1){S(oe,"",oe);return}let Hr=oe.slice(0,Te),oo=oe.charCodeAt(Te+1)===Wt?2:1,so=oe.slice(Te+oo);S(Hr,so,oe)}function S(w,b,j){switch(w){case"event":m=b||void 0;break;case"data":l=d===0?b:`${l}
|
|
252
252
|
${b}`,d++;break;case"id":u=b.includes("\0")?void 0:b;break;case"retry":/^\d+$/.test(b)?n(parseInt(b,10)):r(new qn(`Invalid \`retry\` value: "${b}"`,{type:"invalid-retry",value:b,line:j}));break;default:r(new qn(`Unknown field "${w.length>20?`${w.slice(0,20)}\u2026`:w}"`,{type:"unknown-field",field:w,value:b,line:j}));break}}function T(){d>0&&e({id:u,event:m,data:l}),u=void 0,l="",d=0,m=void 0}function A(w={}){if(w.consume&&i.length>0){let b=i.join("");v(b,0,b.length)}c=!0,u=void 0,l="",d=0,m=void 0,i.length=0,a=0,f=!1}return{feed:g,reset:A}}function Af(t,e,r){return r===100&&t.charCodeAt(e+1)===97&&t.charCodeAt(e+2)===116&&t.charCodeAt(e+3)===97&&t.charCodeAt(e+4)===58}function If(t,e,r){return r===101&&t.charCodeAt(e+1)===118&&t.charCodeAt(e+2)===101&&t.charCodeAt(e+3)===110&&t.charCodeAt(e+4)===116&&t.charCodeAt(e+5)===58}var Cs=class extends Event{constructor(e,r){var n,o;super(e),this.code=(n=r?.code)!=null?n:void 0,this.message=(o=r?.message)!=null?o:void 0}[Symbol.for("nodejs.util.inspect.custom")](e,r,n){return n(Of(this),r)}[Symbol.for("Deno.customInspect")](e,r){return e(Of(this),r)}};function $x(t){let e=globalThis.DOMException;return typeof e=="function"?new e(t,"SyntaxError"):new SyntaxError(t)}function Bc(t){return t instanceof Error?"errors"in t&&Array.isArray(t.errors)?t.errors.map(Bc).join(", "):"cause"in t&&t.cause instanceof Error?`${t}: ${Bc(t.cause)}`:t.message:`${t}`}function Of(t){return{type:t.type,message:t.message,code:t.code,defaultPrevented:t.defaultPrevented,cancelable:t.cancelable,timeStamp:t.timeStamp}}var Nf=t=>{throw TypeError(t)},el=(t,e,r)=>e.has(t)||Nf("Cannot "+r),F=(t,e,r)=>(el(t,e,"read from private field"),r?r.call(t):e.get(t)),ue=(t,e,r)=>e.has(t)?Nf("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),te=(t,e,r,n)=>(el(t,e,"write to private field"),e.set(t,r),r),it=(t,e,r)=>(el(t,e,"access private method"),r),Me,Bt,Rr,Rs,Ms,Un,zr,Fn,Et,Cr,Ar,Mr,Dn,Be,Gc,Kc,Zc,jf,Jc,Yc,Ln,Xc,Qc,Gt=class extends EventTarget{constructor(e,r){var n,o;super(),ue(this,Be),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,ue(this,Me),ue(this,Bt),ue(this,Rr),ue(this,Rs),ue(this,Ms),ue(this,Un),ue(this,zr),ue(this,Fn,null),ue(this,Et),ue(this,Cr),ue(this,Ar,null),ue(this,Mr,null),ue(this,Dn,null),ue(this,Kc,async s=>{var i;F(this,Cr).reset();let{body:a,redirected:c,status:u,headers:l}=s;if(u===204){it(this,Be,Ln).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(c?te(this,Rr,new URL(s.url)):te(this,Rr,void 0),u!==200){it(this,Be,Ln).call(this,`Non-200 status code (${u})`,u);return}if(!(l.get("content-type")||"").startsWith("text/event-stream")){it(this,Be,Ln).call(this,'Invalid content type, expected "text/event-stream"',u);return}if(F(this,Me)===this.CLOSED)return;te(this,Me,this.OPEN);let d=new Event("open");if((i=F(this,Dn))==null||i.call(this,d),this.dispatchEvent(d),typeof a!="object"||!a||!("getReader"in a)){it(this,Be,Ln).call(this,"Invalid response body, expected a web ReadableStream",u),this.close();return}let m=new TextDecoder,f=a.getReader(),g=!0;do{let{done:h,value:y}=await f.read();y&&F(this,Cr).feed(m.decode(y,{stream:!h})),h&&(g=!1,F(this,Cr).reset(),it(this,Be,Xc).call(this))}while(g)}),ue(this,Zc,s=>{te(this,Et,void 0),!(s.name==="AbortError"||s.type==="aborted")&&it(this,Be,Xc).call(this,Bc(s))}),ue(this,Jc,s=>{typeof s.id=="string"&&te(this,Fn,s.id);let i=new MessageEvent(s.event||"message",{data:s.data,origin:F(this,Rr)?F(this,Rr).origin:F(this,Bt).origin,lastEventId:s.id||""});F(this,Mr)&&(!s.event||s.event==="message")&&F(this,Mr).call(this,i),this.dispatchEvent(i)}),ue(this,Yc,s=>{te(this,Un,s)}),ue(this,Qc,()=>{te(this,zr,void 0),F(this,Me)===this.CONNECTING&&it(this,Be,Gc).call(this)});try{if(e instanceof URL)te(this,Bt,e);else if(typeof e=="string")te(this,Bt,new URL(e,Ex()));else throw new Error("Invalid URL")}catch{throw $x("An invalid or illegal string was specified")}te(this,Cr,Ps({onEvent:F(this,Jc),onRetry:F(this,Yc)})),te(this,Me,this.CONNECTING),te(this,Un,3e3),te(this,Ms,(n=r?.fetch)!=null?n:globalThis.fetch),te(this,Rs,(o=r?.withCredentials)!=null?o:!1),it(this,Be,Gc).call(this)}get readyState(){return F(this,Me)}get url(){return F(this,Bt).href}get withCredentials(){return F(this,Rs)}get onerror(){return F(this,Ar)}set onerror(e){te(this,Ar,e)}get onmessage(){return F(this,Mr)}set onmessage(e){te(this,Mr,e)}get onopen(){return F(this,Dn)}set onopen(e){te(this,Dn,e)}addEventListener(e,r,n){let o=r;super.addEventListener(e,o,n)}removeEventListener(e,r,n){let o=r;super.removeEventListener(e,o,n)}close(){F(this,zr)&&clearTimeout(F(this,zr)),F(this,Me)!==this.CLOSED&&(F(this,Et)&&F(this,Et).abort(),te(this,Me,this.CLOSED),te(this,Et,void 0))}};Me=new WeakMap,Bt=new WeakMap,Rr=new WeakMap,Rs=new WeakMap,Ms=new WeakMap,Un=new WeakMap,zr=new WeakMap,Fn=new WeakMap,Et=new WeakMap,Cr=new WeakMap,Ar=new WeakMap,Mr=new WeakMap,Dn=new WeakMap,Be=new WeakSet,Gc=function(){te(this,Me,this.CONNECTING),te(this,Et,new AbortController),F(this,Ms)(F(this,Bt),it(this,Be,jf).call(this)).then(F(this,Kc)).catch(F(this,Zc))},Kc=new WeakMap,Zc=new WeakMap,jf=function(){var t;let e={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...F(this,Fn)?{"Last-Event-ID":F(this,Fn)}:void 0},cache:"no-store",signal:(t=F(this,Et))==null?void 0:t.signal};return"window"in globalThis&&(e.credentials=this.withCredentials?"include":"same-origin"),e},Jc=new WeakMap,Yc=new WeakMap,Ln=function(t,e){var r;F(this,Me)!==this.CLOSED&&te(this,Me,this.CLOSED);let n=new Cs("error",{code:e,message:t});(r=F(this,Ar))==null||r.call(this,n),this.dispatchEvent(n)},Xc=function(t,e){var r;if(F(this,Me)===this.CLOSED)return;te(this,Me,this.CONNECTING);let n=new Cs("error",{code:e,message:t});(r=F(this,Ar))==null||r.call(this,n),this.dispatchEvent(n),te(this,zr,setTimeout(F(this,Qc),F(this,Un)))},Qc=new WeakMap,Gt.CONNECTING=0,Gt.OPEN=1,Gt.CLOSED=2;function Ex(){let t="document"in globalThis?globalThis.document:void 0;return t&&typeof t=="object"&&"baseURI"in t&&typeof t.baseURI=="string"?t.baseURI:void 0}function Ir(t){return t?t instanceof Headers?Object.fromEntries(t.entries()):Array.isArray(t)?Object.fromEntries(t):{...t}:{}}function zs(t=fetch,e){return e?async(r,n)=>{let o={...e,...n,headers:n?.headers?{...Ir(e.headers),...Ir(n.headers)}:e.headers};return t(r,o)}:t}var tl;tl=globalThis.crypto?.webcrypto??globalThis.crypto??import("crypto").then(t=>t.webcrypto);async function Px(t){return(await tl).getRandomValues(new Uint8Array(t))}async function Rx(t){let e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",r=Math.pow(2,8)-Math.pow(2,8)%e.length,n="";for(;n.length<t;){let o=await Px(t-n.length);for(let s of o)s<r&&(n+=e[s%e.length])}return n}async function Cx(t){return await Rx(t)}async function Mx(t){let e=await(await tl).subtle.digest("SHA-256",new TextEncoder().encode(t));return btoa(String.fromCharCode(...new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function rl(t){if(t||(t=43),t<43||t>128)throw`Expected a length between 43 and 128. Received ${t}.`;let e=await Cx(t),r=await Mx(e);return{code_verifier:e,code_challenge:r}}var ye=Il().superRefine((t,e)=>{if(!URL.canParse(t))return e.addIssue({code:ql.custom,message:"URL must be parseable",fatal:!0}),Rl}).refine(t=>{let e=new URL(t);return e.protocol!=="javascript:"&&e.protocol!=="data:"&&e.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),Df=ce({resource:p().url(),authorization_servers:x(ye).optional(),jwks_uri:p().url().optional(),scopes_supported:x(p()).optional(),bearer_methods_supported:x(p()).optional(),resource_signing_alg_values_supported:x(p()).optional(),resource_name:p().optional(),resource_documentation:p().optional(),resource_policy_uri:p().url().optional(),resource_tos_uri:p().url().optional(),tls_client_certificate_bound_access_tokens:Z().optional(),authorization_details_types_supported:x(p()).optional(),dpop_signing_alg_values_supported:x(p()).optional(),dpop_bound_access_tokens_required:Z().optional()}),nl=ce({issuer:p(),authorization_endpoint:ye,token_endpoint:ye,registration_endpoint:ye.optional(),scopes_supported:x(p()).optional(),response_types_supported:x(p()),response_modes_supported:x(p()).optional(),grant_types_supported:x(p()).optional(),token_endpoint_auth_methods_supported:x(p()).optional(),token_endpoint_auth_signing_alg_values_supported:x(p()).optional(),service_documentation:ye.optional(),revocation_endpoint:ye.optional(),revocation_endpoint_auth_methods_supported:x(p()).optional(),revocation_endpoint_auth_signing_alg_values_supported:x(p()).optional(),introspection_endpoint:p().optional(),introspection_endpoint_auth_methods_supported:x(p()).optional(),introspection_endpoint_auth_signing_alg_values_supported:x(p()).optional(),code_challenge_methods_supported:x(p()).optional(),client_id_metadata_document_supported:Z().optional()}),zx=ce({issuer:p(),authorization_endpoint:ye,token_endpoint:ye,userinfo_endpoint:ye.optional(),jwks_uri:ye,registration_endpoint:ye.optional(),scopes_supported:x(p()).optional(),response_types_supported:x(p()),response_modes_supported:x(p()).optional(),grant_types_supported:x(p()).optional(),acr_values_supported:x(p()).optional(),subject_types_supported:x(p()),id_token_signing_alg_values_supported:x(p()),id_token_encryption_alg_values_supported:x(p()).optional(),id_token_encryption_enc_values_supported:x(p()).optional(),userinfo_signing_alg_values_supported:x(p()).optional(),userinfo_encryption_alg_values_supported:x(p()).optional(),userinfo_encryption_enc_values_supported:x(p()).optional(),request_object_signing_alg_values_supported:x(p()).optional(),request_object_encryption_alg_values_supported:x(p()).optional(),request_object_encryption_enc_values_supported:x(p()).optional(),token_endpoint_auth_methods_supported:x(p()).optional(),token_endpoint_auth_signing_alg_values_supported:x(p()).optional(),display_values_supported:x(p()).optional(),claim_types_supported:x(p()).optional(),claims_supported:x(p()).optional(),service_documentation:p().optional(),claims_locales_supported:x(p()).optional(),ui_locales_supported:x(p()).optional(),claims_parameter_supported:Z().optional(),request_parameter_supported:Z().optional(),request_uri_parameter_supported:Z().optional(),require_request_uri_registration:Z().optional(),op_policy_uri:ye.optional(),op_tos_uri:ye.optional(),client_id_metadata_document_supported:Z().optional()}),Lf=$({...zx.shape,...nl.pick({code_challenge_methods_supported:!0}).shape}),Uf=$({access_token:p(),id_token:p().optional(),token_type:p(),expires_in:Dl.number().optional(),scope:p().optional(),refresh_token:p().optional()}).strip(),Ff=$({error:p(),error_description:p().optional(),error_uri:p().optional()}),qf=ye.optional().or(P("").transform(()=>{})),Ax=$({redirect_uris:x(ye),token_endpoint_auth_method:p().optional(),grant_types:x(p()).optional(),response_types:x(p()).optional(),client_name:p().optional(),client_uri:ye.optional(),logo_uri:qf,scope:p().optional(),contacts:x(p()).optional(),tos_uri:qf,policy_uri:p().optional(),jwks_uri:ye.optional(),jwks:jl().optional(),software_id:p().optional(),software_version:p().optional(),software_statement:p().optional()}).strip(),Ix=$({client_id:p(),client_secret:p().optional(),client_id_issued_at:B().optional(),client_secret_expires_at:B().optional()}).strip(),Hf=Ax.merge(Ix),Nj=$({error:p(),error_description:p().optional()}).strip(),qj=$({token:p(),token_type_hint:p().optional()}).strip();function Vf(t){let e=typeof t=="string"?new URL(t):new URL(t.href);return e.hash="",e}function Wf({requestedResource:t,configuredResource:e}){let r=typeof t=="string"?new URL(t):new URL(t.href),n=typeof e=="string"?new URL(e):new URL(e.href);if(r.origin!==n.origin||r.pathname.length<n.pathname.length)return!1;let o=r.pathname.endsWith("/")?r.pathname:r.pathname+"/",s=n.pathname.endsWith("/")?n.pathname:n.pathname+"/";return o.startsWith(s)}var ae=class extends Error{constructor(e,r){super(e),this.errorUri=r,this.name=this.constructor.name}toResponseObject(){let e={error:this.errorCode,error_description:this.message};return this.errorUri&&(e.error_uri=this.errorUri),e}get errorCode(){return this.constructor.errorCode}},Hn=class extends ae{};Hn.errorCode="invalid_request";var Kt=class extends ae{};Kt.errorCode="invalid_client";var Zt=class extends ae{};Zt.errorCode="invalid_grant";var Jt=class extends ae{};Jt.errorCode="unauthorized_client";var Vn=class extends ae{};Vn.errorCode="unsupported_grant_type";var Wn=class extends ae{};Wn.errorCode="invalid_scope";var Bn=class extends ae{};Bn.errorCode="access_denied";var at=class extends ae{};at.errorCode="server_error";var Gn=class extends ae{};Gn.errorCode="temporarily_unavailable";var Kn=class extends ae{};Kn.errorCode="unsupported_response_type";var Zn=class extends ae{};Zn.errorCode="unsupported_token_type";var Jn=class extends ae{};Jn.errorCode="invalid_token";var Yn=class extends ae{};Yn.errorCode="method_not_allowed";var Xn=class extends ae{};Xn.errorCode="too_many_requests";var Yt=class extends ae{};Yt.errorCode="invalid_client_metadata";var Qn=class extends ae{};Qn.errorCode="insufficient_scope";var eo=class extends ae{};eo.errorCode="invalid_target";var Bf={[Hn.errorCode]:Hn,[Kt.errorCode]:Kt,[Zt.errorCode]:Zt,[Jt.errorCode]:Jt,[Vn.errorCode]:Vn,[Wn.errorCode]:Wn,[Bn.errorCode]:Bn,[at.errorCode]:at,[Gn.errorCode]:Gn,[Kn.errorCode]:Kn,[Zn.errorCode]:Zn,[Jn.errorCode]:Jn,[Yn.errorCode]:Yn,[Xn.errorCode]:Xn,[Yt.errorCode]:Yt,[Qn.errorCode]:Qn,[eo.errorCode]:eo};var ke=class extends Error{constructor(e){super(e??"Unauthorized")}};function Ox(t){return["client_secret_basic","client_secret_post","none"].includes(t)}var ol="code",sl="S256";function jx(t,e){let r=t.client_secret!==void 0;return"token_endpoint_auth_method"in t&&t.token_endpoint_auth_method&&Ox(t.token_endpoint_auth_method)&&(e.length===0||e.includes(t.token_endpoint_auth_method))?t.token_endpoint_auth_method:e.length===0?r?"client_secret_basic":"none":r&&e.includes("client_secret_basic")?"client_secret_basic":r&&e.includes("client_secret_post")?"client_secret_post":e.includes("none")?"none":r?"client_secret_post":"none"}function Nx(t,e,r,n){let{client_id:o,client_secret:s}=e;switch(t){case"client_secret_basic":qx(o,s,r);return;case"client_secret_post":Dx(o,s,n);return;case"none":Lx(o,n);return;default:throw new Error(`Unsupported client authentication method: ${t}`)}}function qx(t,e,r){if(!e)throw new Error("client_secret_basic authentication requires a client_secret");let n=btoa(`${t}:${e}`);r.set("Authorization",`Basic ${n}`)}function Dx(t,e,r){r.set("client_id",t),e&&r.set("client_secret",e)}function Lx(t,e){e.set("client_id",t)}async function Kf(t){let e=t instanceof Response?t.status:void 0,r=t instanceof Response?await t.text():t;try{let n=Ff.parse(JSON.parse(r)),{error:o,error_description:s,error_uri:i}=n,a=Bf[o]||at;return new a(s||"",i)}catch(n){let o=`${e?`HTTP ${e}: `:""}Invalid OAuth error response: ${n}. Raw body: ${r}`;return new at(o)}}async function ct(t,e){try{return await il(t,e)}catch(r){if(r instanceof Kt||r instanceof Jt)return await t.invalidateCredentials?.("all"),await il(t,e);if(r instanceof Zt)return await t.invalidateCredentials?.("tokens"),await il(t,e);throw r}}async function il(t,{serverUrl:e,authorizationCode:r,scope:n,resourceMetadataUrl:o,fetchFn:s}){let i=await t.discoveryState?.(),a,c,u,l=o;if(!l&&i?.resourceMetadataUrl&&(l=new URL(i.resourceMetadataUrl)),i?.authorizationServerUrl){if(c=i.authorizationServerUrl,a=i.resourceMetadata,u=i.authorizationServerMetadata??await Jf(c,{fetchFn:s}),!a)try{a=await Zf(e,{resourceMetadataUrl:l},s)}catch{}(u!==i.authorizationServerMetadata||a!==i.resourceMetadata)&&await t.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:l?.toString(),resourceMetadata:a,authorizationServerMetadata:u})}else{let T=await Gx(e,{resourceMetadataUrl:l,fetchFn:s});c=T.authorizationServerUrl,u=T.authorizationServerMetadata,a=T.resourceMetadata,await t.saveDiscoveryState?.({authorizationServerUrl:String(c),resourceMetadataUrl:l?.toString(),resourceMetadata:a,authorizationServerMetadata:u})}let d=await Fx(e,t,a),m=n||a?.scopes_supported?.join(" ")||t.clientMetadata.scope,f=await Promise.resolve(t.clientInformation());if(!f){if(r!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");let T=u?.client_id_metadata_document_supported===!0,A=t.clientMetadataUrl;if(A&&!Ux(A))throw new Yt(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${A}`);if(T&&A)f={client_id:A},await t.saveClientInformation?.(f);else{if(!t.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");let b=await Xx(c,{metadata:u,clientMetadata:t.clientMetadata,scope:m,fetchFn:s});await t.saveClientInformation(b),f=b}}let g=!t.redirectUrl;if(r!==void 0||g){let T=await Yx(t,c,{metadata:u,resource:d,authorizationCode:r,fetchFn:s});return await t.saveTokens(T),"AUTHORIZED"}let h=await t.tokens();if(h?.refresh_token)try{let T=await Jx(c,{metadata:u,clientInformation:f,refreshToken:h.refresh_token,resource:d,addClientAuthentication:t.addClientAuthentication,fetchFn:s});return await t.saveTokens(T),"AUTHORIZED"}catch(T){if(!(!(T instanceof ae)||T instanceof at))throw T}let y=t.state?await t.state():void 0,{authorizationUrl:v,codeVerifier:S}=await Kx(c,{metadata:u,clientInformation:f,state:y,redirectUrl:t.redirectUrl,scope:m,resource:d});return await t.saveCodeVerifier(S),await t.redirectToAuthorization(v),"REDIRECT"}function Ux(t){if(!t)return!1;try{let e=new URL(t);return e.protocol==="https:"&&e.pathname!=="/"}catch{return!1}}async function Fx(t,e,r){let n=Vf(t);if(e.validateResourceURL)return await e.validateResourceURL(n,r?.resource);if(r){if(!Wf({requestedResource:n,configuredResource:r.resource}))throw new Error(`Protected resource ${r.resource} does not match expected ${n} (or origin)`);return new URL(r.resource)}}function Or(t){let e=t.headers.get("WWW-Authenticate");if(!e)return{};let[r,n]=e.split(" ");if(r.toLowerCase()!=="bearer"||!n)return{};let o=al(t,"resource_metadata")||void 0,s;if(o)try{s=new URL(o)}catch{}let i=al(t,"scope")||void 0,a=al(t,"error")||void 0;return{resourceMetadataUrl:s,scope:i,error:a}}function al(t,e){let r=t.headers.get("WWW-Authenticate");if(!r)return null;let n=new RegExp(`${e}=(?:"([^"]+)"|([^\\s,]+))`),o=r.match(n);return o?o[1]||o[2]:null}async function Zf(t,e,r=fetch){let n=await Wx(t,"oauth-protected-resource",r,{protocolVersion:e?.protocolVersion,metadataUrl:e?.resourceMetadataUrl});if(!n||n.status===404)throw await n?.body?.cancel(),new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!n.ok)throw await n.body?.cancel(),new Error(`HTTP ${n.status} trying to load well-known OAuth protected resource metadata.`);return Df.parse(await n.json())}async function cl(t,e,r=fetch){try{return await r(t,{headers:e})}catch(n){if(n instanceof TypeError)return e?cl(t,void 0,r):void 0;throw n}}function Hx(t,e="",r={}){return e.endsWith("/")&&(e=e.slice(0,-1)),r.prependPathname?`${e}/.well-known/${t}`:`/.well-known/${t}${e}`}async function Gf(t,e,r=fetch){return await cl(t,{"MCP-Protocol-Version":e},r)}function Vx(t,e){return!t||t.status>=400&&t.status<500&&e!=="/"}async function Wx(t,e,r,n){let o=new URL(t),s=n?.protocolVersion??cr,i;if(n?.metadataUrl)i=new URL(n.metadataUrl);else{let c=Hx(e,o.pathname);i=new URL(c,n?.metadataServerUrl??o),i.search=o.search}let a=await Gf(i,s,r);if(!n?.metadataUrl&&Vx(a,o.pathname)){let c=new URL(`/.well-known/${e}`,o);a=await Gf(c,s,r)}return a}function Bx(t){let e=typeof t=="string"?new URL(t):t,r=e.pathname!=="/",n=[];if(!r)return n.push({url:new URL("/.well-known/oauth-authorization-server",e.origin),type:"oauth"}),n.push({url:new URL("/.well-known/openid-configuration",e.origin),type:"oidc"}),n;let o=e.pathname;return o.endsWith("/")&&(o=o.slice(0,-1)),n.push({url:new URL(`/.well-known/oauth-authorization-server${o}`,e.origin),type:"oauth"}),n.push({url:new URL(`/.well-known/openid-configuration${o}`,e.origin),type:"oidc"}),n.push({url:new URL(`${o}/.well-known/openid-configuration`,e.origin),type:"oidc"}),n}async function Jf(t,{fetchFn:e=fetch,protocolVersion:r=cr}={}){let n={"MCP-Protocol-Version":r,Accept:"application/json"},o=Bx(t);for(let{url:s,type:i}of o){let a=await cl(s,n,e);if(a){if(!a.ok){if(await a.body?.cancel(),a.status>=400&&a.status<500)continue;throw new Error(`HTTP ${a.status} trying to load ${i==="oauth"?"OAuth":"OpenID provider"} metadata from ${s}`)}return i==="oauth"?nl.parse(await a.json()):Lf.parse(await a.json())}}}async function Gx(t,e){let r,n;try{r=await Zf(t,{resourceMetadataUrl:e?.resourceMetadataUrl},e?.fetchFn),r.authorization_servers&&r.authorization_servers.length>0&&(n=r.authorization_servers[0])}catch{}n||(n=String(new URL("/",t)));let o=await Jf(n,{fetchFn:e?.fetchFn});return{authorizationServerUrl:n,authorizationServerMetadata:o,resourceMetadata:r}}async function Kx(t,{metadata:e,clientInformation:r,redirectUrl:n,scope:o,state:s,resource:i}){let a;if(e){if(a=new URL(e.authorization_endpoint),!e.response_types_supported.includes(ol))throw new Error(`Incompatible auth server: does not support response type ${ol}`);if(e.code_challenge_methods_supported&&!e.code_challenge_methods_supported.includes(sl))throw new Error(`Incompatible auth server: does not support code challenge method ${sl}`)}else a=new URL("/authorize",t);let c=await rl(),u=c.code_verifier,l=c.code_challenge;return a.searchParams.set("response_type",ol),a.searchParams.set("client_id",r.client_id),a.searchParams.set("code_challenge",l),a.searchParams.set("code_challenge_method",sl),a.searchParams.set("redirect_uri",String(n)),s&&a.searchParams.set("state",s),o&&a.searchParams.set("scope",o),o?.includes("offline_access")&&a.searchParams.append("prompt","consent"),i&&a.searchParams.set("resource",i.href),{authorizationUrl:a,codeVerifier:u}}function Zx(t,e,r){return new URLSearchParams({grant_type:"authorization_code",code:t,code_verifier:e,redirect_uri:String(r)})}async function Yf(t,{metadata:e,tokenRequestParams:r,clientInformation:n,addClientAuthentication:o,resource:s,fetchFn:i}){let a=e?.token_endpoint?new URL(e.token_endpoint):new URL("/token",t),c=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(s&&r.set("resource",s.href),o)await o(c,r,a,e);else if(n){let l=e?.token_endpoint_auth_methods_supported??[],d=jx(n,l);Nx(d,n,c,r)}let u=await(i??fetch)(a,{method:"POST",headers:c,body:r});if(!u.ok)throw await Kf(u);return Uf.parse(await u.json())}async function Jx(t,{metadata:e,clientInformation:r,refreshToken:n,resource:o,addClientAuthentication:s,fetchFn:i}){let a=new URLSearchParams({grant_type:"refresh_token",refresh_token:n}),c=await Yf(t,{metadata:e,tokenRequestParams:a,clientInformation:r,addClientAuthentication:s,resource:o,fetchFn:i});return{refresh_token:n,...c}}async function Yx(t,e,{metadata:r,resource:n,authorizationCode:o,fetchFn:s}={}){let i=t.clientMetadata.scope,a;if(t.prepareTokenRequest&&(a=await t.prepareTokenRequest(i)),!a){if(!o)throw new Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!t.redirectUrl)throw new Error("redirectUrl is required for authorization_code flow");let u=await t.codeVerifier();a=Zx(o,u,t.redirectUrl)}let c=await t.clientInformation();return Yf(e,{metadata:r,tokenRequestParams:a,clientInformation:c??void 0,addClientAuthentication:t.addClientAuthentication,resource:n,fetchFn:s})}async function Xx(t,{metadata:e,clientMetadata:r,scope:n,fetchFn:o}){let s;if(e){if(!e.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");s=new URL(e.registration_endpoint)}else s=new URL("/register",t);let i=await(o??fetch)(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...r,...n!==void 0?{scope:n}:{}})});if(!i.ok)throw await Kf(i);return Hf.parse(await i.json())}var ll=class extends Error{constructor(e,r,n){super(`SSE error: ${r}`),this.code=e,this.event=n}},As=class{constructor(e,r){this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=r?.eventSourceInit,this._requestInit=r?.requestInit,this._authProvider=r?.authProvider,this._fetch=r?.fetch,this._fetchWithInit=zs(r?.fetch,r?.requestInit)}async _authThenStart(){if(!this._authProvider)throw new ke("No auth provider");let e;try{e=await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(r){throw this.onerror?.(r),r}if(e!=="AUTHORIZED")throw new ke;return await this._startOrAuth()}async _commonHeaders(){let e={};if(this._authProvider){let n=await this._authProvider.tokens();n&&(e.Authorization=`Bearer ${n.access_token}`)}this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let r=Ir(this._requestInit?.headers);return new Headers({...e,...r})}_startOrAuth(){let e=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise((r,n)=>{this._eventSource=new Gt(this._url.href,{...this._eventSourceInit,fetch:async(o,s)=>{let i=await this._commonHeaders();i.set("Accept","text/event-stream");let a=await e(o,{...s,headers:i});if(a.status===401&&a.headers.has("www-authenticate")){let{resourceMetadataUrl:c,scope:u}=Or(a);this._resourceMetadataUrl=c,this._scope=u}return a}}),this._abortController=new AbortController,this._eventSource.onerror=o=>{if(o.code===401&&this._authProvider){this._authThenStart().then(r,n);return}let s=new ll(o.code,o.message,o);n(s),this.onerror?.(s)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",o=>{let s=o;try{if(this._endpoint=new URL(s.data,this._url),this._endpoint.origin!==this._url.origin)throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(i){n(i),this.onerror?.(i),this.close();return}r()}),this._eventSource.onmessage=o=>{let s=o,i;try{i=yt.parse(JSON.parse(s.data))}catch(a){this.onerror?.(a);return}this.onmessage?.(i)}})}async start(){if(this._eventSource)throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(e){if(!this._authProvider)throw new ke("No auth provider");if(await ct(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new ke("Failed to authorize")}async close(){this._abortController?.abort(),this._eventSource?.close(),this.onclose?.()}async send(e){if(!this._endpoint)throw new Error("Not connected");try{let r=await this._commonHeaders();r.set("content-type","application/json");let n={...this._requestInit,method:"POST",headers:r,body:JSON.stringify(e),signal:this._abortController?.signal},o=await(this._fetch??fetch)(this._endpoint,n);if(!o.ok){let s=await o.text().catch(()=>null);if(o.status===401&&this._authProvider){let{resourceMetadataUrl:i,scope:a}=Or(o);if(this._resourceMetadataUrl=i,this._scope=a,await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new ke;return this.send(e)}throw new Error(`Error POSTing to endpoint (HTTP ${o.status}): ${s}`)}await o.body?.cancel()}catch(r){throw this.onerror?.(r),r}}setProtocolVersion(e){this._protocolVersion=e}};var Uh=io(Dh(),1);import wl from"process";import{PassThrough as E$}from"stream";var x$=10*1024*1024,Os=class{constructor(e){this._maxBufferSize=e?.maxBufferSize??x$}append(e){if((this._buffer?.length??0)+e.length>this._maxBufferSize)throw this.clear(),new Error(`ReadBuffer exceeded maximum size of ${this._maxBufferSize} bytes`);this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
|
|
253
253
|
`);if(e===-1)return null;let r=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),$$(r)}clear(){this._buffer=void 0}};function $$(t){return yt.parse(JSON.parse(t))}function Lh(t){return JSON.stringify(t)+`
|
|
254
|
-
`}var P$=wl.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function R$(){let t={};for(let e of P$){let r=wl.env[e];r!==void 0&&(r.startsWith("()")||(t[e]=r))}return t}var js=class{constructor(e){this._stderrStream=null,this._serverParams=e,this._readBuffer=new Os({maxBufferSize:e.maxBufferSize}),(e.stderr==="pipe"||e.stderr==="overlapped")&&(this._stderrStream=new E$)}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((e,r)=>{this._process=(0,Uh.default)(this._serverParams.command,this._serverParams.args??[],{env:{...R$(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:wl.platform==="win32",cwd:this._serverParams.cwd}),this._process.on("error",n=>{r(n),this.onerror?.(n)}),this._process.on("spawn",()=>{e()}),this._process.on("close",n=>{this._process=void 0,this.onclose?.()}),this._process.stdin?.on("error",n=>{this.onerror?.(n)}),this._process.stdout?.on("data",n=>{try{this._readBuffer.append(n),this.processReadBuffer()}catch(o){this.onerror?.(o),this.close().catch(()=>{})}}),this._process.stdout?.on("error",n=>{this.onerror?.(n)}),this._stderrStream&&this._process.stderr&&this._process.stderr.pipe(this._stderrStream)})}get stderr(){return this._stderrStream?this._stderrStream:this._process?.stderr??null}get pid(){return this._process?.pid??null}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){if(this._process){let e=this._process;this._process=void 0;let r=new Promise(n=>{e.once("close",()=>{n()})});try{e.stdin?.end()}catch{}if(await Promise.race([r,new Promise(n=>setTimeout(n,2e3).unref())]),e.exitCode===null){try{e.kill("SIGTERM")}catch{}await Promise.race([r,new Promise(n=>setTimeout(n,2e3).unref())])}if(e.exitCode===null)try{e.kill("SIGKILL")}catch{}}this._readBuffer.clear()}send(e){return new Promise(r=>{if(!this._process?.stdin)throw new Error("Not connected");let n=Lh(e);this._process.stdin.write(n)?r():this._process.stdin.once("drain",r)})}};var Bh=io(Wh(),1);function Gh(t){if(t)try{return Bh.default.parse(t).type}catch{let e=(t.split(";",1)[0]??"").trim().toLowerCase();return e===""||t.slice(e.length).includes(",")?void 0:e}}var Ns=class extends TransformStream{constructor({onError:e,onRetry:r,onComment:n,maxBufferSize:o}={}){let s;super({start(i){s=Ps({onEvent:a=>{i.enqueue(a)},onError(a){typeof e=="function"&&e(a),(e==="terminate"||a.type==="max-buffer-size-exceeded")&&i.error(a)},onRetry:r,onComment:n,maxBufferSize:o})},transform(i){s.feed(i)}})}};var q$={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},Pt=class extends Error{constructor(e,r){super(`Streamable HTTP error: ${r}`),this.code=e}},qs=class{constructor(e,r){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=r?.requestInit,this._authProvider=r?.authProvider,this._fetch=r?.fetch,this._fetchWithInit=zs(r?.fetch,r?.requestInit),this._sessionId=r?.sessionId,this._reconnectionOptions=r?.reconnectionOptions??q$}async _authThenStart(){if(!this._authProvider)throw new ke("No auth provider");let e;try{e=await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(r){throw this.onerror?.(r),r}if(e!=="AUTHORIZED")throw new ke;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let n=await this._authProvider.tokens();n&&(e.Authorization=`Bearer ${n.access_token}`)}this._sessionId&&(e["mcp-session-id"]=this._sessionId),this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let r=Ir(this._requestInit?.headers);return new Headers({...e,...r})}async _startOrAuthSse(e){let{resumptionToken:r}=e;try{let n=await this._commonHeaders();n.set("Accept","text/event-stream"),r&&n.set("last-event-id",r);let o=await(this._fetch??fetch)(this._url,{method:"GET",headers:n,signal:this._abortController?.signal});if(!o.ok){if(await o.body?.cancel(),o.status===401&&this._authProvider)return await this._authThenStart();if(o.status===405)return;throw new Pt(o.status,`Failed to open SSE stream: ${o.statusText}`)}this._handleSseStream(o.body,e,!0)}catch(n){throw this.onerror?.(n),n}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let r=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,o=this._reconnectionOptions.maxReconnectionDelay;return Math.min(r*Math.pow(n,e),o)}_scheduleReconnection(e,r=0){let n=this._reconnectionOptions.maxRetries;if(r>=n){this.onerror?.(new Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let o=this._getNextReconnectionDelay(r);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(s=>{this.onerror?.(new Error(`Failed to reconnect SSE stream: ${s instanceof Error?s.message:String(s)}`)),this._scheduleReconnection(e,r+1)})},o)}_handleSseStream(e,r,n){if(!e)return;let{onresumptiontoken:o,replayMessageId:s}=r,i,a=!1,c=!1;(async()=>{try{let l=e.pipeThrough(new TextDecoderStream).pipeThrough(new Ns({onRetry:f=>{this._serverRetryMs=f}})).getReader();for(;;){let{value:f,done:g}=await l.read();if(g)break;if(f.id&&(i=f.id,a=!0,o?.(f.id)),!!f.data&&(!f.event||f.event==="message"))try{let h=yt.parse(JSON.parse(f.data));Mt(h)&&(c=!0,s!==void 0&&(h.id=s)),this.onmessage?.(h)}catch(h){this.onerror?.(h)}}(n||a)&&!c&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:i,onresumptiontoken:o,replayMessageId:s},0)}catch(l){if(this.onerror?.(new Error(`SSE stream disconnected: ${l}`)),(n||a)&&!c&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:i,onresumptiontoken:o,replayMessageId:s},0)}catch(f){this.onerror?.(new Error(`Failed to reconnect: ${f instanceof Error?f.message:String(f)}`))}}})()}async start(){if(this._abortController)throw new Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new ke("No auth provider");if(await ct(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new ke("Failed to authorize")}async close(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0),this._abortController?.abort(),this.onclose?.()}async send(e,r){try{let{resumptionToken:n,onresumptiontoken:o}=r||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:en(e)?e.id:void 0}).catch(f=>this.onerror?.(f));return}let s=await this._commonHeaders();s.set("content-type","application/json"),s.set("accept","application/json, text/event-stream");let i={...this._requestInit,method:"POST",headers:s,body:JSON.stringify(e),signal:this._abortController?.signal},a=await(this._fetch??fetch)(this._url,i),c=a.headers.get("mcp-session-id");if(c&&(this._sessionId=c),!a.ok){let f=await a.text().catch(()=>null);if(a.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new Pt(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:g,scope:h}=Or(a);if(this._resourceMetadataUrl=g,this._scope=h,await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new ke;return this._hasCompletedAuthFlow=!0,this.send(e)}if(a.status===403&&this._authProvider){let{resourceMetadataUrl:g,scope:h,error:y}=Or(a);if(y==="insufficient_scope"){let v=a.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===v)throw new Pt(403,"Server returned 403 after trying upscoping");if(h&&(this._scope=h),g&&(this._resourceMetadataUrl=g),this._lastUpscopingHeader=v??void 0,await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!=="AUTHORIZED")throw new ke;return this.send(e)}}throw new Pt(a.status,`Error POSTing to endpoint: ${f}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,a.status===202){await a.body?.cancel(),$d(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(f=>this.onerror?.(f));return}let l=(Array.isArray(e)?e:[e]).filter(f=>"method"in f&&"id"in f&&f.id!==void 0).length>0,d=a.headers.get("content-type"),m=Gh(d);if(l)if(m==="text/event-stream")this._handleSseStream(a.body,{onresumptiontoken:o},!1);else if(m==="application/json"){let f=await a.json(),g=Array.isArray(f)?f.map(h=>yt.parse(h)):[yt.parse(f)];for(let h of g)this.onmessage?.(h)}else throw await a.body?.cancel(),new Pt(-1,`Unexpected content type: ${d}`);else await a.body?.cancel()}catch(n){throw this.onerror?.(n),n}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),r={...this._requestInit,method:"DELETE",headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,r);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new Pt(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,r){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:r?.onresumptiontoken})}};import{readFileSync as D$}from"fs";import Kh from"path";import{fileURLToPath as L$}from"url";var U$=C.object({version:C.string()});function F$(){return"0.0.11"}var Zh=F$();var Yh=M({module:"mcp"});function Jh(t){return t.replace(/\$\{(\w+)\}|\$(\w+)/g,(e,r,n)=>process.env[r||n]??"")}function H$(t){let e={};for(let[r,n]of Object.entries(t))e[r]=n??"";return e}var V$=new Set(["image/png","image/jpeg","image/gif","image/webp"]);async function W$(t){let e=[],r=[];for(let o of t){let s=Ll(o)?o:{};if(s.type==="image"&&typeof s.data=="string"&&typeof s.mimeType=="string"&&V$.has(s.mimeType))try{let i=await ki(Buffer.from(s.data,"base64"),ld(s.mimeType));r.push({type:"image",source:{type:"base64",media_type:i.mediaType,data:i.data}});continue}catch(i){Yh.warn({err:i},"mcp image dropped (too large to fit the API limit)"),e.push("[note: an image returned by the tool was too large and was dropped]");continue}e.push(s.type==="text"&&typeof s.text=="string"?s.text:JSON.stringify(o))}let n=e.join(`
|
|
254
|
+
`}var P$=wl.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function R$(){let t={};for(let e of P$){let r=wl.env[e];r!==void 0&&(r.startsWith("()")||(t[e]=r))}return t}var js=class{constructor(e){this._stderrStream=null,this._serverParams=e,this._readBuffer=new Os({maxBufferSize:e.maxBufferSize}),(e.stderr==="pipe"||e.stderr==="overlapped")&&(this._stderrStream=new E$)}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((e,r)=>{this._process=(0,Uh.default)(this._serverParams.command,this._serverParams.args??[],{env:{...R$(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:wl.platform==="win32",cwd:this._serverParams.cwd}),this._process.on("error",n=>{r(n),this.onerror?.(n)}),this._process.on("spawn",()=>{e()}),this._process.on("close",n=>{this._process=void 0,this.onclose?.()}),this._process.stdin?.on("error",n=>{this.onerror?.(n)}),this._process.stdout?.on("data",n=>{try{this._readBuffer.append(n),this.processReadBuffer()}catch(o){this.onerror?.(o),this.close().catch(()=>{})}}),this._process.stdout?.on("error",n=>{this.onerror?.(n)}),this._stderrStream&&this._process.stderr&&this._process.stderr.pipe(this._stderrStream)})}get stderr(){return this._stderrStream?this._stderrStream:this._process?.stderr??null}get pid(){return this._process?.pid??null}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){if(this._process){let e=this._process;this._process=void 0;let r=new Promise(n=>{e.once("close",()=>{n()})});try{e.stdin?.end()}catch{}if(await Promise.race([r,new Promise(n=>setTimeout(n,2e3).unref())]),e.exitCode===null){try{e.kill("SIGTERM")}catch{}await Promise.race([r,new Promise(n=>setTimeout(n,2e3).unref())])}if(e.exitCode===null)try{e.kill("SIGKILL")}catch{}}this._readBuffer.clear()}send(e){return new Promise(r=>{if(!this._process?.stdin)throw new Error("Not connected");let n=Lh(e);this._process.stdin.write(n)?r():this._process.stdin.once("drain",r)})}};var Bh=io(Wh(),1);function Gh(t){if(t)try{return Bh.default.parse(t).type}catch{let e=(t.split(";",1)[0]??"").trim().toLowerCase();return e===""||t.slice(e.length).includes(",")?void 0:e}}var Ns=class extends TransformStream{constructor({onError:e,onRetry:r,onComment:n,maxBufferSize:o}={}){let s;super({start(i){s=Ps({onEvent:a=>{i.enqueue(a)},onError(a){typeof e=="function"&&e(a),(e==="terminate"||a.type==="max-buffer-size-exceeded")&&i.error(a)},onRetry:r,onComment:n,maxBufferSize:o})},transform(i){s.feed(i)}})}};var q$={initialReconnectionDelay:1e3,maxReconnectionDelay:3e4,reconnectionDelayGrowFactor:1.5,maxRetries:2},Pt=class extends Error{constructor(e,r){super(`Streamable HTTP error: ${r}`),this.code=e}},qs=class{constructor(e,r){this._hasCompletedAuthFlow=!1,this._url=e,this._resourceMetadataUrl=void 0,this._scope=void 0,this._requestInit=r?.requestInit,this._authProvider=r?.authProvider,this._fetch=r?.fetch,this._fetchWithInit=zs(r?.fetch,r?.requestInit),this._sessionId=r?.sessionId,this._reconnectionOptions=r?.reconnectionOptions??q$}async _authThenStart(){if(!this._authProvider)throw new ke("No auth provider");let e;try{e=await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(r){throw this.onerror?.(r),r}if(e!=="AUTHORIZED")throw new ke;return await this._startOrAuthSse({resumptionToken:void 0})}async _commonHeaders(){let e={};if(this._authProvider){let n=await this._authProvider.tokens();n&&(e.Authorization=`Bearer ${n.access_token}`)}this._sessionId&&(e["mcp-session-id"]=this._sessionId),this._protocolVersion&&(e["mcp-protocol-version"]=this._protocolVersion);let r=Ir(this._requestInit?.headers);return new Headers({...e,...r})}async _startOrAuthSse(e){let{resumptionToken:r}=e;try{let n=await this._commonHeaders();n.set("Accept","text/event-stream"),r&&n.set("last-event-id",r);let o=await(this._fetch??fetch)(this._url,{method:"GET",headers:n,signal:this._abortController?.signal});if(!o.ok){if(await o.body?.cancel(),o.status===401&&this._authProvider)return await this._authThenStart();if(o.status===405)return;throw new Pt(o.status,`Failed to open SSE stream: ${o.statusText}`)}this._handleSseStream(o.body,e,!0)}catch(n){throw this.onerror?.(n),n}}_getNextReconnectionDelay(e){if(this._serverRetryMs!==void 0)return this._serverRetryMs;let r=this._reconnectionOptions.initialReconnectionDelay,n=this._reconnectionOptions.reconnectionDelayGrowFactor,o=this._reconnectionOptions.maxReconnectionDelay;return Math.min(r*Math.pow(n,e),o)}_scheduleReconnection(e,r=0){let n=this._reconnectionOptions.maxRetries;if(r>=n){this.onerror?.(new Error(`Maximum reconnection attempts (${n}) exceeded.`));return}let o=this._getNextReconnectionDelay(r);this._reconnectionTimeout=setTimeout(()=>{this._startOrAuthSse(e).catch(s=>{this.onerror?.(new Error(`Failed to reconnect SSE stream: ${s instanceof Error?s.message:String(s)}`)),this._scheduleReconnection(e,r+1)})},o)}_handleSseStream(e,r,n){if(!e)return;let{onresumptiontoken:o,replayMessageId:s}=r,i,a=!1,c=!1;(async()=>{try{let l=e.pipeThrough(new TextDecoderStream).pipeThrough(new Ns({onRetry:f=>{this._serverRetryMs=f}})).getReader();for(;;){let{value:f,done:g}=await l.read();if(g)break;if(f.id&&(i=f.id,a=!0,o?.(f.id)),!!f.data&&(!f.event||f.event==="message"))try{let h=yt.parse(JSON.parse(f.data));Mt(h)&&(c=!0,s!==void 0&&(h.id=s)),this.onmessage?.(h)}catch(h){this.onerror?.(h)}}(n||a)&&!c&&this._abortController&&!this._abortController.signal.aborted&&this._scheduleReconnection({resumptionToken:i,onresumptiontoken:o,replayMessageId:s},0)}catch(l){if(this.onerror?.(new Error(`SSE stream disconnected: ${l}`)),(n||a)&&!c&&this._abortController&&!this._abortController.signal.aborted)try{this._scheduleReconnection({resumptionToken:i,onresumptiontoken:o,replayMessageId:s},0)}catch(f){this.onerror?.(new Error(`Failed to reconnect: ${f instanceof Error?f.message:String(f)}`))}}})()}async start(){if(this._abortController)throw new Error("StreamableHTTPClientTransport already started! If using Client class, note that connect() calls start() automatically.");this._abortController=new AbortController}async finishAuth(e){if(!this._authProvider)throw new ke("No auth provider");if(await ct(this._authProvider,{serverUrl:this._url,authorizationCode:e,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new ke("Failed to authorize")}async close(){this._reconnectionTimeout&&(clearTimeout(this._reconnectionTimeout),this._reconnectionTimeout=void 0),this._abortController?.abort(),this.onclose?.()}async send(e,r){try{let{resumptionToken:n,onresumptiontoken:o}=r||{};if(n){this._startOrAuthSse({resumptionToken:n,replayMessageId:en(e)?e.id:void 0}).catch(f=>this.onerror?.(f));return}let s=await this._commonHeaders();s.set("content-type","application/json"),s.set("accept","application/json, text/event-stream");let i={...this._requestInit,method:"POST",headers:s,body:JSON.stringify(e),signal:this._abortController?.signal},a=await(this._fetch??fetch)(this._url,i),c=a.headers.get("mcp-session-id");if(c&&(this._sessionId=c),!a.ok){let f=await a.text().catch(()=>null);if(a.status===401&&this._authProvider){if(this._hasCompletedAuthFlow)throw new Pt(401,"Server returned 401 after successful authentication");let{resourceMetadataUrl:g,scope:h}=Or(a);if(this._resourceMetadataUrl=g,this._scope=h,await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new ke;return this._hasCompletedAuthFlow=!0,this.send(e)}if(a.status===403&&this._authProvider){let{resourceMetadataUrl:g,scope:h,error:y}=Or(a);if(y==="insufficient_scope"){let v=a.headers.get("WWW-Authenticate");if(this._lastUpscopingHeader===v)throw new Pt(403,"Server returned 403 after trying upscoping");if(h&&(this._scope=h),g&&(this._resourceMetadataUrl=g),this._lastUpscopingHeader=v??void 0,await ct(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetch})!=="AUTHORIZED")throw new ke;return this.send(e)}}throw new Pt(a.status,`Error POSTing to endpoint: ${f}`)}if(this._hasCompletedAuthFlow=!1,this._lastUpscopingHeader=void 0,a.status===202){await a.body?.cancel(),$d(e)&&this._startOrAuthSse({resumptionToken:void 0}).catch(f=>this.onerror?.(f));return}let l=(Array.isArray(e)?e:[e]).filter(f=>"method"in f&&"id"in f&&f.id!==void 0).length>0,d=a.headers.get("content-type"),m=Gh(d);if(l)if(m==="text/event-stream")this._handleSseStream(a.body,{onresumptiontoken:o},!1);else if(m==="application/json"){let f=await a.json(),g=Array.isArray(f)?f.map(h=>yt.parse(h)):[yt.parse(f)];for(let h of g)this.onmessage?.(h)}else throw await a.body?.cancel(),new Pt(-1,`Unexpected content type: ${d}`);else await a.body?.cancel()}catch(n){throw this.onerror?.(n),n}}get sessionId(){return this._sessionId}async terminateSession(){if(this._sessionId)try{let e=await this._commonHeaders(),r={...this._requestInit,method:"DELETE",headers:e,signal:this._abortController?.signal},n=await(this._fetch??fetch)(this._url,r);if(await n.body?.cancel(),!n.ok&&n.status!==405)throw new Pt(n.status,`Failed to terminate session: ${n.statusText}`);this._sessionId=void 0}catch(e){throw this.onerror?.(e),e}}setProtocolVersion(e){this._protocolVersion=e}get protocolVersion(){return this._protocolVersion}async resumeStream(e,r){await this._startOrAuthSse({resumptionToken:e,onresumptiontoken:r?.onresumptiontoken})}};import{readFileSync as D$}from"fs";import Kh from"path";import{fileURLToPath as L$}from"url";var U$=C.object({version:C.string()});function F$(){return"0.0.12"}var Zh=F$();var Yh=M({module:"mcp"});function Jh(t){return t.replace(/\$\{(\w+)\}|\$(\w+)/g,(e,r,n)=>process.env[r||n]??"")}function H$(t){let e={};for(let[r,n]of Object.entries(t))e[r]=n??"";return e}var V$=new Set(["image/png","image/jpeg","image/gif","image/webp"]);async function W$(t){let e=[],r=[];for(let o of t){let s=Ll(o)?o:{};if(s.type==="image"&&typeof s.data=="string"&&typeof s.mimeType=="string"&&V$.has(s.mimeType))try{let i=await ki(Buffer.from(s.data,"base64"),ld(s.mimeType));r.push({type:"image",source:{type:"base64",media_type:i.mediaType,data:i.data}});continue}catch(i){Yh.warn({err:i},"mcp image dropped (too large to fit the API limit)"),e.push("[note: an image returned by the tool was too large and was dropped]");continue}e.push(s.type==="text"&&typeof s.text=="string"?s.text:JSON.stringify(o))}let n=e.join(`
|
|
255
255
|
`);return r.length===0?n:[...n?[{type:"text",text:n}]:[],...r]}var Ds=class{name;config;client=null;transport=null;constructor(e){this.name=e.name,this.config=e}async connect(){if(this.config.command){let e=process.env;if(this.config.env)for(let[r,n]of Object.entries(this.config.env))e[r]=Jh(n);this.transport=new js({command:this.config.command,args:this.config.args??[],env:H$(e),stderr:"ignore"})}else if(this.config.url){let e=new URL(this.config.url),r={};if(this.config.headers)for(let[o,s]of Object.entries(this.config.headers))r[o]=Jh(s);let n={requestInit:{headers:r}};this.transport=this.config.transport==="sse"?new As(e,n):new qs(e,n)}else throw new Error(`MCP server '${this.name}': needs either 'command' (stdio) or 'url' (http/sse)`);this.client=new Es({name:"swifty",version:Zh},{}),await this.client.connect(this.transport)}getInstructions(){return this.client?.getInstructions()??""}async listTools(){if(!this.client)throw new Error("Not connected");return(await this.client.listTools()).tools.map(({name:r,description:n,inputSchema:{properties:o,...s}})=>({name:r,description:n??"",inputSchema:{...s,properties:o??{}}}))}async callTool(e,r){if(!this.client)throw new Error("Not connected");let n=await this.client.callTool({name:e,arguments:r}),o;return n.content&&Array.isArray(n.content)?o=await W$(n.content):o=JSON.stringify(n),{output:o,isError:n.isError===!0}}async disconnect(){try{await this.client?.close()}catch(e){Yh.error({err:e},"mcp operation failed")}this.client=null,this.transport=null}};var B$=M({module:"mcp"}),Xh=class{clients=new Map;async connectAll(e){let r={tools:[],servers:[],errors:[],instructions:[]};for(let n of e){let o=new Ds(n);try{await o.connect(),this.clients.set(n.name,o),r.servers.push(n.name);let s=await o.listTools();for(let a of s)r.tools.push({serverName:n.name,tool:a});let i=o.getInstructions();i&&r.instructions.push({serverName:n.name,text:i})}catch(s){B$.error({err:s},"mcp operation failed"),r.errors.push({serverName:n.name,error:N(s)})}}return r}getClient(e){return this.clients.get(e)}async disconnectAll(){for(let e of this.clients.values())await e.disconnect();this.clients.clear()}};var G$=M({module:"mcp"});function K$(t,e){let r=n=>n.replace(/[^a-zA-Z0-9_-]/g,"_");return`mcp__${r(t)}__${r(e)}`}var Qh=class{name;description;category="command";deferred=!0;client;originalName;inputSchema;constructor(e,r,n){this.name=K$(r,n.name),this.description=n.description,this.originalName=n.name,this.client=e,this.inputSchema=n.inputSchema}schema(){return{name:this.name,description:this.description,input_schema:this.inputSchema}}async execute(e,r){try{let{output:n,isError:o}=await this.client.callTool(this.originalName,r);return{output:n,isError:o}}catch(n){return G$.error({err:n},"mcp operation failed"),{output:`MCP tool error: ${N(n)}`,isError:!0}}}};import{readdirSync as X$,readFileSync as tg,existsSync as rg,statSync as qr}from"fs";import{homedir as Ls}from"os";import{join as Ge}from"path";import{readFileSync as Z$}from"fs";import{join as J$}from"path";var Y$=M({module:"skills"});function bl(t,e){try{let r=J$(import.meta.dirname,"builtin",t,e);return Z$(r,"utf-8")}catch(r){return Y$.error({err:r},"skills operation failed"),""}}var rN=[{name:"fullstack-interview",md:bl("fullstack-interview","SKILL.md")},{name:"teach-me",md:bl("teach-me","SKILL.md"),references:{"pedagogy.md":bl("teach-me","references/pedagogy.md")}}];var nN=C.looseObject({name:C.string(),description:C.string().optional(),allowed_tools:C.array(C.string()).optional(),mode:C.enum(["inline","fork"]).optional(),model:C.string().optional(),fork_context:C.enum(["full","none","recent"]).optional()});function eg(){return[]}var to=M({module:"skills"}),ng=class{entries=new Map;workDir="";dirModTimes=new Map;load(e){this.workDir=e;for(let n of eg())this.entries.set(n.meta.name,{skill:n,filePath:"",loadedMtimeMs:0});let r=[Ge(Ls(),".claude","skills"),Ge(Ls(),".github","skills"),Ge(Ls(),".swifty","skills"),Ge(e,".claude","skills"),Ge(e,".github","skills"),Ge(e,".swifty","skills")];for(let n of r)rg(n)&&this.scanDirectory(n);this.snapshotDirModTimes()}needsReload(){for(let[r,n]of this.dirModTimes)try{if(qr(r).mtimeMs!==n)return!0}catch{if(n!==0)return!0}let e=this.skillDirPaths();for(let r of e)if(!this.dirModTimes.has(r))try{return qr(r),!0}catch{}return!1}reload(){this.entries.clear(),this.load(this.workDir)}snapshotDirModTimes(){this.dirModTimes.clear();for(let e of this.skillDirPaths())try{this.dirModTimes.set(e,qr(e).mtimeMs)}catch{this.dirModTimes.set(e,0)}}skillDirPaths(){return[Ge(Ls(),".swifty","skills"),...this.workDir?[Ge(this.workDir,".swifty","skills")]:[]]}scanDirectory(e){let r;try{r=X$(e)}catch(n){to.error({err:n},"skills operation failed");return}for(let n of r){let o=Ge(e,n);if(qr(o).isDirectory()){let i=Ge(o,"SKILL.md");rg(i)&&this.loadSkill(i,o,!0)}}}loadSkill(e,r,n){try{let o=tg(e,"utf-8"),s=og(o);if(!s)return;let i={meta:s.meta,body:s.body,sourceDir:r,isDirectory:n},a=0;try{a=qr(e).mtimeMs}catch(c){to.error({err:c},"skills operation failed")}this.entries.set(i.meta.name,{skill:i,filePath:e,loadedMtimeMs:a})}catch(o){to.error({err:o},"skills operation failed")}}list(){return[...this.entries.values()].map(e=>e.skill.meta)}get(e){let r=this.entries.get(e);if(r){if(r.filePath&&r.loadedMtimeMs>0)try{let n=qr(r.filePath).mtimeMs;if(n>r.loadedMtimeMs){let o=tg(r.filePath,"utf-8"),s=og(o);s&&(r.skill={meta:s.meta,body:s.body,sourceDir:r.skill.sourceDir,isDirectory:r.skill.isDirectory},r.loadedMtimeMs=n)}}catch(n){to.error({err:n},"skills operation failed")}return r.skill}}has(e){return this.entries.has(e)}};function Q$(t){let e=E(ri(t),"mode");return e==="inline"||e==="fork"?e:E(ri(t),"context")==="fork"?"fork":"inline"}var eE=C.looseObject({name:C.string(),description:C.string().optional(),allowed_tools:C.array(C.string()).optional(),mode:C.enum(["inline","fork"]).optional(),model:C.string().optional(),fork_context:C.enum(["full","none","recent"]).optional()});function og(t){if(!t.startsWith("---"))return null;let e=t.indexOf("---",3);if(e===-1)return null;let r=t.slice(3,e).trim(),n=t.slice(e+3).trim();try{let o=Qe.load(r),s=xe(eE,o);return{meta:{name:s.name,description:s.description??"",mode:Q$(o),model:s.model,forkContext:s.fork_context},body:n}}catch(o){return to.error({err:o},"skills operation failed"),null}}function mN(t,e){let r=t.list();if(r.length===0)return"";let o=[`## Available Skills
|
|
256
256
|
`,`Skills are installed at: ${Ge(e,".swifty","skills")}`,`When creating new skills, always place them under this directory as <skill-name>/SKILL.md.
|
|
257
257
|
`,`Only Skill names and one-line descriptions are listed below. To activate a Skill on demand call the LoadSkill tool with {name: "<skill-name>"}. After activation the Skill's full SOP gets pinned to the environment context, and any tools the Skill declares get registered. Users can also invoke a Skill directly with /<name>.
|