@farthershore/cli 0.24.0 → 0.24.1
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.
- package/dist/index.js +37 -37
- package/dist/mcp.js +6 -6
- package/package.json +1 -1
package/dist/mcp.js
CHANGED
|
@@ -73,18 +73,18 @@ var j0=Object.create;var up=Object.defineProperty;var U0=Object.getOwnPropertyDe
|
|
|
73
73
|
|
|
74
74
|
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let a of t.seen.entries()){let c=a[1];if(e===a[0]){i(a);continue}if(t.external){let d=t.external.registry.get(a[0])?.id;if(e!==a[0]&&d){i(a);continue}}if(t.metadataRegistry.get(a[0])?.id){i(a);continue}if(c.cycle){i(a);continue}if(c.count>1&&t.reused==="ref"){i(a);continue}}}function Sr(t,e){let n=t.seen.get(e);if(!n)throw new Error("Unprocessed schema. This is a bug in Zod.");let o=c=>{let u=t.seen.get(c);if(u.ref===null)return;let d=u.def??u.schema,l={...d},p=u.ref;if(u.ref=null,p){o(p);let f=t.seen.get(p),g=f.schema;if(g.$ref&&(t.target==="draft-07"||t.target==="draft-04"||t.target==="openapi-3.0")?(d.allOf=d.allOf??[],d.allOf.push(g)):Object.assign(d,g),Object.assign(d,l),c._zod.parent===p)for(let b in d)b==="$ref"||b==="allOf"||b in l||delete d[b];if(g.$ref&&f.def)for(let b in d)b==="$ref"||b==="allOf"||b in f.def&&JSON.stringify(d[b])===JSON.stringify(f.def[b])&&delete d[b]}let m=c._zod.parent;if(m&&m!==p){o(m);let f=t.seen.get(m);if(f?.schema.$ref&&(d.$ref=f.schema.$ref,f.def))for(let g in d)g==="$ref"||g==="allOf"||g in f.def&&JSON.stringify(d[g])===JSON.stringify(f.def[g])&&delete d[g]}t.override({zodSchema:c,jsonSchema:d,path:u.path??[]})};for(let c of[...t.seen.entries()].reverse())o(c[0]);let r={};if(t.target==="draft-2020-12"?r.$schema="https://json-schema.org/draft/2020-12/schema":t.target==="draft-07"?r.$schema="http://json-schema.org/draft-07/schema#":t.target==="draft-04"?r.$schema="http://json-schema.org/draft-04/schema#":t.target,t.external?.uri){let c=t.external.registry.get(e)?.id;if(!c)throw new Error("Schema is missing an `id` property");r.$id=t.external.uri(c)}Object.assign(r,n.def??n.schema);let i=t.metadataRegistry.get(e)?.id;i!==void 0&&r.id===i&&delete r.id;let a=t.external?.defs??{};for(let c of t.seen.entries()){let u=c[1];u.def&&u.defId&&(u.def.id===u.defId&&delete u.def.id,a[u.defId]=u.def)}t.external||Object.keys(a).length>0&&(t.target==="draft-2020-12"?r.$defs=a:r.definitions=a);try{let c=JSON.parse(JSON.stringify(r));return Object.defineProperty(c,"~standard",{value:{...e["~standard"],jsonSchema:{input:Gn(e,"input",t.processors),output:Gn(e,"output",t.processors)}},enumerable:!1,writable:!1}),c}catch{throw new Error("Error converting schema to JSON.")}}function We(t,e){let n=e??{seen:new Set};if(n.seen.has(t))return!1;n.seen.add(t);let o=t._zod.def;if(o.type==="transform")return!0;if(o.type==="array")return We(o.element,n);if(o.type==="set")return We(o.valueType,n);if(o.type==="lazy")return We(o.getter(),n);if(o.type==="promise"||o.type==="optional"||o.type==="nonoptional"||o.type==="nullable"||o.type==="readonly"||o.type==="default"||o.type==="prefault")return We(o.innerType,n);if(o.type==="intersection")return We(o.left,n)||We(o.right,n);if(o.type==="record"||o.type==="map")return We(o.keyType,n)||We(o.valueType,n);if(o.type==="pipe")return t._zod.traits.has("$ZodCodec")?!0:We(o.in,n)||We(o.out,n);if(o.type==="object"){for(let r in o.shape)if(We(o.shape[r],n))return!0;return!1}if(o.type==="union"){for(let r of o.options)if(We(r,n))return!0;return!1}if(o.type==="tuple"){for(let r of o.items)if(We(r,n))return!0;return!!(o.rest&&We(o.rest,n))}return!1}var Lm=(t,e={})=>n=>{let o=kr({...n,processors:e});return de(t,o),xr(o,t),Sr(o,t)},Gn=(t,e,n={})=>o=>{let{libraryOptions:r,target:i}=o??{},a=kr({...r??{},target:i,io:e,processors:n});return de(t,a),xr(a,t),Sr(a,t)};var nO={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},Mm=(t,e,n,o)=>{let r=n;r.type="string";let{minimum:i,maximum:a,format:c,patterns:u,contentEncoding:d}=t._zod.bag;if(typeof i=="number"&&(r.minLength=i),typeof a=="number"&&(r.maxLength=a),c&&(r.format=nO[c]??c,r.format===""&&delete r.format,c==="time"&&delete r.format),d&&(r.contentEncoding=d),u&&u.size>0){let l=[...u];l.length===1?r.pattern=l[0].source:l.length>1&&(r.allOf=[...l.map(p=>({...e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0"?{type:"string"}:{},pattern:p.source}))])}},Zm=(t,e,n,o)=>{let r=n,{minimum:i,maximum:a,format:c,multipleOf:u,exclusiveMaximum:d,exclusiveMinimum:l}=t._zod.bag;typeof c=="string"&&c.includes("int")?r.type="integer":r.type="number";let p=typeof l=="number"&&l>=(i??Number.NEGATIVE_INFINITY),m=typeof d=="number"&&d<=(a??Number.POSITIVE_INFINITY),f=e.target==="draft-04"||e.target==="openapi-3.0";p?f?(r.minimum=l,r.exclusiveMinimum=!0):r.exclusiveMinimum=l:typeof i=="number"&&(r.minimum=i),m?f?(r.maximum=d,r.exclusiveMaximum=!0):r.exclusiveMaximum=d:typeof a=="number"&&(r.maximum=a),typeof u=="number"&&(r.multipleOf=u)},Fm=(t,e,n,o)=>{n.type="boolean"},Vm=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema")},qm=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema")},Bm=(t,e,n,o)=>{e.target==="openapi-3.0"?(n.type="string",n.nullable=!0,n.enum=[null]):n.type="null"},Hm=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema")},Km=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema")},Gm=(t,e,n,o)=>{n.not={}},Wm=(t,e,n,o)=>{},Jm=(t,e,n,o)=>{},Ym=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema")},Xm=(t,e,n,o)=>{let r=t._zod.def,i=di(r.entries);i.every(a=>typeof a=="number")&&(n.type="number"),i.every(a=>typeof a=="string")&&(n.type="string"),n.enum=i},Qm=(t,e,n,o)=>{let r=t._zod.def,i=[];for(let a of r.values)if(a===void 0){if(e.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof a=="bigint"){if(e.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");i.push(Number(a))}else i.push(a);if(i.length!==0)if(i.length===1){let a=i[0];n.type=a===null?"null":typeof a,e.target==="draft-04"||e.target==="openapi-3.0"?n.enum=[a]:n.const=a}else i.every(a=>typeof a=="number")&&(n.type="number"),i.every(a=>typeof a=="string")&&(n.type="string"),i.every(a=>typeof a=="boolean")&&(n.type="boolean"),i.every(a=>a===null)&&(n.type="null"),n.enum=i},ef=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema")},tf=(t,e,n,o)=>{let r=n,i=t._zod.pattern;if(!i)throw new Error("Pattern not found in template literal");r.type="string",r.pattern=i.source},rf=(t,e,n,o)=>{let r=n,i={type:"string",format:"binary",contentEncoding:"binary"},{minimum:a,maximum:c,mime:u}=t._zod.bag;a!==void 0&&(i.minLength=a),c!==void 0&&(i.maxLength=c),u?u.length===1?(i.contentMediaType=u[0],Object.assign(r,i)):(Object.assign(r,i),r.anyOf=u.map(d=>({contentMediaType:d}))):Object.assign(r,i)},nf=(t,e,n,o)=>{n.type="boolean"},of=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},af=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Function types cannot be represented in JSON Schema")},sf=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},cf=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema")},uf=(t,e,n,o)=>{if(e.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema")},lf=(t,e,n,o)=>{let r=n,i=t._zod.def,{minimum:a,maximum:c}=t._zod.bag;typeof a=="number"&&(r.minItems=a),typeof c=="number"&&(r.maxItems=c),r.type="array",r.items=de(i.element,e,{...o,path:[...o.path,"items"]})},df=(t,e,n,o)=>{let r=n,i=t._zod.def;r.type="object",r.properties={};let a=i.shape;for(let d in a)r.properties[d]=de(a[d],e,{...o,path:[...o.path,"properties",d]});let c=new Set(Object.keys(a)),u=new Set([...c].filter(d=>{let l=i.shape[d]._zod;return e.io==="input"?l.optin===void 0:l.optout===void 0}));u.size>0&&(r.required=Array.from(u)),i.catchall?._zod.def.type==="never"?r.additionalProperties=!1:i.catchall?i.catchall&&(r.additionalProperties=de(i.catchall,e,{...o,path:[...o.path,"additionalProperties"]})):e.io==="output"&&(r.additionalProperties=!1)},zu=(t,e,n,o)=>{let r=t._zod.def,i=r.inclusive===!1,a=r.options.map((c,u)=>de(c,e,{...o,path:[...o.path,i?"oneOf":"anyOf",u]}));i?n.oneOf=a:n.anyOf=a},pf=(t,e,n,o)=>{let r=t._zod.def,i=de(r.left,e,{...o,path:[...o.path,"allOf",0]}),a=de(r.right,e,{...o,path:[...o.path,"allOf",1]}),c=d=>"allOf"in d&&Object.keys(d).length===1,u=[...c(i)?i.allOf:[i],...c(a)?a.allOf:[a]];n.allOf=u},mf=(t,e,n,o)=>{let r=n,i=t._zod.def;r.type="array";let a=e.target==="draft-2020-12"?"prefixItems":"items",c=e.target==="draft-2020-12"||e.target==="openapi-3.0"?"items":"additionalItems",u=i.items.map((m,f)=>de(m,e,{...o,path:[...o.path,a,f]})),d=i.rest?de(i.rest,e,{...o,path:[...o.path,c,...e.target==="openapi-3.0"?[i.items.length]:[]]}):null;e.target==="draft-2020-12"?(r.prefixItems=u,d&&(r.items=d)):e.target==="openapi-3.0"?(r.items={anyOf:u},d&&r.items.anyOf.push(d),r.minItems=u.length,d||(r.maxItems=u.length)):(r.items=u,d&&(r.additionalItems=d));let{minimum:l,maximum:p}=t._zod.bag;typeof l=="number"&&(r.minItems=l),typeof p=="number"&&(r.maxItems=p)},ff=(t,e,n,o)=>{let r=n,i=t._zod.def;r.type="object";let a=i.keyType,u=a._zod.bag?.patterns;if(i.mode==="loose"&&u&&u.size>0){let l=de(i.valueType,e,{...o,path:[...o.path,"patternProperties","*"]});r.patternProperties={};for(let p of u)r.patternProperties[p.source]=l}else(e.target==="draft-07"||e.target==="draft-2020-12")&&(r.propertyNames=de(i.keyType,e,{...o,path:[...o.path,"propertyNames"]})),r.additionalProperties=de(i.valueType,e,{...o,path:[...o.path,"additionalProperties"]});let d=a._zod.values;if(d){let l=[...d].filter(p=>typeof p=="string"||typeof p=="number");l.length>0&&(r.required=l)}},hf=(t,e,n,o)=>{let r=t._zod.def,i=de(r.innerType,e,o),a=e.seen.get(t);e.target==="openapi-3.0"?(a.ref=r.innerType,n.nullable=!0):n.anyOf=[i,{type:"null"}]},gf=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType},_f=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType,n.default=JSON.parse(JSON.stringify(r.defaultValue))},yf=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType,e.io==="input"&&(n._prefault=JSON.parse(JSON.stringify(r.defaultValue)))},vf=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType;let a;try{a=r.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}n.default=a},bf=(t,e,n,o)=>{let r=t._zod.def,i=r.in._zod.traits.has("$ZodTransform"),a=e.io==="input"?i?r.out:r.in:r.out;de(a,e,o);let c=e.seen.get(t);c.ref=a},kf=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType,n.readOnly=!0},xf=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType},Du=(t,e,n,o)=>{let r=t._zod.def;de(r.innerType,e,o);let i=e.seen.get(t);i.ref=r.innerType},Sf=(t,e,n,o)=>{let r=t._zod.innerType;de(r,e,o);let i=e.seen.get(t);i.ref=r},Nu={string:Mm,number:Zm,boolean:Fm,bigint:Vm,symbol:qm,null:Bm,undefined:Hm,void:Km,never:Gm,any:Wm,unknown:Jm,date:Ym,enum:Xm,literal:Qm,nan:ef,template_literal:tf,file:rf,success:nf,custom:of,function:af,transform:sf,map:cf,set:uf,array:lf,object:df,union:zu,intersection:pf,tuple:mf,record:ff,nullable:hf,nonoptional:gf,default:_f,prefault:yf,catch:vf,pipe:bf,readonly:kf,promise:xf,optional:Du,lazy:Sf};function Xr(t,e){if("_idmap"in t){let o=t,r=kr({...e,processors:Nu}),i={};for(let u of o._idmap.entries()){let[d,l]=u;de(l,r)}let a={},c={registry:o,uri:e?.uri,defs:i};r.external=c;for(let u of o._idmap.entries()){let[d,l]=u;xr(r,l),a[d]=Sr(r,l)}if(Object.keys(i).length>0){let u=r.target==="draft-2020-12"?"$defs":"definitions";a.__shared={[u]:i}}return{schemas:a}}let n=kr({...e,processors:Nu});return de(t,n),xr(n,t),Sr(n,t)}var ju=class{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(e){this.ctx.counter=e}get seen(){return this.ctx.seen}constructor(e){let n=e?.target??"draft-2020-12";n==="draft-4"&&(n="draft-04"),n==="draft-7"&&(n="draft-07"),this.ctx=kr({processors:Nu,target:n,...e?.metadata&&{metadata:e.metadata},...e?.unrepresentable&&{unrepresentable:e.unrepresentable},...e?.override&&{override:e.override},...e?.io&&{io:e.io}})}process(e,n={path:[],schemaPath:[]}){return de(e,this.ctx,n)}emit(e,n){n&&(n.cycles&&(this.ctx.cycles=n.cycles),n.reused&&(this.ctx.reused=n.reused),n.external&&(this.ctx.external=n.external)),xr(this.ctx,e);let o=Sr(this.ctx,e),{"~standard":r,...i}=o;return i}};var Xb={};var Gi={};Jt(Gi,{ZodAny:()=>qf,ZodArray:()=>Gf,ZodBase64:()=>ol,ZodBase64URL:()=>il,ZodBigInt:()=>to,ZodBigIntFormat:()=>cl,ZodBoolean:()=>eo,ZodCIDRv4:()=>rl,ZodCIDRv6:()=>nl,ZodCUID:()=>Wu,ZodCUID2:()=>Ju,ZodCatch:()=>fh,ZodCodec:()=>ia,ZodCustom:()=>aa,ZodCustomStringFormat:()=>Xn,ZodDate:()=>ea,ZodDefault:()=>ch,ZodDiscriminatedUnion:()=>Jf,ZodE164:()=>al,ZodEmail:()=>Hu,ZodEmoji:()=>Ku,ZodEnum:()=>Jn,ZodExactOptional:()=>ih,ZodFile:()=>nh,ZodFunction:()=>$h,ZodGUID:()=>Wi,ZodIPv4:()=>el,ZodIPv6:()=>tl,ZodIntersection:()=>Yf,ZodJWT:()=>sl,ZodKSUID:()=>Qu,ZodLazy:()=>kh,ZodLiteral:()=>rh,ZodMAC:()=>Mf,ZodMap:()=>eh,ZodNaN:()=>gh,ZodNanoID:()=>Gu,ZodNever:()=>Hf,ZodNonOptional:()=>dl,ZodNull:()=>Vf,ZodNullable:()=>sh,ZodNumber:()=>Qn,ZodNumberFormat:()=>Qr,ZodObject:()=>ta,ZodOptional:()=>no,ZodPipe:()=>oa,ZodPrefault:()=>lh,ZodPreprocess:()=>_h,ZodPromise:()=>Sh,ZodReadonly:()=>yh,ZodRecord:()=>Wn,ZodSet:()=>th,ZodString:()=>Yn,ZodStringFormat:()=>he,ZodSuccess:()=>mh,ZodSymbol:()=>Zf,ZodTemplateLiteral:()=>bh,ZodTransform:()=>oh,ZodTuple:()=>Xf,ZodType:()=>K,ZodULID:()=>Yu,ZodURL:()=>Xi,ZodUUID:()=>Vt,ZodUndefined:()=>Ff,ZodUnion:()=>ra,ZodUnknown:()=>Bf,ZodVoid:()=>Kf,ZodXID:()=>Xu,ZodXor:()=>Wf,_ZodString:()=>Bu,_default:()=>uh,_function:()=>nx,any:()=>Uk,array:()=>X,base64:()=>kk,base64url:()=>xk,bigint:()=>Ck,boolean:()=>Pe,catch:()=>hh,check:()=>ox,cidrv4:()=>vk,cidrv6:()=>bk,codec:()=>Qk,cuid:()=>dk,cuid2:()=>pk,custom:()=>pl,date:()=>Mk,describe:()=>ix,discriminatedUnion:()=>na,e164:()=>Sk,email:()=>tk,emoji:()=>uk,enum:()=>ze,exactOptional:()=>ah,file:()=>Wk,float32:()=>Pk,float64:()=>Rk,function:()=>nx,guid:()=>rk,hash:()=>Tk,hex:()=>Ek,hostname:()=>wk,httpUrl:()=>ck,instanceof:()=>sx,int:()=>Vu,int32:()=>Ok,int64:()=>Nk,intersection:()=>ro,invertCodec:()=>ex,ipv4:()=>gk,ipv6:()=>yk,json:()=>ux,jwt:()=>$k,keyof:()=>Zk,ksuid:()=>hk,lazy:()=>xh,literal:()=>L,looseObject:()=>Ne,looseRecord:()=>Bk,mac:()=>_k,map:()=>Hk,meta:()=>ax,nan:()=>Xk,nanoid:()=>lk,nativeEnum:()=>Gk,never:()=>ul,nonoptional:()=>ph,null:()=>Qi,nullable:()=>Ji,nullish:()=>Jk,number:()=>se,object:()=>O,optional:()=>be,partialRecord:()=>qk,pipe:()=>qu,prefault:()=>dh,preprocess:()=>sa,promise:()=>rx,readonly:()=>vh,record:()=>me,refine:()=>Ih,set:()=>Kk,strictObject:()=>Fk,string:()=>y,stringFormat:()=>Ik,stringbool:()=>cx,success:()=>Yk,superRefine:()=>wh,symbol:()=>Dk,templateLiteral:()=>tx,transform:()=>ll,tuple:()=>Qf,uint32:()=>Ak,uint64:()=>zk,ulid:()=>mk,undefined:()=>jk,union:()=>_e,unknown:()=>ge,url:()=>sk,uuid:()=>nk,uuidv4:()=>ok,uuidv6:()=>ik,uuidv7:()=>ak,void:()=>Lk,xid:()=>fk,xor:()=>Vk});var Uu={};Jt(Uu,{endsWith:()=>Zn,gt:()=>Zt,gte:()=>Ge,includes:()=>Ln,length:()=>Jr,lowercase:()=>jn,lt:()=>Mt,lte:()=>dt,maxLength:()=>Wr,maxSize:()=>br,mime:()=>Fn,minLength:()=>Xt,minSize:()=>Ft,multipleOf:()=>vr,negative:()=>Su,nonnegative:()=>Iu,nonpositive:()=>$u,normalize:()=>Vn,overwrite:()=>Et,positive:()=>xu,property:()=>wu,regex:()=>Dn,size:()=>Gr,slugify:()=>Kn,startsWith:()=>Mn,toLowerCase:()=>Bn,toUpperCase:()=>Hn,trim:()=>qn,uppercase:()=>Un});var $r={};Jt($r,{ZodISODate:()=>Mu,ZodISODateTime:()=>Lu,ZodISODuration:()=>Fu,ZodISOTime:()=>Zu,date:()=>If,datetime:()=>$f,duration:()=>Ef,time:()=>wf});var Lu=h("ZodISODateTime",(t,e)=>{vm.init(t,e),he.init(t,e)});function $f(t){return Rm(Lu,t)}var Mu=h("ZodISODate",(t,e)=>{bm.init(t,e),he.init(t,e)});function If(t){return Om(Mu,t)}var Zu=h("ZodISOTime",(t,e)=>{km.init(t,e),he.init(t,e)});function wf(t){return Am(Zu,t)}var Fu=h("ZodISODuration",(t,e)=>{xm.init(t,e),he.init(t,e)});function Ef(t){return Cm(Fu,t)}var Qb=(t,e)=>{gi.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:n=>yi(t,n)},flatten:{value:n=>_i(t,n)},addIssue:{value:n=>{t.issues.push(n),t.message=JSON.stringify(t.issues,kn,2)}},addIssues:{value:n=>{t.issues.push(...n),t.message=JSON.stringify(t.issues,kn,2)}},isEmpty:{get(){return t.issues.length===0}}})},iO=h("ZodError",Qb),it=h("ZodError",Qb,{Parent:Error});var Tf=$n(it),Pf=In(it),Rf=wn(it),Of=En(it),Af=Os(it),Cf=As(it),Nf=Cs(it),zf=Ns(it),Df=zs(it),jf=Ds(it),Uf=js(it),Lf=Us(it);var ek=new WeakMap;function Yi(t,e,n){let o=Object.getPrototypeOf(t),r=ek.get(o);if(r||(r=new Set,ek.set(o,r)),!r.has(e)){r.add(e);for(let i in n){let a=n[i];Object.defineProperty(o,i,{configurable:!0,enumerable:!1,get(){let c=a.bind(this);return Object.defineProperty(this,i,{configurable:!0,writable:!0,enumerable:!0,value:c}),c},set(c){Object.defineProperty(this,i,{configurable:!0,writable:!0,enumerable:!0,value:c})}})}}}var K=h("ZodType",(t,e)=>(B.init(t,e),Object.assign(t["~standard"],{jsonSchema:{input:Gn(t,"input"),output:Gn(t,"output")}}),t.toJSONSchema=Lm(t,{}),t.def=e,t.type=e.type,Object.defineProperty(t,"_def",{value:e}),t.parse=(n,o)=>Tf(t,n,o,{callee:t.parse}),t.safeParse=(n,o)=>Rf(t,n,o),t.parseAsync=async(n,o)=>Pf(t,n,o,{callee:t.parseAsync}),t.safeParseAsync=async(n,o)=>Of(t,n,o),t.spa=t.safeParseAsync,t.encode=(n,o)=>Af(t,n,o),t.decode=(n,o)=>Cf(t,n,o),t.encodeAsync=async(n,o)=>Nf(t,n,o),t.decodeAsync=async(n,o)=>zf(t,n,o),t.safeEncode=(n,o)=>Df(t,n,o),t.safeDecode=(n,o)=>jf(t,n,o),t.safeEncodeAsync=async(n,o)=>Uf(t,n,o),t.safeDecodeAsync=async(n,o)=>Lf(t,n,o),Yi(t,"ZodType",{check(...n){let o=this.def;return this.clone(S.mergeDefs(o,{checks:[...o.checks??[],...n.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),{parent:!0})},with(...n){return this.check(...n)},clone(n,o){return Ae(this,n,o)},brand(){return this},register(n,o){return n.add(this,o),this},refine(n,o){return this.check(Ih(n,o))},superRefine(n,o){return this.check(wh(n,o))},overwrite(n){return this.check(Et(n))},optional(){return be(this)},exactOptional(){return ah(this)},nullable(){return Ji(this)},nullish(){return be(Ji(this))},nonoptional(n){return ph(this,n)},array(){return X(this)},or(n){return _e([this,n])},and(n){return ro(this,n)},transform(n){return qu(this,ll(n))},default(n){return uh(this,n)},prefault(n){return dh(this,n)},catch(n){return hh(this,n)},pipe(n){return qu(this,n)},readonly(){return vh(this)},describe(n){let o=this.clone();return Ce.add(o,{description:n}),o},meta(...n){if(n.length===0)return Ce.get(this);let o=this.clone();return Ce.add(o,n[0]),o},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(n){return n(this)}}),Object.defineProperty(t,"description",{get(){return Ce.get(t)?.description},configurable:!0}),t)),Bu=h("_ZodString",(t,e)=>{yr.init(t,e),K.init(t,e),t._zod.processJSONSchema=(o,r,i)=>Mm(t,o,r,i);let n=t._zod.bag;t.format=n.format??null,t.minLength=n.minimum??null,t.maxLength=n.maximum??null,Yi(t,"_ZodString",{regex(...o){return this.check(Dn(...o))},includes(...o){return this.check(Ln(...o))},startsWith(...o){return this.check(Mn(...o))},endsWith(...o){return this.check(Zn(...o))},min(...o){return this.check(Xt(...o))},max(...o){return this.check(Wr(...o))},length(...o){return this.check(Jr(...o))},nonempty(...o){return this.check(Xt(1,...o))},lowercase(o){return this.check(jn(o))},uppercase(o){return this.check(Un(o))},trim(){return this.check(qn())},normalize(...o){return this.check(Vn(...o))},toLowerCase(){return this.check(Bn())},toUpperCase(){return this.check(Hn())},slugify(){return this.check(Kn())}})}),Yn=h("ZodString",(t,e)=>{yr.init(t,e),Bu.init(t,e),t.email=n=>t.check(Ti(Hu,n)),t.url=n=>t.check(zn(Xi,n)),t.jwt=n=>t.check(Ki(sl,n)),t.emoji=n=>t.check(Ci(Ku,n)),t.guid=n=>t.check(Nn(Wi,n)),t.uuid=n=>t.check(Pi(Vt,n)),t.uuidv4=n=>t.check(Ri(Vt,n)),t.uuidv6=n=>t.check(Oi(Vt,n)),t.uuidv7=n=>t.check(Ai(Vt,n)),t.nanoid=n=>t.check(Ni(Gu,n)),t.guid=n=>t.check(Nn(Wi,n)),t.cuid=n=>t.check(zi(Wu,n)),t.cuid2=n=>t.check(Di(Ju,n)),t.ulid=n=>t.check(ji(Yu,n)),t.base64=n=>t.check(qi(ol,n)),t.base64url=n=>t.check(Bi(il,n)),t.xid=n=>t.check(Ui(Xu,n)),t.ksuid=n=>t.check(Li(Qu,n)),t.ipv4=n=>t.check(Mi(el,n)),t.ipv6=n=>t.check(Zi(tl,n)),t.cidrv4=n=>t.check(Fi(rl,n)),t.cidrv6=n=>t.check(Vi(nl,n)),t.e164=n=>t.check(Hi(al,n)),t.datetime=n=>t.check($f(n)),t.date=n=>t.check(If(n)),t.time=n=>t.check(wf(n)),t.duration=n=>t.check(Ef(n))});function y(t){return tu(Yn,t)}var he=h("ZodStringFormat",(t,e)=>{pe.init(t,e),Bu.init(t,e)}),Hu=h("ZodEmail",(t,e)=>{Ws.init(t,e),he.init(t,e)});function tk(t){return Ti(Hu,t)}var Wi=h("ZodGUID",(t,e)=>{Ks.init(t,e),he.init(t,e)});function rk(t){return Nn(Wi,t)}var Vt=h("ZodUUID",(t,e)=>{Gs.init(t,e),he.init(t,e)});function nk(t){return Pi(Vt,t)}function ok(t){return Ri(Vt,t)}function ik(t){return Oi(Vt,t)}function ak(t){return Ai(Vt,t)}var Xi=h("ZodURL",(t,e)=>{Js.init(t,e),he.init(t,e)});function sk(t){return zn(Xi,t)}function ck(t){return zn(Xi,{protocol:ot.httpProtocol,hostname:ot.domain,...S.normalizeParams(t)})}var Ku=h("ZodEmoji",(t,e)=>{Ys.init(t,e),he.init(t,e)});function uk(t){return Ci(Ku,t)}var Gu=h("ZodNanoID",(t,e)=>{Xs.init(t,e),he.init(t,e)});function lk(t){return Ni(Gu,t)}var Wu=h("ZodCUID",(t,e)=>{Qs.init(t,e),he.init(t,e)});function dk(t){return zi(Wu,t)}var Ju=h("ZodCUID2",(t,e)=>{ec.init(t,e),he.init(t,e)});function pk(t){return Di(Ju,t)}var Yu=h("ZodULID",(t,e)=>{tc.init(t,e),he.init(t,e)});function mk(t){return ji(Yu,t)}var Xu=h("ZodXID",(t,e)=>{rc.init(t,e),he.init(t,e)});function fk(t){return Ui(Xu,t)}var Qu=h("ZodKSUID",(t,e)=>{nc.init(t,e),he.init(t,e)});function hk(t){return Li(Qu,t)}var el=h("ZodIPv4",(t,e)=>{oc.init(t,e),he.init(t,e)});function gk(t){return Mi(el,t)}var Mf=h("ZodMAC",(t,e)=>{ac.init(t,e),he.init(t,e)});function _k(t){return ru(Mf,t)}var tl=h("ZodIPv6",(t,e)=>{ic.init(t,e),he.init(t,e)});function yk(t){return Zi(tl,t)}var rl=h("ZodCIDRv4",(t,e)=>{sc.init(t,e),he.init(t,e)});function vk(t){return Fi(rl,t)}var nl=h("ZodCIDRv6",(t,e)=>{cc.init(t,e),he.init(t,e)});function bk(t){return Vi(nl,t)}var ol=h("ZodBase64",(t,e)=>{uc.init(t,e),he.init(t,e)});function kk(t){return qi(ol,t)}var il=h("ZodBase64URL",(t,e)=>{lc.init(t,e),he.init(t,e)});function xk(t){return Bi(il,t)}var al=h("ZodE164",(t,e)=>{dc.init(t,e),he.init(t,e)});function Sk(t){return Hi(al,t)}var sl=h("ZodJWT",(t,e)=>{pc.init(t,e),he.init(t,e)});function $k(t){return Ki(sl,t)}var Xn=h("ZodCustomStringFormat",(t,e)=>{mc.init(t,e),he.init(t,e)});function Ik(t,e,n={}){return Yr(Xn,t,e,n)}function wk(t){return Yr(Xn,"hostname",ot.hostname,t)}function Ek(t){return Yr(Xn,"hex",ot.hex,t)}function Tk(t,e){let n=e?.enc??"hex",o=`${t}_${n}`,r=ot[o];if(!r)throw new Error(`Unrecognized hash format: ${o}`);return Yr(Xn,o,r,e)}var Qn=h("ZodNumber",(t,e)=>{xi.init(t,e),K.init(t,e),t._zod.processJSONSchema=(o,r,i)=>Zm(t,o,r,i),Yi(t,"ZodNumber",{gt(o,r){return this.check(Zt(o,r))},gte(o,r){return this.check(Ge(o,r))},min(o,r){return this.check(Ge(o,r))},lt(o,r){return this.check(Mt(o,r))},lte(o,r){return this.check(dt(o,r))},max(o,r){return this.check(dt(o,r))},int(o){return this.check(Vu(o))},safe(o){return this.check(Vu(o))},positive(o){return this.check(Zt(0,o))},nonnegative(o){return this.check(Ge(0,o))},negative(o){return this.check(Mt(0,o))},nonpositive(o){return this.check(dt(0,o))},multipleOf(o,r){return this.check(vr(o,r))},step(o,r){return this.check(vr(o,r))},finite(){return this}});let n=t._zod.bag;t.minValue=Math.max(n.minimum??Number.NEGATIVE_INFINITY,n.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,t.maxValue=Math.min(n.maximum??Number.POSITIVE_INFINITY,n.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,t.isInt=(n.format??"").includes("int")||Number.isSafeInteger(n.multipleOf??.5),t.isFinite=!0,t.format=n.format??null});function se(t){return nu(Qn,t)}var Qr=h("ZodNumberFormat",(t,e)=>{fc.init(t,e),Qn.init(t,e)});function Vu(t){return ou(Qr,t)}function Pk(t){return iu(Qr,t)}function Rk(t){return au(Qr,t)}function Ok(t){return su(Qr,t)}function Ak(t){return cu(Qr,t)}var eo=h("ZodBoolean",(t,e)=>{Pn.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Fm(t,n,o,r)});function Pe(t){return uu(eo,t)}var to=h("ZodBigInt",(t,e)=>{Si.init(t,e),K.init(t,e),t._zod.processJSONSchema=(o,r,i)=>Vm(t,o,r,i),t.gte=(o,r)=>t.check(Ge(o,r)),t.min=(o,r)=>t.check(Ge(o,r)),t.gt=(o,r)=>t.check(Zt(o,r)),t.gte=(o,r)=>t.check(Ge(o,r)),t.min=(o,r)=>t.check(Ge(o,r)),t.lt=(o,r)=>t.check(Mt(o,r)),t.lte=(o,r)=>t.check(dt(o,r)),t.max=(o,r)=>t.check(dt(o,r)),t.positive=o=>t.check(Zt(BigInt(0),o)),t.negative=o=>t.check(Mt(BigInt(0),o)),t.nonpositive=o=>t.check(dt(BigInt(0),o)),t.nonnegative=o=>t.check(Ge(BigInt(0),o)),t.multipleOf=(o,r)=>t.check(vr(o,r));let n=t._zod.bag;t.minValue=n.minimum??null,t.maxValue=n.maximum??null,t.format=n.format??null});function Ck(t){return lu(to,t)}var cl=h("ZodBigIntFormat",(t,e)=>{hc.init(t,e),to.init(t,e)});function Nk(t){return du(cl,t)}function zk(t){return pu(cl,t)}var Zf=h("ZodSymbol",(t,e)=>{gc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>qm(t,n,o,r)});function Dk(t){return mu(Zf,t)}var Ff=h("ZodUndefined",(t,e)=>{_c.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Hm(t,n,o,r)});function jk(t){return fu(Ff,t)}var Vf=h("ZodNull",(t,e)=>{yc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Bm(t,n,o,r)});function Qi(t){return hu(Vf,t)}var qf=h("ZodAny",(t,e)=>{vc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Wm(t,n,o,r)});function Uk(){return gu(qf)}var Bf=h("ZodUnknown",(t,e)=>{bc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Jm(t,n,o,r)});function ge(){return _u(Bf)}var Hf=h("ZodNever",(t,e)=>{kc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Gm(t,n,o,r)});function ul(t){return yu(Hf,t)}var Kf=h("ZodVoid",(t,e)=>{xc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Km(t,n,o,r)});function Lk(t){return vu(Kf,t)}var ea=h("ZodDate",(t,e)=>{Sc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(o,r,i)=>Ym(t,o,r,i),t.min=(o,r)=>t.check(Ge(o,r)),t.max=(o,r)=>t.check(dt(o,r));let n=t._zod.bag;t.minDate=n.minimum?new Date(n.minimum):null,t.maxDate=n.maximum?new Date(n.maximum):null});function Mk(t){return bu(ea,t)}var Gf=h("ZodArray",(t,e)=>{$c.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>lf(t,n,o,r),t.element=e.element,Yi(t,"ZodArray",{min(n,o){return this.check(Xt(n,o))},nonempty(n){return this.check(Xt(1,n))},max(n,o){return this.check(Wr(n,o))},length(n,o){return this.check(Jr(n,o))},unwrap(){return this.element}})});function X(t,e){return Um(Gf,t,e)}function Zk(t){let e=t._zod.def.shape;return ze(Object.keys(e))}var ta=h("ZodObject",(t,e)=>{$m.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>df(t,n,o,r),S.defineLazy(t,"shape",()=>e.shape),Yi(t,"ZodObject",{keyof(){return ze(Object.keys(this._zod.def.shape))},catchall(n){return this.clone({...this._zod.def,catchall:n})},passthrough(){return this.clone({...this._zod.def,catchall:ge()})},loose(){return this.clone({...this._zod.def,catchall:ge()})},strict(){return this.clone({...this._zod.def,catchall:ul()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(n){return S.extend(this,n)},safeExtend(n){return S.safeExtend(this,n)},merge(n){return S.merge(this,n)},pick(n){return S.pick(this,n)},omit(n){return S.omit(this,n)},partial(...n){return S.partial(no,this,n[0])},required(...n){return S.required(dl,this,n[0])}})});function O(t,e){let n={type:"object",shape:t??{},...S.normalizeParams(e)};return new ta(n)}function Fk(t,e){return new ta({type:"object",shape:t,catchall:ul(),...S.normalizeParams(e)})}function Ne(t,e){return new ta({type:"object",shape:t,catchall:ge(),...S.normalizeParams(e)})}var ra=h("ZodUnion",(t,e)=>{Rn.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>zu(t,n,o,r),t.options=e.options});function _e(t,e){return new ra({type:"union",options:t,...S.normalizeParams(e)})}var Wf=h("ZodXor",(t,e)=>{ra.init(t,e),wc.init(t,e),t._zod.processJSONSchema=(n,o,r)=>zu(t,n,o,r),t.options=e.options});function Vk(t,e){return new Wf({type:"union",options:t,inclusive:!1,...S.normalizeParams(e)})}var Jf=h("ZodDiscriminatedUnion",(t,e)=>{ra.init(t,e),Ec.init(t,e)});function na(t,e,n){return new Jf({type:"union",options:e,discriminator:t,...S.normalizeParams(n)})}var Yf=h("ZodIntersection",(t,e)=>{Tc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>pf(t,n,o,r)});function ro(t,e){return new Yf({type:"intersection",left:t,right:e})}var Xf=h("ZodTuple",(t,e)=>{$i.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>mf(t,n,o,r),t.rest=n=>t.clone({...t._zod.def,rest:n})});function Qf(t,e,n){let o=e instanceof B,r=o?n:e,i=o?e:null;return new Xf({type:"tuple",items:t,rest:i,...S.normalizeParams(r)})}var Wn=h("ZodRecord",(t,e)=>{Pc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>ff(t,n,o,r),t.keyType=e.keyType,t.valueType=e.valueType});function me(t,e,n){return!e||!e._zod?new Wn({type:"record",keyType:y(),valueType:t,...S.normalizeParams(e)}):new Wn({type:"record",keyType:t,valueType:e,...S.normalizeParams(n)})}function qk(t,e,n){let o=Ae(t);return o._zod.values=void 0,new Wn({type:"record",keyType:o,valueType:e,...S.normalizeParams(n)})}function Bk(t,e,n){return new Wn({type:"record",keyType:t,valueType:e,mode:"loose",...S.normalizeParams(n)})}var eh=h("ZodMap",(t,e)=>{Rc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>cf(t,n,o,r),t.keyType=e.keyType,t.valueType=e.valueType,t.min=(...n)=>t.check(Ft(...n)),t.nonempty=n=>t.check(Ft(1,n)),t.max=(...n)=>t.check(br(...n)),t.size=(...n)=>t.check(Gr(...n))});function Hk(t,e,n){return new eh({type:"map",keyType:t,valueType:e,...S.normalizeParams(n)})}var th=h("ZodSet",(t,e)=>{Oc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>uf(t,n,o,r),t.min=(...n)=>t.check(Ft(...n)),t.nonempty=n=>t.check(Ft(1,n)),t.max=(...n)=>t.check(br(...n)),t.size=(...n)=>t.check(Gr(...n))});function Kk(t,e){return new th({type:"set",valueType:t,...S.normalizeParams(e)})}var Jn=h("ZodEnum",(t,e)=>{Ac.init(t,e),K.init(t,e),t._zod.processJSONSchema=(o,r,i)=>Xm(t,o,r,i),t.enum=e.entries,t.options=Object.values(e.entries);let n=new Set(Object.keys(e.entries));t.extract=(o,r)=>{let i={};for(let a of o)if(n.has(a))i[a]=e.entries[a];else throw new Error(`Key ${a} not found in enum`);return new Jn({...e,checks:[],...S.normalizeParams(r),entries:i})},t.exclude=(o,r)=>{let i={...e.entries};for(let a of o)if(n.has(a))delete i[a];else throw new Error(`Key ${a} not found in enum`);return new Jn({...e,checks:[],...S.normalizeParams(r),entries:i})}});function ze(t,e){let n=Array.isArray(t)?Object.fromEntries(t.map(o=>[o,o])):t;return new Jn({type:"enum",entries:n,...S.normalizeParams(e)})}function Gk(t,e){return new Jn({type:"enum",entries:t,...S.normalizeParams(e)})}var rh=h("ZodLiteral",(t,e)=>{Cc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Qm(t,n,o,r),t.values=new Set(e.values),Object.defineProperty(t,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function L(t,e){return new rh({type:"literal",values:Array.isArray(t)?t:[t],...S.normalizeParams(e)})}var nh=h("ZodFile",(t,e)=>{Nc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>rf(t,n,o,r),t.min=(n,o)=>t.check(Ft(n,o)),t.max=(n,o)=>t.check(br(n,o)),t.mime=(n,o)=>t.check(Fn(Array.isArray(n)?n:[n],o))});function Wk(t){return Eu(nh,t)}var oh=h("ZodTransform",(t,e)=>{zc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>sf(t,n,o,r),t._zod.parse=(n,o)=>{if(o.direction==="backward")throw new dr(t.constructor.name);n.addIssue=i=>{if(typeof i=="string")n.issues.push(S.issue(i,n.value,e));else{let a=i;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),a.input??(a.input=n.value),a.inst??(a.inst=t),n.issues.push(S.issue(a))}};let r=e.transform(n.value,n);return r instanceof Promise?r.then(i=>(n.value=i,n.fallback=!0,n)):(n.value=r,n.fallback=!0,n)}});function ll(t){return new oh({type:"transform",transform:t})}var no=h("ZodOptional",(t,e)=>{Ii.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Du(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function be(t){return new no({type:"optional",innerType:t})}var ih=h("ZodExactOptional",(t,e)=>{Dc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Du(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function ah(t){return new ih({type:"optional",innerType:t})}var sh=h("ZodNullable",(t,e)=>{jc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>hf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function Ji(t){return new sh({type:"nullable",innerType:t})}function Jk(t){return be(Ji(t))}var ch=h("ZodDefault",(t,e)=>{Uc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>_f(t,n,o,r),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function uh(t,e){return new ch({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():S.shallowClone(e)}})}var lh=h("ZodPrefault",(t,e)=>{Lc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>yf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function dh(t,e){return new lh({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():S.shallowClone(e)}})}var dl=h("ZodNonOptional",(t,e)=>{Mc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>gf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function ph(t,e){return new dl({type:"nonoptional",innerType:t,...S.normalizeParams(e)})}var mh=h("ZodSuccess",(t,e)=>{Zc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>nf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function Yk(t){return new mh({type:"success",innerType:t})}var fh=h("ZodCatch",(t,e)=>{Fc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>vf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType,t.removeCatch=t.unwrap});function hh(t,e){return new fh({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var gh=h("ZodNaN",(t,e)=>{Vc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>ef(t,n,o,r)});function Xk(t){return ku(gh,t)}var oa=h("ZodPipe",(t,e)=>{wi.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>bf(t,n,o,r),t.in=e.in,t.out=e.out});function qu(t,e){return new oa({type:"pipe",in:t,out:e})}var ia=h("ZodCodec",(t,e)=>{oa.init(t,e),On.init(t,e)});function Qk(t,e,n){return new ia({type:"pipe",in:t,out:e,transform:n.decode,reverseTransform:n.encode})}function ex(t){let e=t._zod.def;return new ia({type:"pipe",in:e.out,out:e.in,transform:e.reverseTransform,reverseTransform:e.transform})}var _h=h("ZodPreprocess",(t,e)=>{oa.init(t,e),Im.init(t,e)}),yh=h("ZodReadonly",(t,e)=>{qc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>kf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function vh(t){return new yh({type:"readonly",innerType:t})}var bh=h("ZodTemplateLiteral",(t,e)=>{Bc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>tf(t,n,o,r)});function tx(t,e){return new bh({type:"template_literal",parts:t,...S.normalizeParams(e)})}var kh=h("ZodLazy",(t,e)=>{Gc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>Sf(t,n,o,r),t.unwrap=()=>t._zod.def.getter()});function xh(t){return new kh({type:"lazy",getter:t})}var Sh=h("ZodPromise",(t,e)=>{Kc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>xf(t,n,o,r),t.unwrap=()=>t._zod.def.innerType});function rx(t){return new Sh({type:"promise",innerType:t})}var $h=h("ZodFunction",(t,e)=>{Hc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>af(t,n,o,r)});function nx(t){return new $h({type:"function",input:Array.isArray(t?.input)?Qf(t?.input):t?.input??X(ge()),output:t?.output??ge()})}var aa=h("ZodCustom",(t,e)=>{Wc.init(t,e),K.init(t,e),t._zod.processJSONSchema=(n,o,r)=>of(t,n,o,r)});function ox(t){let e=new fe({check:"custom"});return e._zod.check=t,e}function pl(t,e){return Tu(aa,t??(()=>!0),e)}function Ih(t,e={}){return Pu(aa,t,e)}function wh(t,e){return Ru(t,e)}var ix=Ou,ax=Au;function sx(t,e={}){let n=new aa({type:"custom",check:"custom",fn:o=>o instanceof t,abort:!0,...S.normalizeParams(e)});return n._zod.bag.Class=t,n._zod.check=o=>{o.value instanceof t||o.issues.push({code:"invalid_type",expected:t.name,input:o.value,inst:n,path:[...n._zod.def.path??[]]})},n}var cx=(...t)=>Cu({Codec:ia,Boolean:eo,String:Yn},...t);function ux(t){let e=xh(()=>_e([y(t),se(),Pe(),Qi(),X(e),me(y(),e)]));return e}function sa(t,e){return new _h({type:"pipe",in:ll(t),out:e})}var sO={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};function cO(t){Te({customError:t})}function uO(){return Te().customError}var Eh;Eh||(Eh={});var T={...Gi,...Uu,iso:$r},lO=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"]);function dO(t,e){let n=t.$schema;return n==="https://json-schema.org/draft/2020-12/schema"?"draft-2020-12":n==="http://json-schema.org/draft-07/schema#"?"draft-7":n==="http://json-schema.org/draft-04/schema#"?"draft-4":e??"draft-2020-12"}function pO(t,e){if(!t.startsWith("#"))throw new Error("External $ref is not supported, only local refs (#/...) are allowed");let n=t.slice(1).split("/").filter(Boolean);if(n.length===0)return e.rootSchema;let o=e.version==="draft-2020-12"?"$defs":"definitions";if(n[0]===o){let r=n[1];if(!r||!e.defs[r])throw new Error(`Reference not found: ${t}`);return e.defs[r]}throw new Error(`Reference not found: ${t}`)}function lx(t,e){if(t.not!==void 0){if(typeof t.not=="object"&&Object.keys(t.not).length===0)return T.never();throw new Error("not is not supported in Zod (except { not: {} } for never)")}if(t.unevaluatedItems!==void 0)throw new Error("unevaluatedItems is not supported");if(t.unevaluatedProperties!==void 0)throw new Error("unevaluatedProperties is not supported");if(t.if!==void 0||t.then!==void 0||t.else!==void 0)throw new Error("Conditional schemas (if/then/else) are not supported");if(t.dependentSchemas!==void 0||t.dependentRequired!==void 0)throw new Error("dependentSchemas and dependentRequired are not supported");if(t.$ref){let r=t.$ref;if(e.refs.has(r))return e.refs.get(r);if(e.processing.has(r))return T.lazy(()=>{if(!e.refs.has(r))throw new Error(`Circular reference not resolved: ${r}`);return e.refs.get(r)});e.processing.add(r);let i=pO(r,e),a=Me(i,e);return e.refs.set(r,a),e.processing.delete(r),a}if(t.enum!==void 0){let r=t.enum;if(e.version==="openapi-3.0"&&t.nullable===!0&&r.length===1&&r[0]===null)return T.null();if(r.length===0)return T.never();if(r.length===1)return T.literal(r[0]);if(r.every(a=>typeof a=="string"))return T.enum(r);let i=r.map(a=>T.literal(a));return i.length<2?i[0]:T.union([i[0],i[1],...i.slice(2)])}if(t.const!==void 0)return T.literal(t.const);let n=t.type;if(Array.isArray(n)){let r=n.map(i=>{let a={...t,type:i};return lx(a,e)});return r.length===0?T.never():r.length===1?r[0]:T.union(r)}if(!n)return T.any();let o;switch(n){case"string":{let r=T.string();if(t.format){let i=t.format;i==="email"?r=r.check(T.email()):i==="uri"||i==="uri-reference"?r=r.check(T.url()):i==="uuid"||i==="guid"?r=r.check(T.uuid()):i==="date-time"?r=r.check(T.iso.datetime()):i==="date"?r=r.check(T.iso.date()):i==="time"?r=r.check(T.iso.time()):i==="duration"?r=r.check(T.iso.duration()):i==="ipv4"?r=r.check(T.ipv4()):i==="ipv6"?r=r.check(T.ipv6()):i==="mac"?r=r.check(T.mac()):i==="cidr"?r=r.check(T.cidrv4()):i==="cidr-v6"?r=r.check(T.cidrv6()):i==="base64"?r=r.check(T.base64()):i==="base64url"?r=r.check(T.base64url()):i==="e164"?r=r.check(T.e164()):i==="jwt"?r=r.check(T.jwt()):i==="emoji"?r=r.check(T.emoji()):i==="nanoid"?r=r.check(T.nanoid()):i==="cuid"?r=r.check(T.cuid()):i==="cuid2"?r=r.check(T.cuid2()):i==="ulid"?r=r.check(T.ulid()):i==="xid"?r=r.check(T.xid()):i==="ksuid"&&(r=r.check(T.ksuid()))}typeof t.minLength=="number"&&(r=r.min(t.minLength)),typeof t.maxLength=="number"&&(r=r.max(t.maxLength)),t.pattern&&(r=r.regex(new RegExp(t.pattern))),o=r;break}case"number":case"integer":{let r=n==="integer"?T.number().int():T.number();typeof t.minimum=="number"&&(r=r.min(t.minimum)),typeof t.maximum=="number"&&(r=r.max(t.maximum)),typeof t.exclusiveMinimum=="number"?r=r.gt(t.exclusiveMinimum):t.exclusiveMinimum===!0&&typeof t.minimum=="number"&&(r=r.gt(t.minimum)),typeof t.exclusiveMaximum=="number"?r=r.lt(t.exclusiveMaximum):t.exclusiveMaximum===!0&&typeof t.maximum=="number"&&(r=r.lt(t.maximum)),typeof t.multipleOf=="number"&&(r=r.multipleOf(t.multipleOf)),o=r;break}case"boolean":{o=T.boolean();break}case"null":{o=T.null();break}case"object":{let r={},i=t.properties||{},a=new Set(t.required||[]);for(let[u,d]of Object.entries(i)){let l=Me(d,e);r[u]=a.has(u)?l:l.optional()}if(t.propertyNames){let u=Me(t.propertyNames,e),d=t.additionalProperties&&typeof t.additionalProperties=="object"?Me(t.additionalProperties,e):T.any();if(Object.keys(r).length===0){o=T.record(u,d);break}let l=T.object(r).passthrough(),p=T.looseRecord(u,d);o=T.intersection(l,p);break}if(t.patternProperties){let u=t.patternProperties,d=Object.keys(u),l=[];for(let m of d){let f=Me(u[m],e),g=T.string().regex(new RegExp(m));l.push(T.looseRecord(g,f))}let p=[];if(Object.keys(r).length>0&&p.push(T.object(r).passthrough()),p.push(...l),p.length===0)o=T.object({}).passthrough();else if(p.length===1)o=p[0];else{let m=T.intersection(p[0],p[1]);for(let f=2;f<p.length;f++)m=T.intersection(m,p[f]);o=m}break}let c=T.object(r);t.additionalProperties===!1?o=c.strict():typeof t.additionalProperties=="object"?o=c.catchall(Me(t.additionalProperties,e)):o=c.passthrough();break}case"array":{let r=t.prefixItems,i=t.items;if(r&&Array.isArray(r)){let a=r.map(u=>Me(u,e)),c=i&&typeof i=="object"&&!Array.isArray(i)?Me(i,e):void 0;c?o=T.tuple(a).rest(c):o=T.tuple(a),typeof t.minItems=="number"&&(o=o.check(T.minLength(t.minItems))),typeof t.maxItems=="number"&&(o=o.check(T.maxLength(t.maxItems)))}else if(Array.isArray(i)){let a=i.map(u=>Me(u,e)),c=t.additionalItems&&typeof t.additionalItems=="object"?Me(t.additionalItems,e):void 0;c?o=T.tuple(a).rest(c):o=T.tuple(a),typeof t.minItems=="number"&&(o=o.check(T.minLength(t.minItems))),typeof t.maxItems=="number"&&(o=o.check(T.maxLength(t.maxItems)))}else if(i!==void 0){let a=Me(i,e),c=T.array(a);typeof t.minItems=="number"&&(c=c.min(t.minItems)),typeof t.maxItems=="number"&&(c=c.max(t.maxItems)),o=c}else o=T.array(T.any());break}default:throw new Error(`Unsupported type: ${n}`)}return o}function Me(t,e){if(typeof t=="boolean")return t?T.any():T.never();let n=lx(t,e),o=t.type||t.enum!==void 0||t.const!==void 0;if(t.anyOf&&Array.isArray(t.anyOf)){let c=t.anyOf.map(d=>Me(d,e)),u=T.union(c);n=o?T.intersection(n,u):u}if(t.oneOf&&Array.isArray(t.oneOf)){let c=t.oneOf.map(d=>Me(d,e)),u=T.xor(c);n=o?T.intersection(n,u):u}if(t.allOf&&Array.isArray(t.allOf))if(t.allOf.length===0)n=o?n:T.any();else{let c=o?n:Me(t.allOf[0],e),u=o?0:1;for(let d=u;d<t.allOf.length;d++)c=T.intersection(c,Me(t.allOf[d],e));n=c}t.nullable===!0&&e.version==="openapi-3.0"&&(n=T.nullable(n)),t.readOnly===!0&&(n=T.readonly(n)),t.default!==void 0&&(n=n.default(t.default));let r={},i=["$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor"];for(let c of i)c in t&&(r[c]=t[c]);let a=["contentEncoding","contentMediaType","contentSchema"];for(let c of a)c in t&&(r[c]=t[c]);for(let c of Object.keys(t))lO.has(c)||(r[c]=t[c]);return Object.keys(r).length>0&&e.registry.add(n,r),t.description&&(n=n.describe(t.description)),n}function dx(t,e){if(typeof t=="boolean")return t?T.any():T.never();let n;try{n=JSON.parse(JSON.stringify(t))}catch{throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas")}let o=dO(n,e?.defaultTarget),r=n.$defs||n.definitions||{},i={version:o,defs:r,refs:new Map,processing:new Set,rootSchema:n,registry:e?.registry??Ce};return Me(n,i)}var Th={};Jt(Th,{bigint:()=>gO,boolean:()=>hO,date:()=>_O,number:()=>fO,string:()=>mO});function mO(t){return Tm(Yn,t)}function fO(t){return Nm(Qn,t)}function hO(t){return zm(eo,t)}function gO(t){return Dm(to,t)}function _O(t){return jm(ea,t)}Te(Jc());var Rh="2025-11-25";var px=[Rh,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Ir="io.modelcontextprotocol/related-task",fl="2.0",Oe=pl(t=>t!==null&&(typeof t=="object"||typeof t=="function")),mx=_e([y(),se().int()]),fx=y(),y2=Ne({ttl:se().optional(),pollInterval:se().optional()}),yO=O({ttl:se().optional()}),vO=O({taskId:y()}),Oh=Ne({progressToken:mx.optional(),[Ir]:vO.optional()}),pt=O({_meta:Oh.optional()}),ca=pt.extend({task:yO.optional()}),hx=t=>ca.safeParse(t).success,De=O({method:y(),params:pt.loose().optional()}),_t=O({_meta:Oh.optional()}),yt=O({method:y(),params:_t.loose().optional()}),je=Ne({_meta:Oh.optional()}),hl=_e([y(),se().int()]),gx=O({jsonrpc:L(fl),id:hl,...De.shape}).strict(),Ah=t=>gx.safeParse(t).success,_x=O({jsonrpc:L(fl),...yt.shape}).strict(),yx=t=>_x.safeParse(t).success,Ch=O({jsonrpc:L(fl),id:hl,result:je}).strict(),ua=t=>Ch.safeParse(t).success;var F;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(F||(F={}));var Nh=O({jsonrpc:L(fl),id:hl.optional(),error:O({code:se().int(),message:y(),data:ge().optional()})}).strict();var vx=t=>Nh.safeParse(t).success;var bx=_e([gx,_x,Ch,Nh]),v2=_e([Ch,Nh]),gl=je.strict(),bO=_t.extend({requestId:hl.optional(),reason:y().optional()}),_l=yt.extend({method:L("notifications/cancelled"),params:bO}),kO=O({src:y(),mimeType:y().optional(),sizes:X(y()).optional(),theme:ze(["light","dark"]).optional()}),la=O({icons:X(kO).optional()}),oo=O({name:y(),title:y().optional()}),kx=oo.extend({...oo.shape,...la.shape,version:y(),websiteUrl:y().optional(),description:y().optional()}),xO=ro(O({applyDefaults:Pe().optional()}),me(y(),ge())),SO=sa(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,ro(O({form:xO.optional(),url:Oe.optional()}),me(y(),ge()).optional())),$O=Ne({list:Oe.optional(),cancel:Oe.optional(),requests:Ne({sampling:Ne({createMessage:Oe.optional()}).optional(),elicitation:Ne({create:Oe.optional()}).optional()}).optional()}),IO=Ne({list:Oe.optional(),cancel:Oe.optional(),requests:Ne({tools:Ne({call:Oe.optional()}).optional()}).optional()}),wO=O({experimental:me(y(),Oe).optional(),sampling:O({context:Oe.optional(),tools:Oe.optional()}).optional(),elicitation:SO.optional(),roots:O({listChanged:Pe().optional()}).optional(),tasks:$O.optional(),extensions:me(y(),Oe).optional()}),EO=pt.extend({protocolVersion:y(),capabilities:wO,clientInfo:kx}),zh=De.extend({method:L("initialize"),params:EO});var TO=O({experimental:me(y(),Oe).optional(),logging:Oe.optional(),completions:Oe.optional(),prompts:O({listChanged:Pe().optional()}).optional(),resources:O({subscribe:Pe().optional(),listChanged:Pe().optional()}).optional(),tools:O({listChanged:Pe().optional()}).optional(),tasks:IO.optional(),extensions:me(y(),Oe).optional()}),PO=je.extend({protocolVersion:y(),capabilities:TO,serverInfo:kx,instructions:y().optional()}),Dh=yt.extend({method:L("notifications/initialized"),params:_t.optional()});var yl=De.extend({method:L("ping"),params:pt.optional()}),RO=O({progress:se(),total:be(se()),message:be(y())}),OO=O({..._t.shape,...RO.shape,progressToken:mx}),vl=yt.extend({method:L("notifications/progress"),params:OO}),AO=pt.extend({cursor:fx.optional()}),da=De.extend({params:AO.optional()}),pa=je.extend({nextCursor:fx.optional()}),CO=ze(["working","input_required","completed","failed","cancelled"]),ma=O({taskId:y(),status:CO,ttl:_e([se(),Qi()]),createdAt:y(),lastUpdatedAt:y(),pollInterval:be(se()),statusMessage:be(y())}),io=je.extend({task:ma}),NO=_t.merge(ma),fa=yt.extend({method:L("notifications/tasks/status"),params:NO}),bl=De.extend({method:L("tasks/get"),params:pt.extend({taskId:y()})}),kl=je.merge(ma),xl=De.extend({method:L("tasks/result"),params:pt.extend({taskId:y()})}),b2=je.loose(),Sl=da.extend({method:L("tasks/list")}),$l=pa.extend({tasks:X(ma)}),Il=De.extend({method:L("tasks/cancel"),params:pt.extend({taskId:y()})}),xx=je.merge(ma),Sx=O({uri:y(),mimeType:be(y()),_meta:me(y(),ge()).optional()}),$x=Sx.extend({text:y()}),jh=y().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),Ix=Sx.extend({blob:jh}),ha=ze(["user","assistant"]),ao=O({audience:X(ha).optional(),priority:se().min(0).max(1).optional(),lastModified:$r.datetime({offset:!0}).optional()}),wx=O({...oo.shape,...la.shape,uri:y(),description:be(y()),mimeType:be(y()),size:be(se()),annotations:ao.optional(),_meta:be(Ne({}))}),zO=O({...oo.shape,...la.shape,uriTemplate:y(),description:be(y()),mimeType:be(y()),annotations:ao.optional(),_meta:be(Ne({}))}),wl=da.extend({method:L("resources/list")}),DO=pa.extend({resources:X(wx)}),El=da.extend({method:L("resources/templates/list")}),jO=pa.extend({resourceTemplates:X(zO)}),Uh=pt.extend({uri:y()}),UO=Uh,Tl=De.extend({method:L("resources/read"),params:UO}),LO=je.extend({contents:X(_e([$x,Ix]))}),MO=yt.extend({method:L("notifications/resources/list_changed"),params:_t.optional()}),ZO=Uh,FO=De.extend({method:L("resources/subscribe"),params:ZO}),VO=Uh,qO=De.extend({method:L("resources/unsubscribe"),params:VO}),BO=_t.extend({uri:y()}),HO=yt.extend({method:L("notifications/resources/updated"),params:BO}),KO=O({name:y(),description:be(y()),required:be(Pe())}),GO=O({...oo.shape,...la.shape,description:be(y()),arguments:be(X(KO)),_meta:be(Ne({}))}),Pl=da.extend({method:L("prompts/list")}),WO=pa.extend({prompts:X(GO)}),JO=pt.extend({name:y(),arguments:me(y(),y()).optional()}),Rl=De.extend({method:L("prompts/get"),params:JO}),Lh=O({type:L("text"),text:y(),annotations:ao.optional(),_meta:me(y(),ge()).optional()}),Mh=O({type:L("image"),data:jh,mimeType:y(),annotations:ao.optional(),_meta:me(y(),ge()).optional()}),Zh=O({type:L("audio"),data:jh,mimeType:y(),annotations:ao.optional(),_meta:me(y(),ge()).optional()}),YO=O({type:L("tool_use"),name:y(),id:y(),input:me(y(),ge()),_meta:me(y(),ge()).optional()}),XO=O({type:L("resource"),resource:_e([$x,Ix]),annotations:ao.optional(),_meta:me(y(),ge()).optional()}),QO=wx.extend({type:L("resource_link")}),Fh=_e([Lh,Mh,Zh,QO,XO]),eA=O({role:ha,content:Fh}),tA=je.extend({description:y().optional(),messages:X(eA)}),rA=yt.extend({method:L("notifications/prompts/list_changed"),params:_t.optional()}),nA=O({title:y().optional(),readOnlyHint:Pe().optional(),destructiveHint:Pe().optional(),idempotentHint:Pe().optional(),openWorldHint:Pe().optional()}),oA=O({taskSupport:ze(["required","optional","forbidden"]).optional()}),Ex=O({...oo.shape,...la.shape,description:y().optional(),inputSchema:O({type:L("object"),properties:me(y(),Oe).optional(),required:X(y()).optional()}).catchall(ge()),outputSchema:O({type:L("object"),properties:me(y(),Oe).optional(),required:X(y()).optional()}).catchall(ge()).optional(),annotations:nA.optional(),execution:oA.optional(),_meta:me(y(),ge()).optional()}),Ol=da.extend({method:L("tools/list")}),iA=pa.extend({tools:X(Ex)}),Al=je.extend({content:X(Fh).default([]),structuredContent:me(y(),ge()).optional(),isError:Pe().optional()}),k2=Al.or(je.extend({toolResult:ge()})),aA=ca.extend({name:y(),arguments:me(y(),ge()).optional()}),so=De.extend({method:L("tools/call"),params:aA}),sA=yt.extend({method:L("notifications/tools/list_changed"),params:_t.optional()}),x2=O({autoRefresh:Pe().default(!0),debounceMs:se().int().nonnegative().default(300)}),ga=ze(["debug","info","notice","warning","error","critical","alert","emergency"]),cA=pt.extend({level:ga}),Vh=De.extend({method:L("logging/setLevel"),params:cA}),uA=_t.extend({level:ga,logger:y().optional(),data:ge()}),lA=yt.extend({method:L("notifications/message"),params:uA}),dA=O({name:y().optional()}),pA=O({hints:X(dA).optional(),costPriority:se().min(0).max(1).optional(),speedPriority:se().min(0).max(1).optional(),intelligencePriority:se().min(0).max(1).optional()}),mA=O({mode:ze(["auto","required","none"]).optional()}),fA=O({type:L("tool_result"),toolUseId:y().describe("The unique identifier for the corresponding tool call."),content:X(Fh).default([]),structuredContent:O({}).loose().optional(),isError:Pe().optional(),_meta:me(y(),ge()).optional()}),hA=na("type",[Lh,Mh,Zh]),ml=na("type",[Lh,Mh,Zh,YO,fA]),gA=O({role:ha,content:_e([ml,X(ml)]),_meta:me(y(),ge()).optional()}),_A=ca.extend({messages:X(gA),modelPreferences:pA.optional(),systemPrompt:y().optional(),includeContext:ze(["none","thisServer","allServers"]).optional(),temperature:se().optional(),maxTokens:se().int(),stopSequences:X(y()).optional(),metadata:Oe.optional(),tools:X(Ex).optional(),toolChoice:mA.optional()}),yA=De.extend({method:L("sampling/createMessage"),params:_A}),_a=je.extend({model:y(),stopReason:be(ze(["endTurn","stopSequence","maxTokens"]).or(y())),role:ha,content:hA}),qh=je.extend({model:y(),stopReason:be(ze(["endTurn","stopSequence","maxTokens","toolUse"]).or(y())),role:ha,content:_e([ml,X(ml)])}),vA=O({type:L("boolean"),title:y().optional(),description:y().optional(),default:Pe().optional()}),bA=O({type:L("string"),title:y().optional(),description:y().optional(),minLength:se().optional(),maxLength:se().optional(),format:ze(["email","uri","date","date-time"]).optional(),default:y().optional()}),kA=O({type:ze(["number","integer"]),title:y().optional(),description:y().optional(),minimum:se().optional(),maximum:se().optional(),default:se().optional()}),xA=O({type:L("string"),title:y().optional(),description:y().optional(),enum:X(y()),default:y().optional()}),SA=O({type:L("string"),title:y().optional(),description:y().optional(),oneOf:X(O({const:y(),title:y()})),default:y().optional()}),$A=O({type:L("string"),title:y().optional(),description:y().optional(),enum:X(y()),enumNames:X(y()).optional(),default:y().optional()}),IA=_e([xA,SA]),wA=O({type:L("array"),title:y().optional(),description:y().optional(),minItems:se().optional(),maxItems:se().optional(),items:O({type:L("string"),enum:X(y())}),default:X(y()).optional()}),EA=O({type:L("array"),title:y().optional(),description:y().optional(),minItems:se().optional(),maxItems:se().optional(),items:O({anyOf:X(O({const:y(),title:y()}))}),default:X(y()).optional()}),TA=_e([wA,EA]),PA=_e([$A,IA,TA]),RA=_e([PA,vA,bA,kA]),OA=ca.extend({mode:L("form").optional(),message:y(),requestedSchema:O({type:L("object"),properties:me(y(),RA),required:X(y()).optional()})}),AA=ca.extend({mode:L("url"),message:y(),elicitationId:y(),url:y().url()}),CA=_e([OA,AA]),NA=De.extend({method:L("elicitation/create"),params:CA}),zA=_t.extend({elicitationId:y()}),DA=yt.extend({method:L("notifications/elicitation/complete"),params:zA}),co=je.extend({action:ze(["accept","decline","cancel"]),content:sa(t=>t===null?void 0:t,me(y(),_e([y(),se(),Pe(),X(y())])).optional())}),jA=O({type:L("ref/resource"),uri:y()});var UA=O({type:L("ref/prompt"),name:y()}),LA=pt.extend({ref:_e([UA,jA]),argument:O({name:y(),value:y()}),context:O({arguments:me(y(),y()).optional()}).optional()}),Cl=De.extend({method:L("completion/complete"),params:LA});function Tx(t){if(t.params.ref.type!=="ref/prompt")throw new TypeError(`Expected CompleteRequestPrompt, but got ${t.params.ref.type}`)}function Px(t){if(t.params.ref.type!=="ref/resource")throw new TypeError(`Expected CompleteRequestResourceTemplate, but got ${t.params.ref.type}`)}var MA=je.extend({completion:Ne({values:X(y()).max(100),total:be(se().int()),hasMore:be(Pe())})}),ZA=O({uri:y().startsWith("file://"),name:y().optional(),_meta:me(y(),ge()).optional()}),FA=De.extend({method:L("roots/list"),params:pt.optional()}),Bh=je.extend({roots:X(ZA)}),VA=yt.extend({method:L("notifications/roots/list_changed"),params:_t.optional()}),S2=_e([yl,zh,Cl,Vh,Rl,Pl,wl,El,Tl,FO,qO,so,Ol,bl,xl,Sl,Il]),$2=_e([_l,vl,Dh,VA,fa]),I2=_e([gl,_a,qh,co,Bh,kl,$l,io]),w2=_e([yl,yA,NA,FA,bl,xl,Sl,Il]),E2=_e([_l,vl,lA,HO,MO,sA,rA,fa,DA]),T2=_e([gl,PO,MA,tA,WO,DO,jO,LO,Al,iA,kl,$l,io]),M=class t extends Error{constructor(e,n,o){super(`MCP error ${e}: ${n}`),this.code=e,this.data=o,this.name="McpError"}static fromError(e,n,o){if(e===F.UrlElicitationRequired&&o){let r=o;if(r.elicitations)return new Ph(r.elicitations,n)}return new t(e,n,o)}},Ph=class extends M{constructor(e,n=`URL elicitation${e.length>1?"s":""} required`){super(F.UrlElicitationRequired,n,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};var Nl=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
|
|
75
75
|
`);if(e===-1)return null;let n=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),qA(n)}clear(){this._buffer=void 0}};function qA(t){return bx.parse(JSON.parse(t))}function Rx(t){return JSON.stringify(t)+`
|
|
76
|
-
`}var zl=class{constructor(e=Ox.stdin,n=Ox.stdout){this._stdin=e,this._stdout=n,this._readBuffer=new Nl,this._started=!1,this._ondata=o=>{this._readBuffer.append(o),this.processReadBuffer()},this._onerror=o=>{this.onerror?.(o)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(n=>{let o=Rx(e);this._stdout.write(o)?n():this._stdout.once("drain",n)})}};var re;(function(t){t.assertEqual=r=>{};function e(r){}t.assertIs=e;function n(r){throw new Error}t.assertNever=n,t.arrayToEnum=r=>{let i={};for(let a of r)i[a]=a;return i},t.getValidEnumValues=r=>{let i=t.objectKeys(r).filter(c=>typeof r[r[c]]!="number"),a={};for(let c of i)a[c]=r[c];return t.objectValues(a)},t.objectValues=r=>t.objectKeys(r).map(function(i){return r[i]}),t.objectKeys=typeof Object.keys=="function"?r=>Object.keys(r):r=>{let i=[];for(let a in r)Object.prototype.hasOwnProperty.call(r,a)&&i.push(a);return i},t.find=(r,i)=>{for(let a of r)if(i(a))return a},t.isInteger=typeof Number.isInteger=="function"?r=>Number.isInteger(r):r=>typeof r=="number"&&Number.isFinite(r)&&Math.floor(r)===r;function o(r,i=" | "){return r.map(a=>typeof a=="string"?`'${a}'`:a).join(i)}t.joinValues=o,t.jsonStringifyReplacer=(r,i)=>typeof i=="bigint"?i.toString():i})(re||(re={}));var Ax;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(Ax||(Ax={}));var A=re.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Qt=t=>{switch(typeof t){case"undefined":return A.undefined;case"string":return A.string;case"number":return Number.isNaN(t)?A.nan:A.number;case"boolean":return A.boolean;case"function":return A.function;case"bigint":return A.bigint;case"symbol":return A.symbol;case"object":return Array.isArray(t)?A.array:t===null?A.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?A.promise:typeof Map<"u"&&t instanceof Map?A.map:typeof Set<"u"&&t instanceof Set?A.set:typeof Date<"u"&&t instanceof Date?A.date:A.object;default:return A.unknown}};var $=re.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);var mt=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=o=>{this.issues=[...this.issues,o]},this.addIssues=(o=[])=>{this.issues=[...this.issues,...o]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},o={_errors:[]},r=i=>{for(let a of i.issues)if(a.code==="invalid_union")a.unionErrors.map(r);else if(a.code==="invalid_return_type")r(a.returnTypeError);else if(a.code==="invalid_arguments")r(a.argumentsError);else if(a.path.length===0)o._errors.push(n(a));else{let c=o,u=0;for(;u<a.path.length;){let d=a.path[u];u===a.path.length-1?(c[d]=c[d]||{_errors:[]},c[d]._errors.push(n(a))):c[d]=c[d]||{_errors:[]},c=c[d],u++}}};return r(this),o}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,re.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n=Object.create(null),o=[];for(let r of this.issues)if(r.path.length>0){let i=r.path[0];n[i]=n[i]||[],n[i].push(e(r))}else o.push(e(r));return{formErrors:o,fieldErrors:n}}get formErrors(){return this.flatten()}};mt.create=t=>new mt(t);var BA=(t,e)=>{let n;switch(t.code){case $.invalid_type:t.received===A.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case $.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,re.jsonStringifyReplacer)}`;break;case $.unrecognized_keys:n=`Unrecognized key(s) in object: ${re.joinValues(t.keys,", ")}`;break;case $.invalid_union:n="Invalid input";break;case $.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${re.joinValues(t.options)}`;break;case $.invalid_enum_value:n=`Invalid enum value. Expected ${re.joinValues(t.options)}, received '${t.received}'`;break;case $.invalid_arguments:n="Invalid function arguments";break;case $.invalid_return_type:n="Invalid function return type";break;case $.invalid_date:n="Invalid date";break;case $.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:re.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case $.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case $.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case $.custom:n="Invalid input";break;case $.invalid_intersection_types:n="Intersection results could not be merged";break;case $.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case $.not_finite:n="Number must be finite";break;default:n=e.defaultError,re.assertNever(t)}return{message:n}},wr=BA;var HA=wr;function ya(){return HA}var Dl=t=>{let{data:e,path:n,errorMaps:o,issueData:r}=t,i=[...n,...r.path||[]],a={...r,path:i};if(r.message!==void 0)return{...r,path:i,message:r.message};let c="",u=o.filter(d=>!!d).slice().reverse();for(let d of u)c=d(a,{data:e,defaultError:c}).message;return{...r,path:i,message:c}};function P(t,e){let n=ya(),o=Dl({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===wr?void 0:wr].filter(r=>!!r)});t.common.issues.push(o)}var Ze=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let o=[];for(let r of n){if(r.status==="aborted")return V;r.status==="dirty"&&e.dirty(),o.push(r.value)}return{status:e.value,value:o}}static async mergeObjectAsync(e,n){let o=[];for(let r of n){let i=await r.key,a=await r.value;o.push({key:i,value:a})}return t.mergeObjectSync(e,o)}static mergeObjectSync(e,n){let o={};for(let r of n){let{key:i,value:a}=r;if(i.status==="aborted"||a.status==="aborted")return V;i.status==="dirty"&&e.dirty(),a.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof a.value<"u"||r.alwaysSet)&&(o[i.value]=a.value)}return{status:e.value,value:o}}},V=Object.freeze({status:"aborted"}),uo=t=>({status:"dirty",value:t}),Je=t=>({status:"valid",value:t}),Hh=t=>t.status==="aborted",Kh=t=>t.status==="dirty",en=t=>t.status==="valid",va=t=>typeof Promise<"u"&&t instanceof Promise;var U;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(U||(U={}));var vt=class{constructor(e,n,o,r){this._cachedPath=[],this.parent=e,this.data=n,this._path=o,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Cx=(t,e)=>{if(en(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new mt(t.common.issues);return this._error=n,this._error}}};function G(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:o,description:r}=t;if(e&&(n||o))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:r}:{errorMap:(a,c)=>{let{message:u}=t;return a.code==="invalid_enum_value"?{message:u??c.defaultError}:typeof c.data>"u"?{message:u??o??c.defaultError}:a.code!=="invalid_type"?{message:c.defaultError}:{message:u??n??c.defaultError}},description:r}}var Q=class{get description(){return this._def.description}_getType(e){return Qt(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:Qt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Ze,ctx:{common:e.parent.common,data:e.data,parsedType:Qt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(va(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let o=this.safeParse(e,n);if(o.success)return o.data;throw o.error}safeParse(e,n){let o={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qt(e)},r=this._parseSync({data:e,path:o.path,parent:o});return Cx(o,r)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qt(e)};if(!this["~standard"].async)try{let o=this._parseSync({data:e,path:[],parent:n});return en(o)?{value:o.value}:{issues:n.common.issues}}catch(o){o?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(o=>en(o)?{value:o.value}:{issues:n.common.issues})}async parseAsync(e,n){let o=await this.safeParseAsync(e,n);if(o.success)return o.data;throw o.error}async safeParseAsync(e,n){let o={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qt(e)},r=this._parse({data:e,path:o.path,parent:o}),i=await(va(r)?r:Promise.resolve(r));return Cx(o,i)}refine(e,n){let o=r=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(r):n;return this._refinement((r,i)=>{let a=e(r),c=()=>i.addIssue({code:$.custom,...o(r)});return typeof Promise<"u"&&a instanceof Promise?a.then(u=>u?!0:(c(),!1)):a?!0:(c(),!1)})}refinement(e,n){return this._refinement((o,r)=>e(o)?!0:(r.addIssue(typeof n=="function"?n(o,r):n),!1))}_refinement(e){return new Rt({schema:this,typeName:w.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return Pt.create(this,this._def)}nullable(){return rr.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Tr.create(this)}promise(){return tn.create(this,this._def)}or(e){return ho.create([this,e],this._def)}and(e){return go.create(this,e,this._def)}transform(e){return new Rt({...G(this._def),schema:this,typeName:w.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new ko({...G(this._def),innerType:this,defaultValue:n,typeName:w.ZodDefault})}brand(){return new jl({typeName:w.ZodBranded,type:this,...G(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new xo({...G(this._def),innerType:this,catchValue:n,typeName:w.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return Ul.create(this,e)}readonly(){return So.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},KA=/^c[^\s-]{8,}$/i,GA=/^[0-9a-z]+$/,WA=/^[0-9A-HJKMNP-TV-Z]{26}$/i,JA=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,YA=/^[a-z0-9_-]{21}$/i,XA=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,QA=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,eC=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,tC="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Gh,rC=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,nC=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,oC=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,iC=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,aC=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,sC=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Nx="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",cC=new RegExp(`^${Nx}$`);function zx(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function uC(t){return new RegExp(`^${zx(t)}$`)}function lC(t){let e=`${Nx}T${zx(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function dC(t,e){return!!((e==="v4"||!e)&&rC.test(t)||(e==="v6"||!e)&&oC.test(t))}function pC(t,e){if(!XA.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let o=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),r=JSON.parse(atob(o));return!(typeof r!="object"||r===null||"typ"in r&&r?.typ!=="JWT"||!r.alg||e&&r.alg!==e)}catch{return!1}}function mC(t,e){return!!((e==="v4"||!e)&&nC.test(t)||(e==="v6"||!e)&&iC.test(t))}var po=class t extends Q{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==A.string){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_type,expected:A.string,received:i.parsedType}),V}let o=new Ze,r;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),o.dirty());else if(i.kind==="max")e.data.length>i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),o.dirty());else if(i.kind==="length"){let a=e.data.length>i.value,c=e.data.length<i.value;(a||c)&&(r=this._getOrReturnCtx(e,r),a?P(r,{code:$.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):c&&P(r,{code:$.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),o.dirty())}else if(i.kind==="email")eC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"email",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="emoji")Gh||(Gh=new RegExp(tC,"u")),Gh.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"emoji",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="uuid")JA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"uuid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="nanoid")YA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"nanoid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="cuid")KA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"cuid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="cuid2")GA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"cuid2",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="ulid")WA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"ulid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{r=this._getOrReturnCtx(e,r),P(r,{validation:"url",code:$.invalid_string,message:i.message}),o.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"regex",code:$.invalid_string,message:i.message}),o.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),o.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:{startsWith:i.value},message:i.message}),o.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:{endsWith:i.value},message:i.message}),o.dirty()):i.kind==="datetime"?lC(i).test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:"datetime",message:i.message}),o.dirty()):i.kind==="date"?cC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:"date",message:i.message}),o.dirty()):i.kind==="time"?uC(i).test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:"time",message:i.message}),o.dirty()):i.kind==="duration"?QA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"duration",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="ip"?dC(e.data,i.version)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"ip",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="jwt"?pC(e.data,i.alg)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"jwt",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="cidr"?mC(e.data,i.version)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"cidr",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="base64"?aC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"base64",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="base64url"?sC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"base64url",code:$.invalid_string,message:i.message}),o.dirty()):re.assertNever(i);return{status:o.value,value:e.data}}_regex(e,n,o){return this.refinement(r=>e.test(r),{validation:n,code:$.invalid_string,...U.errToObj(o)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...U.errToObj(e)})}url(e){return this._addCheck({kind:"url",...U.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...U.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...U.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...U.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...U.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...U.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...U.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...U.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...U.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...U.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...U.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...U.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...U.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...U.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...U.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...U.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...U.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...U.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...U.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...U.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...U.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...U.errToObj(n)})}nonempty(e){return this.min(1,U.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};po.create=t=>new po({checks:[],typeName:w.ZodString,coerce:t?.coerce??!1,...G(t)});function fC(t,e){let n=(t.toString().split(".")[1]||"").length,o=(e.toString().split(".")[1]||"").length,r=n>o?n:o,i=Number.parseInt(t.toFixed(r).replace(".","")),a=Number.parseInt(e.toFixed(r).replace(".",""));return i%a/10**r}var ba=class t extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==A.number){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_type,expected:A.number,received:i.parsedType}),V}let o,r=new Ze;for(let i of this._def.checks)i.kind==="int"?re.isInteger(e.data)||(o=this._getOrReturnCtx(e,o),P(o,{code:$.invalid_type,expected:"integer",received:"float",message:i.message}),r.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):i.kind==="multipleOf"?fC(e.data,i.value)!==0&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(o=this._getOrReturnCtx(e,o),P(o,{code:$.not_finite,message:i.message}),r.dirty()):re.assertNever(i);return{status:r.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,o,r){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:o,message:U.toString(r)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:U.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:U.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:U.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:U.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&re.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let o of this._def.checks){if(o.kind==="finite"||o.kind==="int"||o.kind==="multipleOf")return!0;o.kind==="min"?(n===null||o.value>n)&&(n=o.value):o.kind==="max"&&(e===null||o.value<e)&&(e=o.value)}return Number.isFinite(n)&&Number.isFinite(e)}};ba.create=t=>new ba({checks:[],typeName:w.ZodNumber,coerce:t?.coerce||!1,...G(t)});var ka=class t extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==A.bigint)return this._getInvalidInput(e);let o,r=new Ze;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):re.assertNever(i);return{status:r.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return P(n,{code:$.invalid_type,expected:A.bigint,received:n.parsedType}),V}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,o,r){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:o,message:U.toString(r)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};ka.create=t=>new ka({checks:[],typeName:w.ZodBigInt,coerce:t?.coerce??!1,...G(t)});var xa=class extends Q{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==A.boolean){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:A.boolean,received:o.parsedType}),V}return Je(e.data)}};xa.create=t=>new xa({typeName:w.ZodBoolean,coerce:t?.coerce||!1,...G(t)});var Sa=class t extends Q{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==A.date){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_type,expected:A.date,received:i.parsedType}),V}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_date}),V}let o=new Ze,r;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),o.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),o.dirty()):re.assertNever(i);return{status:o.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:U.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:U.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Sa.create=t=>new Sa({checks:[],coerce:t?.coerce||!1,typeName:w.ZodDate,...G(t)});var $a=class extends Q{_parse(e){if(this._getType(e)!==A.symbol){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:A.symbol,received:o.parsedType}),V}return Je(e.data)}};$a.create=t=>new $a({typeName:w.ZodSymbol,...G(t)});var mo=class extends Q{_parse(e){if(this._getType(e)!==A.undefined){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:A.undefined,received:o.parsedType}),V}return Je(e.data)}};mo.create=t=>new mo({typeName:w.ZodUndefined,...G(t)});var fo=class extends Q{_parse(e){if(this._getType(e)!==A.null){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:A.null,received:o.parsedType}),V}return Je(e.data)}};fo.create=t=>new fo({typeName:w.ZodNull,...G(t)});var Ia=class extends Q{constructor(){super(...arguments),this._any=!0}_parse(e){return Je(e.data)}};Ia.create=t=>new Ia({typeName:w.ZodAny,...G(t)});var Er=class extends Q{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Je(e.data)}};Er.create=t=>new Er({typeName:w.ZodUnknown,...G(t)});var qt=class extends Q{_parse(e){let n=this._getOrReturnCtx(e);return P(n,{code:$.invalid_type,expected:A.never,received:n.parsedType}),V}};qt.create=t=>new qt({typeName:w.ZodNever,...G(t)});var wa=class extends Q{_parse(e){if(this._getType(e)!==A.undefined){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:A.void,received:o.parsedType}),V}return Je(e.data)}};wa.create=t=>new wa({typeName:w.ZodVoid,...G(t)});var Tr=class t extends Q{_parse(e){let{ctx:n,status:o}=this._processInputParams(e),r=this._def;if(n.parsedType!==A.array)return P(n,{code:$.invalid_type,expected:A.array,received:n.parsedType}),V;if(r.exactLength!==null){let a=n.data.length>r.exactLength.value,c=n.data.length<r.exactLength.value;(a||c)&&(P(n,{code:a?$.too_big:$.too_small,minimum:c?r.exactLength.value:void 0,maximum:a?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),o.dirty())}if(r.minLength!==null&&n.data.length<r.minLength.value&&(P(n,{code:$.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),o.dirty()),r.maxLength!==null&&n.data.length>r.maxLength.value&&(P(n,{code:$.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),o.dirty()),n.common.async)return Promise.all([...n.data].map((a,c)=>r.type._parseAsync(new vt(n,a,n.path,c)))).then(a=>Ze.mergeArray(o,a));let i=[...n.data].map((a,c)=>r.type._parseSync(new vt(n,a,n.path,c)));return Ze.mergeArray(o,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:U.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:U.toString(n)}})}nonempty(e){return this.min(1,e)}};Tr.create=(t,e)=>new Tr({type:t,minLength:null,maxLength:null,exactLength:null,typeName:w.ZodArray,...G(e)});function lo(t){if(t instanceof ft){let e={};for(let n in t.shape){let o=t.shape[n];e[n]=Pt.create(lo(o))}return new ft({...t._def,shape:()=>e})}else return t instanceof Tr?new Tr({...t._def,type:lo(t.element)}):t instanceof Pt?Pt.create(lo(t.unwrap())):t instanceof rr?rr.create(lo(t.unwrap())):t instanceof tr?tr.create(t.items.map(e=>lo(e))):t}var ft=class t extends Q{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=re.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==A.object){let d=this._getOrReturnCtx(e);return P(d,{code:$.invalid_type,expected:A.object,received:d.parsedType}),V}let{status:o,ctx:r}=this._processInputParams(e),{shape:i,keys:a}=this._getCached(),c=[];if(!(this._def.catchall instanceof qt&&this._def.unknownKeys==="strip"))for(let d in r.data)a.includes(d)||c.push(d);let u=[];for(let d of a){let l=i[d],p=r.data[d];u.push({key:{status:"valid",value:d},value:l._parse(new vt(r,p,r.path,d)),alwaysSet:d in r.data})}if(this._def.catchall instanceof qt){let d=this._def.unknownKeys;if(d==="passthrough")for(let l of c)u.push({key:{status:"valid",value:l},value:{status:"valid",value:r.data[l]}});else if(d==="strict")c.length>0&&(P(r,{code:$.unrecognized_keys,keys:c}),o.dirty());else if(d!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let d=this._def.catchall;for(let l of c){let p=r.data[l];u.push({key:{status:"valid",value:l},value:d._parse(new vt(r,p,r.path,l)),alwaysSet:l in r.data})}}return r.common.async?Promise.resolve().then(async()=>{let d=[];for(let l of u){let p=await l.key,m=await l.value;d.push({key:p,value:m,alwaysSet:l.alwaysSet})}return d}).then(d=>Ze.mergeObjectSync(o,d)):Ze.mergeObjectSync(o,u)}get shape(){return this._def.shape()}strict(e){return U.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,o)=>{let r=this._def.errorMap?.(n,o).message??o.defaultError;return n.code==="unrecognized_keys"?{message:U.errToObj(e).message??r}:{message:r}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:w.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let o of re.objectKeys(e))e[o]&&this.shape[o]&&(n[o]=this.shape[o]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let o of re.objectKeys(this.shape))e[o]||(n[o]=this.shape[o]);return new t({...this._def,shape:()=>n})}deepPartial(){return lo(this)}partial(e){let n={};for(let o of re.objectKeys(this.shape)){let r=this.shape[o];e&&!e[o]?n[o]=r:n[o]=r.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let o of re.objectKeys(this.shape))if(e&&!e[o])n[o]=this.shape[o];else{let i=this.shape[o];for(;i instanceof Pt;)i=i._def.innerType;n[o]=i}return new t({...this._def,shape:()=>n})}keyof(){return Dx(re.objectKeys(this.shape))}};ft.create=(t,e)=>new ft({shape:()=>t,unknownKeys:"strip",catchall:qt.create(),typeName:w.ZodObject,...G(e)});ft.strictCreate=(t,e)=>new ft({shape:()=>t,unknownKeys:"strict",catchall:qt.create(),typeName:w.ZodObject,...G(e)});ft.lazycreate=(t,e)=>new ft({shape:t,unknownKeys:"strip",catchall:qt.create(),typeName:w.ZodObject,...G(e)});var ho=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o=this._def.options;function r(i){for(let c of i)if(c.result.status==="valid")return c.result;for(let c of i)if(c.result.status==="dirty")return n.common.issues.push(...c.ctx.common.issues),c.result;let a=i.map(c=>new mt(c.ctx.common.issues));return P(n,{code:$.invalid_union,unionErrors:a}),V}if(n.common.async)return Promise.all(o.map(async i=>{let a={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(r);{let i,a=[];for(let u of o){let d={...n,common:{...n.common,issues:[]},parent:null},l=u._parseSync({data:n.data,path:n.path,parent:d});if(l.status==="valid")return l;l.status==="dirty"&&!i&&(i={result:l,ctx:d}),d.common.issues.length&&a.push(d.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let c=a.map(u=>new mt(u));return P(n,{code:$.invalid_union,unionErrors:c}),V}}get options(){return this._def.options}};ho.create=(t,e)=>new ho({options:t,typeName:w.ZodUnion,...G(e)});var er=t=>t instanceof _o?er(t.schema):t instanceof Rt?er(t.innerType()):t instanceof yo?[t.value]:t instanceof vo?t.options:t instanceof bo?re.objectValues(t.enum):t instanceof ko?er(t._def.innerType):t instanceof mo?[void 0]:t instanceof fo?[null]:t instanceof Pt?[void 0,...er(t.unwrap())]:t instanceof rr?[null,...er(t.unwrap())]:t instanceof jl||t instanceof So?er(t.unwrap()):t instanceof xo?er(t._def.innerType):[],Wh=class t extends Q{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==A.object)return P(n,{code:$.invalid_type,expected:A.object,received:n.parsedType}),V;let o=this.discriminator,r=n.data[o],i=this.optionsMap.get(r);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(P(n,{code:$.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[o]}),V)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,o){let r=new Map;for(let i of n){let a=er(i.shape[e]);if(!a.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let c of a){if(r.has(c))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(c)}`);r.set(c,i)}}return new t({typeName:w.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:r,...G(o)})}};function Jh(t,e){let n=Qt(t),o=Qt(e);if(t===e)return{valid:!0,data:t};if(n===A.object&&o===A.object){let r=re.objectKeys(e),i=re.objectKeys(t).filter(c=>r.indexOf(c)!==-1),a={...t,...e};for(let c of i){let u=Jh(t[c],e[c]);if(!u.valid)return{valid:!1};a[c]=u.data}return{valid:!0,data:a}}else if(n===A.array&&o===A.array){if(t.length!==e.length)return{valid:!1};let r=[];for(let i=0;i<t.length;i++){let a=t[i],c=e[i],u=Jh(a,c);if(!u.valid)return{valid:!1};r.push(u.data)}return{valid:!0,data:r}}else return n===A.date&&o===A.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var go=class extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e),r=(i,a)=>{if(Hh(i)||Hh(a))return V;let c=Jh(i.value,a.value);return c.valid?((Kh(i)||Kh(a))&&n.dirty(),{status:n.value,value:c.data}):(P(o,{code:$.invalid_intersection_types}),V)};return o.common.async?Promise.all([this._def.left._parseAsync({data:o.data,path:o.path,parent:o}),this._def.right._parseAsync({data:o.data,path:o.path,parent:o})]).then(([i,a])=>r(i,a)):r(this._def.left._parseSync({data:o.data,path:o.path,parent:o}),this._def.right._parseSync({data:o.data,path:o.path,parent:o}))}};go.create=(t,e,n)=>new go({left:t,right:e,typeName:w.ZodIntersection,...G(n)});var tr=class t extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==A.array)return P(o,{code:$.invalid_type,expected:A.array,received:o.parsedType}),V;if(o.data.length<this._def.items.length)return P(o,{code:$.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),V;!this._def.rest&&o.data.length>this._def.items.length&&(P(o,{code:$.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...o.data].map((a,c)=>{let u=this._def.items[c]||this._def.rest;return u?u._parse(new vt(o,a,o.path,c)):null}).filter(a=>!!a);return o.common.async?Promise.all(i).then(a=>Ze.mergeArray(n,a)):Ze.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};tr.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new tr({items:t,typeName:w.ZodTuple,rest:null,...G(e)})};var Yh=class t extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==A.object)return P(o,{code:$.invalid_type,expected:A.object,received:o.parsedType}),V;let r=[],i=this._def.keyType,a=this._def.valueType;for(let c in o.data)r.push({key:i._parse(new vt(o,c,o.path,c)),value:a._parse(new vt(o,o.data[c],o.path,c)),alwaysSet:c in o.data});return o.common.async?Ze.mergeObjectAsync(n,r):Ze.mergeObjectSync(n,r)}get element(){return this._def.valueType}static create(e,n,o){return n instanceof Q?new t({keyType:e,valueType:n,typeName:w.ZodRecord,...G(o)}):new t({keyType:po.create(),valueType:e,typeName:w.ZodRecord,...G(n)})}},Ea=class extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==A.map)return P(o,{code:$.invalid_type,expected:A.map,received:o.parsedType}),V;let r=this._def.keyType,i=this._def.valueType,a=[...o.data.entries()].map(([c,u],d)=>({key:r._parse(new vt(o,c,o.path,[d,"key"])),value:i._parse(new vt(o,u,o.path,[d,"value"]))}));if(o.common.async){let c=new Map;return Promise.resolve().then(async()=>{for(let u of a){let d=await u.key,l=await u.value;if(d.status==="aborted"||l.status==="aborted")return V;(d.status==="dirty"||l.status==="dirty")&&n.dirty(),c.set(d.value,l.value)}return{status:n.value,value:c}})}else{let c=new Map;for(let u of a){let d=u.key,l=u.value;if(d.status==="aborted"||l.status==="aborted")return V;(d.status==="dirty"||l.status==="dirty")&&n.dirty(),c.set(d.value,l.value)}return{status:n.value,value:c}}}};Ea.create=(t,e,n)=>new Ea({valueType:e,keyType:t,typeName:w.ZodMap,...G(n)});var Ta=class t extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==A.set)return P(o,{code:$.invalid_type,expected:A.set,received:o.parsedType}),V;let r=this._def;r.minSize!==null&&o.data.size<r.minSize.value&&(P(o,{code:$.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),n.dirty()),r.maxSize!==null&&o.data.size>r.maxSize.value&&(P(o,{code:$.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),n.dirty());let i=this._def.valueType;function a(u){let d=new Set;for(let l of u){if(l.status==="aborted")return V;l.status==="dirty"&&n.dirty(),d.add(l.value)}return{status:n.value,value:d}}let c=[...o.data.values()].map((u,d)=>i._parse(new vt(o,u,o.path,d)));return o.common.async?Promise.all(c).then(u=>a(u)):a(c)}min(e,n){return new t({...this._def,minSize:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:U.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};Ta.create=(t,e)=>new Ta({valueType:t,minSize:null,maxSize:null,typeName:w.ZodSet,...G(e)});var Xh=class t extends Q{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==A.function)return P(n,{code:$.invalid_type,expected:A.function,received:n.parsedType}),V;function o(c,u){return Dl({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ya(),wr].filter(d=>!!d),issueData:{code:$.invalid_arguments,argumentsError:u}})}function r(c,u){return Dl({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ya(),wr].filter(d=>!!d),issueData:{code:$.invalid_return_type,returnTypeError:u}})}let i={errorMap:n.common.contextualErrorMap},a=n.data;if(this._def.returns instanceof tn){let c=this;return Je(async function(...u){let d=new mt([]),l=await c._def.args.parseAsync(u,i).catch(f=>{throw d.addIssue(o(u,f)),d}),p=await Reflect.apply(a,this,l);return await c._def.returns._def.type.parseAsync(p,i).catch(f=>{throw d.addIssue(r(p,f)),d})})}else{let c=this;return Je(function(...u){let d=c._def.args.safeParse(u,i);if(!d.success)throw new mt([o(u,d.error)]);let l=Reflect.apply(a,this,d.data),p=c._def.returns.safeParse(l,i);if(!p.success)throw new mt([r(l,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:tr.create(e).rest(Er.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,o){return new t({args:e||tr.create([]).rest(Er.create()),returns:n||Er.create(),typeName:w.ZodFunction,...G(o)})}},_o=class extends Q{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};_o.create=(t,e)=>new _o({getter:t,typeName:w.ZodLazy,...G(e)});var yo=class extends Q{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return P(n,{received:n.data,code:$.invalid_literal,expected:this._def.value}),V}return{status:"valid",value:e.data}}get value(){return this._def.value}};yo.create=(t,e)=>new yo({value:t,typeName:w.ZodLiteral,...G(e)});function Dx(t,e){return new vo({values:t,typeName:w.ZodEnum,...G(e)})}var vo=class t extends Q{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),o=this._def.values;return P(n,{expected:re.joinValues(o),received:n.parsedType,code:$.invalid_type}),V}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),o=this._def.values;return P(n,{received:n.data,code:$.invalid_enum_value,options:o}),V}return Je(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(o=>!e.includes(o)),{...this._def,...n})}};vo.create=Dx;var bo=class extends Q{_parse(e){let n=re.getValidEnumValues(this._def.values),o=this._getOrReturnCtx(e);if(o.parsedType!==A.string&&o.parsedType!==A.number){let r=re.objectValues(n);return P(o,{expected:re.joinValues(r),received:o.parsedType,code:$.invalid_type}),V}if(this._cache||(this._cache=new Set(re.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let r=re.objectValues(n);return P(o,{received:o.data,code:$.invalid_enum_value,options:r}),V}return Je(e.data)}get enum(){return this._def.values}};bo.create=(t,e)=>new bo({values:t,typeName:w.ZodNativeEnum,...G(e)});var tn=class extends Q{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==A.promise&&n.common.async===!1)return P(n,{code:$.invalid_type,expected:A.promise,received:n.parsedType}),V;let o=n.parsedType===A.promise?n.data:Promise.resolve(n.data);return Je(o.then(r=>this._def.type.parseAsync(r,{path:n.path,errorMap:n.common.contextualErrorMap})))}};tn.create=(t,e)=>new tn({type:t,typeName:w.ZodPromise,...G(e)});var Rt=class extends Q{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===w.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:o}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:a=>{P(o,a),a.fatal?n.abort():n.dirty()},get path(){return o.path}};if(i.addIssue=i.addIssue.bind(i),r.type==="preprocess"){let a=r.transform(o.data,i);if(o.common.async)return Promise.resolve(a).then(async c=>{if(n.value==="aborted")return V;let u=await this._def.schema._parseAsync({data:c,path:o.path,parent:o});return u.status==="aborted"?V:u.status==="dirty"?uo(u.value):n.value==="dirty"?uo(u.value):u});{if(n.value==="aborted")return V;let c=this._def.schema._parseSync({data:a,path:o.path,parent:o});return c.status==="aborted"?V:c.status==="dirty"?uo(c.value):n.value==="dirty"?uo(c.value):c}}if(r.type==="refinement"){let a=c=>{let u=r.refinement(c,i);if(o.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return c};if(o.common.async===!1){let c=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});return c.status==="aborted"?V:(c.status==="dirty"&&n.dirty(),a(c.value),{status:n.value,value:c.value})}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then(c=>c.status==="aborted"?V:(c.status==="dirty"&&n.dirty(),a(c.value).then(()=>({status:n.value,value:c.value}))))}if(r.type==="transform")if(o.common.async===!1){let a=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(!en(a))return V;let c=r.transform(a.value,i);if(c instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:c}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then(a=>en(a)?Promise.resolve(r.transform(a.value,i)).then(c=>({status:n.value,value:c})):V);re.assertNever(r)}};Rt.create=(t,e,n)=>new Rt({schema:t,typeName:w.ZodEffects,effect:e,...G(n)});Rt.createWithPreprocess=(t,e,n)=>new Rt({schema:e,effect:{type:"preprocess",transform:t},typeName:w.ZodEffects,...G(n)});var Pt=class extends Q{_parse(e){return this._getType(e)===A.undefined?Je(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Pt.create=(t,e)=>new Pt({innerType:t,typeName:w.ZodOptional,...G(e)});var rr=class extends Q{_parse(e){return this._getType(e)===A.null?Je(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};rr.create=(t,e)=>new rr({innerType:t,typeName:w.ZodNullable,...G(e)});var ko=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o=n.data;return n.parsedType===A.undefined&&(o=this._def.defaultValue()),this._def.innerType._parse({data:o,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};ko.create=(t,e)=>new ko({innerType:t,typeName:w.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...G(e)});var xo=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o={...n,common:{...n.common,issues:[]}},r=this._def.innerType._parse({data:o.data,path:o.path,parent:{...o}});return va(r)?r.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new mt(o.common.issues)},input:o.data})})):{status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new mt(o.common.issues)},input:o.data})}}removeCatch(){return this._def.innerType}};xo.create=(t,e)=>new xo({innerType:t,typeName:w.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...G(e)});var Pa=class extends Q{_parse(e){if(this._getType(e)!==A.nan){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:A.nan,received:o.parsedType}),V}return{status:"valid",value:e.data}}};Pa.create=t=>new Pa({typeName:w.ZodNaN,...G(t)});var jl=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o=n.data;return this._def.type._parse({data:o,path:n.path,parent:n})}unwrap(){return this._def.type}},Ul=class t extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:o.data,path:o.path,parent:o});return i.status==="aborted"?V:i.status==="dirty"?(n.dirty(),uo(i.value)):this._def.out._parseAsync({data:i.value,path:o.path,parent:o})})();{let r=this._def.in._parseSync({data:o.data,path:o.path,parent:o});return r.status==="aborted"?V:r.status==="dirty"?(n.dirty(),{status:"dirty",value:r.value}):this._def.out._parseSync({data:r.value,path:o.path,parent:o})}}static create(e,n){return new t({in:e,out:n,typeName:w.ZodPipeline})}},So=class extends Q{_parse(e){let n=this._def.innerType._parse(e),o=r=>(en(r)&&(r.value=Object.freeze(r.value)),r);return va(n)?n.then(r=>o(r)):o(n)}unwrap(){return this._def.innerType}};So.create=(t,e)=>new So({innerType:t,typeName:w.ZodReadonly,...G(e)});var X2={object:ft.lazycreate},w;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(w||(w={}));var Q2=po.create,eV=ba.create,tV=Pa.create,rV=ka.create,nV=xa.create,oV=Sa.create,iV=$a.create,aV=mo.create,sV=fo.create,cV=Ia.create,uV=Er.create,lV=qt.create,dV=wa.create,pV=Tr.create,jx=ft.create,mV=ft.strictCreate,fV=ho.create,hV=Wh.create,gV=go.create,_V=tr.create,yV=Yh.create,vV=Ea.create,bV=Ta.create,kV=Xh.create,xV=_o.create,SV=yo.create,$V=vo.create,IV=bo.create,wV=tn.create,EV=Rt.create,TV=Pt.create,PV=rr.create,RV=Rt.createWithPreprocess,OV=Ul.create;var gC=h("ZodMiniType",(t,e)=>{if(!t._zod)throw new Error("Uninitialized schema in ZodMiniType.");B.init(t,e),t.def=e,t.type=e.type,t.parse=(n,o)=>Br(t,n,o,{callee:t.parse}),t.safeParse=(n,o)=>gr(t,n,o),t.parseAsync=async(n,o)=>Hr(t,n,o,{callee:t.parseAsync}),t.safeParseAsync=async(n,o)=>_r(t,n,o),t.check=(...n)=>t.clone({...e,checks:[...e.checks??[],...n.map(o=>typeof o=="function"?{_zod:{check:o,def:{check:"custom"},onattach:[]}}:o)]},{parent:!0}),t.with=t.check,t.clone=(n,o)=>Ae(t,n,o),t.brand=()=>t,t.register=((n,o)=>(n.add(t,o),t)),t.apply=n=>n(t)});var _C=h("ZodMiniObject",(t,e)=>{Ic.init(t,e),gC.init(t,e),W(t,"shape",()=>e.shape)});function Qh(t,e){let n={type:"object",shape:t??{},...I(e)};return new _C(n)}function bt(t){return!!t._zod}function rn(t){let e=Object.values(t);if(e.length===0)return Qh({});let n=e.every(bt),o=e.every(r=>!bt(r));if(n)return Qh(t);if(o)return jx(t);throw new Error("Mixed Zod versions detected in object shape.")}function Pr(t,e){return bt(t)?gr(t,e):t.safeParse(e)}async function Ll(t,e){return bt(t)?await _r(t,e):await t.safeParseAsync(e)}function Rr(t){if(!t)return;let e;if(bt(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function $o(t){if(t){if(typeof t=="object"){let e=t,n=t;if(!e._def&&!n._zod){let o=Object.values(t);if(o.length>0&&o.every(r=>typeof r=="object"&&r!==null&&(r._def!==void 0||r._zod!==void 0||typeof r.parse=="function")))return rn(t)}}if(bt(t)){let n=t._zod?.def;if(n&&(n.type==="object"||n.shape!==void 0))return t}else if(t.shape!==void 0)return t}}function Ml(t){if(t&&typeof t=="object"){if("message"in t&&typeof t.message=="string")return t.message;if("issues"in t&&Array.isArray(t.issues)&&t.issues.length>0){let e=t.issues[0];if(e&&typeof e=="object"&&"message"in e)return String(e.message)}try{return JSON.stringify(t)}catch{return String(t)}}return String(t)}function Ux(t){return t.description}function Lx(t){if(bt(t))return t._zod?.def?.type==="optional";let e=t;return typeof t.isOptional=="function"?t.isOptional():e._def?.typeName==="ZodOptional"}function Zl(t){if(bt(t)){let i=t._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let n=t._def;if(n){if(n.value!==void 0)return n.value;if(Array.isArray(n.values)&&n.values.length>0)return n.values[0]}let o=t.value;if(o!==void 0)return o}function Or(t){return t==="completed"||t==="failed"||t==="cancelled"}var Zx=Symbol("Let zodToJsonSchema decide on which parser to use");var Mx={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},Fx=t=>typeof t=="string"?{...Mx,name:t}:{...Mx,...t};var Vx=t=>{let e=Fx(t),n=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:n,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([o,r])=>[r._def,{def:r._def,path:[...e.basePath,e.definitionPath,o],jsonSchema:void 0}]))}};function eg(t,e,n,o){o?.errorMessages&&n&&(t.errorMessage={...t.errorMessage,[e]:n})}function ne(t,e,n,o,r){t[e]=n,eg(t,e,o,r)}var Fl=(t,e)=>{let n=0;for(;n<t.length&&n<e.length&&t[n]===e[n];n++);return[(t.length-n).toString(),...e.slice(n)].join("/")};function Ie(t){if(t.target!=="openAi")return{};let e=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy==="relative"?Fl(e,t.currentPath):e.join("/")}}function qx(t,e){let n={type:"array"};return t.type?._def&&t.type?._def?.typeName!==w.ZodAny&&(n.items=q(t.type._def,{...e,currentPath:[...e.currentPath,"items"]})),t.minLength&&ne(n,"minItems",t.minLength.value,t.minLength.message,e),t.maxLength&&ne(n,"maxItems",t.maxLength.value,t.maxLength.message,e),t.exactLength&&(ne(n,"minItems",t.exactLength.value,t.exactLength.message,e),ne(n,"maxItems",t.exactLength.value,t.exactLength.message,e)),n}function Bx(t,e){let n={type:"integer",format:"int64"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"min":e.target==="jsonSchema7"?o.inclusive?ne(n,"minimum",o.value,o.message,e):ne(n,"exclusiveMinimum",o.value,o.message,e):(o.inclusive||(n.exclusiveMinimum=!0),ne(n,"minimum",o.value,o.message,e));break;case"max":e.target==="jsonSchema7"?o.inclusive?ne(n,"maximum",o.value,o.message,e):ne(n,"exclusiveMaximum",o.value,o.message,e):(o.inclusive||(n.exclusiveMaximum=!0),ne(n,"maximum",o.value,o.message,e));break;case"multipleOf":ne(n,"multipleOf",o.value,o.message,e);break}return n}function Hx(){return{type:"boolean"}}function Vl(t,e){return q(t.type._def,e)}var Kx=(t,e)=>q(t.innerType._def,e);function tg(t,e,n){let o=n??e.dateStrategy;if(Array.isArray(o))return{anyOf:o.map((r,i)=>tg(t,e,r))};switch(o){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return vC(t,e)}}var vC=(t,e)=>{let n={type:"integer",format:"unix-time"};if(e.target==="openApi3")return n;for(let o of t.checks)switch(o.kind){case"min":ne(n,"minimum",o.value,o.message,e);break;case"max":ne(n,"maximum",o.value,o.message,e);break}return n};function Gx(t,e){return{...q(t.innerType._def,e),default:t.defaultValue()}}function Wx(t,e){return e.effectStrategy==="input"?q(t.schema._def,e):Ie(e)}function Jx(t){return{type:"string",enum:Array.from(t.values)}}var bC=t=>"type"in t&&t.type==="string"?!1:"allOf"in t;function Yx(t,e){let n=[q(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),q(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),o=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,r=[];return n.forEach(i=>{if(bC(i))r.push(...i.allOf),i.unevaluatedProperties===void 0&&(o=void 0);else{let a=i;if("additionalProperties"in i&&i.additionalProperties===!1){let{additionalProperties:c,...u}=i;a=u}else o=void 0;r.push(a)}}),r.length?{allOf:r,...o}:void 0}function Xx(t,e){let n=typeof t.value;return n!=="bigint"&&n!=="number"&&n!=="boolean"&&n!=="string"?{type:Array.isArray(t.value)?"array":"object"}:e.target==="openApi3"?{type:n==="bigint"?"integer":n,enum:[t.value]}:{type:n==="bigint"?"integer":n,const:t.value}}var rg,Ot={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(rg===void 0&&(rg=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),rg),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function ql(t,e){let n={type:"string"};if(t.checks)for(let o of t.checks)switch(o.kind){case"min":ne(n,"minLength",typeof n.minLength=="number"?Math.max(n.minLength,o.value):o.value,o.message,e);break;case"max":ne(n,"maxLength",typeof n.maxLength=="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"email":switch(e.emailStrategy){case"format:email":At(n,"email",o.message,e);break;case"format:idn-email":At(n,"idn-email",o.message,e);break;case"pattern:zod":Ye(n,Ot.email,o.message,e);break}break;case"url":At(n,"uri",o.message,e);break;case"uuid":At(n,"uuid",o.message,e);break;case"regex":Ye(n,o.regex,o.message,e);break;case"cuid":Ye(n,Ot.cuid,o.message,e);break;case"cuid2":Ye(n,Ot.cuid2,o.message,e);break;case"startsWith":Ye(n,RegExp(`^${ng(o.value,e)}`),o.message,e);break;case"endsWith":Ye(n,RegExp(`${ng(o.value,e)}$`),o.message,e);break;case"datetime":At(n,"date-time",o.message,e);break;case"date":At(n,"date",o.message,e);break;case"time":At(n,"time",o.message,e);break;case"duration":At(n,"duration",o.message,e);break;case"length":ne(n,"minLength",typeof n.minLength=="number"?Math.max(n.minLength,o.value):o.value,o.message,e),ne(n,"maxLength",typeof n.maxLength=="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"includes":{Ye(n,RegExp(ng(o.value,e)),o.message,e);break}case"ip":{o.version!=="v6"&&At(n,"ipv4",o.message,e),o.version!=="v4"&&At(n,"ipv6",o.message,e);break}case"base64url":Ye(n,Ot.base64url,o.message,e);break;case"jwt":Ye(n,Ot.jwt,o.message,e);break;case"cidr":{o.version!=="v6"&&Ye(n,Ot.ipv4Cidr,o.message,e),o.version!=="v4"&&Ye(n,Ot.ipv6Cidr,o.message,e);break}case"emoji":Ye(n,Ot.emoji(),o.message,e);break;case"ulid":{Ye(n,Ot.ulid,o.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{At(n,"binary",o.message,e);break}case"contentEncoding:base64":{ne(n,"contentEncoding","base64",o.message,e);break}case"pattern:zod":{Ye(n,Ot.base64,o.message,e);break}}break}case"nanoid":Ye(n,Ot.nanoid,o.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return n}function ng(t,e){return e.patternStrategy==="escape"?xC(t):t}var kC=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function xC(t){let e="";for(let n=0;n<t.length;n++)kC.has(t[n])||(e+="\\"),e+=t[n];return e}function At(t,e,n,o){t.format||t.anyOf?.some(r=>r.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format,...t.errorMessage&&o.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage&&(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.anyOf.push({format:e,...n&&o.errorMessages&&{errorMessage:{format:n}}})):ne(t,"format",e,n,o)}function Ye(t,e,n,o){t.pattern||t.allOf?.some(r=>r.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern,...t.errorMessage&&o.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage&&(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.allOf.push({pattern:Qx(e,o),...n&&o.errorMessages&&{errorMessage:{pattern:n}}})):ne(t,"pattern",Qx(e,o),n,o)}function Qx(t,e){if(!e.applyRegexFlags||!t.flags)return t.source;let n={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},o=n.i?t.source.toLowerCase():t.source,r="",i=!1,a=!1,c=!1;for(let u=0;u<o.length;u++){if(i){r+=o[u],i=!1;continue}if(n.i){if(a){if(o[u].match(/[a-z]/)){c?(r+=o[u],r+=`${o[u-2]}-${o[u]}`.toUpperCase(),c=!1):o[u+1]==="-"&&o[u+2]?.match(/[a-z]/)?(r+=o[u],c=!0):r+=`${o[u]}${o[u].toUpperCase()}`;continue}}else if(o[u].match(/[a-z]/)){r+=`[${o[u]}${o[u].toUpperCase()}]`;continue}}if(n.m){if(o[u]==="^"){r+=`(^|(?<=[\r
|
|
76
|
+
`}var zl=class{constructor(e=Ox.stdin,n=Ox.stdout){this._stdin=e,this._stdout=n,this._readBuffer=new Nl,this._started=!1,this._ondata=o=>{this._readBuffer.append(o),this.processReadBuffer()},this._onerror=o=>{this.onerror?.(o)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(n=>{let o=Rx(e);this._stdout.write(o)?n():this._stdout.once("drain",n)})}};var re;(function(t){t.assertEqual=r=>{};function e(r){}t.assertIs=e;function n(r){throw new Error}t.assertNever=n,t.arrayToEnum=r=>{let i={};for(let a of r)i[a]=a;return i},t.getValidEnumValues=r=>{let i=t.objectKeys(r).filter(c=>typeof r[r[c]]!="number"),a={};for(let c of i)a[c]=r[c];return t.objectValues(a)},t.objectValues=r=>t.objectKeys(r).map(function(i){return r[i]}),t.objectKeys=typeof Object.keys=="function"?r=>Object.keys(r):r=>{let i=[];for(let a in r)Object.prototype.hasOwnProperty.call(r,a)&&i.push(a);return i},t.find=(r,i)=>{for(let a of r)if(i(a))return a},t.isInteger=typeof Number.isInteger=="function"?r=>Number.isInteger(r):r=>typeof r=="number"&&Number.isFinite(r)&&Math.floor(r)===r;function o(r,i=" | "){return r.map(a=>typeof a=="string"?`'${a}'`:a).join(i)}t.joinValues=o,t.jsonStringifyReplacer=(r,i)=>typeof i=="bigint"?i.toString():i})(re||(re={}));var Ax;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(Ax||(Ax={}));var C=re.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Qt=t=>{switch(typeof t){case"undefined":return C.undefined;case"string":return C.string;case"number":return Number.isNaN(t)?C.nan:C.number;case"boolean":return C.boolean;case"function":return C.function;case"bigint":return C.bigint;case"symbol":return C.symbol;case"object":return Array.isArray(t)?C.array:t===null?C.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?C.promise:typeof Map<"u"&&t instanceof Map?C.map:typeof Set<"u"&&t instanceof Set?C.set:typeof Date<"u"&&t instanceof Date?C.date:C.object;default:return C.unknown}};var $=re.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);var mt=class t extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=o=>{this.issues=[...this.issues,o]},this.addIssues=(o=[])=>{this.issues=[...this.issues,...o]};let n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){let n=e||function(i){return i.message},o={_errors:[]},r=i=>{for(let a of i.issues)if(a.code==="invalid_union")a.unionErrors.map(r);else if(a.code==="invalid_return_type")r(a.returnTypeError);else if(a.code==="invalid_arguments")r(a.argumentsError);else if(a.path.length===0)o._errors.push(n(a));else{let c=o,u=0;for(;u<a.path.length;){let d=a.path[u];u===a.path.length-1?(c[d]=c[d]||{_errors:[]},c[d]._errors.push(n(a))):c[d]=c[d]||{_errors:[]},c=c[d],u++}}};return r(this),o}static assert(e){if(!(e instanceof t))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,re.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){let n=Object.create(null),o=[];for(let r of this.issues)if(r.path.length>0){let i=r.path[0];n[i]=n[i]||[],n[i].push(e(r))}else o.push(e(r));return{formErrors:o,fieldErrors:n}}get formErrors(){return this.flatten()}};mt.create=t=>new mt(t);var BA=(t,e)=>{let n;switch(t.code){case $.invalid_type:t.received===C.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case $.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,re.jsonStringifyReplacer)}`;break;case $.unrecognized_keys:n=`Unrecognized key(s) in object: ${re.joinValues(t.keys,", ")}`;break;case $.invalid_union:n="Invalid input";break;case $.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${re.joinValues(t.options)}`;break;case $.invalid_enum_value:n=`Invalid enum value. Expected ${re.joinValues(t.options)}, received '${t.received}'`;break;case $.invalid_arguments:n="Invalid function arguments";break;case $.invalid_return_type:n="Invalid function return type";break;case $.invalid_date:n="Invalid date";break;case $.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:re.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case $.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case $.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case $.custom:n="Invalid input";break;case $.invalid_intersection_types:n="Intersection results could not be merged";break;case $.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case $.not_finite:n="Number must be finite";break;default:n=e.defaultError,re.assertNever(t)}return{message:n}},wr=BA;var HA=wr;function ya(){return HA}var Dl=t=>{let{data:e,path:n,errorMaps:o,issueData:r}=t,i=[...n,...r.path||[]],a={...r,path:i};if(r.message!==void 0)return{...r,path:i,message:r.message};let c="",u=o.filter(d=>!!d).slice().reverse();for(let d of u)c=d(a,{data:e,defaultError:c}).message;return{...r,path:i,message:c}};function P(t,e){let n=ya(),o=Dl({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===wr?void 0:wr].filter(r=>!!r)});t.common.issues.push(o)}var Ze=class t{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){let o=[];for(let r of n){if(r.status==="aborted")return V;r.status==="dirty"&&e.dirty(),o.push(r.value)}return{status:e.value,value:o}}static async mergeObjectAsync(e,n){let o=[];for(let r of n){let i=await r.key,a=await r.value;o.push({key:i,value:a})}return t.mergeObjectSync(e,o)}static mergeObjectSync(e,n){let o={};for(let r of n){let{key:i,value:a}=r;if(i.status==="aborted"||a.status==="aborted")return V;i.status==="dirty"&&e.dirty(),a.status==="dirty"&&e.dirty(),i.value!=="__proto__"&&(typeof a.value<"u"||r.alwaysSet)&&(o[i.value]=a.value)}return{status:e.value,value:o}}},V=Object.freeze({status:"aborted"}),uo=t=>({status:"dirty",value:t}),Je=t=>({status:"valid",value:t}),Hh=t=>t.status==="aborted",Kh=t=>t.status==="dirty",en=t=>t.status==="valid",va=t=>typeof Promise<"u"&&t instanceof Promise;var U;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e?.message})(U||(U={}));var vt=class{constructor(e,n,o,r){this._cachedPath=[],this.parent=e,this.data=n,this._path=o,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Cx=(t,e)=>{if(en(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let n=new mt(t.common.issues);return this._error=n,this._error}}};function G(t){if(!t)return{};let{errorMap:e,invalid_type_error:n,required_error:o,description:r}=t;if(e&&(n||o))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:r}:{errorMap:(a,c)=>{let{message:u}=t;return a.code==="invalid_enum_value"?{message:u??c.defaultError}:typeof c.data>"u"?{message:u??o??c.defaultError}:a.code!=="invalid_type"?{message:c.defaultError}:{message:u??n??c.defaultError}},description:r}}var Q=class{get description(){return this._def.description}_getType(e){return Qt(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:Qt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new Ze,ctx:{common:e.parent.common,data:e.data,parsedType:Qt(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){let n=this._parse(e);if(va(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){let n=this._parse(e);return Promise.resolve(n)}parse(e,n){let o=this.safeParse(e,n);if(o.success)return o.data;throw o.error}safeParse(e,n){let o={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qt(e)},r=this._parseSync({data:e,path:o.path,parent:o});return Cx(o,r)}"~validate"(e){let n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qt(e)};if(!this["~standard"].async)try{let o=this._parseSync({data:e,path:[],parent:n});return en(o)?{value:o.value}:{issues:n.common.issues}}catch(o){o?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(o=>en(o)?{value:o.value}:{issues:n.common.issues})}async parseAsync(e,n){let o=await this.safeParseAsync(e,n);if(o.success)return o.data;throw o.error}async safeParseAsync(e,n){let o={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Qt(e)},r=this._parse({data:e,path:o.path,parent:o}),i=await(va(r)?r:Promise.resolve(r));return Cx(o,i)}refine(e,n){let o=r=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(r):n;return this._refinement((r,i)=>{let a=e(r),c=()=>i.addIssue({code:$.custom,...o(r)});return typeof Promise<"u"&&a instanceof Promise?a.then(u=>u?!0:(c(),!1)):a?!0:(c(),!1)})}refinement(e,n){return this._refinement((o,r)=>e(o)?!0:(r.addIssue(typeof n=="function"?n(o,r):n),!1))}_refinement(e){return new Rt({schema:this,typeName:w.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return Pt.create(this,this._def)}nullable(){return rr.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Tr.create(this)}promise(){return tn.create(this,this._def)}or(e){return ho.create([this,e],this._def)}and(e){return go.create(this,e,this._def)}transform(e){return new Rt({...G(this._def),schema:this,typeName:w.ZodEffects,effect:{type:"transform",transform:e}})}default(e){let n=typeof e=="function"?e:()=>e;return new ko({...G(this._def),innerType:this,defaultValue:n,typeName:w.ZodDefault})}brand(){return new jl({typeName:w.ZodBranded,type:this,...G(this._def)})}catch(e){let n=typeof e=="function"?e:()=>e;return new xo({...G(this._def),innerType:this,catchValue:n,typeName:w.ZodCatch})}describe(e){let n=this.constructor;return new n({...this._def,description:e})}pipe(e){return Ul.create(this,e)}readonly(){return So.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},KA=/^c[^\s-]{8,}$/i,GA=/^[0-9a-z]+$/,WA=/^[0-9A-HJKMNP-TV-Z]{26}$/i,JA=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,YA=/^[a-z0-9_-]{21}$/i,XA=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,QA=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,eC=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,tC="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",Gh,rC=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,nC=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,oC=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,iC=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,aC=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,sC=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Nx="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",cC=new RegExp(`^${Nx}$`);function zx(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);let n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function uC(t){return new RegExp(`^${zx(t)}$`)}function lC(t){let e=`${Nx}T${zx(t)}`,n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function dC(t,e){return!!((e==="v4"||!e)&&rC.test(t)||(e==="v6"||!e)&&oC.test(t))}function pC(t,e){if(!XA.test(t))return!1;try{let[n]=t.split(".");if(!n)return!1;let o=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),r=JSON.parse(atob(o));return!(typeof r!="object"||r===null||"typ"in r&&r?.typ!=="JWT"||!r.alg||e&&r.alg!==e)}catch{return!1}}function mC(t,e){return!!((e==="v4"||!e)&&nC.test(t)||(e==="v6"||!e)&&iC.test(t))}var po=class t extends Q{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==C.string){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_type,expected:C.string,received:i.parsedType}),V}let o=new Ze,r;for(let i of this._def.checks)if(i.kind==="min")e.data.length<i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),o.dirty());else if(i.kind==="max")e.data.length>i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!1,message:i.message}),o.dirty());else if(i.kind==="length"){let a=e.data.length>i.value,c=e.data.length<i.value;(a||c)&&(r=this._getOrReturnCtx(e,r),a?P(r,{code:$.too_big,maximum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}):c&&P(r,{code:$.too_small,minimum:i.value,type:"string",inclusive:!0,exact:!0,message:i.message}),o.dirty())}else if(i.kind==="email")eC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"email",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="emoji")Gh||(Gh=new RegExp(tC,"u")),Gh.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"emoji",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="uuid")JA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"uuid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="nanoid")YA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"nanoid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="cuid")KA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"cuid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="cuid2")GA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"cuid2",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="ulid")WA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"ulid",code:$.invalid_string,message:i.message}),o.dirty());else if(i.kind==="url")try{new URL(e.data)}catch{r=this._getOrReturnCtx(e,r),P(r,{validation:"url",code:$.invalid_string,message:i.message}),o.dirty()}else i.kind==="regex"?(i.regex.lastIndex=0,i.regex.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"regex",code:$.invalid_string,message:i.message}),o.dirty())):i.kind==="trim"?e.data=e.data.trim():i.kind==="includes"?e.data.includes(i.value,i.position)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:{includes:i.value,position:i.position},message:i.message}),o.dirty()):i.kind==="toLowerCase"?e.data=e.data.toLowerCase():i.kind==="toUpperCase"?e.data=e.data.toUpperCase():i.kind==="startsWith"?e.data.startsWith(i.value)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:{startsWith:i.value},message:i.message}),o.dirty()):i.kind==="endsWith"?e.data.endsWith(i.value)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:{endsWith:i.value},message:i.message}),o.dirty()):i.kind==="datetime"?lC(i).test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:"datetime",message:i.message}),o.dirty()):i.kind==="date"?cC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:"date",message:i.message}),o.dirty()):i.kind==="time"?uC(i).test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{code:$.invalid_string,validation:"time",message:i.message}),o.dirty()):i.kind==="duration"?QA.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"duration",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="ip"?dC(e.data,i.version)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"ip",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="jwt"?pC(e.data,i.alg)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"jwt",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="cidr"?mC(e.data,i.version)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"cidr",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="base64"?aC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"base64",code:$.invalid_string,message:i.message}),o.dirty()):i.kind==="base64url"?sC.test(e.data)||(r=this._getOrReturnCtx(e,r),P(r,{validation:"base64url",code:$.invalid_string,message:i.message}),o.dirty()):re.assertNever(i);return{status:o.value,value:e.data}}_regex(e,n,o){return this.refinement(r=>e.test(r),{validation:n,code:$.invalid_string,...U.errToObj(o)})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...U.errToObj(e)})}url(e){return this._addCheck({kind:"url",...U.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...U.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...U.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...U.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...U.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...U.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...U.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...U.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...U.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...U.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...U.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...U.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof e?.precision>"u"?null:e?.precision,offset:e?.offset??!1,local:e?.local??!1,...U.errToObj(e?.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof e?.precision>"u"?null:e?.precision,...U.errToObj(e?.message)})}duration(e){return this._addCheck({kind:"duration",...U.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...U.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n?.position,...U.errToObj(n?.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...U.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...U.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...U.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...U.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...U.errToObj(n)})}nonempty(e){return this.min(1,U.errToObj(e))}trim(){return new t({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new t({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};po.create=t=>new po({checks:[],typeName:w.ZodString,coerce:t?.coerce??!1,...G(t)});function fC(t,e){let n=(t.toString().split(".")[1]||"").length,o=(e.toString().split(".")[1]||"").length,r=n>o?n:o,i=Number.parseInt(t.toFixed(r).replace(".","")),a=Number.parseInt(e.toFixed(r).replace(".",""));return i%a/10**r}var ba=class t extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==C.number){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_type,expected:C.number,received:i.parsedType}),V}let o,r=new Ze;for(let i of this._def.checks)i.kind==="int"?re.isInteger(e.data)||(o=this._getOrReturnCtx(e,o),P(o,{code:$.invalid_type,expected:"integer",received:"float",message:i.message}),r.dirty()):i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_small,minimum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_big,maximum:i.value,type:"number",inclusive:i.inclusive,exact:!1,message:i.message}),r.dirty()):i.kind==="multipleOf"?fC(e.data,i.value)!==0&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):i.kind==="finite"?Number.isFinite(e.data)||(o=this._getOrReturnCtx(e,o),P(o,{code:$.not_finite,message:i.message}),r.dirty()):re.assertNever(i);return{status:r.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,o,r){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:o,message:U.toString(r)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:U.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:U.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:U.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:U.toString(e)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&re.isInteger(e.value))}get isFinite(){let e=null,n=null;for(let o of this._def.checks){if(o.kind==="finite"||o.kind==="int"||o.kind==="multipleOf")return!0;o.kind==="min"?(n===null||o.value>n)&&(n=o.value):o.kind==="max"&&(e===null||o.value<e)&&(e=o.value)}return Number.isFinite(n)&&Number.isFinite(e)}};ba.create=t=>new ba({checks:[],typeName:w.ZodNumber,coerce:t?.coerce||!1,...G(t)});var ka=class t extends Q{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==C.bigint)return this._getInvalidInput(e);let o,r=new Ze;for(let i of this._def.checks)i.kind==="min"?(i.inclusive?e.data<i.value:e.data<=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_small,type:"bigint",minimum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):i.kind==="max"?(i.inclusive?e.data>i.value:e.data>=i.value)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.too_big,type:"bigint",maximum:i.value,inclusive:i.inclusive,message:i.message}),r.dirty()):i.kind==="multipleOf"?e.data%i.value!==BigInt(0)&&(o=this._getOrReturnCtx(e,o),P(o,{code:$.not_multiple_of,multipleOf:i.value,message:i.message}),r.dirty()):re.assertNever(i);return{status:r.value,value:e.data}}_getInvalidInput(e){let n=this._getOrReturnCtx(e);return P(n,{code:$.invalid_type,expected:C.bigint,received:n.parsedType}),V}gte(e,n){return this.setLimit("min",e,!0,U.toString(n))}gt(e,n){return this.setLimit("min",e,!1,U.toString(n))}lte(e,n){return this.setLimit("max",e,!0,U.toString(n))}lt(e,n){return this.setLimit("max",e,!1,U.toString(n))}setLimit(e,n,o,r){return new t({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:o,message:U.toString(r)}]})}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:U.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:U.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:U.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:U.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:U.toString(n)})}get minValue(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}};ka.create=t=>new ka({checks:[],typeName:w.ZodBigInt,coerce:t?.coerce??!1,...G(t)});var xa=class extends Q{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==C.boolean){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:C.boolean,received:o.parsedType}),V}return Je(e.data)}};xa.create=t=>new xa({typeName:w.ZodBoolean,coerce:t?.coerce||!1,...G(t)});var Sa=class t extends Q{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==C.date){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_type,expected:C.date,received:i.parsedType}),V}if(Number.isNaN(e.data.getTime())){let i=this._getOrReturnCtx(e);return P(i,{code:$.invalid_date}),V}let o=new Ze,r;for(let i of this._def.checks)i.kind==="min"?e.data.getTime()<i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_small,message:i.message,inclusive:!0,exact:!1,minimum:i.value,type:"date"}),o.dirty()):i.kind==="max"?e.data.getTime()>i.value&&(r=this._getOrReturnCtx(e,r),P(r,{code:$.too_big,message:i.message,inclusive:!0,exact:!1,maximum:i.value,type:"date"}),o.dirty()):re.assertNever(i);return{status:o.value,value:new Date(e.data.getTime())}}_addCheck(e){return new t({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:U.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:U.toString(n)})}get minDate(){let e=null;for(let n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(let n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}};Sa.create=t=>new Sa({checks:[],coerce:t?.coerce||!1,typeName:w.ZodDate,...G(t)});var $a=class extends Q{_parse(e){if(this._getType(e)!==C.symbol){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:C.symbol,received:o.parsedType}),V}return Je(e.data)}};$a.create=t=>new $a({typeName:w.ZodSymbol,...G(t)});var mo=class extends Q{_parse(e){if(this._getType(e)!==C.undefined){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:C.undefined,received:o.parsedType}),V}return Je(e.data)}};mo.create=t=>new mo({typeName:w.ZodUndefined,...G(t)});var fo=class extends Q{_parse(e){if(this._getType(e)!==C.null){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:C.null,received:o.parsedType}),V}return Je(e.data)}};fo.create=t=>new fo({typeName:w.ZodNull,...G(t)});var Ia=class extends Q{constructor(){super(...arguments),this._any=!0}_parse(e){return Je(e.data)}};Ia.create=t=>new Ia({typeName:w.ZodAny,...G(t)});var Er=class extends Q{constructor(){super(...arguments),this._unknown=!0}_parse(e){return Je(e.data)}};Er.create=t=>new Er({typeName:w.ZodUnknown,...G(t)});var qt=class extends Q{_parse(e){let n=this._getOrReturnCtx(e);return P(n,{code:$.invalid_type,expected:C.never,received:n.parsedType}),V}};qt.create=t=>new qt({typeName:w.ZodNever,...G(t)});var wa=class extends Q{_parse(e){if(this._getType(e)!==C.undefined){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:C.void,received:o.parsedType}),V}return Je(e.data)}};wa.create=t=>new wa({typeName:w.ZodVoid,...G(t)});var Tr=class t extends Q{_parse(e){let{ctx:n,status:o}=this._processInputParams(e),r=this._def;if(n.parsedType!==C.array)return P(n,{code:$.invalid_type,expected:C.array,received:n.parsedType}),V;if(r.exactLength!==null){let a=n.data.length>r.exactLength.value,c=n.data.length<r.exactLength.value;(a||c)&&(P(n,{code:a?$.too_big:$.too_small,minimum:c?r.exactLength.value:void 0,maximum:a?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),o.dirty())}if(r.minLength!==null&&n.data.length<r.minLength.value&&(P(n,{code:$.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),o.dirty()),r.maxLength!==null&&n.data.length>r.maxLength.value&&(P(n,{code:$.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),o.dirty()),n.common.async)return Promise.all([...n.data].map((a,c)=>r.type._parseAsync(new vt(n,a,n.path,c)))).then(a=>Ze.mergeArray(o,a));let i=[...n.data].map((a,c)=>r.type._parseSync(new vt(n,a,n.path,c)));return Ze.mergeArray(o,i)}get element(){return this._def.type}min(e,n){return new t({...this._def,minLength:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxLength:{value:e,message:U.toString(n)}})}length(e,n){return new t({...this._def,exactLength:{value:e,message:U.toString(n)}})}nonempty(e){return this.min(1,e)}};Tr.create=(t,e)=>new Tr({type:t,minLength:null,maxLength:null,exactLength:null,typeName:w.ZodArray,...G(e)});function lo(t){if(t instanceof ft){let e={};for(let n in t.shape){let o=t.shape[n];e[n]=Pt.create(lo(o))}return new ft({...t._def,shape:()=>e})}else return t instanceof Tr?new Tr({...t._def,type:lo(t.element)}):t instanceof Pt?Pt.create(lo(t.unwrap())):t instanceof rr?rr.create(lo(t.unwrap())):t instanceof tr?tr.create(t.items.map(e=>lo(e))):t}var ft=class t extends Q{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let e=this._def.shape(),n=re.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==C.object){let d=this._getOrReturnCtx(e);return P(d,{code:$.invalid_type,expected:C.object,received:d.parsedType}),V}let{status:o,ctx:r}=this._processInputParams(e),{shape:i,keys:a}=this._getCached(),c=[];if(!(this._def.catchall instanceof qt&&this._def.unknownKeys==="strip"))for(let d in r.data)a.includes(d)||c.push(d);let u=[];for(let d of a){let l=i[d],p=r.data[d];u.push({key:{status:"valid",value:d},value:l._parse(new vt(r,p,r.path,d)),alwaysSet:d in r.data})}if(this._def.catchall instanceof qt){let d=this._def.unknownKeys;if(d==="passthrough")for(let l of c)u.push({key:{status:"valid",value:l},value:{status:"valid",value:r.data[l]}});else if(d==="strict")c.length>0&&(P(r,{code:$.unrecognized_keys,keys:c}),o.dirty());else if(d!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let d=this._def.catchall;for(let l of c){let p=r.data[l];u.push({key:{status:"valid",value:l},value:d._parse(new vt(r,p,r.path,l)),alwaysSet:l in r.data})}}return r.common.async?Promise.resolve().then(async()=>{let d=[];for(let l of u){let p=await l.key,m=await l.value;d.push({key:p,value:m,alwaysSet:l.alwaysSet})}return d}).then(d=>Ze.mergeObjectSync(o,d)):Ze.mergeObjectSync(o,u)}get shape(){return this._def.shape()}strict(e){return U.errToObj,new t({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,o)=>{let r=this._def.errorMap?.(n,o).message??o.defaultError;return n.code==="unrecognized_keys"?{message:U.errToObj(e).message??r}:{message:r}}}:{}})}strip(){return new t({...this._def,unknownKeys:"strip"})}passthrough(){return new t({...this._def,unknownKeys:"passthrough"})}extend(e){return new t({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new t({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:w.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new t({...this._def,catchall:e})}pick(e){let n={};for(let o of re.objectKeys(e))e[o]&&this.shape[o]&&(n[o]=this.shape[o]);return new t({...this._def,shape:()=>n})}omit(e){let n={};for(let o of re.objectKeys(this.shape))e[o]||(n[o]=this.shape[o]);return new t({...this._def,shape:()=>n})}deepPartial(){return lo(this)}partial(e){let n={};for(let o of re.objectKeys(this.shape)){let r=this.shape[o];e&&!e[o]?n[o]=r:n[o]=r.optional()}return new t({...this._def,shape:()=>n})}required(e){let n={};for(let o of re.objectKeys(this.shape))if(e&&!e[o])n[o]=this.shape[o];else{let i=this.shape[o];for(;i instanceof Pt;)i=i._def.innerType;n[o]=i}return new t({...this._def,shape:()=>n})}keyof(){return Dx(re.objectKeys(this.shape))}};ft.create=(t,e)=>new ft({shape:()=>t,unknownKeys:"strip",catchall:qt.create(),typeName:w.ZodObject,...G(e)});ft.strictCreate=(t,e)=>new ft({shape:()=>t,unknownKeys:"strict",catchall:qt.create(),typeName:w.ZodObject,...G(e)});ft.lazycreate=(t,e)=>new ft({shape:t,unknownKeys:"strip",catchall:qt.create(),typeName:w.ZodObject,...G(e)});var ho=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o=this._def.options;function r(i){for(let c of i)if(c.result.status==="valid")return c.result;for(let c of i)if(c.result.status==="dirty")return n.common.issues.push(...c.ctx.common.issues),c.result;let a=i.map(c=>new mt(c.ctx.common.issues));return P(n,{code:$.invalid_union,unionErrors:a}),V}if(n.common.async)return Promise.all(o.map(async i=>{let a={...n,common:{...n.common,issues:[]},parent:null};return{result:await i._parseAsync({data:n.data,path:n.path,parent:a}),ctx:a}})).then(r);{let i,a=[];for(let u of o){let d={...n,common:{...n.common,issues:[]},parent:null},l=u._parseSync({data:n.data,path:n.path,parent:d});if(l.status==="valid")return l;l.status==="dirty"&&!i&&(i={result:l,ctx:d}),d.common.issues.length&&a.push(d.common.issues)}if(i)return n.common.issues.push(...i.ctx.common.issues),i.result;let c=a.map(u=>new mt(u));return P(n,{code:$.invalid_union,unionErrors:c}),V}}get options(){return this._def.options}};ho.create=(t,e)=>new ho({options:t,typeName:w.ZodUnion,...G(e)});var er=t=>t instanceof _o?er(t.schema):t instanceof Rt?er(t.innerType()):t instanceof yo?[t.value]:t instanceof vo?t.options:t instanceof bo?re.objectValues(t.enum):t instanceof ko?er(t._def.innerType):t instanceof mo?[void 0]:t instanceof fo?[null]:t instanceof Pt?[void 0,...er(t.unwrap())]:t instanceof rr?[null,...er(t.unwrap())]:t instanceof jl||t instanceof So?er(t.unwrap()):t instanceof xo?er(t._def.innerType):[],Wh=class t extends Q{_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==C.object)return P(n,{code:$.invalid_type,expected:C.object,received:n.parsedType}),V;let o=this.discriminator,r=n.data[o],i=this.optionsMap.get(r);return i?n.common.async?i._parseAsync({data:n.data,path:n.path,parent:n}):i._parseSync({data:n.data,path:n.path,parent:n}):(P(n,{code:$.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[o]}),V)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(e,n,o){let r=new Map;for(let i of n){let a=er(i.shape[e]);if(!a.length)throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);for(let c of a){if(r.has(c))throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(c)}`);r.set(c,i)}}return new t({typeName:w.ZodDiscriminatedUnion,discriminator:e,options:n,optionsMap:r,...G(o)})}};function Jh(t,e){let n=Qt(t),o=Qt(e);if(t===e)return{valid:!0,data:t};if(n===C.object&&o===C.object){let r=re.objectKeys(e),i=re.objectKeys(t).filter(c=>r.indexOf(c)!==-1),a={...t,...e};for(let c of i){let u=Jh(t[c],e[c]);if(!u.valid)return{valid:!1};a[c]=u.data}return{valid:!0,data:a}}else if(n===C.array&&o===C.array){if(t.length!==e.length)return{valid:!1};let r=[];for(let i=0;i<t.length;i++){let a=t[i],c=e[i],u=Jh(a,c);if(!u.valid)return{valid:!1};r.push(u.data)}return{valid:!0,data:r}}else return n===C.date&&o===C.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}var go=class extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e),r=(i,a)=>{if(Hh(i)||Hh(a))return V;let c=Jh(i.value,a.value);return c.valid?((Kh(i)||Kh(a))&&n.dirty(),{status:n.value,value:c.data}):(P(o,{code:$.invalid_intersection_types}),V)};return o.common.async?Promise.all([this._def.left._parseAsync({data:o.data,path:o.path,parent:o}),this._def.right._parseAsync({data:o.data,path:o.path,parent:o})]).then(([i,a])=>r(i,a)):r(this._def.left._parseSync({data:o.data,path:o.path,parent:o}),this._def.right._parseSync({data:o.data,path:o.path,parent:o}))}};go.create=(t,e,n)=>new go({left:t,right:e,typeName:w.ZodIntersection,...G(n)});var tr=class t extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==C.array)return P(o,{code:$.invalid_type,expected:C.array,received:o.parsedType}),V;if(o.data.length<this._def.items.length)return P(o,{code:$.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),V;!this._def.rest&&o.data.length>this._def.items.length&&(P(o,{code:$.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());let i=[...o.data].map((a,c)=>{let u=this._def.items[c]||this._def.rest;return u?u._parse(new vt(o,a,o.path,c)):null}).filter(a=>!!a);return o.common.async?Promise.all(i).then(a=>Ze.mergeArray(n,a)):Ze.mergeArray(n,i)}get items(){return this._def.items}rest(e){return new t({...this._def,rest:e})}};tr.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new tr({items:t,typeName:w.ZodTuple,rest:null,...G(e)})};var Yh=class t extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==C.object)return P(o,{code:$.invalid_type,expected:C.object,received:o.parsedType}),V;let r=[],i=this._def.keyType,a=this._def.valueType;for(let c in o.data)r.push({key:i._parse(new vt(o,c,o.path,c)),value:a._parse(new vt(o,o.data[c],o.path,c)),alwaysSet:c in o.data});return o.common.async?Ze.mergeObjectAsync(n,r):Ze.mergeObjectSync(n,r)}get element(){return this._def.valueType}static create(e,n,o){return n instanceof Q?new t({keyType:e,valueType:n,typeName:w.ZodRecord,...G(o)}):new t({keyType:po.create(),valueType:e,typeName:w.ZodRecord,...G(n)})}},Ea=class extends Q{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==C.map)return P(o,{code:$.invalid_type,expected:C.map,received:o.parsedType}),V;let r=this._def.keyType,i=this._def.valueType,a=[...o.data.entries()].map(([c,u],d)=>({key:r._parse(new vt(o,c,o.path,[d,"key"])),value:i._parse(new vt(o,u,o.path,[d,"value"]))}));if(o.common.async){let c=new Map;return Promise.resolve().then(async()=>{for(let u of a){let d=await u.key,l=await u.value;if(d.status==="aborted"||l.status==="aborted")return V;(d.status==="dirty"||l.status==="dirty")&&n.dirty(),c.set(d.value,l.value)}return{status:n.value,value:c}})}else{let c=new Map;for(let u of a){let d=u.key,l=u.value;if(d.status==="aborted"||l.status==="aborted")return V;(d.status==="dirty"||l.status==="dirty")&&n.dirty(),c.set(d.value,l.value)}return{status:n.value,value:c}}}};Ea.create=(t,e,n)=>new Ea({valueType:e,keyType:t,typeName:w.ZodMap,...G(n)});var Ta=class t extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==C.set)return P(o,{code:$.invalid_type,expected:C.set,received:o.parsedType}),V;let r=this._def;r.minSize!==null&&o.data.size<r.minSize.value&&(P(o,{code:$.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),n.dirty()),r.maxSize!==null&&o.data.size>r.maxSize.value&&(P(o,{code:$.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),n.dirty());let i=this._def.valueType;function a(u){let d=new Set;for(let l of u){if(l.status==="aborted")return V;l.status==="dirty"&&n.dirty(),d.add(l.value)}return{status:n.value,value:d}}let c=[...o.data.values()].map((u,d)=>i._parse(new vt(o,u,o.path,d)));return o.common.async?Promise.all(c).then(u=>a(u)):a(c)}min(e,n){return new t({...this._def,minSize:{value:e,message:U.toString(n)}})}max(e,n){return new t({...this._def,maxSize:{value:e,message:U.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}};Ta.create=(t,e)=>new Ta({valueType:t,minSize:null,maxSize:null,typeName:w.ZodSet,...G(e)});var Xh=class t extends Q{constructor(){super(...arguments),this.validate=this.implement}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==C.function)return P(n,{code:$.invalid_type,expected:C.function,received:n.parsedType}),V;function o(c,u){return Dl({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ya(),wr].filter(d=>!!d),issueData:{code:$.invalid_arguments,argumentsError:u}})}function r(c,u){return Dl({data:c,path:n.path,errorMaps:[n.common.contextualErrorMap,n.schemaErrorMap,ya(),wr].filter(d=>!!d),issueData:{code:$.invalid_return_type,returnTypeError:u}})}let i={errorMap:n.common.contextualErrorMap},a=n.data;if(this._def.returns instanceof tn){let c=this;return Je(async function(...u){let d=new mt([]),l=await c._def.args.parseAsync(u,i).catch(f=>{throw d.addIssue(o(u,f)),d}),p=await Reflect.apply(a,this,l);return await c._def.returns._def.type.parseAsync(p,i).catch(f=>{throw d.addIssue(r(p,f)),d})})}else{let c=this;return Je(function(...u){let d=c._def.args.safeParse(u,i);if(!d.success)throw new mt([o(u,d.error)]);let l=Reflect.apply(a,this,d.data),p=c._def.returns.safeParse(l,i);if(!p.success)throw new mt([r(l,p.error)]);return p.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...e){return new t({...this._def,args:tr.create(e).rest(Er.create())})}returns(e){return new t({...this._def,returns:e})}implement(e){return this.parse(e)}strictImplement(e){return this.parse(e)}static create(e,n,o){return new t({args:e||tr.create([]).rest(Er.create()),returns:n||Er.create(),typeName:w.ZodFunction,...G(o)})}},_o=class extends Q{get schema(){return this._def.getter()}_parse(e){let{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}};_o.create=(t,e)=>new _o({getter:t,typeName:w.ZodLazy,...G(e)});var yo=class extends Q{_parse(e){if(e.data!==this._def.value){let n=this._getOrReturnCtx(e);return P(n,{received:n.data,code:$.invalid_literal,expected:this._def.value}),V}return{status:"valid",value:e.data}}get value(){return this._def.value}};yo.create=(t,e)=>new yo({value:t,typeName:w.ZodLiteral,...G(e)});function Dx(t,e){return new vo({values:t,typeName:w.ZodEnum,...G(e)})}var vo=class t extends Q{_parse(e){if(typeof e.data!="string"){let n=this._getOrReturnCtx(e),o=this._def.values;return P(n,{expected:re.joinValues(o),received:n.parsedType,code:$.invalid_type}),V}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){let n=this._getOrReturnCtx(e),o=this._def.values;return P(n,{received:n.data,code:$.invalid_enum_value,options:o}),V}return Je(e.data)}get options(){return this._def.values}get enum(){let e={};for(let n of this._def.values)e[n]=n;return e}get Values(){let e={};for(let n of this._def.values)e[n]=n;return e}get Enum(){let e={};for(let n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return t.create(e,{...this._def,...n})}exclude(e,n=this._def){return t.create(this.options.filter(o=>!e.includes(o)),{...this._def,...n})}};vo.create=Dx;var bo=class extends Q{_parse(e){let n=re.getValidEnumValues(this._def.values),o=this._getOrReturnCtx(e);if(o.parsedType!==C.string&&o.parsedType!==C.number){let r=re.objectValues(n);return P(o,{expected:re.joinValues(r),received:o.parsedType,code:$.invalid_type}),V}if(this._cache||(this._cache=new Set(re.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){let r=re.objectValues(n);return P(o,{received:o.data,code:$.invalid_enum_value,options:r}),V}return Je(e.data)}get enum(){return this._def.values}};bo.create=(t,e)=>new bo({values:t,typeName:w.ZodNativeEnum,...G(e)});var tn=class extends Q{unwrap(){return this._def.type}_parse(e){let{ctx:n}=this._processInputParams(e);if(n.parsedType!==C.promise&&n.common.async===!1)return P(n,{code:$.invalid_type,expected:C.promise,received:n.parsedType}),V;let o=n.parsedType===C.promise?n.data:Promise.resolve(n.data);return Je(o.then(r=>this._def.type.parseAsync(r,{path:n.path,errorMap:n.common.contextualErrorMap})))}};tn.create=(t,e)=>new tn({type:t,typeName:w.ZodPromise,...G(e)});var Rt=class extends Q{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===w.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){let{status:n,ctx:o}=this._processInputParams(e),r=this._def.effect||null,i={addIssue:a=>{P(o,a),a.fatal?n.abort():n.dirty()},get path(){return o.path}};if(i.addIssue=i.addIssue.bind(i),r.type==="preprocess"){let a=r.transform(o.data,i);if(o.common.async)return Promise.resolve(a).then(async c=>{if(n.value==="aborted")return V;let u=await this._def.schema._parseAsync({data:c,path:o.path,parent:o});return u.status==="aborted"?V:u.status==="dirty"?uo(u.value):n.value==="dirty"?uo(u.value):u});{if(n.value==="aborted")return V;let c=this._def.schema._parseSync({data:a,path:o.path,parent:o});return c.status==="aborted"?V:c.status==="dirty"?uo(c.value):n.value==="dirty"?uo(c.value):c}}if(r.type==="refinement"){let a=c=>{let u=r.refinement(c,i);if(o.common.async)return Promise.resolve(u);if(u instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return c};if(o.common.async===!1){let c=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});return c.status==="aborted"?V:(c.status==="dirty"&&n.dirty(),a(c.value),{status:n.value,value:c.value})}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then(c=>c.status==="aborted"?V:(c.status==="dirty"&&n.dirty(),a(c.value).then(()=>({status:n.value,value:c.value}))))}if(r.type==="transform")if(o.common.async===!1){let a=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(!en(a))return V;let c=r.transform(a.value,i);if(c instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:c}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then(a=>en(a)?Promise.resolve(r.transform(a.value,i)).then(c=>({status:n.value,value:c})):V);re.assertNever(r)}};Rt.create=(t,e,n)=>new Rt({schema:t,typeName:w.ZodEffects,effect:e,...G(n)});Rt.createWithPreprocess=(t,e,n)=>new Rt({schema:e,effect:{type:"preprocess",transform:t},typeName:w.ZodEffects,...G(n)});var Pt=class extends Q{_parse(e){return this._getType(e)===C.undefined?Je(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};Pt.create=(t,e)=>new Pt({innerType:t,typeName:w.ZodOptional,...G(e)});var rr=class extends Q{_parse(e){return this._getType(e)===C.null?Je(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}};rr.create=(t,e)=>new rr({innerType:t,typeName:w.ZodNullable,...G(e)});var ko=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o=n.data;return n.parsedType===C.undefined&&(o=this._def.defaultValue()),this._def.innerType._parse({data:o,path:n.path,parent:n})}removeDefault(){return this._def.innerType}};ko.create=(t,e)=>new ko({innerType:t,typeName:w.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...G(e)});var xo=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o={...n,common:{...n.common,issues:[]}},r=this._def.innerType._parse({data:o.data,path:o.path,parent:{...o}});return va(r)?r.then(i=>({status:"valid",value:i.status==="valid"?i.value:this._def.catchValue({get error(){return new mt(o.common.issues)},input:o.data})})):{status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new mt(o.common.issues)},input:o.data})}}removeCatch(){return this._def.innerType}};xo.create=(t,e)=>new xo({innerType:t,typeName:w.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...G(e)});var Pa=class extends Q{_parse(e){if(this._getType(e)!==C.nan){let o=this._getOrReturnCtx(e);return P(o,{code:$.invalid_type,expected:C.nan,received:o.parsedType}),V}return{status:"valid",value:e.data}}};Pa.create=t=>new Pa({typeName:w.ZodNaN,...G(t)});var jl=class extends Q{_parse(e){let{ctx:n}=this._processInputParams(e),o=n.data;return this._def.type._parse({data:o,path:n.path,parent:n})}unwrap(){return this._def.type}},Ul=class t extends Q{_parse(e){let{status:n,ctx:o}=this._processInputParams(e);if(o.common.async)return(async()=>{let i=await this._def.in._parseAsync({data:o.data,path:o.path,parent:o});return i.status==="aborted"?V:i.status==="dirty"?(n.dirty(),uo(i.value)):this._def.out._parseAsync({data:i.value,path:o.path,parent:o})})();{let r=this._def.in._parseSync({data:o.data,path:o.path,parent:o});return r.status==="aborted"?V:r.status==="dirty"?(n.dirty(),{status:"dirty",value:r.value}):this._def.out._parseSync({data:r.value,path:o.path,parent:o})}}static create(e,n){return new t({in:e,out:n,typeName:w.ZodPipeline})}},So=class extends Q{_parse(e){let n=this._def.innerType._parse(e),o=r=>(en(r)&&(r.value=Object.freeze(r.value)),r);return va(n)?n.then(r=>o(r)):o(n)}unwrap(){return this._def.innerType}};So.create=(t,e)=>new So({innerType:t,typeName:w.ZodReadonly,...G(e)});var X2={object:ft.lazycreate},w;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(w||(w={}));var Q2=po.create,eV=ba.create,tV=Pa.create,rV=ka.create,nV=xa.create,oV=Sa.create,iV=$a.create,aV=mo.create,sV=fo.create,cV=Ia.create,uV=Er.create,lV=qt.create,dV=wa.create,pV=Tr.create,jx=ft.create,mV=ft.strictCreate,fV=ho.create,hV=Wh.create,gV=go.create,_V=tr.create,yV=Yh.create,vV=Ea.create,bV=Ta.create,kV=Xh.create,xV=_o.create,SV=yo.create,$V=vo.create,IV=bo.create,wV=tn.create,EV=Rt.create,TV=Pt.create,PV=rr.create,RV=Rt.createWithPreprocess,OV=Ul.create;var gC=h("ZodMiniType",(t,e)=>{if(!t._zod)throw new Error("Uninitialized schema in ZodMiniType.");B.init(t,e),t.def=e,t.type=e.type,t.parse=(n,o)=>Br(t,n,o,{callee:t.parse}),t.safeParse=(n,o)=>gr(t,n,o),t.parseAsync=async(n,o)=>Hr(t,n,o,{callee:t.parseAsync}),t.safeParseAsync=async(n,o)=>_r(t,n,o),t.check=(...n)=>t.clone({...e,checks:[...e.checks??[],...n.map(o=>typeof o=="function"?{_zod:{check:o,def:{check:"custom"},onattach:[]}}:o)]},{parent:!0}),t.with=t.check,t.clone=(n,o)=>Ae(t,n,o),t.brand=()=>t,t.register=((n,o)=>(n.add(t,o),t)),t.apply=n=>n(t)});var _C=h("ZodMiniObject",(t,e)=>{Ic.init(t,e),gC.init(t,e),W(t,"shape",()=>e.shape)});function Qh(t,e){let n={type:"object",shape:t??{},...I(e)};return new _C(n)}function bt(t){return!!t._zod}function rn(t){let e=Object.values(t);if(e.length===0)return Qh({});let n=e.every(bt),o=e.every(r=>!bt(r));if(n)return Qh(t);if(o)return jx(t);throw new Error("Mixed Zod versions detected in object shape.")}function Pr(t,e){return bt(t)?gr(t,e):t.safeParse(e)}async function Ll(t,e){return bt(t)?await _r(t,e):await t.safeParseAsync(e)}function Rr(t){if(!t)return;let e;if(bt(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function $o(t){if(t){if(typeof t=="object"){let e=t,n=t;if(!e._def&&!n._zod){let o=Object.values(t);if(o.length>0&&o.every(r=>typeof r=="object"&&r!==null&&(r._def!==void 0||r._zod!==void 0||typeof r.parse=="function")))return rn(t)}}if(bt(t)){let n=t._zod?.def;if(n&&(n.type==="object"||n.shape!==void 0))return t}else if(t.shape!==void 0)return t}}function Ml(t){if(t&&typeof t=="object"){if("message"in t&&typeof t.message=="string")return t.message;if("issues"in t&&Array.isArray(t.issues)&&t.issues.length>0){let e=t.issues[0];if(e&&typeof e=="object"&&"message"in e)return String(e.message)}try{return JSON.stringify(t)}catch{return String(t)}}return String(t)}function Ux(t){return t.description}function Lx(t){if(bt(t))return t._zod?.def?.type==="optional";let e=t;return typeof t.isOptional=="function"?t.isOptional():e._def?.typeName==="ZodOptional"}function Zl(t){if(bt(t)){let i=t._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let n=t._def;if(n){if(n.value!==void 0)return n.value;if(Array.isArray(n.values)&&n.values.length>0)return n.values[0]}let o=t.value;if(o!==void 0)return o}function Or(t){return t==="completed"||t==="failed"||t==="cancelled"}var Zx=Symbol("Let zodToJsonSchema decide on which parser to use");var Mx={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"},Fx=t=>typeof t=="string"?{...Mx,name:t}:{...Mx,...t};var Vx=t=>{let e=Fx(t),n=e.name!==void 0?[...e.basePath,e.definitionPath,e.name]:e.basePath;return{...e,flags:{hasReferencedOpenAiAnyType:!1},currentPath:n,propertyPath:void 0,seen:new Map(Object.entries(e.definitions).map(([o,r])=>[r._def,{def:r._def,path:[...e.basePath,e.definitionPath,o],jsonSchema:void 0}]))}};function eg(t,e,n,o){o?.errorMessages&&n&&(t.errorMessage={...t.errorMessage,[e]:n})}function ne(t,e,n,o,r){t[e]=n,eg(t,e,o,r)}var Fl=(t,e)=>{let n=0;for(;n<t.length&&n<e.length&&t[n]===e[n];n++);return[(t.length-n).toString(),...e.slice(n)].join("/")};function Ie(t){if(t.target!=="openAi")return{};let e=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy==="relative"?Fl(e,t.currentPath):e.join("/")}}function qx(t,e){let n={type:"array"};return t.type?._def&&t.type?._def?.typeName!==w.ZodAny&&(n.items=q(t.type._def,{...e,currentPath:[...e.currentPath,"items"]})),t.minLength&&ne(n,"minItems",t.minLength.value,t.minLength.message,e),t.maxLength&&ne(n,"maxItems",t.maxLength.value,t.maxLength.message,e),t.exactLength&&(ne(n,"minItems",t.exactLength.value,t.exactLength.message,e),ne(n,"maxItems",t.exactLength.value,t.exactLength.message,e)),n}function Bx(t,e){let n={type:"integer",format:"int64"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"min":e.target==="jsonSchema7"?o.inclusive?ne(n,"minimum",o.value,o.message,e):ne(n,"exclusiveMinimum",o.value,o.message,e):(o.inclusive||(n.exclusiveMinimum=!0),ne(n,"minimum",o.value,o.message,e));break;case"max":e.target==="jsonSchema7"?o.inclusive?ne(n,"maximum",o.value,o.message,e):ne(n,"exclusiveMaximum",o.value,o.message,e):(o.inclusive||(n.exclusiveMaximum=!0),ne(n,"maximum",o.value,o.message,e));break;case"multipleOf":ne(n,"multipleOf",o.value,o.message,e);break}return n}function Hx(){return{type:"boolean"}}function Vl(t,e){return q(t.type._def,e)}var Kx=(t,e)=>q(t.innerType._def,e);function tg(t,e,n){let o=n??e.dateStrategy;if(Array.isArray(o))return{anyOf:o.map((r,i)=>tg(t,e,r))};switch(o){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return vC(t,e)}}var vC=(t,e)=>{let n={type:"integer",format:"unix-time"};if(e.target==="openApi3")return n;for(let o of t.checks)switch(o.kind){case"min":ne(n,"minimum",o.value,o.message,e);break;case"max":ne(n,"maximum",o.value,o.message,e);break}return n};function Gx(t,e){return{...q(t.innerType._def,e),default:t.defaultValue()}}function Wx(t,e){return e.effectStrategy==="input"?q(t.schema._def,e):Ie(e)}function Jx(t){return{type:"string",enum:Array.from(t.values)}}var bC=t=>"type"in t&&t.type==="string"?!1:"allOf"in t;function Yx(t,e){let n=[q(t.left._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),q(t.right._def,{...e,currentPath:[...e.currentPath,"allOf","1"]})].filter(i=>!!i),o=e.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,r=[];return n.forEach(i=>{if(bC(i))r.push(...i.allOf),i.unevaluatedProperties===void 0&&(o=void 0);else{let a=i;if("additionalProperties"in i&&i.additionalProperties===!1){let{additionalProperties:c,...u}=i;a=u}else o=void 0;r.push(a)}}),r.length?{allOf:r,...o}:void 0}function Xx(t,e){let n=typeof t.value;return n!=="bigint"&&n!=="number"&&n!=="boolean"&&n!=="string"?{type:Array.isArray(t.value)?"array":"object"}:e.target==="openApi3"?{type:n==="bigint"?"integer":n,enum:[t.value]}:{type:n==="bigint"?"integer":n,const:t.value}}var rg,Ot={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(rg===void 0&&(rg=RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$","u")),rg),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/};function ql(t,e){let n={type:"string"};if(t.checks)for(let o of t.checks)switch(o.kind){case"min":ne(n,"minLength",typeof n.minLength=="number"?Math.max(n.minLength,o.value):o.value,o.message,e);break;case"max":ne(n,"maxLength",typeof n.maxLength=="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"email":switch(e.emailStrategy){case"format:email":At(n,"email",o.message,e);break;case"format:idn-email":At(n,"idn-email",o.message,e);break;case"pattern:zod":Ye(n,Ot.email,o.message,e);break}break;case"url":At(n,"uri",o.message,e);break;case"uuid":At(n,"uuid",o.message,e);break;case"regex":Ye(n,o.regex,o.message,e);break;case"cuid":Ye(n,Ot.cuid,o.message,e);break;case"cuid2":Ye(n,Ot.cuid2,o.message,e);break;case"startsWith":Ye(n,RegExp(`^${ng(o.value,e)}`),o.message,e);break;case"endsWith":Ye(n,RegExp(`${ng(o.value,e)}$`),o.message,e);break;case"datetime":At(n,"date-time",o.message,e);break;case"date":At(n,"date",o.message,e);break;case"time":At(n,"time",o.message,e);break;case"duration":At(n,"duration",o.message,e);break;case"length":ne(n,"minLength",typeof n.minLength=="number"?Math.max(n.minLength,o.value):o.value,o.message,e),ne(n,"maxLength",typeof n.maxLength=="number"?Math.min(n.maxLength,o.value):o.value,o.message,e);break;case"includes":{Ye(n,RegExp(ng(o.value,e)),o.message,e);break}case"ip":{o.version!=="v6"&&At(n,"ipv4",o.message,e),o.version!=="v4"&&At(n,"ipv6",o.message,e);break}case"base64url":Ye(n,Ot.base64url,o.message,e);break;case"jwt":Ye(n,Ot.jwt,o.message,e);break;case"cidr":{o.version!=="v6"&&Ye(n,Ot.ipv4Cidr,o.message,e),o.version!=="v4"&&Ye(n,Ot.ipv6Cidr,o.message,e);break}case"emoji":Ye(n,Ot.emoji(),o.message,e);break;case"ulid":{Ye(n,Ot.ulid,o.message,e);break}case"base64":{switch(e.base64Strategy){case"format:binary":{At(n,"binary",o.message,e);break}case"contentEncoding:base64":{ne(n,"contentEncoding","base64",o.message,e);break}case"pattern:zod":{Ye(n,Ot.base64,o.message,e);break}}break}case"nanoid":Ye(n,Ot.nanoid,o.message,e);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return n}function ng(t,e){return e.patternStrategy==="escape"?xC(t):t}var kC=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function xC(t){let e="";for(let n=0;n<t.length;n++)kC.has(t[n])||(e+="\\"),e+=t[n];return e}function At(t,e,n,o){t.format||t.anyOf?.some(r=>r.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format,...t.errorMessage&&o.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage&&(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.anyOf.push({format:e,...n&&o.errorMessages&&{errorMessage:{format:n}}})):ne(t,"format",e,n,o)}function Ye(t,e,n,o){t.pattern||t.allOf?.some(r=>r.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern,...t.errorMessage&&o.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage&&(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.allOf.push({pattern:Qx(e,o),...n&&o.errorMessages&&{errorMessage:{pattern:n}}})):ne(t,"pattern",Qx(e,o),n,o)}function Qx(t,e){if(!e.applyRegexFlags||!t.flags)return t.source;let n={i:t.flags.includes("i"),m:t.flags.includes("m"),s:t.flags.includes("s")},o=n.i?t.source.toLowerCase():t.source,r="",i=!1,a=!1,c=!1;for(let u=0;u<o.length;u++){if(i){r+=o[u],i=!1;continue}if(n.i){if(a){if(o[u].match(/[a-z]/)){c?(r+=o[u],r+=`${o[u-2]}-${o[u]}`.toUpperCase(),c=!1):o[u+1]==="-"&&o[u+2]?.match(/[a-z]/)?(r+=o[u],c=!0):r+=`${o[u]}${o[u].toUpperCase()}`;continue}}else if(o[u].match(/[a-z]/)){r+=`[${o[u]}${o[u].toUpperCase()}]`;continue}}if(n.m){if(o[u]==="^"){r+=`(^|(?<=[\r
|
|
77
77
|
]))`;continue}else if(o[u]==="$"){r+=`($|(?=[\r
|
|
78
78
|
]))`;continue}}if(n.s&&o[u]==="."){r+=a?`${o[u]}\r
|
|
79
79
|
`:`[${o[u]}\r
|
|
80
|
-
]`;continue}r+=o[u],o[u]==="\\"?i=!0:a&&o[u]==="]"?a=!1:!a&&o[u]==="["&&(a=!0)}try{new RegExp(r)}catch{return console.warn(`Could not convert regex pattern at ${e.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),t.source}return r}function Bl(t,e){if(e.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),e.target==="openApi3"&&t.keyType?._def.typeName===w.ZodEnum)return{type:"object",required:t.keyType._def.values,properties:t.keyType._def.values.reduce((o,r)=>({...o,[r]:q(t.valueType._def,{...e,currentPath:[...e.currentPath,"properties",r]})??Ie(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let n={type:"object",additionalProperties:q(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return n;if(t.keyType?._def.typeName===w.ZodString&&t.keyType._def.checks?.length){let{type:o,...r}=ql(t.keyType._def,e);return{...n,propertyNames:r}}else{if(t.keyType?._def.typeName===w.ZodEnum)return{...n,propertyNames:{enum:t.keyType._def.values}};if(t.keyType?._def.typeName===w.ZodBranded&&t.keyType._def.type._def.typeName===w.ZodString&&t.keyType._def.type._def.checks?.length){let{type:o,...r}=Vl(t.keyType._def,e);return{...n,propertyNames:r}}}return n}function eS(t,e){if(e.mapStrategy==="record")return Bl(t,e);let n=q(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||Ie(e),o=q(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||Ie(e);return{type:"array",maxItems:125,items:{type:"array",items:[n,o],minItems:2,maxItems:2}}}function tS(t){let e=t.values,o=Object.keys(t.values).filter(i=>typeof e[e[i]]!="number").map(i=>e[i]),r=Array.from(new Set(o.map(i=>typeof i)));return{type:r.length===1?r[0]==="string"?"string":"number":["string","number"],enum:o}}function rS(t){return t.target==="openAi"?void 0:{not:Ie({...t,currentPath:[...t.currentPath,"not"]})}}function nS(t){return t.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var Ra={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function iS(t,e){if(e.target==="openApi3")return oS(t,e);let n=t.options instanceof Map?Array.from(t.options.values()):t.options;if(n.every(o=>o._def.typeName in Ra&&(!o._def.checks||!o._def.checks.length))){let o=n.reduce((r,i)=>{let a=Ra[i._def.typeName];return a&&!r.includes(a)?[...r,a]:r},[]);return{type:o.length>1?o:o[0]}}else if(n.every(o=>o._def.typeName==="ZodLiteral"&&!o.description)){let o=n.reduce((r,i)=>{let a=typeof i._def.value;switch(a){case"string":case"number":case"boolean":return[...r,a];case"bigint":return[...r,"integer"];case"object":if(i._def.value===null)return[...r,"null"];default:return r}},[]);if(o.length===n.length){let r=o.filter((i,a,c)=>c.indexOf(i)===a);return{type:r.length>1?r:r[0],enum:n.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(n.every(o=>o._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((o,r)=>[...o,...r._def.values.filter(i=>!o.includes(i))],[])};return oS(t,e)}var oS=(t,e)=>{let n=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((o,r)=>q(o._def,{...e,currentPath:[...e.currentPath,"anyOf",`${r}`]})).filter(o=>!!o&&(!e.strictUnions||typeof o=="object"&&Object.keys(o).length>0));return n.length?{anyOf:n}:void 0};function aS(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return e.target==="openApi3"?{type:Ra[t.innerType._def.typeName],nullable:!0}:{type:[Ra[t.innerType._def.typeName],"null"]};if(e.target==="openApi3"){let o=q(t.innerType._def,{...e,currentPath:[...e.currentPath]});return o&&"$ref"in o?{allOf:[o],nullable:!0}:o&&{...o,nullable:!0}}let n=q(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}function sS(t,e){let n={type:"number"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"int":n.type="integer",eg(n,"type",o.message,e);break;case"min":e.target==="jsonSchema7"?o.inclusive?ne(n,"minimum",o.value,o.message,e):ne(n,"exclusiveMinimum",o.value,o.message,e):(o.inclusive||(n.exclusiveMinimum=!0),ne(n,"minimum",o.value,o.message,e));break;case"max":e.target==="jsonSchema7"?o.inclusive?ne(n,"maximum",o.value,o.message,e):ne(n,"exclusiveMaximum",o.value,o.message,e):(o.inclusive||(n.exclusiveMaximum=!0),ne(n,"maximum",o.value,o.message,e));break;case"multipleOf":ne(n,"multipleOf",o.value,o.message,e);break}return n}function cS(t,e){let n=e.target==="openAi",o={type:"object",properties:{}},r=[],i=t.shape();for(let c in i){let u=i[c];if(u===void 0||u._def===void 0)continue;let d=$C(u);d&&n&&(u._def.typeName==="ZodOptional"&&(u=u._def.innerType),u.isNullable()||(u=u.nullable()),d=!1);let l=q(u._def,{...e,currentPath:[...e.currentPath,"properties",c],propertyPath:[...e.currentPath,"properties",c]});l!==void 0&&(o.properties[c]=l,d||r.push(c))}r.length&&(o.required=r);let a=SC(t,e);return a!==void 0&&(o.additionalProperties=a),o}function SC(t,e){if(t.catchall._def.typeName!=="ZodNever")return q(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function $C(t){try{return t.isOptional()}catch{return!0}}var uS=(t,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return q(t.innerType._def,e);let n=q(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return n?{anyOf:[{not:Ie(e)},n]}:Ie(e)};var lS=(t,e)=>{if(e.pipeStrategy==="input")return q(t.in._def,e);if(e.pipeStrategy==="output")return q(t.out._def,e);let n=q(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),o=q(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,o].filter(r=>r!==void 0)}};function dS(t,e){return q(t.type._def,e)}function pS(t,e){let o={type:"array",uniqueItems:!0,items:q(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return t.minSize&&ne(o,"minItems",t.minSize.value,t.minSize.message,e),t.maxSize&&ne(o,"maxItems",t.maxSize.value,t.maxSize.message,e),o}function mS(t,e){return t.rest?{type:"array",minItems:t.items.length,items:t.items.map((n,o)=>q(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[]),additionalItems:q(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((n,o)=>q(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[])}}function fS(t){return{not:Ie(t)}}function hS(t){return Ie(t)}var gS=(t,e)=>q(t.innerType._def,e);var _S=(t,e,n)=>{switch(e){case w.ZodString:return ql(t,n);case w.ZodNumber:return sS(t,n);case w.ZodObject:return cS(t,n);case w.ZodBigInt:return Bx(t,n);case w.ZodBoolean:return Hx();case w.ZodDate:return tg(t,n);case w.ZodUndefined:return fS(n);case w.ZodNull:return nS(n);case w.ZodArray:return qx(t,n);case w.ZodUnion:case w.ZodDiscriminatedUnion:return iS(t,n);case w.ZodIntersection:return Yx(t,n);case w.ZodTuple:return mS(t,n);case w.ZodRecord:return Bl(t,n);case w.ZodLiteral:return Xx(t,n);case w.ZodEnum:return Jx(t);case w.ZodNativeEnum:return tS(t);case w.ZodNullable:return aS(t,n);case w.ZodOptional:return uS(t,n);case w.ZodMap:return eS(t,n);case w.ZodSet:return pS(t,n);case w.ZodLazy:return()=>t.getter()._def;case w.ZodPromise:return dS(t,n);case w.ZodNaN:case w.ZodNever:return rS(n);case w.ZodEffects:return Wx(t,n);case w.ZodAny:return Ie(n);case w.ZodUnknown:return hS(n);case w.ZodDefault:return Gx(t,n);case w.ZodBranded:return Vl(t,n);case w.ZodReadonly:return gS(t,n);case w.ZodCatch:return Kx(t,n);case w.ZodPipeline:return lS(t,n);case w.ZodFunction:case w.ZodVoid:case w.ZodSymbol:return;default:return(o=>{})(e)}};function q(t,e,n=!1){let o=e.seen.get(t);if(e.override){let c=e.override?.(t,e,o,n);if(c!==Zx)return c}if(o&&!n){let c=IC(o,e);if(c!==void 0)return c}let r={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,r);let i=_S(t,t.typeName,e),a=typeof i=="function"?q(i(),e):i;if(a&&wC(t,e,a),e.postProcess){let c=e.postProcess(a,t,e);return r.jsonSchema=a,c}return r.jsonSchema=a,a}var IC=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:Fl(e.currentPath,t.path)};case"none":case"seen":return t.path.length<e.currentPath.length&&t.path.every((n,o)=>e.currentPath[o]===n)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),Ie(e)):e.$refStrategy==="seen"?Ie(e):void 0}},wC=(t,e,n)=>(t.description&&(n.description=t.description,e.markdownDescription&&(n.markdownDescription=t.description)),n);var og=(t,e)=>{let n=Vx(e),o=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((u,[d,l])=>({...u,[d]:q(l._def,{...n,currentPath:[...n.basePath,n.definitionPath,d]},!0)??Ie(n)}),{}):void 0,r=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,i=q(t._def,r===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,r]},!1)??Ie(n),a=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;a!==void 0&&(i.title=a),n.flags.hasReferencedOpenAiAnyType&&(o||(o={}),o[n.openAiAnyTypeName]||(o[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}));let c=r===void 0?o?{...i,[n.definitionPath]:o}:i:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,r].join("/"),[n.definitionPath]:{...o,[r]:i}};return n.target==="jsonSchema7"?c.$schema="http://json-schema.org/draft-07/schema#":(n.target==="jsonSchema2019-09"||n.target==="openAi")&&(c.$schema="https://json-schema.org/draft/2019-09/schema#"),n.target==="openAi"&&("anyOf"in c||"oneOf"in c||"allOf"in c||"type"in c&&Array.isArray(c.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),c};function EC(t){return!t||t==="jsonSchema7"||t==="draft-7"?"draft-7":t==="jsonSchema2019-09"||t==="draft-2020-12"?"draft-2020-12":"draft-7"}function ig(t,e){return bt(t)?Xr(t,{target:EC(e?.target),io:e?.pipeStrategy??"input"}):og(t,{strictUnions:e?.strictUnions??!0,pipeStrategy:e?.pipeStrategy??"input"})}function ag(t){let n=Rr(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let o=Zl(n);if(typeof o!="string")throw new Error("Schema method literal must be a string");return o}function sg(t,e){let n=Pr(t,e);if(!n.success)throw n.error;return n.data}var TC=6e4,Hl=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(_l,n=>{this._oncancel(n)}),this.setNotificationHandler(vl,n=>{this._onprogress(n)}),this.setRequestHandler(yl,n=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(bl,async(n,o)=>{let r=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!r)throw new M(F.InvalidParams,"Failed to retrieve task: Task not found");return{...r}}),this.setRequestHandler(xl,async(n,o)=>{let r=async()=>{let i=n.params.taskId;if(this._taskMessageQueue){let c;for(;c=await this._taskMessageQueue.dequeue(i,o.sessionId);){if(c.type==="response"||c.type==="error"){let u=c.message,d=u.id,l=this._requestResolvers.get(d);if(l)if(this._requestResolvers.delete(d),c.type==="response")l(u);else{let p=u,m=new M(p.error.code,p.error.message,p.error.data);l(m)}else{let p=c.type==="response"?"Response":"Error";this._onerror(new Error(`${p} handler missing for request ${d}`))}continue}await this._transport?.send(c.message,{relatedRequestId:o.requestId})}}let a=await this._taskStore.getTask(i,o.sessionId);if(!a)throw new M(F.InvalidParams,`Task not found: ${i}`);if(!Or(a.status))return await this._waitForTaskUpdate(i,o.signal),await r();if(Or(a.status)){let c=await this._taskStore.getTaskResult(i,o.sessionId);return this._clearTaskQueue(i),{...c,_meta:{...c._meta,[Ir]:{taskId:i}}}}return await r()};return await r()}),this.setRequestHandler(Sl,async(n,o)=>{try{let{tasks:r,nextCursor:i}=await this._taskStore.listTasks(n.params?.cursor,o.sessionId);return{tasks:r,nextCursor:i,_meta:{}}}catch(r){throw new M(F.InvalidParams,`Failed to list tasks: ${r instanceof Error?r.message:String(r)}`)}}),this.setRequestHandler(Il,async(n,o)=>{try{let r=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!r)throw new M(F.InvalidParams,`Task not found: ${n.params.taskId}`);if(Or(r.status))throw new M(F.InvalidParams,`Cannot cancel task in terminal status: ${r.status}`);await this._taskStore.updateTaskStatus(n.params.taskId,"cancelled","Client cancelled task execution.",o.sessionId),this._clearTaskQueue(n.params.taskId);let i=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!i)throw new M(F.InvalidParams,`Task not found after cancellation: ${n.params.taskId}`);return{_meta:{},...i}}catch(r){throw r instanceof M?r:new M(F.InvalidRequest,`Failed to cancel task: ${r instanceof Error?r.message:String(r)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,n,o,r,i=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(r,n),startTime:Date.now(),timeout:n,maxTotalTimeout:o,resetTimeoutOnProgress:i,onTimeout:r})}_resetTimeout(e){let n=this._timeoutInfo.get(e);if(!n)return!1;let o=Date.now()-n.startTime;if(n.maxTotalTimeout&&o>=n.maxTotalTimeout)throw this._timeoutInfo.delete(e),M.fromError(F.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:n.maxTotalTimeout,totalElapsed:o});return clearTimeout(n.timeoutId),n.timeoutId=setTimeout(n.onTimeout,n.timeout),!0}_cleanupTimeout(e){let n=this._timeoutInfo.get(e);n&&(clearTimeout(n.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=e;let n=this.transport?.onclose;this._transport.onclose=()=>{n?.(),this._onclose()};let o=this.transport?.onerror;this._transport.onerror=i=>{o?.(i),this._onerror(i)};let r=this._transport?.onmessage;this._transport.onmessage=(i,a)=>{r?.(i,a),ua(i)||vx(i)?this._onresponse(i):Ah(i)?this._onrequest(i,a):yx(i)?this._onnotification(i):this._onerror(new Error(`Unknown message type: ${JSON.stringify(i)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let o of this._timeoutInfo.values())clearTimeout(o.timeoutId);this._timeoutInfo.clear();for(let o of this._requestHandlerAbortControllers.values())o.abort();this._requestHandlerAbortControllers.clear();let n=M.fromError(F.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let o of e.values())o(n)}_onerror(e){this.onerror?.(e)}_onnotification(e){let n=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;n!==void 0&&Promise.resolve().then(()=>n(e)).catch(o=>this._onerror(new Error(`Uncaught error in notification handler: ${o}`)))}_onrequest(e,n){let o=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,r=this._transport,i=e.params?._meta?.[Ir]?.taskId;if(o===void 0){let l={jsonrpc:"2.0",id:e.id,error:{code:F.MethodNotFound,message:"Method not found"}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:"error",message:l,timestamp:Date.now()},r?.sessionId).catch(p=>this._onerror(new Error(`Failed to enqueue error response: ${p}`))):r?.send(l).catch(p=>this._onerror(new Error(`Failed to send an error response: ${p}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a);let c=hx(e.params)?e.params.task:void 0,u=this._taskStore?this.requestTaskStore(e,r?.sessionId):void 0,d={signal:a.signal,sessionId:r?.sessionId,_meta:e.params?._meta,sendNotification:async l=>{if(a.signal.aborted)return;let p={relatedRequestId:e.id};i&&(p.relatedTask={taskId:i}),await this.notification(l,p)},sendRequest:async(l,p,m)=>{if(a.signal.aborted)throw new M(F.ConnectionClosed,"Request was cancelled");let f={...m,relatedRequestId:e.id};i&&!f.relatedTask&&(f.relatedTask={taskId:i});let g=f.relatedTask?.taskId??i;return g&&u&&await u.updateTaskStatus(g,"input_required"),await this.request(l,p,f)},authInfo:n?.authInfo,requestId:e.id,requestInfo:n?.requestInfo,taskId:i,taskStore:u,taskRequestedTtl:c?.ttl,closeSSEStream:n?.closeSSEStream,closeStandaloneSSEStream:n?.closeStandaloneSSEStream};Promise.resolve().then(()=>{c&&this.assertTaskHandlerCapability(e.method)}).then(()=>o(e,d)).then(async l=>{if(a.signal.aborted)return;let p={result:l,jsonrpc:"2.0",id:e.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"response",message:p,timestamp:Date.now()},r?.sessionId):await r?.send(p)},async l=>{if(a.signal.aborted)return;let p={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(l.code)?l.code:F.InternalError,message:l.message??"Internal error",...l.data!==void 0&&{data:l.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"error",message:p,timestamp:Date.now()},r?.sessionId):await r?.send(p)}).catch(l=>this._onerror(new Error(`Failed to send response: ${l}`))).finally(()=>{this._requestHandlerAbortControllers.get(e.id)===a&&this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:n,...o}=e.params,r=Number(n),i=this._progressHandlers.get(r);if(!i){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let a=this._responseHandlers.get(r),c=this._timeoutInfo.get(r);if(c&&a&&c.resetTimeoutOnProgress)try{this._resetTimeout(r)}catch(u){this._responseHandlers.delete(r),this._progressHandlers.delete(r),this._cleanupTimeout(r),a(u);return}i(o)}_onresponse(e){let n=Number(e.id),o=this._requestResolvers.get(n);if(o){if(this._requestResolvers.delete(n),ua(e))o(e);else{let a=new M(e.error.code,e.error.message,e.error.data);o(a)}return}let r=this._responseHandlers.get(n);if(r===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(n),this._cleanupTimeout(n);let i=!1;if(ua(e)&&e.result&&typeof e.result=="object"){let a=e.result;if(a.task&&typeof a.task=="object"){let c=a.task;typeof c.taskId=="string"&&(i=!0,this._taskProgressTokens.set(c.taskId,n))}}if(i||this._progressHandlers.delete(n),ua(e))r(e);else{let a=M.fromError(e.error.code,e.error.message,e.error.data);r(a)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,n,o){let{task:r}=o??{};if(!r){try{yield{type:"result",result:await this.request(e,n,o)}}catch(a){yield{type:"error",error:a instanceof M?a:new M(F.InternalError,String(a))}}return}let i;try{let a=await this.request(e,io,o);if(a.task)i=a.task.taskId,yield{type:"taskCreated",task:a.task};else throw new M(F.InternalError,"Task creation did not return a task");for(;;){let c=await this.getTask({taskId:i},o);if(yield{type:"taskStatus",task:c},Or(c.status)){c.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:i},n,o)}:c.status==="failed"?yield{type:"error",error:new M(F.InternalError,`Task ${i} failed`)}:c.status==="cancelled"&&(yield{type:"error",error:new M(F.InternalError,`Task ${i} was cancelled`)});return}if(c.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:i},n,o)};return}let u=c.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(d=>setTimeout(d,u)),o?.signal?.throwIfAborted()}}catch(a){yield{type:"error",error:a instanceof M?a:new M(F.InternalError,String(a))}}}request(e,n,o){let{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a,task:c,relatedTask:u}=o??{};return new Promise((d,l)=>{let p=N=>{l(N)};if(!this._transport){p(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),c&&this.assertTaskCapability(e.method)}catch(N){p(N);return}o?.signal?.throwIfAborted();let m=this._requestMessageId++,f={...e,jsonrpc:"2.0",id:m};o?.onprogress&&(this._progressHandlers.set(m,o.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:m}}),c&&(f.params={...f.params,task:c}),u&&(f.params={...f.params,_meta:{...f.params?._meta||{},[Ir]:u}});let g=N=>{this._responseHandlers.delete(m),this._progressHandlers.delete(m),this._cleanupTimeout(m),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:m,reason:String(N)}},{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(j=>this._onerror(new Error(`Failed to send cancellation: ${j}`)));let z=N instanceof M?N:new M(F.RequestTimeout,String(N));l(z)};this._responseHandlers.set(m,N=>{if(!o?.signal?.aborted){if(N instanceof Error)return l(N);try{let z=Pr(n,N.result);z.success?d(z.data):l(z.error)}catch(z){l(z)}}}),o?.signal?.addEventListener("abort",()=>{g(o?.signal?.reason)});let v=o?.timeout??TC,b=()=>g(M.fromError(F.RequestTimeout,"Request timed out",{timeout:v}));this._setupTimeout(m,v,o?.maxTotalTimeout,b,o?.resetTimeoutOnProgress??!1);let E=u?.taskId;if(E){let N=z=>{let j=this._responseHandlers.get(m);j?j(z):this._onerror(new Error(`Response handler missing for side-channeled request ${m}`))};this._requestResolvers.set(m,N),this._enqueueTaskMessage(E,{type:"request",message:f,timestamp:Date.now()}).catch(z=>{this._cleanupTimeout(m),l(z)})}else this._transport.send(f,{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(N=>{this._cleanupTimeout(m),l(N)})})}async getTask(e,n){return this.request({method:"tasks/get",params:e},kl,n)}async getTaskResult(e,n,o){return this.request({method:"tasks/result",params:e},n,o)}async listTasks(e,n){return this.request({method:"tasks/list",params:e},$l,n)}async cancelTask(e,n){return this.request({method:"tasks/cancel",params:e},xx,n)}async notification(e,n){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let o=n?.relatedTask?.taskId;if(o){let c={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[Ir]:n.relatedTask}}};await this._enqueueTaskMessage(o,{type:"notification",message:c,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!n?.relatedRequestId&&!n?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let c={...e,jsonrpc:"2.0"};n?.relatedTask&&(c={...c,params:{...c.params,_meta:{...c.params?._meta||{},[Ir]:n.relatedTask}}}),this._transport?.send(c,n).catch(u=>this._onerror(u))});return}let a={...e,jsonrpc:"2.0"};n?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[Ir]:n.relatedTask}}}),await this._transport.send(a,n)}setRequestHandler(e,n){let o=ag(e);this.assertRequestHandlerCapability(o),this._requestHandlers.set(o,(r,i)=>{let a=sg(e,r);return Promise.resolve(n(a,i))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,n){let o=ag(e);this._notificationHandlers.set(o,r=>{let i=sg(e,r);return Promise.resolve(n(i))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let n=this._taskProgressTokens.get(e);n!==void 0&&(this._progressHandlers.delete(n),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,n,o){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let r=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,n,o,r)}async _clearTaskQueue(e,n){if(this._taskMessageQueue){let o=await this._taskMessageQueue.dequeueAll(e,n);for(let r of o)if(r.type==="request"&&Ah(r.message)){let i=r.message.id,a=this._requestResolvers.get(i);a?(a(new M(F.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(i)):this._onerror(new Error(`Resolver missing for request ${i} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,n){let o=this._options?.defaultTaskPollInterval??1e3;try{let r=await this._taskStore?.getTask(e);r?.pollInterval&&(o=r.pollInterval)}catch{}return new Promise((r,i)=>{if(n.aborted){i(new M(F.InvalidRequest,"Request cancelled"));return}let a=setTimeout(r,o);n.addEventListener("abort",()=>{clearTimeout(a),i(new M(F.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,n){let o=this._taskStore;if(!o)throw new Error("No task store configured");return{createTask:async r=>{if(!e)throw new Error("No request provided");return await o.createTask(r,e.id,{method:e.method,params:e.params},n)},getTask:async r=>{let i=await o.getTask(r,n);if(!i)throw new M(F.InvalidParams,"Failed to retrieve task: Task not found");return i},storeTaskResult:async(r,i,a)=>{await o.storeTaskResult(r,i,a,n);let c=await o.getTask(r,n);if(c){let u=fa.parse({method:"notifications/tasks/status",params:c});await this.notification(u),Or(c.status)&&this._cleanupTaskProgressHandler(r)}},getTaskResult:r=>o.getTaskResult(r,n),updateTaskStatus:async(r,i,a)=>{let c=await o.getTask(r,n);if(!c)throw new M(F.InvalidParams,`Task "${r}" not found - it may have been cleaned up`);if(Or(c.status))throw new M(F.InvalidParams,`Cannot update task "${r}" from terminal status "${c.status}" to "${i}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await o.updateTaskStatus(r,i,a,n);let u=await o.getTask(r,n);if(u){let d=fa.parse({method:"notifications/tasks/status",params:u});await this.notification(d),Or(u.status)&&this._cleanupTaskProgressHandler(r)}},listTasks:r=>o.listTasks(r,n)}}};function yS(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function vS(t,e){let n={...t};for(let o in e){let r=o,i=e[r];if(i===void 0)continue;let a=n[r];yS(a)&&yS(i)?n[r]={...a,...i}:n[r]=i}return n}var lw=av(K_(),1),dw=av(uw(),1);function OU(){let t=new lw.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,dw.default)(t),t}var Ed=class{constructor(e){this._ajv=e??OU()}getValidator(e){let n="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return o=>n(o)?{valid:!0,data:o,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(n.errors)}}};var Td=class{constructor(e){this._server=e}requestStream(e,n,o){return this._server.requestStream(e,n,o)}createMessageStream(e,n){let o=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!o?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let r=e.messages[e.messages.length-1],i=Array.isArray(r.content)?r.content:[r.content],a=i.some(l=>l.type==="tool_result"),c=e.messages.length>1?e.messages[e.messages.length-2]:void 0,u=c?Array.isArray(c.content)?c.content:[c.content]:[],d=u.some(l=>l.type==="tool_use");if(a){if(i.some(l=>l.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!d)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(d){let l=new Set(u.filter(m=>m.type==="tool_use").map(m=>m.id)),p=new Set(i.filter(m=>m.type==="tool_result").map(m=>m.toolUseId));if(l.size!==p.size||![...l].every(m=>p.has(m)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},_a,n)}elicitInputStream(e,n){let o=this._server.getClientCapabilities(),r=e.mode??"form";switch(r){case"url":{if(!o?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!o?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let i=r==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:i},co,n)}async getTask(e,n){return this._server.getTask({taskId:e},n)}async getTaskResult(e,n,o){return this._server.getTaskResult({taskId:e},n,o)}async listTasks(e,n){return this._server.listTasks(e?{cursor:e}:void 0,n)}async cancelTask(e,n){return this._server.cancelTask({taskId:e},n)}};function pw(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${n} does not support task creation for tools/call (required for ${e})`);break;default:break}}function mw(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${n} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${n} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var Pd=class extends Hl{constructor(e,n){super(n),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(ga.options.map((o,r)=>[o,r])),this.isMessageIgnored=(o,r)=>{let i=this._loggingLevels.get(r);return i?this.LOG_LEVEL_SEVERITY.get(o)<this.LOG_LEVEL_SEVERITY.get(i):!1},this._capabilities=n?.capabilities??{},this._instructions=n?.instructions,this._jsonSchemaValidator=n?.jsonSchemaValidator??new Ed,this.setRequestHandler(zh,o=>this._oninitialize(o)),this.setNotificationHandler(Dh,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Vh,async(o,r)=>{let i=r.sessionId||r.requestInfo?.headers["mcp-session-id"]||void 0,{level:a}=o.params,c=ga.safeParse(a);return c.success&&this._loggingLevels.set(i,c.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new Td(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=vS(this._capabilities,e)}setRequestHandler(e,n){let r=Rr(e)?.method;if(!r)throw new Error("Schema is missing a method literal");let i;if(bt(r)){let c=r;i=c._zod?.def?.value??c.value}else{let c=r;i=c._def?.value??c.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let c=async(u,d)=>{let l=Pr(so,u);if(!l.success){let g=l.error instanceof Error?l.error.message:String(l.error);throw new M(F.InvalidParams,`Invalid tools/call request: ${g}`)}let{params:p}=l.data,m=await Promise.resolve(n(u,d));if(p.task){let g=Pr(io,m);if(!g.success){let v=g.error instanceof Error?g.error.message:String(g.error);throw new M(F.InvalidParams,`Invalid task creation result: ${v}`)}return g.data}let f=Pr(Al,m);if(!f.success){let g=f.error instanceof Error?f.error.message:String(f.error);throw new M(F.InvalidParams,`Invalid tools/call result: ${g}`)}return f.data};return super.setRequestHandler(e,c)}return super.setRequestHandler(e,n)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){mw(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&pw(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let n=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:px.includes(n)?n:Rh,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},gl)}async createMessage(e,n){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let o=e.messages[e.messages.length-1],r=Array.isArray(o.content)?o.content:[o.content],i=r.some(d=>d.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,c=a?Array.isArray(a.content)?a.content:[a.content]:[],u=c.some(d=>d.type==="tool_use");if(i){if(r.some(d=>d.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!u)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(u){let d=new Set(c.filter(p=>p.type==="tool_use").map(p=>p.id)),l=new Set(r.filter(p=>p.type==="tool_result").map(p=>p.toolUseId));if(d.size!==l.size||![...d].every(p=>l.has(p)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},qh,n):this.request({method:"sampling/createMessage",params:e},_a,n)}async elicitInput(e,n){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let r=e;return this.request({method:"elicitation/create",params:r},co,n)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let r=e.mode==="form"?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:r},co,n);if(i.action==="accept"&&i.content&&r.requestedSchema)try{let c=this._jsonSchemaValidator.getValidator(r.requestedSchema)(i.content);if(!c.valid)throw new M(F.InvalidParams,`Elicitation response content does not match requested schema: ${c.errorMessage}`)}catch(a){throw a instanceof M?a:new M(F.InternalError,`Error validating elicitation response: ${a instanceof Error?a.message:String(a)}`)}return i}}}createElicitationCompletionNotifier(e,n){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},n)}async listRoots(e,n){return this.request({method:"roots/list",params:e},Bh,n)}async sendLoggingMessage(e,n){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,n))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};var hw=Symbol.for("mcp.completable");function ty(t){return!!t&&typeof t=="object"&&hw in t}function gw(t){return t[hw]?.complete}var fw;(function(t){t.Completable="McpCompletable"})(fw||(fw={}));var AU=/^[A-Za-z0-9._-]{1,128}$/;function CU(t){let e=[];if(t.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(t.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${t.length})`]};if(t.includes(" ")&&e.push("Tool name contains spaces, which may cause parsing issues"),t.includes(",")&&e.push("Tool name contains commas, which may cause parsing issues"),(t.startsWith("-")||t.endsWith("-"))&&e.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(t.startsWith(".")||t.endsWith("."))&&e.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!AU.test(t)){let n=t.split("").filter(o=>!/[A-Za-z0-9._-]/.test(o)).filter((o,r,i)=>i.indexOf(o)===r);return e.push(`Tool name contains invalid characters: ${n.map(o=>`"${o}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:e}}return{isValid:!0,warnings:e}}function NU(t,e){if(e.length>0){console.warn(`Tool name validation warning for "${t}":`);for(let n of e)console.warn(` - ${n}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function ry(t){let e=CU(t);return NU(t,e.warnings),e.isValid}var Rd=class{constructor(e){this._mcpServer=e}registerToolTask(e,n,o){let r={taskSupport:"required",...n.execution};if(r.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,n.title,n.description,n.inputSchema,n.outputSchema,n.annotations,r,n._meta,o)}};var Od=class{constructor(e,n){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Pd(e,n)}get experimental(){return this._experimental||(this._experimental={tasks:new Rd(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(Mr(Ol)),this.server.assertCanSetRequestHandler(Mr(so)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(Ol,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,n])=>{let o={name:e,title:n.title,description:n.description,inputSchema:(()=>{let r=$o(n.inputSchema);return r?ig(r,{strictUnions:!0,pipeStrategy:"input"}):zU})(),annotations:n.annotations,execution:n.execution,_meta:n._meta};if(n.outputSchema){let r=$o(n.outputSchema);r&&(o.outputSchema=ig(r,{strictUnions:!0,pipeStrategy:"output"}))}return o})})),this.server.setRequestHandler(so,async(e,n)=>{try{let o=this._registeredTools[e.params.name];if(!o)throw new M(F.InvalidParams,`Tool ${e.params.name} not found`);if(!o.enabled)throw new M(F.InvalidParams,`Tool ${e.params.name} disabled`);let r=!!e.params.task,i=o.execution?.taskSupport,a="createTask"in o.handler;if((i==="required"||i==="optional")&&!a)throw new M(F.InternalError,`Tool ${e.params.name} has taskSupport '${i}' but was not registered with registerToolTask`);if(i==="required"&&!r)throw new M(F.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(i==="optional"&&!r&&a)return await this.handleAutomaticTaskPolling(o,e,n);let c=await this.validateToolInput(o,e.params.arguments,e.params.name),u=await this.executeToolHandler(o,c,n);return r||await this.validateToolOutput(o,u,e.params.name),u}catch(o){if(o instanceof M&&o.code===F.UrlElicitationRequired)throw o;return this.createToolError(o instanceof Error?o.message:String(o))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,n,o){if(!e.inputSchema)return;let i=$o(e.inputSchema)??e.inputSchema,a=await Ll(i,n);if(!a.success){let c="error"in a?a.error:"Unknown error",u=Ml(c);throw new M(F.InvalidParams,`Input validation error: Invalid arguments for tool ${o}: ${u}`)}return a.data}async validateToolOutput(e,n,o){if(!e.outputSchema||!("content"in n)||n.isError)return;if(!n.structuredContent)throw new M(F.InvalidParams,`Output validation error: Tool ${o} has an output schema but no structured content was provided`);let r=$o(e.outputSchema),i=await Ll(r,n.structuredContent);if(!i.success){let a="error"in i?i.error:"Unknown error",c=Ml(a);throw new M(F.InvalidParams,`Output validation error: Invalid structured content for tool ${o}: ${c}`)}}async executeToolHandler(e,n,o){let r=e.handler;if("createTask"in r){if(!o.taskStore)throw new Error("No task store provided.");let a={...o,taskStore:o.taskStore};if(e.inputSchema){let c=r;return await Promise.resolve(c.createTask(n,a))}else{let c=r;return await Promise.resolve(c.createTask(a))}}if(e.inputSchema){let a=r;return await Promise.resolve(a(n,o))}else{let a=r;return await Promise.resolve(a(o))}}async handleAutomaticTaskPolling(e,n,o){if(!o.taskStore)throw new Error("No task store provided for task-capable tool.");let r=await this.validateToolInput(e,n.params.arguments,n.params.name),i=e.handler,a={...o,taskStore:o.taskStore},c=r?await Promise.resolve(i.createTask(r,a)):await Promise.resolve(i.createTask(a)),u=c.task.taskId,d=c.task,l=d.pollInterval??5e3;for(;d.status!=="completed"&&d.status!=="failed"&&d.status!=="cancelled";){await new Promise(m=>setTimeout(m,l));let p=await o.taskStore.getTask(u);if(!p)throw new M(F.InternalError,`Task ${u} not found during polling`);d=p}return await o.taskStore.getTaskResult(u)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(Mr(Cl)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(Cl,async e=>{switch(e.params.ref.type){case"ref/prompt":return Tx(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return Px(e),this.handleResourceCompletion(e,e.params.ref);default:throw new M(F.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,n){let o=this._registeredPrompts[n.name];if(!o)throw new M(F.InvalidParams,`Prompt ${n.name} not found`);if(!o.enabled)throw new M(F.InvalidParams,`Prompt ${n.name} disabled`);if(!o.argsSchema)return as;let i=Rr(o.argsSchema)?.[e.params.argument.name];if(!ty(i))return as;let a=gw(i);if(!a)return as;let c=await a(e.params.argument.value,e.params.context);return yw(c)}async handleResourceCompletion(e,n){let o=Object.values(this._registeredResourceTemplates).find(a=>a.resourceTemplate.uriTemplate.toString()===n.uri);if(!o){if(this._registeredResources[n.uri])return as;throw new M(F.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let r=o.resourceTemplate.completeCallback(e.params.argument.name);if(!r)return as;let i=await r(e.params.argument.value,e.params.context);return yw(i)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(Mr(wl)),this.server.assertCanSetRequestHandler(Mr(El)),this.server.assertCanSetRequestHandler(Mr(Tl)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(wl,async(e,n)=>{let o=Object.entries(this._registeredResources).filter(([i,a])=>a.enabled).map(([i,a])=>({uri:i,name:a.name,...a.metadata})),r=[];for(let i of Object.values(this._registeredResourceTemplates)){if(!i.resourceTemplate.listCallback)continue;let a=await i.resourceTemplate.listCallback(n);for(let c of a.resources)r.push({...i.metadata,...c})}return{resources:[...o,...r]}}),this.server.setRequestHandler(El,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([n,o])=>({name:n,uriTemplate:o.resourceTemplate.uriTemplate.toString(),...o.metadata}))})),this.server.setRequestHandler(Tl,async(e,n)=>{let o=new URL(e.params.uri),r=this._registeredResources[o.toString()];if(r){if(!r.enabled)throw new M(F.InvalidParams,`Resource ${o} disabled`);return r.readCallback(o,n)}for(let i of Object.values(this._registeredResourceTemplates)){let a=i.resourceTemplate.uriTemplate.match(o.toString());if(a)return i.readCallback(o,a,n)}throw new M(F.InvalidParams,`Resource ${o} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(Mr(Pl)),this.server.assertCanSetRequestHandler(Mr(Rl)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(Pl,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,n])=>({name:e,title:n.title,description:n.description,arguments:n.argsSchema?DU(n.argsSchema):void 0}))})),this.server.setRequestHandler(Rl,async(e,n)=>{let o=this._registeredPrompts[e.params.name];if(!o)throw new M(F.InvalidParams,`Prompt ${e.params.name} not found`);if(!o.enabled)throw new M(F.InvalidParams,`Prompt ${e.params.name} disabled`);if(o.argsSchema){let r=$o(o.argsSchema),i=await Ll(r,e.params.arguments);if(!i.success){let u="error"in i?i.error:"Unknown error",d=Ml(u);throw new M(F.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${d}`)}let a=i.data,c=o.callback;return await Promise.resolve(c(a,n))}else{let r=o.callback;return await Promise.resolve(r(n))}}),this._promptHandlersInitialized=!0)}resource(e,n,...o){let r;typeof o[0]=="object"&&(r=o.shift());let i=o[0];if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let a=this._createRegisteredResource(e,void 0,n,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let a=this._createRegisteredResourceTemplate(e,void 0,n,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}}registerResource(e,n,o,r){if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let i=this._createRegisteredResource(e,o.title,n,o,r);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let i=this._createRegisteredResourceTemplate(e,o.title,n,o,r);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}_createRegisteredResource(e,n,o,r,i){let a={name:e,title:n,metadata:r,readCallback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({uri:null}),update:c=>{typeof c.uri<"u"&&c.uri!==o&&(delete this._registeredResources[o],c.uri&&(this._registeredResources[c.uri]=a)),typeof c.name<"u"&&(a.name=c.name),typeof c.title<"u"&&(a.title=c.title),typeof c.metadata<"u"&&(a.metadata=c.metadata),typeof c.callback<"u"&&(a.readCallback=c.callback),typeof c.enabled<"u"&&(a.enabled=c.enabled),this.sendResourceListChanged()}};return this._registeredResources[o]=a,a}_createRegisteredResourceTemplate(e,n,o,r,i){let a={resourceTemplate:o,title:n,metadata:r,readCallback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({name:null}),update:d=>{typeof d.name<"u"&&d.name!==e&&(delete this._registeredResourceTemplates[e],d.name&&(this._registeredResourceTemplates[d.name]=a)),typeof d.title<"u"&&(a.title=d.title),typeof d.template<"u"&&(a.resourceTemplate=d.template),typeof d.metadata<"u"&&(a.metadata=d.metadata),typeof d.callback<"u"&&(a.readCallback=d.callback),typeof d.enabled<"u"&&(a.enabled=d.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=a;let c=o.uriTemplate.variableNames;return Array.isArray(c)&&c.some(d=>!!o.completeCallback(d))&&this.setCompletionRequestHandler(),a}_createRegisteredPrompt(e,n,o,r,i){let a={title:n,description:o,argsSchema:r===void 0?void 0:rn(r),callback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({name:null}),update:c=>{typeof c.name<"u"&&c.name!==e&&(delete this._registeredPrompts[e],c.name&&(this._registeredPrompts[c.name]=a)),typeof c.title<"u"&&(a.title=c.title),typeof c.description<"u"&&(a.description=c.description),typeof c.argsSchema<"u"&&(a.argsSchema=rn(c.argsSchema)),typeof c.callback<"u"&&(a.callback=c.callback),typeof c.enabled<"u"&&(a.enabled=c.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=a,r&&Object.values(r).some(u=>{let d=u instanceof no?u._def?.innerType:u;return ty(d)})&&this.setCompletionRequestHandler(),a}_createRegisteredTool(e,n,o,r,i,a,c,u,d){ry(e);let l={title:n,description:o,inputSchema:_w(r),outputSchema:_w(i),annotations:a,execution:c,_meta:u,handler:d,enabled:!0,disable:()=>l.update({enabled:!1}),enable:()=>l.update({enabled:!0}),remove:()=>l.update({name:null}),update:p=>{typeof p.name<"u"&&p.name!==e&&(typeof p.name=="string"&&ry(p.name),delete this._registeredTools[e],p.name&&(this._registeredTools[p.name]=l)),typeof p.title<"u"&&(l.title=p.title),typeof p.description<"u"&&(l.description=p.description),typeof p.paramsSchema<"u"&&(l.inputSchema=rn(p.paramsSchema)),typeof p.outputSchema<"u"&&(l.outputSchema=rn(p.outputSchema)),typeof p.callback<"u"&&(l.handler=p.callback),typeof p.annotations<"u"&&(l.annotations=p.annotations),typeof p._meta<"u"&&(l._meta=p._meta),typeof p.enabled<"u"&&(l.enabled=p.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=l,this.setToolRequestHandlers(),this.sendToolListChanged(),l}tool(e,...n){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let o,r,i,a;if(typeof n[0]=="string"&&(o=n.shift()),n.length>1){let u=n[0];if(ny(u))r=n.shift(),n.length>1&&typeof n[0]=="object"&&n[0]!==null&&!ny(n[0])&&(a=n.shift());else if(typeof u=="object"&&u!==null){if(Object.values(u).some(d=>typeof d=="object"&&d!==null))throw new Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);a=n.shift()}}let c=n[0];return this._createRegisteredTool(e,void 0,o,r,i,a,{taskSupport:"forbidden"},void 0,c)}registerTool(e,n,o){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let{title:r,description:i,inputSchema:a,outputSchema:c,annotations:u,_meta:d}=n;return this._createRegisteredTool(e,r,i,a,c,u,{taskSupport:"forbidden"},d,o)}prompt(e,...n){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let o;typeof n[0]=="string"&&(o=n.shift());let r;n.length>1&&(r=n.shift());let i=n[0],a=this._createRegisteredPrompt(e,void 0,o,r,i);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),a}registerPrompt(e,n,o){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let{title:r,description:i,argsSchema:a}=n,c=this._createRegisteredPrompt(e,r,i,a,o);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),c}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,n){return this.server.sendLoggingMessage(e,n)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};var zU={type:"object",properties:{}};function vw(t){return t!==null&&typeof t=="object"&&"parse"in t&&typeof t.parse=="function"&&"safeParse"in t&&typeof t.safeParse=="function"}function bw(t){return"_def"in t||"_zod"in t||vw(t)}function ny(t){return typeof t!="object"||t===null||bw(t)?!1:Object.keys(t).length===0?!0:Object.values(t).some(vw)}function _w(t){if(t){if(ny(t))return rn(t);if(!bw(t))throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return t}}function DU(t){let e=Rr(t);return e?Object.entries(e).map(([n,o])=>{let r=Ux(o),i=Lx(o);return{name:n,description:r,required:!i}}):[]}function Mr(t){let n=Rr(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let o=Zl(n);if(typeof o=="string")return o;throw new Error("Schema method literal must be a string")}function yw(t){return{completion:{values:t.slice(0,100),total:t.length,hasMore:t.length>100}}}var as={completion:{values:[],hasMore:!1}};var ss=s.object({endpoint:s.string().min(1).max(256).optional(),apiKey:s.string().min(1).max(256).optional(),workspace:s.string().min(1).max(256).optional(),region:s.string().min(1).max(256).optional(),feature:s.string().min(1).max(256).optional()}).strict(),kw=s.enum(["SUM","COUNT","MAX","UNIQUE_COUNT","LATEST"]),oy=s.object({d:s.number().int().nonnegative(),w:s.number().int().positive(),c:s.number().nonnegative(),agg:kw.default("COUNT").optional(),valueProperty:s.string().optional(),uniqueProperty:s.string().optional(),provenance:s.enum(["plan","manual","provider"]).optional(),warnAt:s.number().min(0).max(1).optional(),scope:ss.optional()}),jU=s.object({kind:s.literal("credential_validity")}),UU=s.object({kind:s.literal("track_only_bypass")}),LU=s.object({kind:s.literal("lifecycle_block"),blockOn:s.array(s.string()).default(["SUSPENDED","CANCELLED","INACTIVE"]),code:s.string().default("subscription_inactive")}),MU=s.object({kind:s.literal("identity_requirement"),require:s.enum(["org_only","org_and_user"]).default("org_only")}),ZU=s.object({kind:s.literal("scope"),requireExplicit:s.boolean().default(!0)}),FU=s.object({kind:s.literal("permission"),mode:s.enum(["grace","closed"]).optional()}),VU=s.object({kind:s.literal("feature_gate"),feature:s.string().min(1).max(120)}),qU=s.object({kind:s.literal("geo_restriction"),allow:s.array(s.string().length(2).regex(/^[A-Z]{2}$/)).optional(),block:s.array(s.string().length(2).regex(/^[A-Z]{2}$/)).optional()}).refine(t=>t.allow!==void 0||t.block!==void 0,{message:"geo_restriction requires either `allow` or `block`"}),BU=s.enum(["fixed_window","sliding_window","token_bucket"]),HU=oy.extend({kind:s.literal("rate_limit"),m:s.enum(["e","t"]).default("e"),strategy:BU.default("fixed_window"),bucket_capacity:s.number().positive().optional(),refill_rate_per_second:s.number().positive().optional()}).superRefine((t,e)=>{t.strategy==="token_bucket"?(t.bucket_capacity===void 0&&e.addIssue({code:"custom",message:"token_bucket strategy requires `bucket_capacity` (positive number)",path:["bucket_capacity"]}),t.refill_rate_per_second===void 0&&e.addIssue({code:"custom",message:"token_bucket strategy requires `refill_rate_per_second` (positive number)",path:["refill_rate_per_second"]})):(t.bucket_capacity!==void 0&&e.addIssue({code:"custom",message:`bucket_capacity is only valid when strategy === 'token_bucket' (got '${t.strategy}')`,path:["bucket_capacity"]}),t.refill_rate_per_second!==void 0&&e.addIssue({code:"custom",message:`refill_rate_per_second is only valid when strategy === 'token_bucket' (got '${t.strategy}')`,path:["refill_rate_per_second"]}))}),KU=s.enum(["fixed_window","sliding_window"]),GU=oy.extend({kind:s.literal("quota"),ovr:s.enum(["BLOCK","ALLOW_AND_BILL"]),strategy:KU.default("fixed_window")}),WU=oy.extend({kind:s.literal("credit_balance"),ovr:s.enum(["BLOCK","ALLOW_AND_BILL"])}),JU=s.object({kind:s.literal("concurrency"),capability:s.string().min(1).max(120),limit:s.number().int().positive(),lease_ttl_seconds:s.number().int().positive().max(3600).default(60)}),YU=s.object({kind:s.literal("capability_limit"),capability:s.string().min(1).max(120),limit:s.union([s.number().int().nonnegative(),s.boolean()])}),XU=s.object({kind:s.literal("resource_count"),resource:s.string().min(1).max(120),limit:s.number().int().nonnegative(),actionId:s.string().min(1).max(160).optional()}),QU=s.object({kind:s.literal("reservation"),dimension:s.string().min(1).max(120),max_outstanding:s.number().int().positive(),hold_seconds:s.number().int().positive().max(86400)}),eL=s.enum(["plan","manual","provider"]),Ad=s.object({maxInputTokens:s.number().int().positive().optional(),maxOutputTokens:s.number().int().positive().optional(),maxContextTokens:s.number().int().positive().optional(),maxPayloadBytes:s.number().int().positive().optional(),enforcement:s.enum(["enforce","track"]).default("enforce"),failMode:s.enum(["open","closed"]).default("open"),tokenCountSource:s.enum(["declared","estimated"]).optional(),scope:ss.optional()}).refine(xw,{message:"capacity requires at least one ceiling (maxInputTokens / maxOutputTokens / maxContextTokens / maxPayloadBytes)"});function xw(t){return t.maxInputTokens!==void 0||t.maxOutputTokens!==void 0||t.maxContextTokens!==void 0||t.maxPayloadBytes!==void 0}var tL=s.object({kind:s.literal("capacity"),maxInputTokens:s.number().int().positive().optional(),maxOutputTokens:s.number().int().positive().optional(),maxContextTokens:s.number().int().positive().optional(),maxPayloadBytes:s.number().int().positive().optional(),enforcement:s.enum(["enforce","track"]).default("enforce"),failMode:s.enum(["open","closed"]).default("open"),tokenCountSource:s.enum(["declared","estimated"]).optional(),scope:ss.optional(),provenance:eL.optional()}).refine(xw,{message:"capacity requires at least one ceiling (maxInputTokens / maxOutputTokens / maxContextTokens / maxPayloadBytes)"}),iy=s.discriminatedUnion("kind",[jU,UU,LU,MU,ZU,FU,VU,qU,HU,GU,WU,YU,XU,JU,QU,tL]);var cs=["customer_feature","control_plane","admin_internal","background_job","webhook","healthcheck","unclassified"],ZK=new Set(cs);var Cd=s.object({trafficClass:s.enum(cs),policySource:s.enum(["declared","inherited","defaulted","legacy_inferred"]),limitParticipation:s.object({profile:s.enum(["customer_usage","business_capacity","control_plane","admin_internal","platform_abuse_only","healthcheck","none"]),pools:s.array(s.string().min(1)).optional(),scopes:s.array(s.object({endpoint:s.string().optional(),apiKey:s.string().optional(),workspace:s.string().optional(),region:s.string().optional(),feature:s.string().optional()}).passthrough()).optional(),metrics:s.array(s.string().min(1)).optional()}).passthrough(),customerBillingPolicy:s.object({customerBillable:s.boolean(),meterKey:s.string().min(1).optional(),chargeableOutcomes:s.enum(["success_only","success_and_partial","attempted","trusted_actual_usage_only"]),invoiceBehavior:s.string().optional()}).passthrough(),providerCostPolicy:s.object({providerCostTracked:s.boolean(),declaredProviderHint:s.string().optional(),declaredModelHint:s.string().optional()}).passthrough()}).passthrough();var XK=s.object({keyId:s.string().min(1),orgId:s.string().min(1),actorType:s.enum(["org","user"]).optional(),actorId:s.string().nullable().optional(),productId:s.string().min(1),compiledPlanId:s.string().min(1),entitlementHash:s.string().optional(),subjectKey:s.string().min(1),subscriptionId:s.string().min(1),currentPeriodId:s.string().optional(),currentPeriodStartMs:s.number().optional(),subscriberId:s.string().min(1),apiKeyId:s.string().nullable(),entitlementVersion:s.number(),identityRequirement:s.enum(["org_only","org_and_user"]),status:s.enum(["active","revoked"]),expiresAt:s.number().nullable().optional(),subscriberStatus:s.enum(["ONBOARDING","ACTIVE","SUSPENDED"]),subscriptionStatus:s.string().min(1),environment:s.enum(["production","sandbox"]).optional(),environmentId:s.string().optional(),scopes:s.array(s.string()).readonly().optional(),entitlement:s.record(s.string(),s.unknown()).nullable().optional()});var Sw=s.object({unit:s.enum(["requests","tokens","computeMs","dollars"]),window:s.enum(["second","minute","hour","day","week","month"]),capacity:s.number()}),rL=s.object({id:s.string().min(1),slug:s.string().optional(),transportMode:s.enum(["direct","tunnel"]),verificationRequired:s.boolean().optional(),originUrl:s.string().optional(),originHostname:s.string().optional(),accessCredentialRef:s.string().optional(),policyVersion:s.string().optional()}),QK=s.object({id:s.string().min(1),origin:s.string().min(1),sandboxOrigin:s.string().nullable().optional(),authHeader:s.string().optional(),pricing:s.object({requests:s.number().optional(),tokens:s.number().optional(),computeMs:s.number().optional(),per_request:s.number().optional()}).catchall(s.number().optional()).optional(),metering:s.object({tokens:s.object({estimatePerRequest:s.number().optional()}).optional(),computeMs:s.object({estimatePerRequest:s.number().optional()}).optional(),billOn4xx:s.boolean().optional()}).optional(),tenantLimits:s.array(Sw).readonly().optional(),userLimits:s.array(Sw).readonly().optional(),environmentId:s.string().optional(),contextTokenSecret:s.string().nullable().optional(),timeoutMs:s.number().positive().optional(),idleTimeoutMs:s.number().positive().optional(),backends:s.array(rL).optional(),defaultBackendId:s.string().optional(),verificationRequired:s.boolean().optional(),hasPublicRoutes:s.boolean().optional()});var nL=s.object({perRequestMinUnitsByDim:s.record(s.string(),s.number()).optional(),creditPoolMicros:s.number().optional(),perDimUnitCostMicros:s.record(s.string(),s.number()).optional()}),oL=s.object({source:s.enum(["fixed","provider_catalog"]),meterKey:s.string(),selector:s.string().optional(),measures:s.array(s.string()),catalog:s.string().optional(),pricePolicy:s.string().optional(),markupPercent:s.number().optional(),fixedRatesMicros:s.record(s.string(),s.record(s.string(),s.number())).optional()}),iL=s.object({key:s.string(),display:s.string(),unit:s.string().optional(),aggregation:s.enum(["SUM","COUNT","MAX","UNIQUE_COUNT","LATEST"]),window:s.enum(["minute","hour","day","month","billing_period"]),enforcementType:s.string()}),aL=s.object({feature:s.string(),method:s.string(),path:s.string(),meters:s.array(s.string()).optional(),usagePolicy:Cd.optional(),policyResolutionMode:s.enum(["legacy","policy"]).optional()}),eG=s.object({v:s.number(),sub:s.string(),compiledPlanId:s.string().min(1),planType:s.string(),ts:s.number(),constraints:s.array(iy),cv:s.number(),policyResolutionMode:s.enum(["legacy","policy"]).optional(),dm:s.record(s.string(),s.number()),dmv:s.number().optional(),floor:nL.nullable().optional(),displayDims:s.array(s.number()).optional(),meterSemantics:s.record(s.string(),iL).optional(),rp:s.record(s.string(),oL).optional(),fr:s.array(aL).optional(),sig:s.string().min(1),sigKid:s.string().optional(),environmentId:s.string().optional()}).passthrough();var tG=s.object({subscriptionId:s.string().min(1),activePeriodId:s.string().optional(),activeCompiledPlanId:s.string().min(1),activeEntitlementHash:s.string().optional(),enforcementMode:s.enum(["STRICT","GRACE","TRACK_ONLY"]),postStreamLockouts:s.array(s.object({code:s.literal("post_stream_overspend"),reason:s.literal("usage_exhausted"),constraintKey:s.string().min(1),cycleId:s.string().min(1),dimension:s.string().min(1),currentCapacity:s.number().nonnegative(),observedUsage:s.number().nonnegative(),lockedAt:s.string().min(1),expiresAt:s.string().min(1)})).optional(),gracePeriodEndsAt:s.string().optional(),trialEndsAt:s.string().optional(),scheduledTransition:s.object({kind:s.string(),timing:s.string(),scheduledFor:s.string(),toCompiledPlanId:s.string().nullable()}).optional(),creditPool:s.object({periodStartMs:s.number(),periodEndMs:s.number(),grantedCents:s.number(),policy:s.enum(["block","allow"]),epoch:s.number()}).optional(),resourceCounts:s.record(s.string(),s.number()).optional(),dedicatedShard:s.enum(["ACTIVE","DRAINING"]).optional(),memberAuthz:s.record(s.string(),s.object({permissions:s.array(s.string()),roles:s.array(s.string())})).optional(),memberAuthzComputedAt:s.number().optional(),generation:s.number(),updatedAt:s.string()});var sL=["DRAFT","ACTIVE"],oG=s.enum(sL),cL=["ONBOARDING","ACTIVE","SUSPENDED"],$w=s.enum(cL),uL=["ACTIVE","REVOKED"],iG=s.enum(uL),lL=["BLOCK","ALLOW_AND_BILL"],Iw=s.enum(lL),dL=["ACTIVE","ARCHIVED"],aG=s.enum(dL),pL=["ACTIVE","EXPERIMENTAL","LEGACY_STABLE","PHASING_OUT","SUPERSEDED","ARCHIVED"],sG=s.enum(pL);var ww=["input","output","total","cached_read_input","cache_creation_input","context","max_output","estimated_output","actual_output","streaming_output"],Nd=[{id:"requests",label:"API requests",description:"Count every call \u2014 the right default for most APIs.",meters:[{key:"requests",display:"Requests",unit:"request"}]},{id:"ai-tokens",label:"AI tokens",description:"LLM-style token metering alongside calls. The gateway can estimate tokens per request and settle actuals from @farthershore/backend reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"tokens_used",display:"Tokens Used",unit:"token"}]},{id:"credits",label:"Credits",description:"Price work in abstract credits (e.g. one image = 5 credits). Report each call's dynamic credit cost through @farthershore/backend.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"credits",display:"Credits",unit:"credit"}]},{id:"spend",label:"Metered spend",description:"Pass-through spend in cents (OpenRouter-style) reported through @farthershore/backend. Pairs with prepaid credit wallets.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"dollars",display:"Spend",unit:"cent"}]},{id:"compute",label:"Compute time",description:"Bill milliseconds of compute, settled from @farthershore/backend reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"compute_ms",display:"Compute Time",unit:"ms"}]}];function Ew(t){let e=t.trim().toLowerCase();return Nd.find(n=>n.id===e)}function Tw(){return Nd.map(t=>t.id)}var mL="FS_RUNTIME_TOKEN";var fL={payload:"x-fs-metering",signature:"x-fs-metering-sig",token:"x-fs-metering-token"};var pG={environmentVariable:mL,presentation:fL.token,storage:"sha256-hash-only"};var Pw={missingSignature:"missing_signature",malformedSignature:"malformed_signature",unknownKeyId:"unknown_key_id",jwksUnavailable:"jwks_unavailable",badSignature:"bad_signature",bodyHashMismatch:"body_hash_mismatch",routeMismatch:"route_mismatch",clockSkew:"clock_skew",expiredSignature:"expired_signature",replayedNonce:"replayed_nonce",bodyTooLarge:"body_too_large",environmentMismatch:"environment_mismatch",missingToken:"missing_token",invalidToken:"invalid_token",contextUnverified:"context_unverified"};var mG=10*1024*1024;var hL=["CHECKOUT_COMPLETED","PLAN_CHANGED","CANCELLED","RESTORED","UNSCHEDULED_CANCELLATION","PRICE_ROLLOVER","PAUSED","RESUMED","PLAN_CHANGE_SCHEDULED","PLAN_CHANGE_ABORTED","SCHEDULE_CREATED","SCHEDULE_UPDATED","SCHEDULE_RELEASED","SCHEDULE_COMPLETED","SCHEDULE_ABORTED","CANCEL_SCHEDULED","PAYMENT_FAILED","PAYMENT_RECOVERED","PAYMENT_RECOVERED_FROM_SUSPENDED","PAYMENT_ACTION_REQUIRED","RECURRING_PAYMENT","REFUND_PROCESSED","DISPUTE_OPENED","DISPUTE_FUNDS_WITHDRAWN","DISPUTE_CLOSED","DISPUTE_FUNDS_REINSTATED","DISPUTE_CREDIT_REVOKED","DISPUTE_CREDIT_REINSTATED","MIN_SPEND_TRUE_UP"],gG=s.enum(hL);var ay=["BRANCH_PREFIX","PULL_REQUEST","DISABLED"];var gL=s.object({d:s.number(),w:s.number(),capacity:s.number(),remaining:s.number(),windowStart:s.number(),windowEnd:s.number()}),_L=s.record(s.string(),gL),yL=s.object({allocations:s.array(s.number()),expiresAt:s.number()}),vL=s.record(s.string(),yL),bL=s.record(s.string(),s.bigint()),$G=s.object({subscriptionId:s.string(),handoffToken:s.string(),targetShardId:s.string(),policyVersion:s.number(),entitlementVersion:s.number().nullable(),windowStates:_L,activeLeases:vL,totalsByDimension:bL.optional(),billingCycleId:s.string().nullable().optional(),billingCycleStartMs:s.number().optional()});var Rw=new Set(["read","export","download"]);var Ow={org:["read","create","update","delete","manage_settings","manage_billing"],business:["read","create","update","delete","publish","archive"],plan:["read","create","update","delete","promote_version"],makertoken:["read","create","rotate","revoke"],webhook:["read","configure","rotate_secret"],persona:["read","issue","rotate","revoke"],experimental:["promote","rollback"],migration:["create"],auth_provider_connection:["read","create","update","delete"],subscription:["read","cancel","restore","change_plan"],usage:["read","export"],invoice:["read","pay","download"],billing:["read","manage_subscription","refund","change_payment_method"],team:["read","invite","remove_member","change_role","manage_rbac","assign_product_role"],apikey:["read","create","rotate","revoke"],audit_log:["read","export"]},PG=Object.keys(Ow),RG=Object.fromEntries(Object.entries(Ow).map(([t,e])=>[t,{read:e.filter(n=>Rw.has(n)),write:e.filter(n=>!Rw.has(n))}]));var kL=new Set(["GET","HEAD","OPTIONS"]);function sy(t,e){return kL.has(e.toUpperCase())?`${t}:read`:`${t}:write`}var xL={gatewayProjectRead:"gateway:project:read",gatewayResourceWrite:"gateway:resource:write",usageWrite:"usage:write",authzDeniedWrite:"authz-denied:write",reservationAuthorize:"reservation:authorize",reservationFinalize:"reservation:finalize",internalCronRun:"internal:cron:run",personaManage:"persona:manage"},NG=Object.values(xL);var SL=["managed_frontend","custom_frontend","embedded_sdk","public_api","cli","agent","webhook","admin","internal"],Cw=s.enum(SL),Aw=s.string().min(1).max(128),$L=s.object({d:s.number().int().nonnegative(),w:s.number().int().positive(),rem:s.number(),cap:s.number()}).strict(),Nw=s.object({v:s.literal(1),entV:s.number().int().nonnegative().optional(),entHash:Aw.optional(),featureGrant:s.boolean().optional(),gates:s.array(Aw).max(16).optional(),limits:s.array($L).max(16).optional()}).strict();var IL=s.object({requestId:s.string(),eventId:s.string(),tenantId:s.string(),slug:s.string(),subscriptionId:s.string(),subscriberId:s.string(),apiKeyId:s.string().nullable(),compiledPlanId:s.string(),subscriberStatus:$w,subscriptionStatus:s.string(),productId:s.string(),statusCode:s.number(),path:s.string(),latencyMs:s.number(),rawDimsUnits:s.record(s.string(),s.number()),matchedRouteMeters:s.array(s.string().min(1)).optional(),servedRouteScopes:s.array(s.string().min(1)).optional(),meterSettlements:s.array(s.object({meterId:s.string(),meterType:s.enum(["exact_pre_request","estimated_then_settled","postpaid","strict_concurrency"]),reserved:s.number(),actual:s.number(),delta:s.number(),dimension:s.number().int().nonnegative(),leaseId:s.string()})).optional(),reportingAttested:s.boolean(),customerBillable:s.boolean(),postStreamPending:s.boolean().optional(),measureContext:s.record(s.string(),s.unknown()).optional(),creditUnitsConsumed:s.record(s.string(),s.number()).optional(),timestamp:s.number(),environmentId:s.string().nullable().optional(),orgId:s.string().optional(),actorType:s.enum(["org","user"]).optional(),actorId:s.string().nullable().optional(),subjectKey:s.string().optional(),overageBehavior:Iw.optional(),environment:s.enum(["production","sandbox"]).optional(),surface:Cw.optional(),actionId:s.string().min(1).max(128).optional(),subjectType:s.string().min(1).max(128).optional(),subjectId:s.string().min(1).max(256).optional(),decision:Nw.optional(),decisionId:s.string().min(1).max(256).optional(),denyClass:s.enum(["quota","rate","concurrency","capacity","spend","adaptive"]).optional(),blockingConstraintId:s.string().min(1).max(256).optional(),providerSettlements:s.array(s.object({meterId:s.string(),providerReported:s.number(),reconciled:s.number()})).optional(),usagePolicyId:s.string().min(1).max(256).optional(),policySource:s.enum(["declared","inherited","defaulted","legacy_inferred"]).optional(),trafficClass:s.enum(cs).optional(),limitProfile:s.enum(["customer_usage","business_capacity","control_plane","admin_internal","platform_abuse_only","healthcheck","none"]).optional(),leaseId:s.string(),transactionId:s.string(),gatewayMetadata:s.object({shardId:s.string(),policyVersion:s.number().int().nonnegative().optional(),artifactVersion:s.number().int().nonnegative().default(0),artifactHash:s.string().regex(/^sha256_[a-f0-9]{64}$/).optional(),leaseTelemetry:s.object({consumeRequests:s.number().int().nonnegative(),localLeaseHits:s.number().int().nonnegative(),doAllocationAttempts:s.number().int().nonnegative(),doAllocationGrants:s.number().int().nonnegative(),doAllocationDenials:s.number().int().nonnegative(),doUnavailable:s.number().int().nonnegative(),doCircuitOpen:s.number().int().nonnegative(),leaseRefreshSingleflightJoins:s.number().int().nonnegative(),leaseRefreshSingleflightJoinRate:s.number().min(0).max(1),expiredLeasesReaped:s.number().int().nonnegative(),expiredLeaseReclaimedGrant:s.array(s.number().nonnegative()),reconcileRequests:s.number().int().nonnegative(),reconcilePositiveDeltas:s.number().int().nonnegative(),reconcileNoLocalLease:s.number().int().nonnegative(),doReconcileAttempts:s.number().int().nonnegative(),doReconcileFailures:s.number().int().nonnegative(),unspentLeaseRemainderReturns:s.number().int().nonnegative(),unspentLeaseRemainderReturnFailures:s.number().int().nonnegative(),unspentLeaseRemainderReturnedGrant:s.array(s.number().nonnegative()),maxObservedPositiveReconcileDelta:s.array(s.number().nonnegative()),requestToDoRatio:s.number().nonnegative(),localLeaseHitRate:s.number().min(0).max(1),localSpendRate:s.number().min(0).max(1),maxObservedActiveLeases:s.number().int().nonnegative(),maxObservedOutstandingGrant:s.array(s.number().nonnegative()),maxObservedOutstandingGrantRatio:s.number().nonnegative(),maxObservedEmergencyReserveGrant:s.array(s.number().nonnegative()),maxObservedEmergencyReserveGrantRatio:s.number().nonnegative(),maxObservedLeaseGrant:s.array(s.number().nonnegative()),maxObservedLeaseGrantRatio:s.number().nonnegative(),maxObservedLeaseTtlMs:s.number().int().nonnegative()}).optional(),artifactCacheTelemetry:s.object({reads:s.number().int().nonnegative(),l0FreshHits:s.number().int().nonnegative(),l0Misses:s.number().int().nonnegative(),l0StaleServes:s.number().int().nonnegative(),l0StaleIfErrorServes:s.number().int().nonnegative(),l0BlockingRefreshes:s.number().int().nonnegative(),l0SingleflightJoins:s.number().int().nonnegative(),l0EarlyRefreshes:s.number().int().nonnegative(),l1Hits:s.number().int().nonnegative(),l1Misses:s.number().int().nonnegative(),l1Rejected:s.number().int().nonnegative(),l1WriteFailures:s.number().int().nonnegative(),kvHits:s.number().int().nonnegative(),kvMisses:s.number().int().nonnegative(),kvTimeouts:s.number().int().nonnegative(),kvCircuitOpenReads:s.number().int().nonnegative(),resultHits:s.number().int().nonnegative(),resultMisses:s.number().int().nonnegative(),resultDenied:s.number().int().nonnegative(),resultUnavailable:s.number().int().nonnegative(),backgroundRefreshErrors:s.number().int().nonnegative(),l0HitRate:s.number().min(0).max(1),l0SingleflightJoinRate:s.number().min(0).max(1),l0EarlyRefreshRate:s.number().min(0).max(1),l1HitRate:s.number().min(0).max(1),kvHitRate:s.number().min(0).max(1),resultHitRate:s.number().min(0).max(1),staleServeRate:s.number().min(0).max(1)}).optional(),gatewayVersion:s.string()}).passthrough()}).passthrough();var wL=s.object({path:s.string(),code:s.string(),message:s.string()}),qG=s.object({reason:s.literal("schema_validation_failed"),receivedAt:s.string(),rawPayload:s.unknown(),issues:s.array(wL),consumerVersion:s.string().optional(),originalMessageId:s.string().optional()});var zw=[{name:"subscription.created",webhook:!0,description:"A subscriber subscription was created."},{name:"subscription.updated",webhook:!0,description:"A subscriber subscription changed (plan, status, trial)."},{name:"subscription.canceled",webhook:!0,description:"A subscriber subscription was canceled."},{name:"payment.succeeded",webhook:!0,description:"A Stripe payment succeeded for a subscription."},{name:"payment.failed",webhook:!0,description:"A Stripe payment failed for a subscription."},{name:"rate_limit.exceeded",webhook:!0,description:"The gateway denied a request for exceeding a rate limit."},{name:"entitlement.changed",webhook:!0,description:"A compiled entitlement/plan was (re)published."},{name:"usage.threshold_reached",webhook:!0,description:"A metered-usage threshold was crossed."},{name:"change_set.created",webhook:!1,description:"A governed Evolution ChangeSet was proposed (draft created)."},{name:"change_set.approved",webhook:!1,description:"A governed Evolution ChangeSet was approved."},{name:"change_set.applied",webhook:!1,description:"A governed Evolution ChangeSet was applied to live state."},{name:"change_set.rolled_back",webhook:!1,description:"A governed Evolution ChangeSet was rolled back."},{name:"change_set.cancelled",webhook:!1,description:"A governed Evolution ChangeSet was cancelled."},{name:"billing.event_recorded",webhook:!1,description:"A BillingEvent row was recorded; the fact references it by id (the authoritative billing row is unchanged \u2014 exact-accounting invariant)."},{name:"authz.decision",webhook:!1,description:"An authorization decision (ALLOW/DENY) mirrored from the audit log onto the spine; AuditLog stays authoritative."},{name:"repo.changed",webhook:!1,description:"A default-branch push to the business's repo touched paths at least one enabled automation rule watches (payload: branch, headSha, bounded changed-path list). Emitted pre-filtered \u2014 never on every push \u2014 so path-triggered automations (e.g. legal/** changed \u2192 notify subscribers) can fire deterministically."},{name:"automation.rule_fired",webhook:!1,description:"An enabled AutomationRule matched a spine fact (trigger + all conditions held) and its actions were scheduled."},{name:"automation.action_succeeded",webhook:!1,description:"An AutomationRule action ran to success."},{name:"automation.action_failed",webhook:!1,description:"An AutomationRule action failed (will retry per the queue)."},{name:"automation.action_denied",webhook:!1,description:"An AutomationRule action was DENIED \u2014 the automation actor lacked the action's native permission (automation is a first-class authz subject, never a bypass). Recorded + audited; the action did not run."},{name:"automation.notification",webhook:!1,description:"A notification recorded by an AutomationRule `create_notification` action \u2014 a spine fact other surfaces (portal/admin) read; no separate notification runtime."},{name:"access_request.created",webhook:!1,description:"A subscriber member requested a missing permission (AccessRequest row created). Internal \u2014 the Communication layer notifies the subscriber's admins (who can grant it)."},{name:"access_request.resolved",webhook:!1,description:"A pending AccessRequest was resolved (approved or denied) by an owner/admin. Internal \u2014 notifies the subscriber's admins."},{name:"build.failed",webhook:!1,description:"A build for the business (frontend/portal or Business-SDK) failed and did not go live. Internal \u2014 the Communication layer notifies the org's members (opt-out-able, category: deployments)."},{name:"product.published",webhook:!1,description:"A business went live for the first time (DRAFT\u2192ACTIVE first publish). Internal \u2014 notifies the org's members (category: deployments)."},{name:"workflow.failed",webhook:!1,description:"A platform workflow (config apply / Stripe sync / subscription transition) reached a terminal FAILED state. Internal \u2014 notifies the org's admins (category: deployments)."},{name:"pr.review_posted",webhook:!1,description:"The platform posted (or updated) its Business-as-Code impact report on a managed-repo pull request. Internal \u2014 emails the org's members the review synopsis + a link to the PR (category: deployments)."}],EL=zw.map(t=>t.name),Dw=zw.filter(t=>t.webhook).map(t=>t.name),KG=s.enum(EL);var jw=["subscription.created","subscription.updated","subscription.canceled","payment.succeeded","payment.failed","rate_limit.exceeded","entitlement.changed","usage.threshold_reached"],cy=jw;{let t=new Set(Dw),e=new Set(jw),n=[...t].filter(r=>!e.has(r)),o=[...e].filter(r=>!t.has(r));if(n.length>0||o.length>0)throw new Error(`[webhooks/events] WEBHOOK_EVENT_NAMES drifted from the events catalog. Missing from order tuple: [${n.join(", ")}]; extra in order tuple: [${o.join(", ")}]. Reconcile ../events/catalog.ts (webhook: true entries) with WEBHOOK_EVENT_ORDER in this file.`)}var Vo=s.enum(cy);var Ut=s.enum(["immediate","period_end","grandfather"]),qo=s.object({default:Ut.default("period_end"),when:s.object({price_increase:Ut.optional(),price_decrease:Ut.optional(),feature_added:Ut.optional(),feature_removed:Ut.optional(),limit_increased:Ut.optional(),limit_reduced:Ut.optional(),credit_increased:Ut.optional(),credit_reduced:Ut.optional(),rating_changed:Ut.optional()}).strict().default({price_increase:"period_end",price_decrease:"immediate",feature_added:"immediate",feature_removed:"period_end",limit_increased:"immediate",limit_reduced:"period_end",credit_increased:"immediate",credit_reduced:"period_end",rating_changed:"period_end"}),allowImmediatePriceIncrease:s.boolean().default(!1),allowImmediateEntitlementReduction:s.boolean().default(!1)}).strict().superRefine((t,e)=>{(t.when.price_increase??t.default)==="immediate"&&!t.allowImmediatePriceIncrease&&e.addIssue({code:"custom",path:["when","price_increase"],message:"price_increase cannot switch immediately without allowImmediatePriceIncrease: true"});for(let n of["feature_removed","limit_reduced","credit_reduced"])(t.when[n]??t.default)==="immediate"&&!t.allowImmediateEntitlementReduction&&e.addIssue({code:"custom",path:["when",n],message:`${n} cannot switch immediately without allowImmediateEntitlementReduction: true`})}),TL=qo.parse({});var PL=s.object({kind:s.literal("credit"),amount_cents:s.number().int().nonnegative(),recurs:s.boolean().optional(),expires_after_days:s.number().int().positive().optional(),label:s.string().min(1).max(120).optional()}),RL=s.object({kind:s.literal("top_up"),sku:s.string().min(1).max(120),label:s.string().min(1).max(200),price_cents:s.number().int().positive(),credit_cents:s.number().int().positive()}),sr=s.discriminatedUnion("kind",[PL,RL]);function Uw(t){return t.kind==="credit"&&t.recurs===!0&&t.label===void 0}function Lw(t){return t.kind==="credit"&&t.recurs!==!0&&t.label===void 0}function uy(t,e,n=["grants"]){if(!t)return;let o=0,r=0;for(let i of t)Uw(i)?o+=1:Lw(i)&&(r+=1);o>1&&e.addIssue({code:"custom",message:"At most one recurring `credit` grant (recurs:true, no label) is allowed \u2014 recurring credit is a single canonical entry.",path:n}),r>1&&e.addIssue({code:"custom",message:"At most one one-time `credit` grant (recurs:false, no label) is allowed \u2014 one-time credit is a single canonical entry.",path:n})}function Mw(t){return t.grants&&t.grants.length>0?[...t.grants]:[]}function ly(t){return Mw(t).find(Uw)?.amount_cents??0}function zd(t){return Mw(t).find(Lw)?.amount_cents??0}var OL=s.object({percent:s.number().int().min(0).max(100)}),AL=s.object({threshold_cents:s.number().int().nonnegative(),refill_cents:s.number().int().positive()}),cr=s.object({rollover:OL.optional(),auto_recharge:AL.optional()});var Zw=s.enum(["linear","active_count","event_count"]);var CL=s.object({up_to:s.number().int().positive().nullable(),price_per_unit_micros:s.number().int().nonnegative()}),NL=s.object({strategy:s.enum(["graduated","volume"]),tiers:s.array(CL).min(1).max(20)}),ur=s.object({dimension:s.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"Meter dimension must be lowercase alphanumeric with underscores"),kind:Zw.default("linear"),price_per_unit_micros:s.number().int().nonnegative().default(0),tiered:NL.optional(),included_units:s.number().int().positive().optional()}).superRefine((t,e)=>{if(t.tiered&&t.price_per_unit_micros>0&&e.addIssue({code:"custom",message:"`tiered` is mutually exclusive with a non-zero `price_per_unit_micros` \u2014 drop one",path:["tiered"]}),t.included_units!==void 0&&t.tiered&&e.addIssue({code:"custom",message:"`included_units` is mutually exclusive with `tiered` \u2014 a tiered schedule already expresses the included allotment as a zero-priced first tier",path:["included_units"]}),t.tiered){let n=0,o=!1;for(let r=0;r<t.tiered.tiers.length;r++){let i=t.tiered.tiers[r];if(o){e.addIssue({code:"custom",message:"Open-ended tier (`up_to: null`) must be the final tier",path:["tiered","tiers",r,"up_to"]});break}if(i.up_to===null){o=!0;continue}i.up_to<=n&&e.addIssue({code:"custom",message:`Tier upper bounds must be strictly ascending (tier ${r} = ${i.up_to} <= previous ${n})`,path:["tiered","tiers",r,"up_to"]}),n=i.up_to}o||e.addIssue({code:"custom",message:"The final tier of a `tiered` schedule must be open-ended (`up_to: null`)",path:["tiered","tiers",t.tiered.tiers.length-1,"up_to"]})}}),hn=s.enum(["month","year"]),zL=s.object({meters:s.array(ur).default([]),recurring_fee_cents:s.number().int().nonnegative().default(0),billing_interval:hn.default("month"),grants:s.array(sr).max(40).default([]),creditPolicy:cr.optional(),trial_days:s.number().int().nonnegative().default(0),max_monthly_spend_cents:s.number().int().nonnegative().optional()});var DL=s.string().min(1),jL=s.object({type:s.literal("named"),name:s.enum(["second","minute","hour","day","week","month"])}),UL=s.object({type:s.literal("custom"),seconds:s.number().int().positive(),label:s.string().optional()}),LL=s.discriminatedUnion("type",[jL,UL]),Zr=s.object({dimension:DL,window:LL,capacity:s.number().nonnegative(),enforcement:s.enum(["enforce","track"]).optional(),warnAt:s.number().min(0).max(1).optional(),scope:ss.optional(),acknowledgeUnreachable:s.boolean().optional()}),lW=s.array(Zr).max(20);var ML=s.enum(["NONE","PRORATE","CREDIT"]).default("NONE"),ZL={meters:s.array(ur).default([]),recurring_fee_cents:s.number().int().nonnegative().default(0),billing_interval:hn.default("month"),trial_days:s.number().int().nonnegative().default(0),max_monthly_spend_cents:s.number().int().nonnegative().optional(),min_monthly_spend_cents:s.number().int().nonnegative().optional(),grants:s.array(sr).max(40).default([]),creditPolicy:cr.optional()},FL={meters:s.array(ur).optional(),recurring_fee_cents:s.number().int().nonnegative().optional(),billing_interval:hn.optional(),trial_days:s.number().int().nonnegative().optional(),max_monthly_spend_cents:s.number().int().nonnegative().optional(),min_monthly_spend_cents:s.number().int().nonnegative().optional(),grants:s.array(sr).max(40).optional(),creditPolicy:cr.optional()},VL=s.object({id:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Variant id must be lowercase alphanumeric with hyphens/underscores"),label:s.string().max(200).optional(),rolloutPercent:s.number().int().min(0).max(100),assignmentSeed:s.string().min(1).max(100).default("default"),prorationOnRollback:ML,...FL,limits:s.array(Zr).max(20).optional(),featureGates:s.record(s.string(),s.boolean()).optional(),capability_limits:s.record(s.string().min(1).max(120),s.union([s.number().int().nonnegative(),s.boolean()])).optional(),overageBehavior:s.enum(["block","allow_and_bill"]).optional(),capacity:Ad.optional()}),Fw=VL.superRefine((t,e)=>{uy(t.grants,e)}),Vw=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Plan key must be lowercase alphanumeric with hyphens/underscores"),name:s.string().min(1).max(100),description:s.string().max(500).optional(),details:s.array(s.string().max(200)).max(10).optional(),...ZL,free:s.boolean().default(!1),limits:s.array(Zr).max(20).default([]),featureGates:s.record(s.string(),s.boolean()).optional(),capability_limits:s.record(s.string().min(1).max(120),s.union([s.number().int().nonnegative(),s.boolean()])).default({}),overageBehavior:s.enum(["block","allow_and_bill"]).default("block"),selfServeEnabled:s.boolean().default(!0),capacity:Ad.optional(),legacy:s.boolean().optional().default(!1),variants:s.array(Fw).max(4).optional(),archive:s.object({at:s.string().datetime().optional(),transitionTo:s.string().optional(),strategy:s.enum(["auto","explicit","block"]).default("auto")}).optional()}),Dd=Vw.superRefine((t,e)=>{uy(t.grants,e)});var qL=/^\$\{[A-Z][A-Z0-9_]{0,127}\}$/,dy=s.string().min(3).max(200).refine(t=>qL.test(t),{message:"secret must use ${VAR} interpolation syntax (e.g. ${WEBHOOK_SECRET}); raw secrets in YAML are rejected. Define the env var in the per-product secret store and reference it here."}),py=s.object({maxAttempts:s.number().int().min(1).max(20).default(5),backoff:s.enum(["exponential","fixed"]).default("exponential")}),my=s.object({id:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Webhook endpoint id must be lowercase alphanumeric with hyphens/underscores"),url:s.string().url("webhooks.endpoints[].url must be a valid URL"),secret:dy,events:s.array(Vo).min(1,"webhooks.endpoints[].events must subscribe to \u2265 1 event"),enabled:s.boolean().default(!0),retryPolicy:py.default({maxAttempts:5,backoff:"exponential"})}),fy=s.object({endpoints:s.array(my).max(50).default([])});var BL=s.object({meters:s.array(ur).optional(),recurring_fee_cents:s.number().int().nonnegative().optional(),billing_interval:hn.optional(),grants:s.array(sr).max(40).optional(),creditPolicy:cr.optional(),trial_days:s.number().int().nonnegative().optional(),max_monthly_spend_cents:s.number().int().nonnegative().optional(),limits:s.array(Zr).max(20).optional(),featureGates:s.record(s.string(),s.boolean()).optional(),overageBehavior:s.enum(["block","allow_and_bill"]).optional(),selfServeEnabled:s.boolean().optional(),legacy:s.boolean().optional()}).strict(),HL=s.object({url:s.string().url().optional(),secret:dy.optional(),events:s.array(Vo).optional(),enabled:s.boolean().optional(),retryPolicy:py.partial().optional()}).strict(),KL=s.object({plans:s.record(s.string(),BL).optional(),webhooks:s.object({endpoints:s.record(s.string(),HL).optional()}).strict().optional()}).strict(),hy=s.record(s.string().min(1).max(64),KL);var qw=1,Bw=["plans_table","usage_card","api_keys_panel","billing_summary","credit_balance","feature_panel","business_docs","audit_log","team_panel","markdown"],Hw=["/","/pricing","/dashboard","/dashboard/*","/settings","/settings/*","/team","/audit-log","/docs","/docs/*","/terms","/privacy","/persona","/persona-sign-in"],Kw=s.string().min(1).max(200).regex(/^\/[a-zA-Z0-9_./-]*$/,"path must start with / and contain only [a-zA-Z0-9_./-]"),gy=s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/),_y=s.string().min(1).max(120).regex(/^(\*|[a-z0-9_-]+:(\*|[a-z0-9_-]+))$/,"permission must be '*' or '<subject>:<verb>' (verb may be '*')"),GL=s.enum(["hide","disable","readOnly","denied","upsell"]).default("hide"),Gw=s.object({label:s.string().min(1).max(80),path:Kw,capability:gy.optional(),permission:_y.optional()}),Ww=s.enum(Bw),Jw=s.object({component:Ww,props:s.record(s.string().min(1).max(80),s.unknown()).optional(),capability:gy.optional(),permission:_y.optional(),gateMode:GL}),Yw=s.object({path:Kw,title:s.string().min(1).max(120),requiresAuth:s.boolean(),capability:gy.optional(),permission:_y.optional(),components:s.array(Jw).max(12).default([])}),yy=s.object({version:s.literal(qw),nav:s.array(Gw).max(12).default([]),pages:s.array(Yw).max(24).default([])}).superRefine((t,e)=>{let n=new Set;t.pages.forEach((o,r)=>{n.has(o.path)&&e.addIssue({code:"custom",message:`duplicate frontend page path "${o.path}"`,path:["pages",r,"path"]}),n.add(o.path),Xw(o.path)&&e.addIssue({code:"custom",message:`frontend page path "${o.path}" is reserved by the template`,path:["pages",r,"path"]})})});function Xw(t){return Hw.some(e=>{if(e.endsWith("/*")){let n=e.slice(0,-2);return t===n||t.startsWith(`${n}/`)}return t===e})}var Qw=s.enum(["subscription","subject"]),eE=s.enum(["reported","action_inferred"]),tE=s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/),rE=s.object({name:tE,display:s.string().min(1).max(120).optional(),scope:Qw.default("subscription"),subjectType:s.string().min(1).max(64).regex(/^[a-zA-Z0-9_.:-]+$/).optional(),countSource:eE.default("reported")}).superRefine((t,e)=>{t.scope==="subject"&&!t.subjectType&&e.addIssue({code:"custom",path:["subjectType"],message:"subjectType is required when resource scope is subject"}),t.scope==="subscription"&&t.subjectType&&e.addIssue({code:"custom",path:["subjectType"],message:"subjectType is only valid for subject-scoped counted resources"})}),vy=s.array(rE).max(100).default([]);var nE=/^[a-z0-9][a-z0-9_-]*$/,by=s.string().min(1).max(64).regex(nE,"backend id must be a lowercase slug ([a-z0-9][a-z0-9_-]*)"),oE=s.enum(["direct","tunnel"]),iE=s.enum(["embedded","sidecar"]);var aE=s.object({mode:oE.default("direct"),runner:iE.optional()}).strict(),sE=s.object({required:s.boolean().default(!1)}).strict(),cE=s.object({url:s.string().url().optional(),hostname:s.string().min(1).max(255).optional(),weight:s.number().int().min(0).max(1e3).optional()}).strict(),uE=s.discriminatedUnion("policy",[s.object({policy:s.literal("single")}).strict(),s.object({policy:s.literal("weighted")}).strict()]),lE=s.object({name:s.string().min(1).max(120).optional(),slug:by.optional(),transport:aE.default({mode:"direct"}),verification:sE.default({required:!1}),meters:s.array(s.string().min(1).max(64)).max(100).optional(),default:s.boolean().optional(),originUrl:s.string().url().optional(),originHostname:s.string().min(1).max(255).optional(),endpoints:s.array(cE).optional(),selection:uE.optional()}).strict(),ky=s.record(by,lE),Bo=by,Ho={unknownBackendInRoute:"UNKNOWN_BACKEND_IN_ROUTE",ambiguousDefaultBackend:"AMBIGUOUS_DEFAULT_BACKEND",routeMeterNotAllowedByBackend:"ROUTE_METER_NOT_ALLOWED_BY_BACKEND",unknownMeterInBackend:"UNKNOWN_METER_IN_BACKEND",multiEndpointNotSupported:"BACKEND_MULTI_ENDPOINT_NOT_SUPPORTED"};function xy(t){let e=Object.keys(t??{});if(e.length===0)return{defaultId:null,ambiguous:!1};if(e.length===1)return{defaultId:e[0],ambiguous:!1};let n=e.filter(o=>t[o]?.default===!0);return n.length===1?{defaultId:n[0],ambiguous:!1}:{defaultId:null,ambiguous:!0}}var WL=s.string().min(2).max(20).regex(/^\d+(ms|s|m|h)$/,"rate_limit window must look like `60s`, `5m`, `1h`"),dE=s.object({strategy:s.enum(["token_bucket","sliding_window","fixed_window"]).default("token_bucket"),dimensions:s.array(s.enum(["subscription","credential","ip","route"])).min(1).max(4).default(["subscription"]),limits:s.array(s.object({window:WL,max:s.number().int().positive().max(1e7)})).min(1).max(10),fail_open:s.object({max_consecutive_failures:s.number().int().positive().default(100),max_window_seconds:s.number().int().positive().default(60),recovery_threshold:s.number().int().positive().default(50),degraded_mode:s.enum(["safe_mode_block","safe_mode_throttle","runtime_killswitch_trigger"]).default("safe_mode_throttle")}).default({max_consecutive_failures:100,max_window_seconds:60,recovery_threshold:50,degraded_mode:"safe_mode_throttle"})}),pE=s.object({header_name:s.string().min(1).max(100).default("x-api-key"),upstream_token_source:s.discriminatedUnion("type",[s.object({type:s.literal("none")}),s.object({type:s.literal("static_bearer"),token_secret_ref:s.string().min(1).max(200).describe("Reference into the secret store (e.g. CF Secret name); not the raw token")})]).default({type:"none"}),scope_mode:s.enum(["strict","advisory","off"]).default("strict")}),mE=s.object({max_in_flight:s.number().int().positive().max(1e4),dimensions:s.array(s.enum(["subscription","credential","capability"])).min(1).max(3).default(["subscription"]),capability:s.string().min(1).max(120).optional(),lease_ttl_seconds:s.number().int().positive().max(600).default(30),fail_open:s.object({max_consecutive_failures:s.number().int().positive().default(50),max_window_seconds:s.number().int().positive().default(60),recovery_threshold:s.number().int().positive().default(20),degraded_mode:s.enum(["safe_mode_block","safe_mode_throttle","runtime_killswitch_trigger"]).default("safe_mode_throttle")}).default({max_consecutive_failures:50,max_window_seconds:60,recovery_threshold:20,degraded_mode:"safe_mode_throttle"})}),fE=s.object({max_attempts:s.number().int().min(1).max(5).default(2),retry_on_status:s.array(s.number().int().min(400).max(599)).min(1).max(20).default([502,503,504]),backoff:s.object({initial_ms:s.number().int().positive().max(5e3).default(100),multiplier:s.number().positive().max(10).default(2),jitter:s.enum(["none","full","equal"]).default("equal"),total_budget_ms:s.number().int().positive().max(3e4).default(5e3)}).default({initial_ms:100,multiplier:2,jitter:"equal",total_budget_ms:5e3})}),hE=s.object({applies_to:s.enum(["request","response","both"]).default("request"),rewrites:s.array(s.object({source:s.string().min(1).max(200),target:s.string().min(1).max(200).nullable()})).min(1).max(20)});var Sy=s.discriminatedUnion("type",[s.object({type:s.literal("rate_limit"),config:dE}),s.object({type:s.literal("auth"),config:pE}),s.object({type:s.literal("concurrency"),config:mE}),s.object({type:s.literal("retry"),config:fE}),s.object({type:s.literal("transform"),config:hE})]);var jd=s.enum(["long","short","blocking"]).default("long"),gE=s.object({route_types:s.array(s.enum(["http"])).max(5).optional(),meters:s.array(s.string().min(1).max(64)).max(20).optional(),auth_modes:s.array(s.enum(["api_key","oauth2","anonymous"])).max(5).optional()});var $y=s.intersection(s.object({name:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Policy name must be lowercase alphanumeric with hyphens/underscores"),description:s.string().max(500).optional(),compatible_with:gE.default({}),mutation_class:s.enum(["runtime","contractual"]).default("runtime"),cacheProfile:jd}),Sy);var JL=s.enum(["query","mutation"]),YL=s.enum(["none","metadata","full"]),XL=s.object({type:s.string().min(1).max(64).regex(/^[a-zA-Z0-9_.:-]+$/),from:s.enum(["header","path_param"]),name:s.string().min(1).max(120)}),QL=s.object({resource:s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/),effect:s.enum(["create","delete"])}),_E=s.object({id:s.string().min(1).max(160).regex(/^[a-z0-9_.:-]+$/),title:s.string().min(1).max(160).optional(),kind:JL,actorType:s.string().min(1).max(64).regex(/^[a-zA-Z0-9_.:-]+$/).optional(),subject:XL.optional(),inputSchemaRef:s.string().min(1).max(240).optional(),audit:YL.default("metadata"),resource:QL.optional()});var yE=s.object({method:s.enum(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","*"]).default("*"),path:s.string().min(1).max(500).regex(/^\/[a-zA-Z0-9_/:.{}*-]*$/,"path must start with / and contain only [a-zA-Z0-9_/:.{}*-]")});function eM(t){let e=t.trim();if(!e)return!1;let[n,o,r]=e.split("-");if(r!==void 0||!/^\d{3}$/.test(n??""))return!1;let i=Number(n),a=o===void 0?i:Number(o);return o!==void 0&&!/^\d{3}$/.test(o)?!1:i>=100&&i<=599&&a>=100&&a<=599&&i<=a}function vE(t){return t.split(",").every(eM)}var Ud=s.union([s.string().min(1).max(100).refine(vE,{message:"onStatusCodes must be comma-separated HTTP status codes or numeric ranges, e.g. 200-299,304"}),s.array(s.number().int().min(100).max(599)).min(1).max(100)]),bE=s.enum(["public","required"]),kE=s.enum(["network","5xx"]),xE=s.object({maxAttempts:s.number().int().min(1).max(3),retryOn:s.array(kE).min(1).max(2),backoff:s.object({base:s.number().int().min(0).max(6e4),max:s.number().int().min(0).max(6e4),jitter:s.number().min(0).max(1)}).strict().refine(t=>t.max>=t.base,{message:"retry.backoff.max must be >= retry.backoff.base"}),budgetRatio:s.number().min(0).max(1)}).strict(),SE=s.object({authMode:bE.optional(),timeoutMs:s.number().int().min(1).max(6e5).optional(),idleTimeoutMs:s.number().int().min(1).max(6e5).optional(),retry:xE.optional()}).strict(),Ld=s.object({dimension:s.string().min(1).max(64).default("requests"),window:s.union([s.object({type:s.literal("named"),name:s.enum(["second","minute","hour","day","week","month"])}),s.object({type:s.literal("custom"),seconds:s.number().int().positive(),label:s.string().min(1).max(64).optional()})]),capacity:s.number().nonnegative(),enforcement:s.enum(["enforce","track"]).default("enforce")}).strict(),$E=s.object({match:yE,metering:s.object({defaults:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),reports:s.array(s.string().min(1).max(64)).max(20).optional(),estimates:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),onStatusCodes:Ud.optional(),postStreamBilling:s.boolean().optional()}).optional(),unmetered:s.boolean().optional(),inheritDefaultMeters:s.boolean().optional(),action:s.string().min(1).max(160).regex(/^[a-z0-9_.:-]+$/).optional(),backend:Bo.optional(),usagePolicy:Cd.optional(),policy:SE.optional(),limits:s.array(Ld).min(1).max(8).optional()}).strict(),IE=s.object({override_origin:s.string().url("override_origin must be a valid URL").nullable().default(null)}),wE=s.object({rollout_key:s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/,"rollout_key must be lowercase alphanumeric with hyphens/underscores").optional(),required_flags:s.array(s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/)).max(10).optional()}),Iy=s.object({feature:s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/,"feature key must be lowercase alphanumeric with [_.:-]"),description:s.string().max(500).optional(),mutation_class:s.enum(["runtime","contractual"]).default("contractual"),cacheProfile:jd,routes:s.array($E).min(1).max(50),upstream:IE.default({override_origin:null}),policies:s.array(s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/)).max(20).default([]),runtime:wE.default({}),plans:s.array(s.string().min(1).max(64)).max(20).default([]),actions:s.array(_E).max(100).optional(),backend:Bo.optional()}).strict();function EE(t,e){t.usagePricing!==void 0&&e.addIssue({code:"custom",path:["usagePricing"],message:"usagePricing is not supported. Define usage.meters.<key>.rating instead."})}function TE(t,e){t.filter(o=>o.free).length>1&&e.addIssue({code:"custom",path:["plans"],message:"Only one free plan is allowed per product"}),t.forEach((o,r)=>{o.free&&(tM(o,r,e),rM(o,r,e))})}function tM(t,e,n){(zE(t)??0)!==0&&n.addIssue({code:"custom",path:["plans",e,"recurring_fee_cents"],message:"Free plans must have zero price"})}function rM(t,e,n){t.limits.some(r=>!r.enforcement||r.enforcement==="enforce")||n.addIssue({code:"custom",path:["plans",e,"limits"],message:"Free plans must include at least one hard enforced limit"})}function PE(t,e){let n=new Map;t.forEach((o,r)=>{if(o.free)return;let i=zE(o);if(i===void 0||i<=0)return;let a=sM(o,i),c=n.get(a);if(c){e.addIssue({code:"custom",path:["plans",r,"recurring_fee_cents"],message:`Paid plan price duplicates plan "${c}" (${a})`});return}n.set(a,o.key)})}function RE(t,e){let n=new Set((t.metering?.meters??[]).map(r=>r.key).filter(r=>typeof r=="string"&&r.length>0)),o=new Set(Object.keys(t.usage?.meters??{}));t.plans.forEach((r,i)=>{let a=r.meters;a&&a.forEach((c,u)=>{let d=c.dimension;typeof d!="string"||d.length===0||n.has(d)||o.has(d)||e.addIssue({code:"custom",path:["plans",i,"meters",u,"dimension"],message:`Plan "${r.key}" prices meter "${d}" but no metering.meters[] entry and no usage.meters[] entry declares it.`})})})}function OE(t,e){if(!t.features)return;let n=new Set(t.plans.map(o=>o.key));for(let[o,r]of Object.entries(t.features)){if(!r.plans)continue;r.plans.forEach((a,c)=>{n.has(a)||e.addIssue({code:"custom",path:["features",o,"plans",c],message:`Feature "${o}" references unknown plan "${a}"`})});let i=new Set;r.plans.forEach((a,c)=>{i.has(a)&&e.addIssue({code:"custom",path:["features",o,"plans",c],message:`Feature "${o}" lists plan "${a}" more than once`}),i.add(a)})}}function AE(t,e){if(!t.features)return;let n=new Set((t.metering?.meters??[]).map(r=>r.key).filter(r=>typeof r=="string"&&r.length>0)),o=!1;for(let[r,i]of Object.entries(t.features))(i.routes??[]).forEach((c,u)=>{let d=wy(c);d.length!==0&&(o=!0,d.forEach((l,p)=>{n.has(l)||e.addIssue({code:"custom",path:["features",r,"routes",u,"metering",p],message:`Route references unknown meter "${l}". Declare it in metering.meters[].`})}))});o&&n.size===0&&e.addIssue({code:"custom",path:["metering","meters"],message:"One or more routes declare metering keys but `metering.meters[]` is empty. Declare meters at the product level first."})}function nM(t,e){let n=new Map;for(let o of t.plans)n.set(o.key,new Set);if(!t.features){for(let o of n.values())for(let r of e)o.add(r);return n}for(let o of Object.values(t.features))oM(o,n);return n}function oM(t,e){let n=t.plans??[],o=t.routes??[];for(let r of n){let i=e.get(r);if(i)for(let a of o){if(a.unmetered===!0)continue;let c=wy(a);if(c.length>0){for(let u of c)i.add(u);continue}}}}function wy(t){let e=new Set;for(let n of Object.keys(t.metering?.defaults??{}))e.add(n);for(let n of t.metering?.reports??[])e.add(n);for(let n of Object.keys(t.metering?.estimates??{}))e.add(n);return[...e]}function iM(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.dimension=="string"?e.dimension:null}var aM=new Set(["credits"]);function CE(t,e){if(!t.plans||t.plans.length===0)return;let n=new Set((t.metering?.meters??[]).map(i=>i.key).filter(i=>typeof i=="string"&&i.length>0)),o=new Set(Object.keys(t.usage?.meters??{})),r=nM(t,n);t.plans.forEach((i,a)=>{let c=i.limits??[],u=r.get(i.key)??new Set;c.forEach((d,l)=>{if(d&&typeof d=="object"?d.acknowledgeUnreachable===!0:!1)return;let m=iM(d);m&&(u.has(m)||o.has(m)||aM.has(m)||e.addIssue({code:"custom",path:["plans",a,"limits",l,"meter"],message:`Plan "${i.key}" limits meter "${m}" but no route in any granted feature emits this meter, and the meter is not declared under usage.meters either. Either grant a feature whose routes meter "${m}" to this plan, declare the meter under metering.meters[] or usage.meters, or set acknowledgeUnreachable: true if the limit is intentional (e.g. soft budget).`}))})})}function NE(t,e){let n=t.backend;if(!n||Object.keys(n).length===0)return;let o=new Set(Object.keys(n)),r=new Set((t.metering?.meters??[]).map(u=>u.key).filter(u=>typeof u=="string"&&u.length>0));for(let[u,d]of Object.entries(n))(d.meters??[]).forEach((l,p)=>{r.has(l)||e.addIssue({code:"custom",path:["backend",u,"meters",p],message:`${Ho.unknownMeterInBackend}: backend "${u}" allows meter "${l}" but no metering.meters[] entry declares it.`})});let{defaultId:i,ambiguous:a}=xy(n),c=!1;for(let u of Object.values(t.features??{}))for(let d of u.routes??[])d.backend===void 0&&(c=!0);a&&c&&e.addIssue({code:"custom",path:["backend"],message:`${Ho.ambiguousDefaultBackend}: product declares ${o.size} backends but no single default \u2014 mark exactly one backend \`default: true\` or bind every route explicitly.`});for(let[u,d]of Object.entries(t.features??{}))(d.routes??[]).forEach((l,p)=>{let m=l.backend??i;if(l.backend!==void 0&&!o.has(l.backend)){e.addIssue({code:"custom",path:["features",u,"routes",p,"backend"],message:`${Ho.unknownBackendInRoute}: route binds backend "${l.backend}" which is not declared in the product \`backend\` block.`});return}if(!m)return;let g=n[m]?.meters;if(!g)return;let v=new Set(g);for(let b of wy(l))v.has(b)||e.addIssue({code:"custom",path:["features",u,"routes",p,"metering"],message:`${Ho.routeMeterNotAllowedByBackend}: route meters "${b}" but backend "${m}" does not allow it (backend.meters[] = [${g.join(", ")}]).`})})}function zE(t){return t.recurring_fee_cents}function sM(t,e){return`USD:month:${e}`}var cM=s.object({subdomain:s.string().min(1).max(63).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,"Subdomain must be lowercase alphanumeric with optional hyphens")}),DE=s.enum(["exact_pre_request","estimated_then_settled","postpaid","strict_concurrency"]),uM=s.enum(ww),Ey=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"Meter key must be lowercase alphanumeric with underscores"),display:s.string().min(1).max(100),unit:s.string().max(20).optional(),estimate:s.number().finite().nonnegative().optional(),routeDefault:s.number().finite().nonnegative().optional(),enforcementType:DE.default("estimated_then_settled"),aggregation:s.enum(["SUM","COUNT","MAX","UNIQUE_COUNT","LATEST"]).default("COUNT"),window:s.enum(["minute","hour","day","month","billing_period"]).default("billing_period"),valueProperty:s.string().optional(),uniqueProperty:s.string().optional(),groupBy:s.array(s.string()).optional(),eventCode:s.string().optional(),tokenCategory:uM.optional(),reserveStrategy:s.enum(["reserve_max","estimate","count_actual"]).optional(),reserveCeiling:s.number().int().positive().optional(),pairsWith:s.string().min(1).max(64).optional()}),jE=s.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"Usage measure must be lowercase alphanumeric with underscores"),lM=s.enum(["pass_through","markup"]),dM=s.object({source:s.literal("fixed"),rates:s.record(s.string().min(1),s.record(jE,s.number().int().nonnegative()))}),pM=s.object({source:s.literal("provider_catalog"),catalog:s.string().min(1).max(100),pricePolicy:lM.default("pass_through"),markupPercent:s.number().nonnegative().max(1e4).optional(),marginMicros:s.number().int().nonnegative().optional()}),UE=s.discriminatedUnion("source",[dM,pM]),LE=s.object({selector:s.string().min(1).max(100).optional(),measures:s.array(jE).min(1).max(20),rating:UE.optional()}),ME=s.object({meters:s.record(s.string().min(1).max(64).regex(/^[a-z0-9_]+$/),LE)}),mM=s.object({defaults:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),reports:s.array(s.string().min(1).max(64)).max(20).optional(),estimates:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),onStatusCodes:Ud.optional(),postStreamBilling:s.boolean().optional()}),ZE=s.object({method:s.enum(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","*"]).default("*"),path:s.string().min(1).max(500).regex(/^\/[a-zA-Z0-9_/:.{}*-]*$/,"path must start with / and contain only [a-zA-Z0-9_/:.{}*-]"),unmetered:s.boolean().optional(),metering:mM.optional(),inheritDefaultMeters:s.boolean().optional(),backend:Bo.optional(),limits:s.array(Ld).min(1).max(8).optional()}).strict(),Ty=s.object({description:s.string().max(500).optional(),routes:s.array(ZE).min(1).max(50),plans:s.array(s.string().min(1)).min(1).max(20)}),FE=s.record(s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/),Ty),VE=s.enum(["report","pull_request"]),qE=s.enum(["safe","non_blocking","economic_risk","blocking"]),BE=s.object({cleanup:s.object({enabled:s.boolean().default(!1),mode:VE.default("report")}).default({enabled:!1,mode:"report"}),change_approval:s.object({auto_merge_max_risk:s.enum(["none","safe","non_blocking"]).default("none"),require_human_for:s.array(qE).default(["economic_risk","blocking"])}).default({auto_merge_max_risk:"none",require_human_for:["economic_risk","blocking"]})}).default({cleanup:{enabled:!1,mode:"report"},change_approval:{auto_merge_max_risk:"none",require_human_for:["economic_risk","blocking"]}}),HE=s.enum(["org_only","org_and_user"]),KE=s.enum(["clerk","test-personas"]),GE=s.object({identity_requirement:HE.optional(),context_tokens:s.object({enabled:s.boolean().default(!0)}).optional(),portal_auth:s.object({strategy:KE}).optional()}),WE=s.enum(["frontend","api","docs","widget","dashboard","webhook","worker","agent"]),JE=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Surface key must be lowercase alphanumeric with hyphens/underscores"),type:WE,display:s.string().min(1).max(100).optional(),description:s.string().max(500).optional()}),YE=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Entitlement key must be lowercase alphanumeric with hyphens/underscores"),description:s.string().max(500).optional(),capabilities:s.array(s.string().min(1).max(100)).max(100).optional(),featureGates:s.record(s.string().min(1),s.boolean()).optional(),limits:s.array(Zr).max(100).optional(),meters:s.array(s.string().min(1).max(64)).max(100).optional()}),XE=s.array(JE).max(20).default([]),QE=s.array(YE).max(100).default([]),eT=s.enum(["async_job","agent_task","scheduled","lifecycle","background"]),tT=s.discriminatedUnion("type",[s.object({type:s.literal("manual")}),s.object({type:s.literal("schedule"),cron:s.string().min(1).max(120)}),s.object({type:s.literal("event"),event:s.string().min(1).max(120)}),s.object({type:s.literal("api"),path:s.string().min(1).max(240).regex(/^\//,"path must start with /")}),s.object({type:s.literal("lifecycle"),event:s.string().min(1).max(120)})]),rT=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Workflow key must be lowercase alphanumeric with hyphens/underscores"),title:s.string().min(1).max(120).optional(),description:s.string().max(1e3).optional(),kind:eT,trigger:tT,capabilities:s.array(s.string().min(1).max(100)).max(100).optional(),meters:s.array(s.string().min(1).max(64)).max(100).optional(),estimates:s.record(s.string().min(1).max(64),s.number().finite()).optional(),metadata:s.record(s.string().min(1),s.unknown()).optional()}),nT=s.array(rT).max(100).default([]),gn=s.object({product:s.object({name:s.string().min(1).max(100),visibility:s.enum(["public","private"]).default("public"),rbac:s.union([s.boolean(),s.object({capability:s.string().min(1)}).strict()]).optional()}),gateway:s.object({authHeader:s.string().min(1).max(100).default("x-api-key"),upstreamAuth:s.object({type:s.enum(["none","static_bearer"]),token:s.string().optional()}).default({type:"none"})}),metering:s.object({meters:s.array(Ey).max(10).default([]),billOn4xx:s.boolean().default(!1)}).default({meters:[],billOn4xx:!1}),backend:ky.optional(),usage:ME.optional(),usagePricing:s.never({error:"usagePricing is not supported. Define usage.meters.<key>.rating instead."}).optional(),features:FE.optional(),resources:vy,policies:BE,customer_context:GE.optional(),surfaces:XE,entitlements:QE,workflows:nT,frontend:yy.optional(),billing:s.object({applyLimitUpgradesInstantly:s.boolean().optional(),subscriberChangePolicy:qo.default({default:"period_end",when:{price_increase:"period_end",price_decrease:"immediate",feature_added:"immediate",feature_removed:"period_end",limit_increased:"immediate",limit_reduced:"period_end",credit_increased:"immediate",credit_reduced:"period_end",rating_changed:"period_end"},allowImmediatePriceIncrease:!1,allowImmediateEntitlementReduction:!1})}).default({subscriberChangePolicy:{default:"period_end",when:{price_increase:"period_end",price_decrease:"immediate",feature_added:"immediate",feature_removed:"period_end",limit_increased:"immediate",limit_reduced:"period_end",credit_increased:"immediate",credit_reduced:"period_end",rating_changed:"period_end"},allowImmediatePriceIncrease:!1,allowImmediateEntitlementReduction:!1}}),plans:s.array(Dd).max(4).default([]),lifecycle:s.object({breaking_changes:s.object({require_deprecation_window_days:s.number().int().nonnegative().default(0),require_successor_route:s.boolean().default(!1)}).default({require_deprecation_window_days:0,require_successor_route:!1})}).default({breaking_changes:{require_deprecation_window_days:0,require_successor_route:!1}}),webhooks:fy.optional(),environments:hy.optional(),ephemeral:s.object({defaultPlan:s.string().min(1).optional()}).optional()}).superRefine((t,e)=>{EE(t,e),TE(t.plans,e),PE(t.plans,e),RE(t,e),OE(t,e),AE(t,e),CE(t,e),NE(t,e)}),fM=s.object({product:gn.shape.product}),hM=s.object({gateway:gn.shape.gateway}),gM=s.object({metering:gn.shape.metering}),_M=s.object({plans:gn.shape.plans});var Py=s.object({capability:s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/,"capability name must be lowercase alphanumeric with hyphens/underscores"),description:s.string().max(500).optional(),mutation_class:s.enum(["runtime","contractual"]).default("contractual"),includes_features:s.array(s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/)).max(20).default([]),includes_policies:s.array(s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/)).max(20).default([]),includes_capabilities:s.array(s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/)).max(20).default([])});var oT=1,iT="business",yM=`${iT}/business.ts`,vM=s.object({irVersion:s.literal(oT),sdkVersion:s.string().min(1).max(64),product:gn,routes:s.array(Iy).max(200).default([]),policies:s.array($y).max(200).default([]),capabilities:s.array(Py).max(200).default([])}).strict();var W5=s.object({subscriberChangePolicy:qo.optional()}),J5=s.object({code:s.string(),kind:s.enum(["percent_off","amount_off","free_months"]),amount:s.number().optional(),durationMonths:s.number(),applicablePlanIds:s.array(s.string()).optional(),maxRedemptions:s.number().optional(),activeFrom:s.string().optional(),activeUntil:s.string().optional(),status:s.enum(["ACTIVE","ARCHIVED"]).optional()}),Y5=s.object({id:s.string(),actorUserId:s.string().optional(),action:s.string(),decision:s.string().optional(),timestamp:s.string(),details:s.unknown().optional()}),X5=s.object({name:s.string(),branch:s.string().optional(),isProduction:s.boolean().optional()}),Q5=s.object({id:s.string(),name:s.string(),apiKeyId:s.string().optional()});var bM=["IMMEDIATE_NO_PRORATE","IMMEDIATE_PRORATE_CHARGE_NEW","IMMEDIATE_PRORATE_REFUND_OLD","IMMEDIATE_PRORATE_BOTH","DEFER_TO_PERIOD_END"],a3=s.enum(bM);var aT=s.object({id:s.string(),billingCycleId:s.string(),effectiveStart:s.string(),effectiveEnd:s.string(),compiledPlanId:s.string()}),sT=s.object({currentPeriod:aT,priorPeriod:aT.optional()});var kM=s.object({subjectKey:s.string(),subscriptionId:s.string(),subscriberId:s.string(),productId:s.string(),organizationId:s.string(),compiledPlanId:s.string(),activeEntitlementHash:s.string().optional(),generation:s.number(),enforcementMode:s.enum(["STRICT","GRACE","TRACK_ONLY"]),dedicatedShard:s.enum(["ACTIVE","DRAINING"]).optional(),resourceCounts:s.record(s.string(),s.number()).optional(),memberAuthz:s.record(s.string(),s.object({permissions:s.array(s.string()),roles:s.array(s.string())})).optional(),memberAuthzComputedAt:s.number().optional(),postStreamLockouts:s.array(s.object({code:s.literal("post_stream_overspend"),reason:s.literal("usage_exhausted"),constraintKey:s.string().min(1),cycleId:s.string().min(1),dimension:s.string().min(1),currentCapacity:s.number().nonnegative(),observedUsage:s.number().nonnegative(),lockedAt:s.string().min(1),expiresAt:s.string().min(1)})).optional(),subscriptionStatus:s.string(),subscriberStatus:s.string(),scopes:s.array(s.string()),periods:sT,expiresAt:s.number().optional(),trialEndsAt:s.string().optional()}),xM=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),state:kM,expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("revoked"),negativeCacheTtlSeconds:s.number().default(300),reason:s.string().optional()}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]),p3=s.object({environmentId:s.string().nullable(),subjectKeys:s.array(s.string()).min(1).max(500)}),m3=s.object({results:s.array(s.object({subjectKey:s.string(),result:xM}))}),SM=s.object({keyId:s.string(),orgId:s.string(),productId:s.string(),compiledPlanId:s.string(),entitlementHash:s.string().optional(),subscriptionId:s.string(),subscriberId:s.string(),apiKeyId:s.string().nullable(),subjectKey:s.string(),entitlementVersion:s.number().int(),identityRequirement:s.enum(["org_only","org_and_user"]),status:s.enum(["active","revoked"]),subscriberStatus:s.enum(["ONBOARDING","ACTIVE","SUSPENDED"]),subscriptionStatus:s.string(),environment:s.enum(["production","sandbox"]).optional(),environmentId:s.string().optional(),scopes:s.array(s.string()).default([]),entitlement:s.unknown().optional(),actorType:s.enum(["org","user"]).optional(),actorId:s.string().nullable().optional(),currentPeriodId:s.string().optional(),currentPeriodStartMs:s.number().int().nonnegative().optional(),expiresAt:s.number().nullable().optional()}),f3=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),record:SM,expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("revoked"),negativeCacheTtlSeconds:s.number().default(300),reason:s.string().optional()}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]),h3=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),entitlement:s.unknown(),expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]),$M=s.object({id:s.string(),origin:s.string(),sandboxOrigin:s.string().nullable().optional(),authHeader:s.string().optional(),pricing:s.record(s.string(),s.number()).optional(),metering:s.object({tokens:s.object({estimatePerRequest:s.number().optional()}).optional(),computeMs:s.object({estimatePerRequest:s.number().optional()}).optional(),billOn4xx:s.boolean().optional()}).optional(),tenantLimits:s.array(s.object({unit:s.enum(["requests","tokens","computeMs","dollars"]),window:s.enum(["second","minute","hour","day","week","month"]),capacity:s.number()})).optional(),userLimits:s.array(s.object({unit:s.enum(["requests","tokens","computeMs","dollars"]),window:s.enum(["second","minute","hour","day","week","month"]),capacity:s.number()})).optional(),environmentId:s.string().optional(),contextTokenSecret:s.string().nullable().optional(),timeoutMs:s.number().positive().optional(),idleTimeoutMs:s.number().positive().optional(),hasPublicRoutes:s.boolean().optional()}),g3=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),tenant:$M,expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]);var Md=["consumer_api_key","consumer_session_token","test_persona_session_token","builder_master_key","builder_session_token","maker_jwt","service_jwt","internal_service","context_token"],cT=s.enum(Md);var IM=s.object({fromIssuer:s.string().min(1),fromTokenId:s.string().min(1),intent:s.string().min(1)}),uT=s.object({issuer:s.string().min(1),issuedAt:s.number().int().nonnegative(),expiresAt:s.number().int().nonnegative().optional(),tokenId:s.string().min(1).optional(),delegationChain:s.array(IM)});var Ry=["template","embedded","provisioned","agent"],wM=s.enum(Ry),EM=["builder_user","builder_org","maker","consumer_subject","internal_service","service_jwt","agent_runtime"],TM=s.enum(EM),lT=s.object({kind:TM,id:s.string().min(1),label:s.string().optional()}),PM=["subscription","organization","platform"],RM=s.enum(PM),OM=s.object({kind:RM,id:s.string().min(1)}),AM=s.object({type:cT,id:s.string().min(1),hint:s.string().max(8).optional()}),CM=s.object({compiledPlanId:s.string().min(1),fromCache:s.boolean().optional()}),dT=s.object({requestId:s.string().min(1),surface:wM,builderOrgId:s.string().min(1),productId:s.string().min(1).optional(),runtimeId:s.string().min(1).optional(),template:s.string().optional(),caller:lT,actor:lT,billingSubject:OM,credential:AM,capability:s.string().min(1),scopes:s.array(s.string()),entitlement:CM.optional(),trust:uT});var us;(function(t){t.AUTHZ_DECISION="authz_decision",t.ENTITLEMENT_DECISION="entitlement_decision",t.RUNTIME_LIMIT_DECISION="runtime_limit_decision",t.RESOURCE_GOVERNANCE_DECISION="resource_governance_decision",t.RESOURCE_MUTATION="resource_mutation",t.LIFECYCLE_EVENT="lifecycle_event",t.RUNTIME_CONTEXT_CREATED="runtime_context_created",t.SYSTEM_ACTION="system_action"})(us||(us={}));var pT=Object.values(us),z3=s.enum(pT),mT=s.object({decisionId:s.string().optional(),ctx:dT,details:s.record(s.string(),s.unknown()).optional(),createdAt:s.string().min(1)}),NM=pT.filter(t=>t!==us.SYSTEM_ACTION),zM=mT.extend({kind:s.enum(NM)}),DM=mT.extend({kind:s.literal(us.SYSTEM_ACTION),actorType:s.string().min(1),action:s.string().min(1)}),D3=s.discriminatedUnion("kind",[zM,DM]);var ue=["template","agent"],jM=["provisioned"],fT=[...Ry],le=["builder_master_key","builder_session_token","maker_jwt"],Ko=["service_jwt","internal_service"],Oy=["consumer_api_key","consumer_session_token","test_persona_session_token","context_token"],hT=[...Md],ls="subscriptions:write",UM=[{id:"products.create",operation:"Create a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Create a new product in the builder org"},{id:"products.update",operation:"Update a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update product metadata or compiled config"},{id:"products.delete",operation:"Delete a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Delete a product (soft-archive if subscriptions exist)"},{id:"products.read",operation:"Read a product",requiredScopes:["products:read"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Read product metadata + compiled config"},{id:"products.publish",operation:"Publish a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Compile + publish the product to the gateway"},{id:"plans.create",operation:"Create a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Add a new plan to a product"},{id:"plans.update",operation:"Update a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update plan pricing, limits, or features"},{id:"plans.delete",operation:"Delete a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Delete a plan (denied if subscriptions are attached)"},{id:"plans.publish",operation:"Publish a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Mark a plan as available for new subscriptions"},{id:"subscriptions.create",operation:"Create a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Provision a new subscription for a subscriber"},{id:"subscriptions.update",operation:"Update a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Change plan, enforcement mode, or schedule"},{id:"subscriptions.cancel",operation:"Cancel a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Cancel a subscription (immediate or end-of-period)"},{id:"subscriptions.pause",operation:"Pause a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Pause a subscription (no usage, no billing)"},{id:"subscriptions.resume",operation:"Resume a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Resume a paused subscription"},{id:"subscriptions.read",operation:"Read a subscription",requiredScopes:["subscriptions:read"],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Read subscription state and usage"},{id:"webhooks.create",operation:"Create a webhook endpoint",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Register a new webhook endpoint URL"},{id:"webhooks.update",operation:"Update a webhook endpoint",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update endpoint URL, secret, or subscribed events"},{id:"webhooks.delete",operation:"Delete a webhook endpoint",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Remove a webhook endpoint"},{id:"webhooks.test",operation:"Send a test webhook payload",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Trigger a synthetic payload to verify an endpoint"},{id:"api-keys.create",operation:"Create an API key",requiredScopes:["api-keys:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Mint a new consumer or master API key"},{id:"api-keys.revoke",operation:"Revoke an API key",requiredScopes:["api-keys:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Revoke an API key (immediate invalidation)"},{id:"api-keys.read",operation:"Read API key metadata",requiredScopes:["api-keys:read"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Read key id + hint + scopes (never the secret)"},{id:"organizations.create",operation:"Create an organization",requiredScopes:["orgs:write"],allowedSurfaces:["template"],allowedCredentialTypes:["builder_session_token"],description:"Create a builder org (top-level signup)"},{id:"organizations.update",operation:"Update an organization",requiredScopes:["orgs:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update org metadata or billing email"},{id:"members.invite",operation:"Invite a member to an organization",requiredScopes:["members:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Send an invitation to join the org"},{id:"members.remove",operation:"Remove a member from an organization",requiredScopes:["members:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Revoke a member's access to the org"},{id:"projects.create",operation:"Create a project",requiredScopes:["projects:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Create a project (groups products + environments)"},{id:"environments.create",operation:"Create an environment",requiredScopes:["environments:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Add a deployment environment (stage / branch)"},{id:"environments.delete",operation:"Delete an environment",requiredScopes:["environments:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Remove a deployment environment"},{id:"billing.portal-redirect",operation:"Generate Stripe customer-portal redirect",requiredScopes:["billing:portal"],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Oy],description:"Mint a one-time Stripe portal-session redirect URL"},{id:"billing.read",operation:"Read billing state",requiredScopes:["billing:read"],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Oy],description:"Read invoices, balances, scheduled changes"},{id:"runtime-context.read",operation:"Read the caller's runtime context",requiredScopes:[],allowedSurfaces:fT,allowedCredentialTypes:hT,description:"Introspect the resolved RuntimeContext (minus secrets)"},{id:"capabilities.list",operation:"List registered capabilities",requiredScopes:[],allowedSurfaces:fT,allowedCredentialTypes:hT,description:"List all capabilities the registry knows about"},{id:"explain-denial.read",operation:"Explain a denial decision",requiredScopes:["audit:read"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Look up a decision id + return the full ctx + reason"},{id:"replay.execute",operation:"Replay a historical billing period",requiredScopes:["replay:execute"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Re-run billing for a past period; verify deltas"},{id:"rollback.execute",operation:"Execute a GitHub-driven product rollback",requiredScopes:["rollback:execute"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Revert business.ts to a previous commit (dry-run capable)"},{id:"api.invoke",operation:"Invoke a consumer-facing gateway route",requiredScopes:[],allowedSurfaces:jM,allowedCredentialTypes:Oy,description:"Consumer-side traffic into a deployed product (catch-all). The EntitlementEngine + RuntimeLimitEngine handle the fine-grained gating; this capability is the umbrella entry-point."}],M3=Object.freeze(UM);var LM=["BusinessApplyWorkflow","RollbackWorkflow","StripeSyncWorkflow","WebhookDispatchWorkflow","SubscriptionTransitionWorkflow","CompiledPlanLifecycleWorkflow","ShardReshardWorkflow","MaintenanceJobWorkflow"],q3=s.enum(LM),MM=["transient","permanent","rollback-required","human-intervention"],B3=s.enum(MM);var ZM=["SAFE_AUTOMATIC","REQUIRES_APPROVAL","IRREVERSIBLE","BILLING_IMPACTING","EDGE_BREAKING"],H3=s.enum(ZM);var X3=s.object({workflowExecutionId:s.string().min(1),eventType:s.string().min(1),phase:s.string().min(1).optional(),stepId:s.string().min(1).optional(),cohortKey:s.string().min(1).optional(),payload:s.record(s.string(),s.unknown()),occurredAt:s.string().min(1),correlationId:s.string().min(1).optional()}).transform(t=>({...t,workflowExecutionId:t.workflowExecutionId,stepId:t.stepId===void 0?void 0:t.stepId}));var FM=["GATEWAY","HOSTED_UI_PAGE","HOSTED_UI_PROXY"],VM=["platform_requests"],qM=s.object({requestId:s.string().optional(),productId:s.string().optional(),route:s.string().optional(),usageEventId:s.string().optional()}).strict(),BM=s.object({organizationId:s.string().min(1),source:s.enum(FM),dimension:s.enum(VM),quantity:s.number().int().positive(),idempotencyKey:s.string().min(1).max(512),occurredAt:s.string().datetime(),metadata:qM.optional()}).strict(),bJ=s.object({entries:s.array(BM).min(1).max(500)});var gT={contract:{label:"Managed as code",summary:"Declarative product state, canonical in the GitHub repo; the API returns 409 MANAGED_BY_CODE once published. Author via the manifest + push.",canonicalHome:"repo",mcpMayWrite:!1},operate:{label:"Runtime operation",summary:"Imperative action on the running platform; never in the repo. Tokens, usage, readiness, builds, publish triggers, runtime knobs, brand edits.",canonicalHome:"api",mcpMayWrite:!0},dual:{label:"Repo or API",summary:"Reconciles via either the repo or the API/MCP; both converge to the same state. Preview environments are the canonical example.",canonicalHome:"both",mcpMayWrite:!0}};function HM(t){return gT[t].mcpMayWrite}function KM(t){return gT[t].canonicalHome}function _T(t,e){return e==="write"&&!HM(t)?`An MCP tool that writes cannot have operationClass "${t}": ${t}-class state is managed as code in the business repo (canonical home: ${KM(t)}). Make the tool read-only, or author the change in the manifest and push instead.`:null}var et={VALIDATION_ERROR:"VALIDATION_ERROR",CONFLICT:"CONFLICT",NOT_FOUND:"NOT_FOUND",NOT_IMPLEMENTED:"NOT_IMPLEMENTED",NOT_CONFIGURED:"NOT_CONFIGURED",INTERNAL_ERROR:"INTERNAL_ERROR",SERVICE_UNAVAILABLE:"SERVICE_UNAVAILABLE",RATE_LIMIT_EXCEEDED:"RATE_LIMIT_EXCEEDED",DELETE_CONFIRMATION_REQUIRED:"DELETE_CONFIRMATION_REQUIRED",MISSING_HOST:"MISSING_HOST",MISSING_CONNECTIONS:"MISSING_CONNECTIONS",SECRET_NOT_CONFIGURED:"SECRET_NOT_CONFIGURED",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",SEALED_VARIABLE:"SEALED_VARIABLE",INVALID_ACCESS_KEY:"INVALID_ACCESS_KEY",AUTO_KEY_CREATION_FAILED:"AUTO_KEY_CREATION_FAILED",PERSONA_NOT_FOUND:"PERSONA_NOT_FOUND",PERSONA_REVOKED:"PERSONA_REVOKED",PERSONA_SESSIONS_NOT_SUPPORTED:"PERSONA_SESSIONS_NOT_SUPPORTED",NOT_TEST_PERSONA_ENV:"NOT_TEST_PERSONA_ENV",PERSONA_AUTH_DISABLED_IN_PROD:"PERSONA_AUTH_DISABLED_IN_PROD",MAKER_TOKEN_NOT_FOUND:"MAKER_TOKEN_NOT_FOUND",MAKER_TOKEN_NOT_REVOKED:"MAKER_TOKEN_NOT_REVOKED",MAKER_TOKEN_NO_PRODUCT:"MAKER_TOKEN_NO_PRODUCT",MAKER_TOKEN_REVOKED:"MAKER_TOKEN_REVOKED",ORGANIZATION_NOT_FOUND:"ORGANIZATION_NOT_FOUND",ORG_HAS_ACTIVE_SUBSCRIPTIONS:"ORG_HAS_ACTIVE_SUBSCRIPTIONS",ORG_HAS_OUTSTANDING_BALANCE:"ORG_HAS_OUTSTANDING_BALANCE",PERSONAL_ORG_NOT_DELETABLE:"PERSONAL_ORG_NOT_DELETABLE",PERSONAL_OWNER_IMMUTABLE:"PERSONAL_OWNER_IMMUTABLE",PERSONAL_CO_OWNER_NOT_ALLOWED:"PERSONAL_CO_OWNER_NOT_ALLOWED",PRIMARY_OWNER_TRANSFER_REQUIRED:"PRIMARY_OWNER_TRANSFER_REQUIRED",MEMBER_NOT_FOUND:"MEMBER_NOT_FOUND",INVITATION_NOT_FOUND:"INVITATION_NOT_FOUND",RBAC_REQUIRES_TEAM_ORG:"RBAC_REQUIRES_TEAM_ORG",RBAC_NOT_ENABLED_BY_PRODUCT:"RBAC_NOT_ENABLED_BY_PRODUCT",RBAC_CAPABILITY_NOT_GRANTED:"RBAC_CAPABILITY_NOT_GRANTED",UNKNOWN_PERMISSION:"UNKNOWN_PERMISSION",CUSTOMER_NOT_FOUND:"CUSTOMER_NOT_FOUND",PRODUCT_NOT_FOUND:"PRODUCT_NOT_FOUND",PRODUCT_DELETE_BLOCKED:"PRODUCT_DELETE_BLOCKED",PRODUCT_REPO_NOT_LINKED:"PRODUCT_REPO_NOT_LINKED",PRODUCT_SCOPE_MISMATCH:"PRODUCT_SCOPE_MISMATCH",YAML_PARSE_ERROR:"YAML_PARSE_ERROR",COMPILATION_NOT_FOUND:"COMPILATION_NOT_FOUND",PLAN_NOT_FOUND:"PLAN_NOT_FOUND",PLAN_HAS_ACTIVE_SUBSCRIPTIONS:"PLAN_HAS_ACTIVE_SUBSCRIPTIONS",PLAN_SLUG_CONFLICT:"PLAN_SLUG_CONFLICT",PLAN_UPGRADE_REQUIRED:"PLAN_UPGRADE_REQUIRED",PLAN_OFFER_CHANGED:"PLAN_OFFER_CHANGED",SLUG_CONFLICT:"SLUG_CONFLICT",SLUG_BLOCKED:"SLUG_BLOCKED",SLUG_OFFENSIVE:"SLUG_OFFENSIVE",SLUG_RESERVED:"SLUG_RESERVED",SLUG_IMPERSONATION:"SLUG_IMPERSONATION",SLUG_INVALID_FORMAT:"SLUG_INVALID_FORMAT",SLUG_VALIDATOR_NOT_READY:"SLUG_VALIDATOR_NOT_READY",PRICING_PREVIEW_FAILED:"PRICING_PREVIEW_FAILED",PRICING_REPLAY_FAILED:"PRICING_REPLAY_FAILED",RESERVATION_NOT_FOUND:"RESERVATION_NOT_FOUND",PROMO_CODE_NOT_FOUND:"PROMO_CODE_NOT_FOUND",PROMO_CODE_INVALID:"PROMO_CODE_INVALID",BILLING_EVENT_NOT_FOUND:"BILLING_EVENT_NOT_FOUND",BILLING_NOT_CONFIGURED:"BILLING_NOT_CONFIGURED",SUBSCRIPTION_NOT_READY:"SUBSCRIPTION_NOT_READY",SUBSCRIPTION_FETCH_FAILED:"SUBSCRIPTION_FETCH_FAILED",INVALID_STATE:"INVALID_STATE",DUPLICATE_TRANSITION:"DUPLICATE_TRANSITION",LEGACY_STABLE_NOT_SELF_SERVICE:"LEGACY_STABLE_NOT_SELF_SERVICE",ARCHIVED_TARGET:"ARCHIVED_TARGET",FREE_TO_PAID_VIA_CHECKOUT_ONLY:"FREE_TO_PAID_VIA_CHECKOUT_ONLY",CAPABILITY_LIMIT_EXCEEDED:"CAPABILITY_LIMIT_EXCEEDED",CAPABILITY_CHECK_UNAVAILABLE:"CAPABILITY_CHECK_UNAVAILABLE",STRIPE_NOT_CONFIGURED:"STRIPE_NOT_CONFIGURED",STRIPE_BALANCE_OUTSTANDING:"STRIPE_BALANCE_OUTSTANDING",STRIPE_OPERATION_FAILED:"STRIPE_OPERATION_FAILED",STRIPE_RESYNC_FAILED:"STRIPE_RESYNC_FAILED",CHECKOUT_SESSION_FAILED:"CHECKOUT_SESSION_FAILED",POLAR_PRODUCT_NOT_CONFIGURED:"POLAR_PRODUCT_NOT_CONFIGURED",BILLING_TAX_NOT_ENROLLED:"BILLING_TAX_NOT_ENROLLED",WEBHOOK_NOT_FOUND:"WEBHOOK_NOT_FOUND",WEBHOOK_DISPATCH_FAILED:"WEBHOOK_DISPATCH_FAILED",WEBHOOK_SECRET_NOT_CONFIGURED:"WEBHOOK_SECRET_NOT_CONFIGURED",INVALID_WEBHOOK_SIGNATURE:"INVALID_WEBHOOK_SIGNATURE",MISSING_RAW_BODY:"MISSING_RAW_BODY",WEBHOOK_REDIRECTED:"WEBHOOK_REDIRECTED",MANAGED_BY_CODE:"MANAGED_BY_CODE",GITHUB_CONNECTION_NOT_FOUND:"GITHUB_CONNECTION_NOT_FOUND",GITHUB_NOT_CONNECTED:"GITHUB_NOT_CONNECTED",GITHUB_SYNC_FAILED:"GITHUB_SYNC_FAILED",GITHUB_SYNC_UNAVAILABLE:"GITHUB_SYNC_UNAVAILABLE",GITHUB_TOKEN_FAILED:"GITHUB_TOKEN_FAILED",GIT_PROVIDER_NOT_CONFIGURED:"GIT_PROVIDER_NOT_CONFIGURED",ENVIRONMENT_NOT_FOUND:"ENVIRONMENT_NOT_FOUND",ENVIRONMENT_CLEANUP_FAILED:"ENVIRONMENT_CLEANUP_FAILED",DEPLOYMENT_RUN_NOT_FOUND:"DEPLOYMENT_RUN_NOT_FOUND",BRANCH_NO_MATCHING_ENV:"BRANCH_NO_MATCHING_ENV",APPLY_SPEC_FAILED:"APPLY_SPEC_FAILED",BOOTSTRAP_FAILED:"BOOTSTRAP_FAILED",JOB_ALREADY_RUNNING:"JOB_ALREADY_RUNNING",LOGO_DELETE_FAILED:"LOGO_DELETE_FAILED",LOGO_UPLOAD_FAILED:"LOGO_UPLOAD_FAILED",INVALID_LOGO_FORMAT:"INVALID_LOGO_FORMAT",CHANGE_SET_STALE:"CHANGE_SET_STALE",SIMULATION_STALE:"SIMULATION_STALE",IDEMPOTENCY_KEY_REUSED:"IDEMPOTENCY_KEY_REUSED",SELF_APPROVAL_FORBIDDEN:"SELF_APPROVAL_FORBIDDEN",HUMAN_APPROVAL_REQUIRED:"HUMAN_APPROVAL_REQUIRED",GOVERNED_BY_CHANGE_SET:"GOVERNED_BY_CHANGE_SET",COMPENSATION_REQUIRED:"COMPENSATION_REQUIRED",MIGRATION_TOO_LARGE:"MIGRATION_TOO_LARGE"};var IJ={missing_token:et.UNAUTHORIZED,invalid_token:et.UNAUTHORIZED,context_unverified:et.UNAUTHORIZED,missing_signature:et.UNAUTHORIZED,malformed_signature:et.UNAUTHORIZED,unknown_key_id:et.UNAUTHORIZED,bad_signature:et.UNAUTHORIZED,expired_signature:et.UNAUTHORIZED,clock_skew:et.UNAUTHORIZED,replayed_nonce:et.UNAUTHORIZED,body_hash_mismatch:et.UNAUTHORIZED,route_mismatch:et.UNAUTHORIZED,environment_mismatch:et.UNAUTHORIZED,jwks_unavailable:et.SERVICE_UNAVAILABLE,body_too_large:et.VALIDATION_ERROR};var wJ=Object.values(Pw);var xe={BATCHER_ENUM:"batcher-enum",RUNTIME_INLINE:"runtime-inline",CONSTRAINT:"constraint",GATEWAY_ERROR:"gateway-error"};var yT={limit_allocator_unavailable:{statuses:[503],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/runtime.ts:471"]},limit_exceeded:{statuses:[402],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:326","engine/enforcement/constraints/quota.ts:69"]},rate_limited:{statuses:[429],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:328","engine/enforcement/constraints/rate-limit.ts:74","engine/pipeline/rate-limit.ts:83"]},credit_exhausted:{statuses:[402],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:333"]},enforcement_denied:{statuses:[402],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:335"]},feature_not_enabled:{statuses:[403],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:188"]},invalid_entitlement_shape:{statuses:[503],source:xe.RUNTIME_INLINE,retryAfter:!0,verifiedAt:["engine/enforcement/runtime.ts:144"]},unsupported_constraint_schema:{statuses:[503],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:154"]},enforcement_error:{statuses:[500],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:342"]},enforcement_dependency_unavailable:{statuses:[503],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:427"]},concurrency_limit_exceeded:{statuses:[429],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/concurrency.ts"]},concurrency_context_unavailable:{statuses:[503],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/concurrency.ts:291"]},concurrency_coordinator_unavailable:{statuses:[503],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/concurrency.ts:305"]},key_expired:{statuses:[401],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/credential-validity.ts:33"]},permission_denied:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/permission.ts:63"]},permission_unresolved:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/permission.ts"]},geo_context_unavailable:{statuses:[503],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/geo-restriction.ts:44"]},geo_blocked:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/geo-restriction.ts:51"]},geo_not_allowed:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/geo-restriction.ts:58"]},resource_count_limit_exceeded:{statuses:[403,402],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/resource-count.ts:95","apps/core:routes/internal/gateway-resources.ts:144"]},post_stream_overspend:{statuses:[402],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/lifecycle-block.ts"]},request_too_large:{statuses:[413],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/capacity.ts"]},resolver_rate_limited:{statuses:[503],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/errors.ts:55"]},resolver_unavailable:{statuses:[503],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/errors.ts:73"]},credential_resolver_miss_rate_limited:{statuses:[429],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/errors.ts:89"]},provider_throttled:{statuses:[503],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/pipeline/provider-adapter.ts"]}},GM=Object.keys(yT);var WM=new Set([429,503]),TJ=new Set(GM.filter(t=>yT[t].statuses.every(e=>WM.has(e))));var JM=["quota","rate","concurrency","capacity","spend","adaptive"],RJ=new Set(JM);var YM=[402,403,413,429],AJ=new Set(YM);var FJ=s.object({targetUrl:s.string().url().refine(t=>t.startsWith("https://"),{message:"targetUrl must be https"}),variableName:s.string().min(1).regex(/^[A-Z][A-Z0-9_]*$/,{message:"variableName must be UPPER_SNAKE (e.g. MY_API_KEY)"}),header:s.string().min(1),template:s.string().min(1),method:s.string().min(1),body:s.unknown().optional()}).strict();import{existsSync as Cy,mkdirSync as XM,readFileSync as xT,writeFileSync as e8}from"node:fs";import{homedir as QM}from"node:os";import{join as Ny}from"node:path";var vT="https://core.farthershore.com";var zy=Ny(QM(),".farthershore"),bT=Ny(zy,"config.json"),kT=Ny(zy,"credentials.json");function e4(t){Cy(t)||XM(t,{recursive:!0,mode:448})}var Ay={apiUrl:vT};function ST(){if(e4(zy),!Cy(bT))return Ay;try{let t=JSON.parse(xT(bT,"utf-8"));return{...Ay,...t}}catch{return Ay}}function $T(){if(!Cy(kT))return null;try{return JSON.parse(xT(kT,"utf-8"))}catch{return null}}var C=class extends Error{constructor(n,o,r){super(n);this.status=o;this.name="CliError",this.code=r?.code,this.details=r?.details,this.param=r?.param}status;code;details;param};function IT(t){if(t)return t;let e=process.env.FARTHERSHORE_TOKEN;if(e)return e;let n=$T();if(n?.token)return n.token;throw new C("Not authenticated. Run `farthershore auth login` or set FARTHERSHORE_TOKEN environment variable.")}var Go="x-fs-surface",Wo="cli",t4="management";function Be(t,e){let n=new URLSearchParams;for(let[r,i]of Object.entries(e))i&&n.set(r,i);let o=n.toString();return o?`${t}?${o}`:t}function wT(t){let e=t.includes("?")?"&":"?";return`${t}${e}dry_run=true`}var r4=new Set([429,500,502,503,504]),n4=3,o4=3e4,ET=200,i4=4e3,a4=t=>new Promise(e=>setTimeout(e,t));function TT(t,e){if(e){let o=Number(e);if(Number.isFinite(o)&&o>=0)return Math.min(o*1e3,1e4)}return Math.min(ET*2**(t-1),i4)+Math.floor(Math.random()*ET)}function PT(t,e){let n=t.toUpperCase();return n==="GET"||n==="HEAD"?!0:"Idempotency-Key"in e}function RT(t){let e=t.retry?.attempts??n4,n=t.retry?.sleep??a4;async function o(l,p,m){let f=m?e:1,g;for(let v=1;v<=f;v++){let b=new AbortController,E=setTimeout(()=>b.abort(),o4);try{let N=await fetch(l,{...p,signal:b.signal});if(m&&v<f&&r4.has(N.status)){let z=N.headers?.get?.("retry-after")??null;await n(TT(v,z));continue}return N}catch(N){if(g=N,m&&v<f){await n(TT(v,null));continue}throw N}finally{clearTimeout(E)}}throw g}let r=null;async function i(){let l=await fetch(`${t.apiUrl}/auth/cli/exchange`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json",[Go]:Wo}});if(!l.ok){let m=(await l.json().catch(()=>null))?.error,f=typeof m=="string"?{message:m}:m;throw new C(f?.message??l.statusText,l.status,{code:f?.code,details:f?.details})}return r=await l.json(),r}function a(l){return l.split("/",3)[1]===t4}async function c(l){if(!t.token.startsWith("mk_")||a(l))return t.token;let p=r?Date.parse(r.expiresAt):0;return(!r||p-Date.now()<6e4)&&await i(),r.accessToken}async function u(l,p,m,f){let g=await c(p),v=f?.dryRun?wT(p):p,b={Authorization:`Bearer ${g}`,"Content-Type":"application/json",[Go]:Wo};f?.idempotencyKey&&(b["Idempotency-Key"]=f.idempotencyKey);let E=await o(`${t.apiUrl}${v}`,{method:l,headers:b,body:m?JSON.stringify(m):void 0},PT(l,b));if(!E.ok){let z=(await E.json().catch(()=>null))?.error,j=typeof z=="string"?{message:z}:z;throw new C(j?.message??E.statusText,E.status,{code:j?.code,details:j?.details})}if(E.status!==204)return E.json()}async function d(l,p,m,f,g){let v=await c(p),b=g?.dryRun?wT(p):p,E={Authorization:`Bearer ${v}`,"Content-Type":f,[Go]:Wo};g?.idempotencyKey&&(E["Idempotency-Key"]=g.idempotencyKey);let N=await o(`${t.apiUrl}${b}`,{method:l,headers:E,body:m},PT(l,E));if(!N.ok){let j=(await N.json().catch(()=>null))?.error,D=typeof j=="string"?{message:j}:j;throw new C(D?.message??N.statusText,N.status,{code:D?.code,details:D?.details})}if(N.status!==204)return N.json()}return{exchangeCliToken:i,authWhoami:async()=>{if(t.token.startsWith("mk_")){let p=await u("GET","/management/whoami");return{kind:"maker",tokenId:p.tokenId,organizationId:p.organizationId,productId:p.productId,scopes:p.scopes}}return{kind:"builder",...await u("POST","/builder/context/bootstrap")}},bootstrap:()=>u("POST","/builder/context/bootstrap"),listProducts:()=>u("GET","/businesses"),initProduct:(l,p)=>u("POST","/businesses/init",l,p),updateProduct:(l,p,m,f)=>u("PATCH",Be(`/businesses/${l}`,{env:m?.env}),p,f),uploadBrandAsset:(l,p,m,f,g)=>d("PUT",`/businesses/${l}/${p}`,m,f,g),deleteBrandAsset:(l,p,m)=>u("DELETE",`/businesses/${l}/${p}`,void 0,m),publishProduct:(l,p,m)=>u("POST",`/businesses/${l}/publish`,p&&Object.keys(p).length>0?p:void 0,m),migratePlan:(l,p,m,f)=>u("POST",`/businesses/${l}/plans/${encodeURIComponent(p)}/migration-batches`,m,f),getProduct:(l,p)=>u("GET",Be(`/businesses/${l}`,{env:p?.env})),getDeployments:l=>u("GET",`/businesses/${l}/deployments`),listApplyTimeline:(l,p)=>u("GET",Be(`/businesses/${l}/apply-timeline`,{env:p?.env})),proposeConsumerChangeSet:(l,p,m,f,g)=>u("POST",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets`,{env:f?.env}),m,g),listConsumerChangeSets:(l,p,m)=>u("GET",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets`,{env:m?.env,status:m?.status,cursor:m?.cursor,limit:m?.limit!==void 0?String(m.limit):void 0})),getConsumerChangeSet:(l,p,m,f)=>u("GET",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets/${encodeURIComponent(m)}`,{env:f?.env})),previewConsumerChangeSet:(l,p,m,f)=>u("POST",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets/${encodeURIComponent(m)}/preview`,{env:f?.env})),compileManifest:(l,p,m)=>u("POST",`/businesses/${l}/manifest/compile`,{ir:p,...m?.env?{env:m.env}:{}}),listEnvironments:l=>u("GET",`/businesses/${l}/environments`),createEnvironment:(l,p,m)=>u("POST",`/businesses/${l}/environments`,p,m),deleteEnvironment:(l,p)=>u("DELETE",`/businesses/${l}/environments/${encodeURIComponent(p)}`),deleteProduct:(l,p)=>u("DELETE",`/businesses/${l}`,p?.deleteGitHubRepo?{deleteGitHubRepo:!0}:void 0),builderListConsumers:(l,p)=>u("GET",Be(`/businesses/${l}/consumers`,{env:p?.env})),builderBlockConsumer:(l,p)=>u("POST",`/businesses/${l}/consumers/${encodeURIComponent(p)}/block`),builderRemoveConsumer:(l,p)=>u("POST",`/businesses/${l}/consumers/${encodeURIComponent(p)}/remove`),builderAssignConsumerMemberRoles:(l,p,m,f)=>u("POST",`/businesses/${l}/consumers/${encodeURIComponent(p)}/members/${encodeURIComponent(m)}/roles`,{roles:f}),listPromoCodes:l=>u("GET",`/businesses/${l}/promo-codes`),createPromoCode:(l,p)=>u("POST",`/businesses/${l}/promo-codes`,p),updatePromoCode:(l,p,m)=>u("PATCH",`/businesses/${l}/promo-codes/${p}`,m),managementListPlans:l=>u("GET",`/management/businesses/${l}/plans`),managementGetUsage:l=>u("GET",`/management/businesses/${l}/usage`),managementListMakerTokens:()=>u("GET","/maker-tokens"),managementCreateMakerToken:(l,p)=>u("POST","/maker-tokens",l,p),managementRevokeMakerToken:l=>u("DELETE",`/maker-tokens/${l}`),managementRotateMakerToken:(l,p,m)=>u("POST",`/maker-tokens/${l}/rotate`,p,m),managementHardDeleteMakerToken:l=>u("DELETE",`/maker-tokens/${l}/hard`),managementListWebhooks:(l,p)=>u("GET",Be(`/management/businesses/${l}/webhooks`,{limit:p?.limit})),managementCreateWebhook:(l,p,m)=>u("POST",`/management/businesses/${l}/webhooks`,p,m),managementUpdateWebhook:(l,p,m,f)=>u("PATCH",`/management/businesses/${l}/webhooks/${p}`,m,f),managementDeleteWebhook:(l,p)=>u("DELETE",`/management/businesses/${l}/webhooks/${p}`),managementTestWebhook:(l,p)=>u("POST",`/management/businesses/${l}/webhooks/${p}/test`),managementListWebhookDeliveries:(l,p,m)=>u("GET",Be(`/management/businesses/${l}/webhooks/${p}/deliveries`,{limit:m?.limit})),builderListBackends:l=>u("GET",`/businesses/${l}/backends`),builderCreateBackend:(l,p,m)=>u("POST",`/businesses/${l}/backends`,p,m),builderDeleteBackend:(l,p)=>u("DELETE",`/businesses/${l}/backends/${p}`),builderListRuntimeTokens:l=>u("GET",`/businesses/${l}/runtime-tokens`),builderCreateRuntimeToken:(l,p,m)=>u("POST",`/businesses/${l}/runtime-tokens`,p,m),builderRotateRuntimeToken:(l,p,m)=>u("POST",`/businesses/${l}/runtime-tokens/${p}/rotate`,void 0,m),builderRevokeRuntimeToken:(l,p)=>u("DELETE",`/businesses/${l}/runtime-tokens/${p}`),builderFrontendDeploy:(l,p,m)=>u("POST",`/businesses/${l}/frontend/deploy`,p,m),builderFrontendStatus:(l,p)=>u("GET",`/businesses/${l}/frontend/status${p?`?environmentId=${encodeURIComponent(p)}`:""}`),builderFrontendReleases:(l,p)=>u("GET",`/businesses/${l}/frontend/releases${p?`?environmentId=${encodeURIComponent(p)}`:""}`),builderFrontendRollback:(l,p,m)=>u("POST",`/businesses/${l}/frontend/rollback`,p,m),builderListBulletin:(l,p)=>u("GET",Be(`/businesses/${l}/bulletin`,{kind:p?.kind,status:p?.status,cursor:p?.cursor,limit:p?.limit})),builderGetBulletinPost:(l,p)=>u("GET",`/businesses/${l}/bulletin/${encodeURIComponent(p)}`),builderSetBulletinStatus:(l,p,m)=>u("PATCH",`/businesses/${l}/bulletin/${encodeURIComponent(p)}`,{status:m}),builderListAgents:l=>u("GET",`/businesses/${l}/agents`),builderAgentStatus:(l,p)=>u("GET",`/businesses/${l}/agents/${encodeURIComponent(p)}`),builderAgentRunDetail:(l,p,m)=>u("GET",`/businesses/${l}/agents/${encodeURIComponent(p)}/runs/${encodeURIComponent(m)}`),builderConfigureAgent:(l,p,m,f)=>u("PUT",`/businesses/${l}/agents/${encodeURIComponent(p)}`,m,f),builderBusinessVariables:async(l,p)=>(await u("GET",Be(`/businesses/${l}/variables`,{environmentId:p}))).variables,builderSetBusinessVariable:async(l,p,m)=>(await u("PUT",`/businesses/${l}/variables/${encodeURIComponent(p)}`,m)).variable,builderRevealBusinessVariable:(l,p,m)=>u("GET",Be(`/businesses/${l}/variables/${encodeURIComponent(p)}/reveal`,{environmentId:m})),builderSealBusinessVariable:async(l,p,m)=>(await u("POST",Be(`/businesses/${l}/variables/${encodeURIComponent(p)}/seal`,{environmentId:m}))).data,builderDeleteBusinessVariable:(l,p,m)=>u("DELETE",Be(`/businesses/${l}/variables/${encodeURIComponent(p)}`,{environmentId:m})),builderGitHubStatus:()=>u("GET","/builder/git/github/status"),productStripeStatus:l=>u("GET",`/businesses/${l}/stripe/status`),issuePersonaBootstrapKey:async(l,p,m)=>{let f=await fetch(`${t.apiUrl}/portal/businesses/${l}/environments/${p}/test/bootstrap-key`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json",[Go]:Wo},body:JSON.stringify(m??{})});if(!f.ok){let v=(await f.json().catch(()=>null))?.error,b=typeof v=="string"?{message:v}:v;throw new C(b?.message??f.statusText,f.status,{code:b?.code,details:b?.details})}return f.json()},listPersonas:async(l,p)=>{let m=await fetch(`${t.apiUrl}/portal/businesses/${l}/environments/${p}/test/personas`,{method:"GET",headers:{Authorization:`Bearer ${t.token}`,[Go]:Wo}});if(!m.ok){let g=(await m.json().catch(()=>null))?.error,v=typeof g=="string"?{message:g}:g;throw new C(v?.message??m.statusText,m.status,{code:v?.code,details:v?.details})}return m.json()},revokePersona:async(l,p,m)=>{let f=await fetch(`${t.apiUrl}/portal/businesses/${l}/environments/${p}/test/personas/${m}`,{method:"DELETE",headers:{Authorization:`Bearer ${t.token}`,[Go]:Wo}});if(!f.ok){let v=(await f.json().catch(()=>null))?.error,b=typeof v=="string"?{message:v}:v;throw new C(b?.message??f.statusText,f.status,{code:b?.code,details:b?.details})}return f.json()},getProductConfig:(l,p)=>u("GET",Be(`/businesses/${l}/config`,{format:"json",env:p?.env,state:p?.state})),updateProductConfigDraft:(l,p,m)=>u("PATCH",`/businesses/${l}/config/draft`,{spec:p,env:m?.env,branch:m?.branch,source:m?.source,baseDraftHash:m?.baseDraftHash})}}var OT=(t=0)=>e=>`\x1B[${e+t}m`,AT=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,CT=(t=0)=>(e,n,o)=>`\x1B[${38+t};2;${e};${n};${o}m`,we={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},d8=Object.keys(we.modifier),s4=Object.keys(we.color),c4=Object.keys(we.bgColor),p8=[...s4,...c4];function u4(){let t=new Map;for(let[e,n]of Object.entries(we)){for(let[o,r]of Object.entries(n))we[o]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},n[o]=we[o],t.set(r[0],r[1]);Object.defineProperty(we,e,{value:n,enumerable:!1})}return Object.defineProperty(we,"codes",{value:t,enumerable:!1}),we.color.close="\x1B[39m",we.bgColor.close="\x1B[49m",we.color.ansi=OT(),we.color.ansi256=AT(),we.color.ansi16m=CT(),we.bgColor.ansi=OT(10),we.bgColor.ansi256=AT(10),we.bgColor.ansi16m=CT(10),Object.defineProperties(we,{rgbToAnsi256:{value(e,n,o){return e===n&&n===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(e){let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!n)return[0,0,0];let[o]=n;o.length===3&&(o=[...o].map(i=>i+i).join(""));let r=Number.parseInt(o,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:e=>we.rgbToAnsi256(...we.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let n,o,r;if(e>=232)n=((e-232)*10+8)/255,o=n,r=n;else{e-=16;let c=e%36;n=Math.floor(e/36)/5,o=Math.floor(c/6)/5,r=c%6/5}let i=Math.max(n,o,r)*2;if(i===0)return 30;let a=30+(Math.round(r)<<2|Math.round(o)<<1|Math.round(n));return i===2&&(a+=60),a},enumerable:!1},rgbToAnsi:{value:(e,n,o)=>we.ansi256ToAnsi(we.rgbToAnsi256(e,n,o)),enumerable:!1},hexToAnsi:{value:e=>we.ansi256ToAnsi(we.hexToAnsi256(e)),enumerable:!1}}),we}var l4=u4(),Lt=l4;import Dy from"node:process";import d4 from"node:os";import NT from"node:tty";function It(t,e=globalThis.Deno?globalThis.Deno.args:Dy.argv){let n=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(n+t),r=e.indexOf("--");return o!==-1&&(r===-1||o<r)}var{env:Ee}=Dy,Zd;It("no-color")||It("no-colors")||It("color=false")||It("color=never")?Zd=0:(It("color")||It("colors")||It("color=true")||It("color=always"))&&(Zd=1);function p4(){if("FORCE_COLOR"in Ee)return Ee.FORCE_COLOR==="true"?1:Ee.FORCE_COLOR==="false"?0:Ee.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(Ee.FORCE_COLOR,10),3)}function m4(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function f4(t,{streamIsTTY:e,sniffFlags:n=!0}={}){let o=p4();o!==void 0&&(Zd=o);let r=n?Zd:o;if(r===0)return 0;if(n){if(It("color=16m")||It("color=full")||It("color=truecolor"))return 3;if(It("color=256"))return 2}if("TF_BUILD"in Ee&&"AGENT_NAME"in Ee)return 1;if(t&&!e&&r===void 0)return 0;let i=r||0;if(Ee.TERM==="dumb")return i;if(Dy.platform==="win32"){let a=d4.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in Ee)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in Ee)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in Ee)||Ee.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in Ee)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Ee.TEAMCITY_VERSION)?1:0;if(Ee.COLORTERM==="truecolor"||Ee.TERM==="xterm-kitty"||Ee.TERM==="xterm-ghostty"||Ee.TERM==="wezterm")return 3;if("TERM_PROGRAM"in Ee){let a=Number.parseInt((Ee.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Ee.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Ee.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Ee.TERM)||"COLORTERM"in Ee?1:i}function zT(t,e={}){let n=f4(t,{streamIsTTY:t&&t.isTTY,...e});return m4(n)}var h4={stdout:zT({isTTY:NT.isatty(1)}),stderr:zT({isTTY:NT.isatty(2)})},DT=h4;function jT(t,e,n){let o=t.indexOf(e);if(o===-1)return t;let r=e.length,i=0,a="";do a+=t.slice(i,o)+e+n,i=o+r,o=t.indexOf(e,i);while(o!==-1);return a+=t.slice(i),a}function UT(t,e,n,o){let r=0,i="";do{let a=t[o-1]==="\r";i+=t.slice(r,a?o-1:o)+e+(a?`\r
|
|
80
|
+
]`;continue}r+=o[u],o[u]==="\\"?i=!0:a&&o[u]==="]"?a=!1:!a&&o[u]==="["&&(a=!0)}try{new RegExp(r)}catch{return console.warn(`Could not convert regex pattern at ${e.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),t.source}return r}function Bl(t,e){if(e.target==="openAi"&&console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead."),e.target==="openApi3"&&t.keyType?._def.typeName===w.ZodEnum)return{type:"object",required:t.keyType._def.values,properties:t.keyType._def.values.reduce((o,r)=>({...o,[r]:q(t.valueType._def,{...e,currentPath:[...e.currentPath,"properties",r]})??Ie(e)}),{}),additionalProperties:e.rejectedAdditionalProperties};let n={type:"object",additionalProperties:q(t.valueType._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]})??e.allowedAdditionalProperties};if(e.target==="openApi3")return n;if(t.keyType?._def.typeName===w.ZodString&&t.keyType._def.checks?.length){let{type:o,...r}=ql(t.keyType._def,e);return{...n,propertyNames:r}}else{if(t.keyType?._def.typeName===w.ZodEnum)return{...n,propertyNames:{enum:t.keyType._def.values}};if(t.keyType?._def.typeName===w.ZodBranded&&t.keyType._def.type._def.typeName===w.ZodString&&t.keyType._def.type._def.checks?.length){let{type:o,...r}=Vl(t.keyType._def,e);return{...n,propertyNames:r}}}return n}function eS(t,e){if(e.mapStrategy==="record")return Bl(t,e);let n=q(t.keyType._def,{...e,currentPath:[...e.currentPath,"items","items","0"]})||Ie(e),o=q(t.valueType._def,{...e,currentPath:[...e.currentPath,"items","items","1"]})||Ie(e);return{type:"array",maxItems:125,items:{type:"array",items:[n,o],minItems:2,maxItems:2}}}function tS(t){let e=t.values,o=Object.keys(t.values).filter(i=>typeof e[e[i]]!="number").map(i=>e[i]),r=Array.from(new Set(o.map(i=>typeof i)));return{type:r.length===1?r[0]==="string"?"string":"number":["string","number"],enum:o}}function rS(t){return t.target==="openAi"?void 0:{not:Ie({...t,currentPath:[...t.currentPath,"not"]})}}function nS(t){return t.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var Ra={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function iS(t,e){if(e.target==="openApi3")return oS(t,e);let n=t.options instanceof Map?Array.from(t.options.values()):t.options;if(n.every(o=>o._def.typeName in Ra&&(!o._def.checks||!o._def.checks.length))){let o=n.reduce((r,i)=>{let a=Ra[i._def.typeName];return a&&!r.includes(a)?[...r,a]:r},[]);return{type:o.length>1?o:o[0]}}else if(n.every(o=>o._def.typeName==="ZodLiteral"&&!o.description)){let o=n.reduce((r,i)=>{let a=typeof i._def.value;switch(a){case"string":case"number":case"boolean":return[...r,a];case"bigint":return[...r,"integer"];case"object":if(i._def.value===null)return[...r,"null"];default:return r}},[]);if(o.length===n.length){let r=o.filter((i,a,c)=>c.indexOf(i)===a);return{type:r.length>1?r:r[0],enum:n.reduce((i,a)=>i.includes(a._def.value)?i:[...i,a._def.value],[])}}}else if(n.every(o=>o._def.typeName==="ZodEnum"))return{type:"string",enum:n.reduce((o,r)=>[...o,...r._def.values.filter(i=>!o.includes(i))],[])};return oS(t,e)}var oS=(t,e)=>{let n=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((o,r)=>q(o._def,{...e,currentPath:[...e.currentPath,"anyOf",`${r}`]})).filter(o=>!!o&&(!e.strictUnions||typeof o=="object"&&Object.keys(o).length>0));return n.length?{anyOf:n}:void 0};function aS(t,e){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return e.target==="openApi3"?{type:Ra[t.innerType._def.typeName],nullable:!0}:{type:[Ra[t.innerType._def.typeName],"null"]};if(e.target==="openApi3"){let o=q(t.innerType._def,{...e,currentPath:[...e.currentPath]});return o&&"$ref"in o?{allOf:[o],nullable:!0}:o&&{...o,nullable:!0}}let n=q(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","0"]});return n&&{anyOf:[n,{type:"null"}]}}function sS(t,e){let n={type:"number"};if(!t.checks)return n;for(let o of t.checks)switch(o.kind){case"int":n.type="integer",eg(n,"type",o.message,e);break;case"min":e.target==="jsonSchema7"?o.inclusive?ne(n,"minimum",o.value,o.message,e):ne(n,"exclusiveMinimum",o.value,o.message,e):(o.inclusive||(n.exclusiveMinimum=!0),ne(n,"minimum",o.value,o.message,e));break;case"max":e.target==="jsonSchema7"?o.inclusive?ne(n,"maximum",o.value,o.message,e):ne(n,"exclusiveMaximum",o.value,o.message,e):(o.inclusive||(n.exclusiveMaximum=!0),ne(n,"maximum",o.value,o.message,e));break;case"multipleOf":ne(n,"multipleOf",o.value,o.message,e);break}return n}function cS(t,e){let n=e.target==="openAi",o={type:"object",properties:{}},r=[],i=t.shape();for(let c in i){let u=i[c];if(u===void 0||u._def===void 0)continue;let d=$C(u);d&&n&&(u._def.typeName==="ZodOptional"&&(u=u._def.innerType),u.isNullable()||(u=u.nullable()),d=!1);let l=q(u._def,{...e,currentPath:[...e.currentPath,"properties",c],propertyPath:[...e.currentPath,"properties",c]});l!==void 0&&(o.properties[c]=l,d||r.push(c))}r.length&&(o.required=r);let a=SC(t,e);return a!==void 0&&(o.additionalProperties=a),o}function SC(t,e){if(t.catchall._def.typeName!=="ZodNever")return q(t.catchall._def,{...e,currentPath:[...e.currentPath,"additionalProperties"]});switch(t.unknownKeys){case"passthrough":return e.allowedAdditionalProperties;case"strict":return e.rejectedAdditionalProperties;case"strip":return e.removeAdditionalStrategy==="strict"?e.allowedAdditionalProperties:e.rejectedAdditionalProperties}}function $C(t){try{return t.isOptional()}catch{return!0}}var uS=(t,e)=>{if(e.currentPath.toString()===e.propertyPath?.toString())return q(t.innerType._def,e);let n=q(t.innerType._def,{...e,currentPath:[...e.currentPath,"anyOf","1"]});return n?{anyOf:[{not:Ie(e)},n]}:Ie(e)};var lS=(t,e)=>{if(e.pipeStrategy==="input")return q(t.in._def,e);if(e.pipeStrategy==="output")return q(t.out._def,e);let n=q(t.in._def,{...e,currentPath:[...e.currentPath,"allOf","0"]}),o=q(t.out._def,{...e,currentPath:[...e.currentPath,"allOf",n?"1":"0"]});return{allOf:[n,o].filter(r=>r!==void 0)}};function dS(t,e){return q(t.type._def,e)}function pS(t,e){let o={type:"array",uniqueItems:!0,items:q(t.valueType._def,{...e,currentPath:[...e.currentPath,"items"]})};return t.minSize&&ne(o,"minItems",t.minSize.value,t.minSize.message,e),t.maxSize&&ne(o,"maxItems",t.maxSize.value,t.maxSize.message,e),o}function mS(t,e){return t.rest?{type:"array",minItems:t.items.length,items:t.items.map((n,o)=>q(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[]),additionalItems:q(t.rest._def,{...e,currentPath:[...e.currentPath,"additionalItems"]})}:{type:"array",minItems:t.items.length,maxItems:t.items.length,items:t.items.map((n,o)=>q(n._def,{...e,currentPath:[...e.currentPath,"items",`${o}`]})).reduce((n,o)=>o===void 0?n:[...n,o],[])}}function fS(t){return{not:Ie(t)}}function hS(t){return Ie(t)}var gS=(t,e)=>q(t.innerType._def,e);var _S=(t,e,n)=>{switch(e){case w.ZodString:return ql(t,n);case w.ZodNumber:return sS(t,n);case w.ZodObject:return cS(t,n);case w.ZodBigInt:return Bx(t,n);case w.ZodBoolean:return Hx();case w.ZodDate:return tg(t,n);case w.ZodUndefined:return fS(n);case w.ZodNull:return nS(n);case w.ZodArray:return qx(t,n);case w.ZodUnion:case w.ZodDiscriminatedUnion:return iS(t,n);case w.ZodIntersection:return Yx(t,n);case w.ZodTuple:return mS(t,n);case w.ZodRecord:return Bl(t,n);case w.ZodLiteral:return Xx(t,n);case w.ZodEnum:return Jx(t);case w.ZodNativeEnum:return tS(t);case w.ZodNullable:return aS(t,n);case w.ZodOptional:return uS(t,n);case w.ZodMap:return eS(t,n);case w.ZodSet:return pS(t,n);case w.ZodLazy:return()=>t.getter()._def;case w.ZodPromise:return dS(t,n);case w.ZodNaN:case w.ZodNever:return rS(n);case w.ZodEffects:return Wx(t,n);case w.ZodAny:return Ie(n);case w.ZodUnknown:return hS(n);case w.ZodDefault:return Gx(t,n);case w.ZodBranded:return Vl(t,n);case w.ZodReadonly:return gS(t,n);case w.ZodCatch:return Kx(t,n);case w.ZodPipeline:return lS(t,n);case w.ZodFunction:case w.ZodVoid:case w.ZodSymbol:return;default:return(o=>{})(e)}};function q(t,e,n=!1){let o=e.seen.get(t);if(e.override){let c=e.override?.(t,e,o,n);if(c!==Zx)return c}if(o&&!n){let c=IC(o,e);if(c!==void 0)return c}let r={def:t,path:e.currentPath,jsonSchema:void 0};e.seen.set(t,r);let i=_S(t,t.typeName,e),a=typeof i=="function"?q(i(),e):i;if(a&&wC(t,e,a),e.postProcess){let c=e.postProcess(a,t,e);return r.jsonSchema=a,c}return r.jsonSchema=a,a}var IC=(t,e)=>{switch(e.$refStrategy){case"root":return{$ref:t.path.join("/")};case"relative":return{$ref:Fl(e.currentPath,t.path)};case"none":case"seen":return t.path.length<e.currentPath.length&&t.path.every((n,o)=>e.currentPath[o]===n)?(console.warn(`Recursive reference detected at ${e.currentPath.join("/")}! Defaulting to any`),Ie(e)):e.$refStrategy==="seen"?Ie(e):void 0}},wC=(t,e,n)=>(t.description&&(n.description=t.description,e.markdownDescription&&(n.markdownDescription=t.description)),n);var og=(t,e)=>{let n=Vx(e),o=typeof e=="object"&&e.definitions?Object.entries(e.definitions).reduce((u,[d,l])=>({...u,[d]:q(l._def,{...n,currentPath:[...n.basePath,n.definitionPath,d]},!0)??Ie(n)}),{}):void 0,r=typeof e=="string"?e:e?.nameStrategy==="title"?void 0:e?.name,i=q(t._def,r===void 0?n:{...n,currentPath:[...n.basePath,n.definitionPath,r]},!1)??Ie(n),a=typeof e=="object"&&e.name!==void 0&&e.nameStrategy==="title"?e.name:void 0;a!==void 0&&(i.title=a),n.flags.hasReferencedOpenAiAnyType&&(o||(o={}),o[n.openAiAnyTypeName]||(o[n.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:n.$refStrategy==="relative"?"1":[...n.basePath,n.definitionPath,n.openAiAnyTypeName].join("/")}}));let c=r===void 0?o?{...i,[n.definitionPath]:o}:i:{$ref:[...n.$refStrategy==="relative"?[]:n.basePath,n.definitionPath,r].join("/"),[n.definitionPath]:{...o,[r]:i}};return n.target==="jsonSchema7"?c.$schema="http://json-schema.org/draft-07/schema#":(n.target==="jsonSchema2019-09"||n.target==="openAi")&&(c.$schema="https://json-schema.org/draft/2019-09/schema#"),n.target==="openAi"&&("anyOf"in c||"oneOf"in c||"allOf"in c||"type"in c&&Array.isArray(c.type))&&console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property."),c};function EC(t){return!t||t==="jsonSchema7"||t==="draft-7"?"draft-7":t==="jsonSchema2019-09"||t==="draft-2020-12"?"draft-2020-12":"draft-7"}function ig(t,e){return bt(t)?Xr(t,{target:EC(e?.target),io:e?.pipeStrategy??"input"}):og(t,{strictUnions:e?.strictUnions??!0,pipeStrategy:e?.pipeStrategy??"input"})}function ag(t){let n=Rr(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let o=Zl(n);if(typeof o!="string")throw new Error("Schema method literal must be a string");return o}function sg(t,e){let n=Pr(t,e);if(!n.success)throw n.error;return n.data}var TC=6e4,Hl=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(_l,n=>{this._oncancel(n)}),this.setNotificationHandler(vl,n=>{this._onprogress(n)}),this.setRequestHandler(yl,n=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(bl,async(n,o)=>{let r=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!r)throw new M(F.InvalidParams,"Failed to retrieve task: Task not found");return{...r}}),this.setRequestHandler(xl,async(n,o)=>{let r=async()=>{let i=n.params.taskId;if(this._taskMessageQueue){let c;for(;c=await this._taskMessageQueue.dequeue(i,o.sessionId);){if(c.type==="response"||c.type==="error"){let u=c.message,d=u.id,l=this._requestResolvers.get(d);if(l)if(this._requestResolvers.delete(d),c.type==="response")l(u);else{let p=u,m=new M(p.error.code,p.error.message,p.error.data);l(m)}else{let p=c.type==="response"?"Response":"Error";this._onerror(new Error(`${p} handler missing for request ${d}`))}continue}await this._transport?.send(c.message,{relatedRequestId:o.requestId})}}let a=await this._taskStore.getTask(i,o.sessionId);if(!a)throw new M(F.InvalidParams,`Task not found: ${i}`);if(!Or(a.status))return await this._waitForTaskUpdate(i,o.signal),await r();if(Or(a.status)){let c=await this._taskStore.getTaskResult(i,o.sessionId);return this._clearTaskQueue(i),{...c,_meta:{...c._meta,[Ir]:{taskId:i}}}}return await r()};return await r()}),this.setRequestHandler(Sl,async(n,o)=>{try{let{tasks:r,nextCursor:i}=await this._taskStore.listTasks(n.params?.cursor,o.sessionId);return{tasks:r,nextCursor:i,_meta:{}}}catch(r){throw new M(F.InvalidParams,`Failed to list tasks: ${r instanceof Error?r.message:String(r)}`)}}),this.setRequestHandler(Il,async(n,o)=>{try{let r=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!r)throw new M(F.InvalidParams,`Task not found: ${n.params.taskId}`);if(Or(r.status))throw new M(F.InvalidParams,`Cannot cancel task in terminal status: ${r.status}`);await this._taskStore.updateTaskStatus(n.params.taskId,"cancelled","Client cancelled task execution.",o.sessionId),this._clearTaskQueue(n.params.taskId);let i=await this._taskStore.getTask(n.params.taskId,o.sessionId);if(!i)throw new M(F.InvalidParams,`Task not found after cancellation: ${n.params.taskId}`);return{_meta:{},...i}}catch(r){throw r instanceof M?r:new M(F.InvalidRequest,`Failed to cancel task: ${r instanceof Error?r.message:String(r)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,n,o,r,i=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(r,n),startTime:Date.now(),timeout:n,maxTotalTimeout:o,resetTimeoutOnProgress:i,onTimeout:r})}_resetTimeout(e){let n=this._timeoutInfo.get(e);if(!n)return!1;let o=Date.now()-n.startTime;if(n.maxTotalTimeout&&o>=n.maxTotalTimeout)throw this._timeoutInfo.delete(e),M.fromError(F.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:n.maxTotalTimeout,totalElapsed:o});return clearTimeout(n.timeoutId),n.timeoutId=setTimeout(n.onTimeout,n.timeout),!0}_cleanupTimeout(e){let n=this._timeoutInfo.get(e);n&&(clearTimeout(n.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=e;let n=this.transport?.onclose;this._transport.onclose=()=>{n?.(),this._onclose()};let o=this.transport?.onerror;this._transport.onerror=i=>{o?.(i),this._onerror(i)};let r=this._transport?.onmessage;this._transport.onmessage=(i,a)=>{r?.(i,a),ua(i)||vx(i)?this._onresponse(i):Ah(i)?this._onrequest(i,a):yx(i)?this._onnotification(i):this._onerror(new Error(`Unknown message type: ${JSON.stringify(i)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let o of this._timeoutInfo.values())clearTimeout(o.timeoutId);this._timeoutInfo.clear();for(let o of this._requestHandlerAbortControllers.values())o.abort();this._requestHandlerAbortControllers.clear();let n=M.fromError(F.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let o of e.values())o(n)}_onerror(e){this.onerror?.(e)}_onnotification(e){let n=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;n!==void 0&&Promise.resolve().then(()=>n(e)).catch(o=>this._onerror(new Error(`Uncaught error in notification handler: ${o}`)))}_onrequest(e,n){let o=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,r=this._transport,i=e.params?._meta?.[Ir]?.taskId;if(o===void 0){let l={jsonrpc:"2.0",id:e.id,error:{code:F.MethodNotFound,message:"Method not found"}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:"error",message:l,timestamp:Date.now()},r?.sessionId).catch(p=>this._onerror(new Error(`Failed to enqueue error response: ${p}`))):r?.send(l).catch(p=>this._onerror(new Error(`Failed to send an error response: ${p}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a);let c=hx(e.params)?e.params.task:void 0,u=this._taskStore?this.requestTaskStore(e,r?.sessionId):void 0,d={signal:a.signal,sessionId:r?.sessionId,_meta:e.params?._meta,sendNotification:async l=>{if(a.signal.aborted)return;let p={relatedRequestId:e.id};i&&(p.relatedTask={taskId:i}),await this.notification(l,p)},sendRequest:async(l,p,m)=>{if(a.signal.aborted)throw new M(F.ConnectionClosed,"Request was cancelled");let f={...m,relatedRequestId:e.id};i&&!f.relatedTask&&(f.relatedTask={taskId:i});let g=f.relatedTask?.taskId??i;return g&&u&&await u.updateTaskStatus(g,"input_required"),await this.request(l,p,f)},authInfo:n?.authInfo,requestId:e.id,requestInfo:n?.requestInfo,taskId:i,taskStore:u,taskRequestedTtl:c?.ttl,closeSSEStream:n?.closeSSEStream,closeStandaloneSSEStream:n?.closeStandaloneSSEStream};Promise.resolve().then(()=>{c&&this.assertTaskHandlerCapability(e.method)}).then(()=>o(e,d)).then(async l=>{if(a.signal.aborted)return;let p={result:l,jsonrpc:"2.0",id:e.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"response",message:p,timestamp:Date.now()},r?.sessionId):await r?.send(p)},async l=>{if(a.signal.aborted)return;let p={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(l.code)?l.code:F.InternalError,message:l.message??"Internal error",...l.data!==void 0&&{data:l.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"error",message:p,timestamp:Date.now()},r?.sessionId):await r?.send(p)}).catch(l=>this._onerror(new Error(`Failed to send response: ${l}`))).finally(()=>{this._requestHandlerAbortControllers.get(e.id)===a&&this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:n,...o}=e.params,r=Number(n),i=this._progressHandlers.get(r);if(!i){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let a=this._responseHandlers.get(r),c=this._timeoutInfo.get(r);if(c&&a&&c.resetTimeoutOnProgress)try{this._resetTimeout(r)}catch(u){this._responseHandlers.delete(r),this._progressHandlers.delete(r),this._cleanupTimeout(r),a(u);return}i(o)}_onresponse(e){let n=Number(e.id),o=this._requestResolvers.get(n);if(o){if(this._requestResolvers.delete(n),ua(e))o(e);else{let a=new M(e.error.code,e.error.message,e.error.data);o(a)}return}let r=this._responseHandlers.get(n);if(r===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(n),this._cleanupTimeout(n);let i=!1;if(ua(e)&&e.result&&typeof e.result=="object"){let a=e.result;if(a.task&&typeof a.task=="object"){let c=a.task;typeof c.taskId=="string"&&(i=!0,this._taskProgressTokens.set(c.taskId,n))}}if(i||this._progressHandlers.delete(n),ua(e))r(e);else{let a=M.fromError(e.error.code,e.error.message,e.error.data);r(a)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,n,o){let{task:r}=o??{};if(!r){try{yield{type:"result",result:await this.request(e,n,o)}}catch(a){yield{type:"error",error:a instanceof M?a:new M(F.InternalError,String(a))}}return}let i;try{let a=await this.request(e,io,o);if(a.task)i=a.task.taskId,yield{type:"taskCreated",task:a.task};else throw new M(F.InternalError,"Task creation did not return a task");for(;;){let c=await this.getTask({taskId:i},o);if(yield{type:"taskStatus",task:c},Or(c.status)){c.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:i},n,o)}:c.status==="failed"?yield{type:"error",error:new M(F.InternalError,`Task ${i} failed`)}:c.status==="cancelled"&&(yield{type:"error",error:new M(F.InternalError,`Task ${i} was cancelled`)});return}if(c.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:i},n,o)};return}let u=c.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(d=>setTimeout(d,u)),o?.signal?.throwIfAborted()}}catch(a){yield{type:"error",error:a instanceof M?a:new M(F.InternalError,String(a))}}}request(e,n,o){let{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a,task:c,relatedTask:u}=o??{};return new Promise((d,l)=>{let p=N=>{l(N)};if(!this._transport){p(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),c&&this.assertTaskCapability(e.method)}catch(N){p(N);return}o?.signal?.throwIfAborted();let m=this._requestMessageId++,f={...e,jsonrpc:"2.0",id:m};o?.onprogress&&(this._progressHandlers.set(m,o.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:m}}),c&&(f.params={...f.params,task:c}),u&&(f.params={...f.params,_meta:{...f.params?._meta||{},[Ir]:u}});let g=N=>{this._responseHandlers.delete(m),this._progressHandlers.delete(m),this._cleanupTimeout(m),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:m,reason:String(N)}},{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(j=>this._onerror(new Error(`Failed to send cancellation: ${j}`)));let z=N instanceof M?N:new M(F.RequestTimeout,String(N));l(z)};this._responseHandlers.set(m,N=>{if(!o?.signal?.aborted){if(N instanceof Error)return l(N);try{let z=Pr(n,N.result);z.success?d(z.data):l(z.error)}catch(z){l(z)}}}),o?.signal?.addEventListener("abort",()=>{g(o?.signal?.reason)});let v=o?.timeout??TC,b=()=>g(M.fromError(F.RequestTimeout,"Request timed out",{timeout:v}));this._setupTimeout(m,v,o?.maxTotalTimeout,b,o?.resetTimeoutOnProgress??!1);let E=u?.taskId;if(E){let N=z=>{let j=this._responseHandlers.get(m);j?j(z):this._onerror(new Error(`Response handler missing for side-channeled request ${m}`))};this._requestResolvers.set(m,N),this._enqueueTaskMessage(E,{type:"request",message:f,timestamp:Date.now()}).catch(z=>{this._cleanupTimeout(m),l(z)})}else this._transport.send(f,{relatedRequestId:r,resumptionToken:i,onresumptiontoken:a}).catch(N=>{this._cleanupTimeout(m),l(N)})})}async getTask(e,n){return this.request({method:"tasks/get",params:e},kl,n)}async getTaskResult(e,n,o){return this.request({method:"tasks/result",params:e},n,o)}async listTasks(e,n){return this.request({method:"tasks/list",params:e},$l,n)}async cancelTask(e,n){return this.request({method:"tasks/cancel",params:e},xx,n)}async notification(e,n){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let o=n?.relatedTask?.taskId;if(o){let c={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[Ir]:n.relatedTask}}};await this._enqueueTaskMessage(o,{type:"notification",message:c,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!n?.relatedRequestId&&!n?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let c={...e,jsonrpc:"2.0"};n?.relatedTask&&(c={...c,params:{...c.params,_meta:{...c.params?._meta||{},[Ir]:n.relatedTask}}}),this._transport?.send(c,n).catch(u=>this._onerror(u))});return}let a={...e,jsonrpc:"2.0"};n?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[Ir]:n.relatedTask}}}),await this._transport.send(a,n)}setRequestHandler(e,n){let o=ag(e);this.assertRequestHandlerCapability(o),this._requestHandlers.set(o,(r,i)=>{let a=sg(e,r);return Promise.resolve(n(a,i))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,n){let o=ag(e);this._notificationHandlers.set(o,r=>{let i=sg(e,r);return Promise.resolve(n(i))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let n=this._taskProgressTokens.get(e);n!==void 0&&(this._progressHandlers.delete(n),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,n,o){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let r=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,n,o,r)}async _clearTaskQueue(e,n){if(this._taskMessageQueue){let o=await this._taskMessageQueue.dequeueAll(e,n);for(let r of o)if(r.type==="request"&&Ah(r.message)){let i=r.message.id,a=this._requestResolvers.get(i);a?(a(new M(F.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(i)):this._onerror(new Error(`Resolver missing for request ${i} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,n){let o=this._options?.defaultTaskPollInterval??1e3;try{let r=await this._taskStore?.getTask(e);r?.pollInterval&&(o=r.pollInterval)}catch{}return new Promise((r,i)=>{if(n.aborted){i(new M(F.InvalidRequest,"Request cancelled"));return}let a=setTimeout(r,o);n.addEventListener("abort",()=>{clearTimeout(a),i(new M(F.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,n){let o=this._taskStore;if(!o)throw new Error("No task store configured");return{createTask:async r=>{if(!e)throw new Error("No request provided");return await o.createTask(r,e.id,{method:e.method,params:e.params},n)},getTask:async r=>{let i=await o.getTask(r,n);if(!i)throw new M(F.InvalidParams,"Failed to retrieve task: Task not found");return i},storeTaskResult:async(r,i,a)=>{await o.storeTaskResult(r,i,a,n);let c=await o.getTask(r,n);if(c){let u=fa.parse({method:"notifications/tasks/status",params:c});await this.notification(u),Or(c.status)&&this._cleanupTaskProgressHandler(r)}},getTaskResult:r=>o.getTaskResult(r,n),updateTaskStatus:async(r,i,a)=>{let c=await o.getTask(r,n);if(!c)throw new M(F.InvalidParams,`Task "${r}" not found - it may have been cleaned up`);if(Or(c.status))throw new M(F.InvalidParams,`Cannot update task "${r}" from terminal status "${c.status}" to "${i}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await o.updateTaskStatus(r,i,a,n);let u=await o.getTask(r,n);if(u){let d=fa.parse({method:"notifications/tasks/status",params:u});await this.notification(d),Or(u.status)&&this._cleanupTaskProgressHandler(r)}},listTasks:r=>o.listTasks(r,n)}}};function yS(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function vS(t,e){let n={...t};for(let o in e){let r=o,i=e[r];if(i===void 0)continue;let a=n[r];yS(a)&&yS(i)?n[r]={...a,...i}:n[r]=i}return n}var lw=av(K_(),1),dw=av(uw(),1);function OU(){let t=new lw.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,dw.default)(t),t}var Ed=class{constructor(e){this._ajv=e??OU()}getValidator(e){let n="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return o=>n(o)?{valid:!0,data:o,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(n.errors)}}};var Td=class{constructor(e){this._server=e}requestStream(e,n,o){return this._server.requestStream(e,n,o)}createMessageStream(e,n){let o=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!o?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let r=e.messages[e.messages.length-1],i=Array.isArray(r.content)?r.content:[r.content],a=i.some(l=>l.type==="tool_result"),c=e.messages.length>1?e.messages[e.messages.length-2]:void 0,u=c?Array.isArray(c.content)?c.content:[c.content]:[],d=u.some(l=>l.type==="tool_use");if(a){if(i.some(l=>l.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!d)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(d){let l=new Set(u.filter(m=>m.type==="tool_use").map(m=>m.id)),p=new Set(i.filter(m=>m.type==="tool_result").map(m=>m.toolUseId));if(l.size!==p.size||![...l].every(m=>p.has(m)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},_a,n)}elicitInputStream(e,n){let o=this._server.getClientCapabilities(),r=e.mode??"form";switch(r){case"url":{if(!o?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!o?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let i=r==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:i},co,n)}async getTask(e,n){return this._server.getTask({taskId:e},n)}async getTaskResult(e,n,o){return this._server.getTaskResult({taskId:e},n,o)}async listTasks(e,n){return this._server.listTasks(e?{cursor:e}:void 0,n)}async cancelTask(e,n){return this._server.cancelTask({taskId:e},n)}};function pw(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${n} does not support task creation for tools/call (required for ${e})`);break;default:break}}function mw(t,e,n){if(!t)throw new Error(`${n} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${n} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${n} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var Pd=class extends Hl{constructor(e,n){super(n),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(ga.options.map((o,r)=>[o,r])),this.isMessageIgnored=(o,r)=>{let i=this._loggingLevels.get(r);return i?this.LOG_LEVEL_SEVERITY.get(o)<this.LOG_LEVEL_SEVERITY.get(i):!1},this._capabilities=n?.capabilities??{},this._instructions=n?.instructions,this._jsonSchemaValidator=n?.jsonSchemaValidator??new Ed,this.setRequestHandler(zh,o=>this._oninitialize(o)),this.setNotificationHandler(Dh,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(Vh,async(o,r)=>{let i=r.sessionId||r.requestInfo?.headers["mcp-session-id"]||void 0,{level:a}=o.params,c=ga.safeParse(a);return c.success&&this._loggingLevels.set(i,c.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new Td(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=vS(this._capabilities,e)}setRequestHandler(e,n){let r=Rr(e)?.method;if(!r)throw new Error("Schema is missing a method literal");let i;if(bt(r)){let c=r;i=c._zod?.def?.value??c.value}else{let c=r;i=c._def?.value??c.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let c=async(u,d)=>{let l=Pr(so,u);if(!l.success){let g=l.error instanceof Error?l.error.message:String(l.error);throw new M(F.InvalidParams,`Invalid tools/call request: ${g}`)}let{params:p}=l.data,m=await Promise.resolve(n(u,d));if(p.task){let g=Pr(io,m);if(!g.success){let v=g.error instanceof Error?g.error.message:String(g.error);throw new M(F.InvalidParams,`Invalid task creation result: ${v}`)}return g.data}let f=Pr(Al,m);if(!f.success){let g=f.error instanceof Error?f.error.message:String(f.error);throw new M(F.InvalidParams,`Invalid tools/call result: ${g}`)}return f.data};return super.setRequestHandler(e,c)}return super.setRequestHandler(e,n)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){mw(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&pw(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let n=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:px.includes(n)?n:Rh,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},gl)}async createMessage(e,n){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let o=e.messages[e.messages.length-1],r=Array.isArray(o.content)?o.content:[o.content],i=r.some(d=>d.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,c=a?Array.isArray(a.content)?a.content:[a.content]:[],u=c.some(d=>d.type==="tool_use");if(i){if(r.some(d=>d.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!u)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(u){let d=new Set(c.filter(p=>p.type==="tool_use").map(p=>p.id)),l=new Set(r.filter(p=>p.type==="tool_result").map(p=>p.toolUseId));if(d.size!==l.size||![...d].every(p=>l.has(p)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},qh,n):this.request({method:"sampling/createMessage",params:e},_a,n)}async elicitInput(e,n){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let r=e;return this.request({method:"elicitation/create",params:r},co,n)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let r=e.mode==="form"?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:r},co,n);if(i.action==="accept"&&i.content&&r.requestedSchema)try{let c=this._jsonSchemaValidator.getValidator(r.requestedSchema)(i.content);if(!c.valid)throw new M(F.InvalidParams,`Elicitation response content does not match requested schema: ${c.errorMessage}`)}catch(a){throw a instanceof M?a:new M(F.InternalError,`Error validating elicitation response: ${a instanceof Error?a.message:String(a)}`)}return i}}}createElicitationCompletionNotifier(e,n){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},n)}async listRoots(e,n){return this.request({method:"roots/list",params:e},Bh,n)}async sendLoggingMessage(e,n){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,n))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};var hw=Symbol.for("mcp.completable");function ty(t){return!!t&&typeof t=="object"&&hw in t}function gw(t){return t[hw]?.complete}var fw;(function(t){t.Completable="McpCompletable"})(fw||(fw={}));var AU=/^[A-Za-z0-9._-]{1,128}$/;function CU(t){let e=[];if(t.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(t.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${t.length})`]};if(t.includes(" ")&&e.push("Tool name contains spaces, which may cause parsing issues"),t.includes(",")&&e.push("Tool name contains commas, which may cause parsing issues"),(t.startsWith("-")||t.endsWith("-"))&&e.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts"),(t.startsWith(".")||t.endsWith("."))&&e.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts"),!AU.test(t)){let n=t.split("").filter(o=>!/[A-Za-z0-9._-]/.test(o)).filter((o,r,i)=>i.indexOf(o)===r);return e.push(`Tool name contains invalid characters: ${n.map(o=>`"${o}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:e}}return{isValid:!0,warnings:e}}function NU(t,e){if(e.length>0){console.warn(`Tool name validation warning for "${t}":`);for(let n of e)console.warn(` - ${n}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function ry(t){let e=CU(t);return NU(t,e.warnings),e.isValid}var Rd=class{constructor(e){this._mcpServer=e}registerToolTask(e,n,o){let r={taskSupport:"required",...n.execution};if(r.taskSupport==="forbidden")throw new Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,n.title,n.description,n.inputSchema,n.outputSchema,n.annotations,r,n._meta,o)}};var Od=class{constructor(e,n){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Pd(e,n)}get experimental(){return this._experimental||(this._experimental={tasks:new Rd(this)}),this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){this._toolHandlersInitialized||(this.server.assertCanSetRequestHandler(Mr(Ol)),this.server.assertCanSetRequestHandler(Mr(so)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(Ol,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,n])=>{let o={name:e,title:n.title,description:n.description,inputSchema:(()=>{let r=$o(n.inputSchema);return r?ig(r,{strictUnions:!0,pipeStrategy:"input"}):zU})(),annotations:n.annotations,execution:n.execution,_meta:n._meta};if(n.outputSchema){let r=$o(n.outputSchema);r&&(o.outputSchema=ig(r,{strictUnions:!0,pipeStrategy:"output"}))}return o})})),this.server.setRequestHandler(so,async(e,n)=>{try{let o=this._registeredTools[e.params.name];if(!o)throw new M(F.InvalidParams,`Tool ${e.params.name} not found`);if(!o.enabled)throw new M(F.InvalidParams,`Tool ${e.params.name} disabled`);let r=!!e.params.task,i=o.execution?.taskSupport,a="createTask"in o.handler;if((i==="required"||i==="optional")&&!a)throw new M(F.InternalError,`Tool ${e.params.name} has taskSupport '${i}' but was not registered with registerToolTask`);if(i==="required"&&!r)throw new M(F.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(i==="optional"&&!r&&a)return await this.handleAutomaticTaskPolling(o,e,n);let c=await this.validateToolInput(o,e.params.arguments,e.params.name),u=await this.executeToolHandler(o,c,n);return r||await this.validateToolOutput(o,u,e.params.name),u}catch(o){if(o instanceof M&&o.code===F.UrlElicitationRequired)throw o;return this.createToolError(o instanceof Error?o.message:String(o))}}),this._toolHandlersInitialized=!0)}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,n,o){if(!e.inputSchema)return;let i=$o(e.inputSchema)??e.inputSchema,a=await Ll(i,n);if(!a.success){let c="error"in a?a.error:"Unknown error",u=Ml(c);throw new M(F.InvalidParams,`Input validation error: Invalid arguments for tool ${o}: ${u}`)}return a.data}async validateToolOutput(e,n,o){if(!e.outputSchema||!("content"in n)||n.isError)return;if(!n.structuredContent)throw new M(F.InvalidParams,`Output validation error: Tool ${o} has an output schema but no structured content was provided`);let r=$o(e.outputSchema),i=await Ll(r,n.structuredContent);if(!i.success){let a="error"in i?i.error:"Unknown error",c=Ml(a);throw new M(F.InvalidParams,`Output validation error: Invalid structured content for tool ${o}: ${c}`)}}async executeToolHandler(e,n,o){let r=e.handler;if("createTask"in r){if(!o.taskStore)throw new Error("No task store provided.");let a={...o,taskStore:o.taskStore};if(e.inputSchema){let c=r;return await Promise.resolve(c.createTask(n,a))}else{let c=r;return await Promise.resolve(c.createTask(a))}}if(e.inputSchema){let a=r;return await Promise.resolve(a(n,o))}else{let a=r;return await Promise.resolve(a(o))}}async handleAutomaticTaskPolling(e,n,o){if(!o.taskStore)throw new Error("No task store provided for task-capable tool.");let r=await this.validateToolInput(e,n.params.arguments,n.params.name),i=e.handler,a={...o,taskStore:o.taskStore},c=r?await Promise.resolve(i.createTask(r,a)):await Promise.resolve(i.createTask(a)),u=c.task.taskId,d=c.task,l=d.pollInterval??5e3;for(;d.status!=="completed"&&d.status!=="failed"&&d.status!=="cancelled";){await new Promise(m=>setTimeout(m,l));let p=await o.taskStore.getTask(u);if(!p)throw new M(F.InternalError,`Task ${u} not found during polling`);d=p}return await o.taskStore.getTaskResult(u)}setCompletionRequestHandler(){this._completionHandlerInitialized||(this.server.assertCanSetRequestHandler(Mr(Cl)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(Cl,async e=>{switch(e.params.ref.type){case"ref/prompt":return Tx(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return Px(e),this.handleResourceCompletion(e,e.params.ref);default:throw new M(F.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0)}async handlePromptCompletion(e,n){let o=this._registeredPrompts[n.name];if(!o)throw new M(F.InvalidParams,`Prompt ${n.name} not found`);if(!o.enabled)throw new M(F.InvalidParams,`Prompt ${n.name} disabled`);if(!o.argsSchema)return as;let i=Rr(o.argsSchema)?.[e.params.argument.name];if(!ty(i))return as;let a=gw(i);if(!a)return as;let c=await a(e.params.argument.value,e.params.context);return yw(c)}async handleResourceCompletion(e,n){let o=Object.values(this._registeredResourceTemplates).find(a=>a.resourceTemplate.uriTemplate.toString()===n.uri);if(!o){if(this._registeredResources[n.uri])return as;throw new M(F.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let r=o.resourceTemplate.completeCallback(e.params.argument.name);if(!r)return as;let i=await r(e.params.argument.value,e.params.context);return yw(i)}setResourceRequestHandlers(){this._resourceHandlersInitialized||(this.server.assertCanSetRequestHandler(Mr(wl)),this.server.assertCanSetRequestHandler(Mr(El)),this.server.assertCanSetRequestHandler(Mr(Tl)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(wl,async(e,n)=>{let o=Object.entries(this._registeredResources).filter(([i,a])=>a.enabled).map(([i,a])=>({uri:i,name:a.name,...a.metadata})),r=[];for(let i of Object.values(this._registeredResourceTemplates)){if(!i.resourceTemplate.listCallback)continue;let a=await i.resourceTemplate.listCallback(n);for(let c of a.resources)r.push({...i.metadata,...c})}return{resources:[...o,...r]}}),this.server.setRequestHandler(El,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([n,o])=>({name:n,uriTemplate:o.resourceTemplate.uriTemplate.toString(),...o.metadata}))})),this.server.setRequestHandler(Tl,async(e,n)=>{let o=new URL(e.params.uri),r=this._registeredResources[o.toString()];if(r){if(!r.enabled)throw new M(F.InvalidParams,`Resource ${o} disabled`);return r.readCallback(o,n)}for(let i of Object.values(this._registeredResourceTemplates)){let a=i.resourceTemplate.uriTemplate.match(o.toString());if(a)return i.readCallback(o,a,n)}throw new M(F.InvalidParams,`Resource ${o} not found`)}),this._resourceHandlersInitialized=!0)}setPromptRequestHandlers(){this._promptHandlersInitialized||(this.server.assertCanSetRequestHandler(Mr(Pl)),this.server.assertCanSetRequestHandler(Mr(Rl)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(Pl,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,n])=>({name:e,title:n.title,description:n.description,arguments:n.argsSchema?DU(n.argsSchema):void 0}))})),this.server.setRequestHandler(Rl,async(e,n)=>{let o=this._registeredPrompts[e.params.name];if(!o)throw new M(F.InvalidParams,`Prompt ${e.params.name} not found`);if(!o.enabled)throw new M(F.InvalidParams,`Prompt ${e.params.name} disabled`);if(o.argsSchema){let r=$o(o.argsSchema),i=await Ll(r,e.params.arguments);if(!i.success){let u="error"in i?i.error:"Unknown error",d=Ml(u);throw new M(F.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${d}`)}let a=i.data,c=o.callback;return await Promise.resolve(c(a,n))}else{let r=o.callback;return await Promise.resolve(r(n))}}),this._promptHandlersInitialized=!0)}resource(e,n,...o){let r;typeof o[0]=="object"&&(r=o.shift());let i=o[0];if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let a=this._createRegisteredResource(e,void 0,n,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let a=this._createRegisteredResourceTemplate(e,void 0,n,r,i);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),a}}registerResource(e,n,o,r){if(typeof n=="string"){if(this._registeredResources[n])throw new Error(`Resource ${n} is already registered`);let i=this._createRegisteredResource(e,o.title,n,o,r);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[e])throw new Error(`Resource template ${e} is already registered`);let i=this._createRegisteredResourceTemplate(e,o.title,n,o,r);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}_createRegisteredResource(e,n,o,r,i){let a={name:e,title:n,metadata:r,readCallback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({uri:null}),update:c=>{typeof c.uri<"u"&&c.uri!==o&&(delete this._registeredResources[o],c.uri&&(this._registeredResources[c.uri]=a)),typeof c.name<"u"&&(a.name=c.name),typeof c.title<"u"&&(a.title=c.title),typeof c.metadata<"u"&&(a.metadata=c.metadata),typeof c.callback<"u"&&(a.readCallback=c.callback),typeof c.enabled<"u"&&(a.enabled=c.enabled),this.sendResourceListChanged()}};return this._registeredResources[o]=a,a}_createRegisteredResourceTemplate(e,n,o,r,i){let a={resourceTemplate:o,title:n,metadata:r,readCallback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({name:null}),update:d=>{typeof d.name<"u"&&d.name!==e&&(delete this._registeredResourceTemplates[e],d.name&&(this._registeredResourceTemplates[d.name]=a)),typeof d.title<"u"&&(a.title=d.title),typeof d.template<"u"&&(a.resourceTemplate=d.template),typeof d.metadata<"u"&&(a.metadata=d.metadata),typeof d.callback<"u"&&(a.readCallback=d.callback),typeof d.enabled<"u"&&(a.enabled=d.enabled),this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=a;let c=o.uriTemplate.variableNames;return Array.isArray(c)&&c.some(d=>!!o.completeCallback(d))&&this.setCompletionRequestHandler(),a}_createRegisteredPrompt(e,n,o,r,i){let a={title:n,description:o,argsSchema:r===void 0?void 0:rn(r),callback:i,enabled:!0,disable:()=>a.update({enabled:!1}),enable:()=>a.update({enabled:!0}),remove:()=>a.update({name:null}),update:c=>{typeof c.name<"u"&&c.name!==e&&(delete this._registeredPrompts[e],c.name&&(this._registeredPrompts[c.name]=a)),typeof c.title<"u"&&(a.title=c.title),typeof c.description<"u"&&(a.description=c.description),typeof c.argsSchema<"u"&&(a.argsSchema=rn(c.argsSchema)),typeof c.callback<"u"&&(a.callback=c.callback),typeof c.enabled<"u"&&(a.enabled=c.enabled),this.sendPromptListChanged()}};return this._registeredPrompts[e]=a,r&&Object.values(r).some(u=>{let d=u instanceof no?u._def?.innerType:u;return ty(d)})&&this.setCompletionRequestHandler(),a}_createRegisteredTool(e,n,o,r,i,a,c,u,d){ry(e);let l={title:n,description:o,inputSchema:_w(r),outputSchema:_w(i),annotations:a,execution:c,_meta:u,handler:d,enabled:!0,disable:()=>l.update({enabled:!1}),enable:()=>l.update({enabled:!0}),remove:()=>l.update({name:null}),update:p=>{typeof p.name<"u"&&p.name!==e&&(typeof p.name=="string"&&ry(p.name),delete this._registeredTools[e],p.name&&(this._registeredTools[p.name]=l)),typeof p.title<"u"&&(l.title=p.title),typeof p.description<"u"&&(l.description=p.description),typeof p.paramsSchema<"u"&&(l.inputSchema=rn(p.paramsSchema)),typeof p.outputSchema<"u"&&(l.outputSchema=rn(p.outputSchema)),typeof p.callback<"u"&&(l.handler=p.callback),typeof p.annotations<"u"&&(l.annotations=p.annotations),typeof p._meta<"u"&&(l._meta=p._meta),typeof p.enabled<"u"&&(l.enabled=p.enabled),this.sendToolListChanged()}};return this._registeredTools[e]=l,this.setToolRequestHandlers(),this.sendToolListChanged(),l}tool(e,...n){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let o,r,i,a;if(typeof n[0]=="string"&&(o=n.shift()),n.length>1){let u=n[0];if(ny(u))r=n.shift(),n.length>1&&typeof n[0]=="object"&&n[0]!==null&&!ny(n[0])&&(a=n.shift());else if(typeof u=="object"&&u!==null){if(Object.values(u).some(d=>typeof d=="object"&&d!==null))throw new Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);a=n.shift()}}let c=n[0];return this._createRegisteredTool(e,void 0,o,r,i,a,{taskSupport:"forbidden"},void 0,c)}registerTool(e,n,o){if(this._registeredTools[e])throw new Error(`Tool ${e} is already registered`);let{title:r,description:i,inputSchema:a,outputSchema:c,annotations:u,_meta:d}=n;return this._createRegisteredTool(e,r,i,a,c,u,{taskSupport:"forbidden"},d,o)}prompt(e,...n){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let o;typeof n[0]=="string"&&(o=n.shift());let r;n.length>1&&(r=n.shift());let i=n[0],a=this._createRegisteredPrompt(e,void 0,o,r,i);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),a}registerPrompt(e,n,o){if(this._registeredPrompts[e])throw new Error(`Prompt ${e} is already registered`);let{title:r,description:i,argsSchema:a}=n,c=this._createRegisteredPrompt(e,r,i,a,o);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),c}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,n){return this.server.sendLoggingMessage(e,n)}sendResourceListChanged(){this.isConnected()&&this.server.sendResourceListChanged()}sendToolListChanged(){this.isConnected()&&this.server.sendToolListChanged()}sendPromptListChanged(){this.isConnected()&&this.server.sendPromptListChanged()}};var zU={type:"object",properties:{}};function vw(t){return t!==null&&typeof t=="object"&&"parse"in t&&typeof t.parse=="function"&&"safeParse"in t&&typeof t.safeParse=="function"}function bw(t){return"_def"in t||"_zod"in t||vw(t)}function ny(t){return typeof t!="object"||t===null||bw(t)?!1:Object.keys(t).length===0?!0:Object.values(t).some(vw)}function _w(t){if(t){if(ny(t))return rn(t);if(!bw(t))throw new Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return t}}function DU(t){let e=Rr(t);return e?Object.entries(e).map(([n,o])=>{let r=Ux(o),i=Lx(o);return{name:n,description:r,required:!i}}):[]}function Mr(t){let n=Rr(t)?.method;if(!n)throw new Error("Schema is missing a method literal");let o=Zl(n);if(typeof o=="string")return o;throw new Error("Schema method literal must be a string")}function yw(t){return{completion:{values:t.slice(0,100),total:t.length,hasMore:t.length>100}}}var as={completion:{values:[],hasMore:!1}};var ss=s.object({endpoint:s.string().min(1).max(256).optional(),apiKey:s.string().min(1).max(256).optional(),workspace:s.string().min(1).max(256).optional(),region:s.string().min(1).max(256).optional(),feature:s.string().min(1).max(256).optional()}).strict(),kw=s.enum(["SUM","COUNT","MAX","UNIQUE_COUNT","LATEST"]),oy=s.object({d:s.number().int().nonnegative(),w:s.number().int().positive(),c:s.number().nonnegative(),agg:kw.default("COUNT").optional(),valueProperty:s.string().optional(),uniqueProperty:s.string().optional(),provenance:s.enum(["plan","manual","provider"]).optional(),warnAt:s.number().min(0).max(1).optional(),scope:ss.optional()}),jU=s.object({kind:s.literal("credential_validity")}),UU=s.object({kind:s.literal("track_only_bypass")}),LU=s.object({kind:s.literal("lifecycle_block"),blockOn:s.array(s.string()).default(["SUSPENDED","CANCELLED","INACTIVE"]),code:s.string().default("subscription_inactive")}),MU=s.object({kind:s.literal("identity_requirement"),require:s.enum(["org_only","org_and_user"]).default("org_only")}),ZU=s.object({kind:s.literal("scope"),requireExplicit:s.boolean().default(!0)}),FU=s.object({kind:s.literal("permission"),mode:s.enum(["grace","closed"]).optional()}),VU=s.object({kind:s.literal("feature_gate"),feature:s.string().min(1).max(120)}),qU=s.object({kind:s.literal("geo_restriction"),allow:s.array(s.string().length(2).regex(/^[A-Z]{2}$/)).optional(),block:s.array(s.string().length(2).regex(/^[A-Z]{2}$/)).optional()}).refine(t=>t.allow!==void 0||t.block!==void 0,{message:"geo_restriction requires either `allow` or `block`"}),BU=s.enum(["fixed_window","sliding_window","token_bucket"]),HU=oy.extend({kind:s.literal("rate_limit"),m:s.enum(["e","t"]).default("e"),strategy:BU.default("fixed_window"),bucket_capacity:s.number().positive().optional(),refill_rate_per_second:s.number().positive().optional()}).superRefine((t,e)=>{t.strategy==="token_bucket"?(t.bucket_capacity===void 0&&e.addIssue({code:"custom",message:"token_bucket strategy requires `bucket_capacity` (positive number)",path:["bucket_capacity"]}),t.refill_rate_per_second===void 0&&e.addIssue({code:"custom",message:"token_bucket strategy requires `refill_rate_per_second` (positive number)",path:["refill_rate_per_second"]})):(t.bucket_capacity!==void 0&&e.addIssue({code:"custom",message:`bucket_capacity is only valid when strategy === 'token_bucket' (got '${t.strategy}')`,path:["bucket_capacity"]}),t.refill_rate_per_second!==void 0&&e.addIssue({code:"custom",message:`refill_rate_per_second is only valid when strategy === 'token_bucket' (got '${t.strategy}')`,path:["refill_rate_per_second"]}))}),KU=s.enum(["fixed_window","sliding_window"]),GU=oy.extend({kind:s.literal("quota"),ovr:s.enum(["BLOCK","ALLOW_AND_BILL"]),strategy:KU.default("fixed_window")}),WU=oy.extend({kind:s.literal("credit_balance"),ovr:s.enum(["BLOCK","ALLOW_AND_BILL"])}),JU=s.object({kind:s.literal("concurrency"),capability:s.string().min(1).max(120),limit:s.number().int().positive(),lease_ttl_seconds:s.number().int().positive().max(3600).default(60)}),YU=s.object({kind:s.literal("capability_limit"),capability:s.string().min(1).max(120),limit:s.union([s.number().int().nonnegative(),s.boolean()])}),XU=s.object({kind:s.literal("resource_count"),resource:s.string().min(1).max(120),limit:s.number().int().nonnegative(),actionId:s.string().min(1).max(160).optional()}),QU=s.object({kind:s.literal("reservation"),dimension:s.string().min(1).max(120),max_outstanding:s.number().int().positive(),hold_seconds:s.number().int().positive().max(86400)}),eL=s.enum(["plan","manual","provider"]),Ad=s.object({maxInputTokens:s.number().int().positive().optional(),maxOutputTokens:s.number().int().positive().optional(),maxContextTokens:s.number().int().positive().optional(),maxPayloadBytes:s.number().int().positive().optional(),enforcement:s.enum(["enforce","track"]).default("enforce"),failMode:s.enum(["open","closed"]).default("open"),tokenCountSource:s.enum(["declared","estimated"]).optional(),scope:ss.optional()}).refine(xw,{message:"capacity requires at least one ceiling (maxInputTokens / maxOutputTokens / maxContextTokens / maxPayloadBytes)"});function xw(t){return t.maxInputTokens!==void 0||t.maxOutputTokens!==void 0||t.maxContextTokens!==void 0||t.maxPayloadBytes!==void 0}var tL=s.object({kind:s.literal("capacity"),maxInputTokens:s.number().int().positive().optional(),maxOutputTokens:s.number().int().positive().optional(),maxContextTokens:s.number().int().positive().optional(),maxPayloadBytes:s.number().int().positive().optional(),enforcement:s.enum(["enforce","track"]).default("enforce"),failMode:s.enum(["open","closed"]).default("open"),tokenCountSource:s.enum(["declared","estimated"]).optional(),scope:ss.optional(),provenance:eL.optional()}).refine(xw,{message:"capacity requires at least one ceiling (maxInputTokens / maxOutputTokens / maxContextTokens / maxPayloadBytes)"}),iy=s.discriminatedUnion("kind",[jU,UU,LU,MU,ZU,FU,VU,qU,HU,GU,WU,YU,XU,JU,QU,tL]);var cs=["customer_feature","control_plane","admin_internal","background_job","webhook","healthcheck","unclassified"],ZK=new Set(cs);var Cd=s.object({trafficClass:s.enum(cs),policySource:s.enum(["declared","inherited","defaulted","legacy_inferred"]),limitParticipation:s.object({profile:s.enum(["customer_usage","business_capacity","control_plane","admin_internal","platform_abuse_only","healthcheck","none"]),pools:s.array(s.string().min(1)).optional(),scopes:s.array(s.object({endpoint:s.string().optional(),apiKey:s.string().optional(),workspace:s.string().optional(),region:s.string().optional(),feature:s.string().optional()}).passthrough()).optional(),metrics:s.array(s.string().min(1)).optional()}).passthrough(),customerBillingPolicy:s.object({customerBillable:s.boolean(),meterKey:s.string().min(1).optional(),chargeableOutcomes:s.enum(["success_only","success_and_partial","attempted","trusted_actual_usage_only"]),invoiceBehavior:s.string().optional()}).passthrough(),providerCostPolicy:s.object({providerCostTracked:s.boolean(),declaredProviderHint:s.string().optional(),declaredModelHint:s.string().optional()}).passthrough()}).passthrough();var XK=s.object({keyId:s.string().min(1),orgId:s.string().min(1),actorType:s.enum(["org","user"]).optional(),actorId:s.string().nullable().optional(),productId:s.string().min(1),compiledPlanId:s.string().min(1),entitlementHash:s.string().optional(),subjectKey:s.string().min(1),subscriptionId:s.string().min(1),currentPeriodId:s.string().optional(),currentPeriodStartMs:s.number().optional(),subscriberId:s.string().min(1),apiKeyId:s.string().nullable(),entitlementVersion:s.number(),identityRequirement:s.enum(["org_only","org_and_user"]),status:s.enum(["active","revoked"]),expiresAt:s.number().nullable().optional(),subscriberStatus:s.enum(["ONBOARDING","ACTIVE","SUSPENDED"]),subscriptionStatus:s.string().min(1),environment:s.enum(["production","sandbox"]).optional(),environmentId:s.string().optional(),scopes:s.array(s.string()).readonly().optional(),entitlement:s.record(s.string(),s.unknown()).nullable().optional()});var Sw=s.object({unit:s.enum(["requests","tokens","computeMs","dollars"]),window:s.enum(["second","minute","hour","day","week","month"]),capacity:s.number()}),rL=s.object({id:s.string().min(1),slug:s.string().optional(),transportMode:s.enum(["direct","tunnel"]),verificationRequired:s.boolean().optional(),originUrl:s.string().optional(),originHostname:s.string().optional(),accessCredentialRef:s.string().optional(),policyVersion:s.string().optional()}),QK=s.object({id:s.string().min(1),origin:s.string().min(1),sandboxOrigin:s.string().nullable().optional(),authHeader:s.string().optional(),pricing:s.object({requests:s.number().optional(),tokens:s.number().optional(),computeMs:s.number().optional(),per_request:s.number().optional()}).catchall(s.number().optional()).optional(),metering:s.object({tokens:s.object({estimatePerRequest:s.number().optional()}).optional(),computeMs:s.object({estimatePerRequest:s.number().optional()}).optional(),billOn4xx:s.boolean().optional()}).optional(),tenantLimits:s.array(Sw).readonly().optional(),userLimits:s.array(Sw).readonly().optional(),environmentId:s.string().optional(),contextTokenSecret:s.string().nullable().optional(),timeoutMs:s.number().positive().optional(),idleTimeoutMs:s.number().positive().optional(),backends:s.array(rL).optional(),defaultBackendId:s.string().optional(),verificationRequired:s.boolean().optional(),hasPublicRoutes:s.boolean().optional()});var nL=s.object({perRequestMinUnitsByDim:s.record(s.string(),s.number()).optional(),creditPoolMicros:s.number().optional(),perDimUnitCostMicros:s.record(s.string(),s.number()).optional()}),oL=s.object({source:s.enum(["fixed","provider_catalog"]),meterKey:s.string(),selector:s.string().optional(),measures:s.array(s.string()),catalog:s.string().optional(),pricePolicy:s.string().optional(),markupPercent:s.number().optional(),fixedRatesMicros:s.record(s.string(),s.record(s.string(),s.number())).optional()}),iL=s.object({key:s.string(),display:s.string(),unit:s.string().optional(),aggregation:s.enum(["SUM","COUNT","MAX","UNIQUE_COUNT","LATEST"]),window:s.enum(["minute","hour","day","month","billing_period"]),enforcementType:s.string()}),aL=s.object({feature:s.string(),method:s.string(),path:s.string(),meters:s.array(s.string()).optional(),usagePolicy:Cd.optional(),policyResolutionMode:s.enum(["legacy","policy"]).optional()}),eG=s.object({v:s.number(),sub:s.string(),compiledPlanId:s.string().min(1),planType:s.string(),ts:s.number(),constraints:s.array(iy),cv:s.number(),policyResolutionMode:s.enum(["legacy","policy"]).optional(),dm:s.record(s.string(),s.number()),dmv:s.number().optional(),floor:nL.nullable().optional(),displayDims:s.array(s.number()).optional(),meterSemantics:s.record(s.string(),iL).optional(),rp:s.record(s.string(),oL).optional(),fr:s.array(aL).optional(),sig:s.string().min(1),sigKid:s.string().optional(),environmentId:s.string().optional()}).passthrough();var tG=s.object({subscriptionId:s.string().min(1),activePeriodId:s.string().optional(),activeCompiledPlanId:s.string().min(1),activeEntitlementHash:s.string().optional(),enforcementMode:s.enum(["STRICT","GRACE","TRACK_ONLY"]),postStreamLockouts:s.array(s.object({code:s.literal("post_stream_overspend"),reason:s.literal("usage_exhausted"),constraintKey:s.string().min(1),cycleId:s.string().min(1),dimension:s.string().min(1),currentCapacity:s.number().nonnegative(),observedUsage:s.number().nonnegative(),lockedAt:s.string().min(1),expiresAt:s.string().min(1)})).optional(),gracePeriodEndsAt:s.string().optional(),trialEndsAt:s.string().optional(),scheduledTransition:s.object({kind:s.string(),timing:s.string(),scheduledFor:s.string(),toCompiledPlanId:s.string().nullable()}).optional(),creditPool:s.object({periodStartMs:s.number(),periodEndMs:s.number(),grantedCents:s.number(),policy:s.enum(["block","allow"]),epoch:s.number()}).optional(),resourceCounts:s.record(s.string(),s.number()).optional(),dedicatedShard:s.enum(["ACTIVE","DRAINING"]).optional(),memberAuthz:s.record(s.string(),s.object({permissions:s.array(s.string()),roles:s.array(s.string())})).optional(),memberAuthzComputedAt:s.number().optional(),generation:s.number(),updatedAt:s.string()});var sL=["DRAFT","ACTIVE"],oG=s.enum(sL),cL=["ONBOARDING","ACTIVE","SUSPENDED"],$w=s.enum(cL),uL=["ACTIVE","REVOKED"],iG=s.enum(uL),lL=["BLOCK","ALLOW_AND_BILL"],Iw=s.enum(lL),dL=["ACTIVE","ARCHIVED"],aG=s.enum(dL),pL=["ACTIVE","EXPERIMENTAL","LEGACY_STABLE","PHASING_OUT","SUPERSEDED","ARCHIVED"],sG=s.enum(pL);var ww=["input","output","total","cached_read_input","cache_creation_input","context","max_output","estimated_output","actual_output","streaming_output"],Nd=[{id:"requests",label:"API requests",description:"Count every call \u2014 the right default for most APIs.",meters:[{key:"requests",display:"Requests",unit:"request"}]},{id:"ai-tokens",label:"AI tokens",description:"LLM-style token metering alongside calls. The gateway can estimate tokens per request and settle actuals from @farthershore/backend reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"tokens_used",display:"Tokens Used",unit:"token"}]},{id:"credits",label:"Credits",description:"Price work in abstract credits (e.g. one image = 5 credits). Report each call's dynamic credit cost through @farthershore/backend.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"credits",display:"Credits",unit:"credit"}]},{id:"spend",label:"Metered spend",description:"Pass-through spend in cents (OpenRouter-style) reported through @farthershore/backend. Pairs with prepaid credit wallets.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"dollars",display:"Spend",unit:"cent"}]},{id:"compute",label:"Compute time",description:"Bill milliseconds of compute, settled from @farthershore/backend reports.",meters:[{key:"requests",display:"Requests",unit:"request"},{key:"compute_ms",display:"Compute Time",unit:"ms"}]}];function Ew(t){let e=t.trim().toLowerCase();return Nd.find(n=>n.id===e)}function Tw(){return Nd.map(t=>t.id)}var mL="FS_RUNTIME_TOKEN";var fL={payload:"x-fs-metering",signature:"x-fs-metering-sig",token:"x-fs-metering-token"};var pG={environmentVariable:mL,presentation:fL.token,storage:"sha256-hash-only"};var Pw={missingSignature:"missing_signature",malformedSignature:"malformed_signature",unknownKeyId:"unknown_key_id",jwksUnavailable:"jwks_unavailable",badSignature:"bad_signature",bodyHashMismatch:"body_hash_mismatch",routeMismatch:"route_mismatch",clockSkew:"clock_skew",expiredSignature:"expired_signature",replayedNonce:"replayed_nonce",bodyTooLarge:"body_too_large",environmentMismatch:"environment_mismatch",missingToken:"missing_token",invalidToken:"invalid_token",contextUnverified:"context_unverified"};var mG=10*1024*1024;var hL=["CHECKOUT_COMPLETED","PLAN_CHANGED","CANCELLED","RESTORED","UNSCHEDULED_CANCELLATION","PRICE_ROLLOVER","PAUSED","RESUMED","PLAN_CHANGE_SCHEDULED","PLAN_CHANGE_ABORTED","SCHEDULE_CREATED","SCHEDULE_UPDATED","SCHEDULE_RELEASED","SCHEDULE_COMPLETED","SCHEDULE_ABORTED","CANCEL_SCHEDULED","PAYMENT_FAILED","PAYMENT_RECOVERED","PAYMENT_RECOVERED_FROM_SUSPENDED","PAYMENT_ACTION_REQUIRED","RECURRING_PAYMENT","REFUND_PROCESSED","DISPUTE_OPENED","DISPUTE_FUNDS_WITHDRAWN","DISPUTE_CLOSED","DISPUTE_FUNDS_REINSTATED","DISPUTE_CREDIT_REVOKED","DISPUTE_CREDIT_REINSTATED","MIN_SPEND_TRUE_UP"],gG=s.enum(hL);var ay=["BRANCH_PREFIX","PULL_REQUEST","DISABLED"];var gL=s.object({d:s.number(),w:s.number(),capacity:s.number(),remaining:s.number(),windowStart:s.number(),windowEnd:s.number()}),_L=s.record(s.string(),gL),yL=s.object({allocations:s.array(s.number()),expiresAt:s.number()}),vL=s.record(s.string(),yL),bL=s.record(s.string(),s.bigint()),$G=s.object({subscriptionId:s.string(),handoffToken:s.string(),targetShardId:s.string(),policyVersion:s.number(),entitlementVersion:s.number().nullable(),windowStates:_L,activeLeases:vL,totalsByDimension:bL.optional(),billingCycleId:s.string().nullable().optional(),billingCycleStartMs:s.number().optional()});var Rw=new Set(["read","export","download"]);var Ow={org:["read","create","update","delete","manage_settings","manage_billing"],business:["read","create","update","delete","publish","archive"],plan:["read","create","update","delete","promote_version"],makertoken:["read","create","rotate","revoke"],webhook:["read","configure","rotate_secret"],persona:["read","issue","rotate","revoke"],experimental:["promote","rollback"],migration:["create"],auth_provider_connection:["read","create","update","delete"],subscription:["read","cancel","restore","change_plan"],usage:["read","export"],invoice:["read","pay","download"],billing:["read","manage_subscription","refund","change_payment_method"],team:["read","invite","remove_member","change_role","manage_rbac","assign_product_role"],apikey:["read","create","rotate","revoke"],audit_log:["read","export"]},PG=Object.keys(Ow),RG=Object.fromEntries(Object.entries(Ow).map(([t,e])=>[t,{read:e.filter(n=>Rw.has(n)),write:e.filter(n=>!Rw.has(n))}]));var kL=new Set(["GET","HEAD","OPTIONS"]);function sy(t,e){return kL.has(e.toUpperCase())?`${t}:read`:`${t}:write`}var xL={gatewayProjectRead:"gateway:project:read",gatewayResourceWrite:"gateway:resource:write",usageWrite:"usage:write",authzDeniedWrite:"authz-denied:write",reservationAuthorize:"reservation:authorize",reservationFinalize:"reservation:finalize",internalCronRun:"internal:cron:run",personaManage:"persona:manage"},NG=Object.values(xL);var SL=["managed_frontend","custom_frontend","embedded_sdk","public_api","cli","agent","webhook","admin","internal"],Cw=s.enum(SL),Aw=s.string().min(1).max(128),$L=s.object({d:s.number().int().nonnegative(),w:s.number().int().positive(),rem:s.number(),cap:s.number()}).strict(),Nw=s.object({v:s.literal(1),entV:s.number().int().nonnegative().optional(),entHash:Aw.optional(),featureGrant:s.boolean().optional(),gates:s.array(Aw).max(16).optional(),limits:s.array($L).max(16).optional()}).strict();var IL=s.object({requestId:s.string(),eventId:s.string(),tenantId:s.string(),slug:s.string(),subscriptionId:s.string(),subscriberId:s.string(),apiKeyId:s.string().nullable(),compiledPlanId:s.string(),subscriberStatus:$w,subscriptionStatus:s.string(),productId:s.string(),statusCode:s.number(),path:s.string(),latencyMs:s.number(),rawDimsUnits:s.record(s.string(),s.number()),matchedRouteMeters:s.array(s.string().min(1)).optional(),servedRouteScopes:s.array(s.string().min(1)).optional(),meterSettlements:s.array(s.object({meterId:s.string(),meterType:s.enum(["exact_pre_request","estimated_then_settled","postpaid","strict_concurrency"]),reserved:s.number(),actual:s.number(),delta:s.number(),dimension:s.number().int().nonnegative(),leaseId:s.string()})).optional(),reportingAttested:s.boolean(),customerBillable:s.boolean(),postStreamPending:s.boolean().optional(),measureContext:s.record(s.string(),s.unknown()).optional(),creditUnitsConsumed:s.record(s.string(),s.number()).optional(),timestamp:s.number(),environmentId:s.string().nullable().optional(),orgId:s.string().optional(),actorType:s.enum(["org","user"]).optional(),actorId:s.string().nullable().optional(),subjectKey:s.string().optional(),overageBehavior:Iw.optional(),environment:s.enum(["production","sandbox"]).optional(),surface:Cw.optional(),actionId:s.string().min(1).max(128).optional(),subjectType:s.string().min(1).max(128).optional(),subjectId:s.string().min(1).max(256).optional(),decision:Nw.optional(),decisionId:s.string().min(1).max(256).optional(),denyClass:s.enum(["quota","rate","concurrency","capacity","spend","adaptive"]).optional(),blockingConstraintId:s.string().min(1).max(256).optional(),providerSettlements:s.array(s.object({meterId:s.string(),providerReported:s.number(),reconciled:s.number()})).optional(),usagePolicyId:s.string().min(1).max(256).optional(),policySource:s.enum(["declared","inherited","defaulted","legacy_inferred"]).optional(),trafficClass:s.enum(cs).optional(),limitProfile:s.enum(["customer_usage","business_capacity","control_plane","admin_internal","platform_abuse_only","healthcheck","none"]).optional(),leaseId:s.string(),transactionId:s.string(),gatewayMetadata:s.object({shardId:s.string(),policyVersion:s.number().int().nonnegative().optional(),artifactVersion:s.number().int().nonnegative().default(0),artifactHash:s.string().regex(/^sha256_[a-f0-9]{64}$/).optional(),leaseTelemetry:s.object({consumeRequests:s.number().int().nonnegative(),localLeaseHits:s.number().int().nonnegative(),doAllocationAttempts:s.number().int().nonnegative(),doAllocationGrants:s.number().int().nonnegative(),doAllocationDenials:s.number().int().nonnegative(),doUnavailable:s.number().int().nonnegative(),doCircuitOpen:s.number().int().nonnegative(),leaseRefreshSingleflightJoins:s.number().int().nonnegative(),leaseRefreshSingleflightJoinRate:s.number().min(0).max(1),expiredLeasesReaped:s.number().int().nonnegative(),expiredLeaseReclaimedGrant:s.array(s.number().nonnegative()),reconcileRequests:s.number().int().nonnegative(),reconcilePositiveDeltas:s.number().int().nonnegative(),reconcileNoLocalLease:s.number().int().nonnegative(),doReconcileAttempts:s.number().int().nonnegative(),doReconcileFailures:s.number().int().nonnegative(),unspentLeaseRemainderReturns:s.number().int().nonnegative(),unspentLeaseRemainderReturnFailures:s.number().int().nonnegative(),unspentLeaseRemainderReturnedGrant:s.array(s.number().nonnegative()),maxObservedPositiveReconcileDelta:s.array(s.number().nonnegative()),requestToDoRatio:s.number().nonnegative(),localLeaseHitRate:s.number().min(0).max(1),localSpendRate:s.number().min(0).max(1),maxObservedActiveLeases:s.number().int().nonnegative(),maxObservedOutstandingGrant:s.array(s.number().nonnegative()),maxObservedOutstandingGrantRatio:s.number().nonnegative(),maxObservedEmergencyReserveGrant:s.array(s.number().nonnegative()),maxObservedEmergencyReserveGrantRatio:s.number().nonnegative(),maxObservedLeaseGrant:s.array(s.number().nonnegative()),maxObservedLeaseGrantRatio:s.number().nonnegative(),maxObservedLeaseTtlMs:s.number().int().nonnegative()}).optional(),artifactCacheTelemetry:s.object({reads:s.number().int().nonnegative(),l0FreshHits:s.number().int().nonnegative(),l0Misses:s.number().int().nonnegative(),l0StaleServes:s.number().int().nonnegative(),l0StaleIfErrorServes:s.number().int().nonnegative(),l0BlockingRefreshes:s.number().int().nonnegative(),l0SingleflightJoins:s.number().int().nonnegative(),l0EarlyRefreshes:s.number().int().nonnegative(),l1Hits:s.number().int().nonnegative(),l1Misses:s.number().int().nonnegative(),l1Rejected:s.number().int().nonnegative(),l1WriteFailures:s.number().int().nonnegative(),kvHits:s.number().int().nonnegative(),kvMisses:s.number().int().nonnegative(),kvTimeouts:s.number().int().nonnegative(),kvCircuitOpenReads:s.number().int().nonnegative(),resultHits:s.number().int().nonnegative(),resultMisses:s.number().int().nonnegative(),resultDenied:s.number().int().nonnegative(),resultUnavailable:s.number().int().nonnegative(),backgroundRefreshErrors:s.number().int().nonnegative(),l0HitRate:s.number().min(0).max(1),l0SingleflightJoinRate:s.number().min(0).max(1),l0EarlyRefreshRate:s.number().min(0).max(1),l1HitRate:s.number().min(0).max(1),kvHitRate:s.number().min(0).max(1),resultHitRate:s.number().min(0).max(1),staleServeRate:s.number().min(0).max(1)}).optional(),gatewayVersion:s.string()}).passthrough()}).passthrough();var wL=s.object({path:s.string(),code:s.string(),message:s.string()}),qG=s.object({reason:s.literal("schema_validation_failed"),receivedAt:s.string(),rawPayload:s.unknown(),issues:s.array(wL),consumerVersion:s.string().optional(),originalMessageId:s.string().optional()});var zw=[{name:"subscription.created",webhook:!0,description:"A subscriber subscription was created."},{name:"subscription.updated",webhook:!0,description:"A subscriber subscription changed (plan, status, trial)."},{name:"subscription.canceled",webhook:!0,description:"A subscriber subscription was canceled."},{name:"payment.succeeded",webhook:!0,description:"A Stripe payment succeeded for a subscription."},{name:"payment.failed",webhook:!0,description:"A Stripe payment failed for a subscription."},{name:"rate_limit.exceeded",webhook:!0,description:"The gateway denied a request for exceeding a rate limit."},{name:"entitlement.changed",webhook:!0,description:"A compiled entitlement/plan was (re)published."},{name:"usage.threshold_reached",webhook:!0,description:"A metered-usage threshold was crossed."},{name:"change_set.created",webhook:!1,description:"A governed Evolution ChangeSet was proposed (draft created)."},{name:"change_set.approved",webhook:!1,description:"A governed Evolution ChangeSet was approved."},{name:"change_set.applied",webhook:!1,description:"A governed Evolution ChangeSet was applied to live state."},{name:"change_set.rolled_back",webhook:!1,description:"A governed Evolution ChangeSet was rolled back."},{name:"change_set.cancelled",webhook:!1,description:"A governed Evolution ChangeSet was cancelled."},{name:"billing.event_recorded",webhook:!1,description:"A BillingEvent row was recorded; the fact references it by id (the authoritative billing row is unchanged \u2014 exact-accounting invariant)."},{name:"authz.decision",webhook:!1,description:"An authorization decision (ALLOW/DENY) mirrored from the audit log onto the spine; AuditLog stays authoritative."},{name:"repo.changed",webhook:!1,description:"A default-branch push to the business's repo touched paths at least one enabled automation rule watches (payload: branch, headSha, bounded changed-path list). Emitted pre-filtered \u2014 never on every push \u2014 so path-triggered automations (e.g. legal/** changed \u2192 notify subscribers) can fire deterministically."},{name:"automation.rule_fired",webhook:!1,description:"An enabled AutomationRule matched a spine fact (trigger + all conditions held) and its actions were scheduled."},{name:"automation.action_succeeded",webhook:!1,description:"An AutomationRule action ran to success."},{name:"automation.action_failed",webhook:!1,description:"An AutomationRule action failed (will retry per the queue)."},{name:"automation.action_denied",webhook:!1,description:"An AutomationRule action was DENIED \u2014 the automation actor lacked the action's native permission (automation is a first-class authz subject, never a bypass). Recorded + audited; the action did not run."},{name:"automation.notification",webhook:!1,description:"A notification recorded by an AutomationRule `create_notification` action \u2014 a spine fact other surfaces (portal/admin) read; no separate notification runtime."},{name:"access_request.created",webhook:!1,description:"A subscriber member requested a missing permission (AccessRequest row created). Internal \u2014 the Communication layer notifies the subscriber's admins (who can grant it)."},{name:"access_request.resolved",webhook:!1,description:"A pending AccessRequest was resolved (approved or denied) by an owner/admin. Internal \u2014 notifies the subscriber's admins."},{name:"build.failed",webhook:!1,description:"A build for the business (frontend/portal or Business-SDK) failed and did not go live. Internal \u2014 the Communication layer notifies the org's members (opt-out-able, category: deployments)."},{name:"product.published",webhook:!1,description:"A business went live for the first time (DRAFT\u2192ACTIVE first publish). Internal \u2014 notifies the org's members (category: deployments)."},{name:"workflow.failed",webhook:!1,description:"A platform workflow (config apply / Stripe sync / subscription transition) reached a terminal FAILED state. Internal \u2014 notifies the org's admins (category: deployments)."},{name:"pr.review_posted",webhook:!1,description:"The platform posted (or updated) its Business-as-Code impact report on a managed-repo pull request. Internal \u2014 emails the org's members the review synopsis + a link to the PR (category: deployments)."}],EL=zw.map(t=>t.name),Dw=zw.filter(t=>t.webhook).map(t=>t.name),KG=s.enum(EL);var jw=["subscription.created","subscription.updated","subscription.canceled","payment.succeeded","payment.failed","rate_limit.exceeded","entitlement.changed","usage.threshold_reached"],cy=jw;{let t=new Set(Dw),e=new Set(jw),n=[...t].filter(r=>!e.has(r)),o=[...e].filter(r=>!t.has(r));if(n.length>0||o.length>0)throw new Error(`[webhooks/events] WEBHOOK_EVENT_NAMES drifted from the events catalog. Missing from order tuple: [${n.join(", ")}]; extra in order tuple: [${o.join(", ")}]. Reconcile ../events/catalog.ts (webhook: true entries) with WEBHOOK_EVENT_ORDER in this file.`)}var Vo=s.enum(cy);var Ut=s.enum(["immediate","period_end","grandfather"]),qo=s.object({default:Ut.default("period_end"),when:s.object({price_increase:Ut.optional(),price_decrease:Ut.optional(),feature_added:Ut.optional(),feature_removed:Ut.optional(),limit_increased:Ut.optional(),limit_reduced:Ut.optional(),credit_increased:Ut.optional(),credit_reduced:Ut.optional(),rating_changed:Ut.optional()}).strict().default({price_increase:"period_end",price_decrease:"immediate",feature_added:"immediate",feature_removed:"period_end",limit_increased:"immediate",limit_reduced:"period_end",credit_increased:"immediate",credit_reduced:"period_end",rating_changed:"period_end"}),allowImmediatePriceIncrease:s.boolean().default(!1),allowImmediateEntitlementReduction:s.boolean().default(!1)}).strict().superRefine((t,e)=>{(t.when.price_increase??t.default)==="immediate"&&!t.allowImmediatePriceIncrease&&e.addIssue({code:"custom",path:["when","price_increase"],message:"price_increase cannot switch immediately without allowImmediatePriceIncrease: true"});for(let n of["feature_removed","limit_reduced","credit_reduced"])(t.when[n]??t.default)==="immediate"&&!t.allowImmediateEntitlementReduction&&e.addIssue({code:"custom",path:["when",n],message:`${n} cannot switch immediately without allowImmediateEntitlementReduction: true`})}),TL=qo.parse({});var PL=s.object({kind:s.literal("credit"),amount_cents:s.number().int().nonnegative(),recurs:s.boolean().optional(),expires_after_days:s.number().int().positive().optional(),label:s.string().min(1).max(120).optional()}),RL=s.object({kind:s.literal("top_up"),sku:s.string().min(1).max(120),label:s.string().min(1).max(200),price_cents:s.number().int().positive(),credit_cents:s.number().int().positive()}),sr=s.discriminatedUnion("kind",[PL,RL]);function Uw(t){return t.kind==="credit"&&t.recurs===!0&&t.label===void 0}function Lw(t){return t.kind==="credit"&&t.recurs!==!0&&t.label===void 0}function uy(t,e,n=["grants"]){if(!t)return;let o=0,r=0;for(let i of t)Uw(i)?o+=1:Lw(i)&&(r+=1);o>1&&e.addIssue({code:"custom",message:"At most one recurring `credit` grant (recurs:true, no label) is allowed \u2014 recurring credit is a single canonical entry.",path:n}),r>1&&e.addIssue({code:"custom",message:"At most one one-time `credit` grant (recurs:false, no label) is allowed \u2014 one-time credit is a single canonical entry.",path:n})}function Mw(t){return t.grants&&t.grants.length>0?[...t.grants]:[]}function ly(t){return Mw(t).find(Uw)?.amount_cents??0}function zd(t){return Mw(t).find(Lw)?.amount_cents??0}var OL=s.object({percent:s.number().int().min(0).max(100)}),AL=s.object({threshold_cents:s.number().int().nonnegative(),refill_cents:s.number().int().positive()}),cr=s.object({rollover:OL.optional(),auto_recharge:AL.optional()});var Zw=s.enum(["linear","active_count","event_count"]);var CL=s.object({up_to:s.number().int().positive().nullable(),price_per_unit_micros:s.number().int().nonnegative()}),NL=s.object({strategy:s.enum(["graduated","volume"]),tiers:s.array(CL).min(1).max(20)}),ur=s.object({dimension:s.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"Meter dimension must be lowercase alphanumeric with underscores"),kind:Zw.default("linear"),price_per_unit_micros:s.number().int().nonnegative().default(0),tiered:NL.optional(),included_units:s.number().int().positive().optional()}).superRefine((t,e)=>{if(t.tiered&&t.price_per_unit_micros>0&&e.addIssue({code:"custom",message:"`tiered` is mutually exclusive with a non-zero `price_per_unit_micros` \u2014 drop one",path:["tiered"]}),t.included_units!==void 0&&t.tiered&&e.addIssue({code:"custom",message:"`included_units` is mutually exclusive with `tiered` \u2014 a tiered schedule already expresses the included allotment as a zero-priced first tier",path:["included_units"]}),t.tiered){let n=0,o=!1;for(let r=0;r<t.tiered.tiers.length;r++){let i=t.tiered.tiers[r];if(o){e.addIssue({code:"custom",message:"Open-ended tier (`up_to: null`) must be the final tier",path:["tiered","tiers",r,"up_to"]});break}if(i.up_to===null){o=!0;continue}i.up_to<=n&&e.addIssue({code:"custom",message:`Tier upper bounds must be strictly ascending (tier ${r} = ${i.up_to} <= previous ${n})`,path:["tiered","tiers",r,"up_to"]}),n=i.up_to}o||e.addIssue({code:"custom",message:"The final tier of a `tiered` schedule must be open-ended (`up_to: null`)",path:["tiered","tiers",t.tiered.tiers.length-1,"up_to"]})}}),hn=s.enum(["month","year"]),zL=s.object({meters:s.array(ur).default([]),recurring_fee_cents:s.number().int().nonnegative().default(0),billing_interval:hn.default("month"),grants:s.array(sr).max(40).default([]),creditPolicy:cr.optional(),trial_days:s.number().int().nonnegative().default(0),max_monthly_spend_cents:s.number().int().nonnegative().optional()});var DL=s.string().min(1),jL=s.object({type:s.literal("named"),name:s.enum(["second","minute","hour","day","week","month"])}),UL=s.object({type:s.literal("custom"),seconds:s.number().int().positive(),label:s.string().optional()}),LL=s.discriminatedUnion("type",[jL,UL]),Zr=s.object({dimension:DL,window:LL,capacity:s.number().nonnegative(),enforcement:s.enum(["enforce","track"]).optional(),warnAt:s.number().min(0).max(1).optional(),scope:ss.optional(),acknowledgeUnreachable:s.boolean().optional()}),lW=s.array(Zr).max(20);var ML=s.enum(["NONE","PRORATE","CREDIT"]).default("NONE"),ZL={meters:s.array(ur).default([]),recurring_fee_cents:s.number().int().nonnegative().default(0),billing_interval:hn.default("month"),trial_days:s.number().int().nonnegative().default(0),max_monthly_spend_cents:s.number().int().nonnegative().optional(),min_monthly_spend_cents:s.number().int().nonnegative().optional(),grants:s.array(sr).max(40).default([]),creditPolicy:cr.optional()},FL={meters:s.array(ur).optional(),recurring_fee_cents:s.number().int().nonnegative().optional(),billing_interval:hn.optional(),trial_days:s.number().int().nonnegative().optional(),max_monthly_spend_cents:s.number().int().nonnegative().optional(),min_monthly_spend_cents:s.number().int().nonnegative().optional(),grants:s.array(sr).max(40).optional(),creditPolicy:cr.optional()},VL=s.object({id:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Variant id must be lowercase alphanumeric with hyphens/underscores"),label:s.string().max(200).optional(),rolloutPercent:s.number().int().min(0).max(100),assignmentSeed:s.string().min(1).max(100).default("default"),prorationOnRollback:ML,...FL,limits:s.array(Zr).max(20).optional(),featureGates:s.record(s.string(),s.boolean()).optional(),capability_limits:s.record(s.string().min(1).max(120),s.union([s.number().int().nonnegative(),s.boolean()])).optional(),overageBehavior:s.enum(["block","allow_and_bill"]).optional(),capacity:Ad.optional()}),Fw=VL.superRefine((t,e)=>{uy(t.grants,e)}),Vw=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Plan key must be lowercase alphanumeric with hyphens/underscores"),name:s.string().min(1).max(100),description:s.string().max(500).optional(),details:s.array(s.string().max(200)).max(10).optional(),...ZL,free:s.boolean().default(!1),limits:s.array(Zr).max(20).default([]),featureGates:s.record(s.string(),s.boolean()).optional(),capability_limits:s.record(s.string().min(1).max(120),s.union([s.number().int().nonnegative(),s.boolean()])).default({}),overageBehavior:s.enum(["block","allow_and_bill"]).default("block"),selfServeEnabled:s.boolean().default(!0),capacity:Ad.optional(),legacy:s.boolean().optional().default(!1),variants:s.array(Fw).max(4).optional(),archive:s.object({at:s.string().datetime().optional(),transitionTo:s.string().optional(),strategy:s.enum(["auto","explicit","block"]).default("auto")}).optional()}),Dd=Vw.superRefine((t,e)=>{uy(t.grants,e)});var qL=/^\$\{[A-Z][A-Z0-9_]{0,127}\}$/,dy=s.string().min(3).max(200).refine(t=>qL.test(t),{message:"secret must use ${VAR} interpolation syntax (e.g. ${WEBHOOK_SECRET}); raw secrets in YAML are rejected. Define the env var in the per-product secret store and reference it here."}),py=s.object({maxAttempts:s.number().int().min(1).max(20).default(5),backoff:s.enum(["exponential","fixed"]).default("exponential")}),my=s.object({id:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Webhook endpoint id must be lowercase alphanumeric with hyphens/underscores"),url:s.string().url("webhooks.endpoints[].url must be a valid URL"),secret:dy,events:s.array(Vo).min(1,"webhooks.endpoints[].events must subscribe to \u2265 1 event"),enabled:s.boolean().default(!0),retryPolicy:py.default({maxAttempts:5,backoff:"exponential"})}),fy=s.object({endpoints:s.array(my).max(50).default([])});var BL=s.object({meters:s.array(ur).optional(),recurring_fee_cents:s.number().int().nonnegative().optional(),billing_interval:hn.optional(),grants:s.array(sr).max(40).optional(),creditPolicy:cr.optional(),trial_days:s.number().int().nonnegative().optional(),max_monthly_spend_cents:s.number().int().nonnegative().optional(),limits:s.array(Zr).max(20).optional(),featureGates:s.record(s.string(),s.boolean()).optional(),overageBehavior:s.enum(["block","allow_and_bill"]).optional(),selfServeEnabled:s.boolean().optional(),legacy:s.boolean().optional()}).strict(),HL=s.object({url:s.string().url().optional(),secret:dy.optional(),events:s.array(Vo).optional(),enabled:s.boolean().optional(),retryPolicy:py.partial().optional()}).strict(),KL=s.object({plans:s.record(s.string(),BL).optional(),webhooks:s.object({endpoints:s.record(s.string(),HL).optional()}).strict().optional()}).strict(),hy=s.record(s.string().min(1).max(64),KL);var qw=1,Bw=["plans_table","usage_card","api_keys_panel","billing_summary","credit_balance","feature_panel","business_docs","audit_log","team_panel","markdown"],Hw=["/","/pricing","/dashboard","/dashboard/*","/settings","/settings/*","/team","/audit-log","/docs","/docs/*","/terms","/privacy","/persona","/persona-sign-in"],Kw=s.string().min(1).max(200).regex(/^\/[a-zA-Z0-9_./-]*$/,"path must start with / and contain only [a-zA-Z0-9_./-]"),gy=s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/),_y=s.string().min(1).max(120).regex(/^(\*|[a-z0-9_-]+:(\*|[a-z0-9_-]+))$/,"permission must be '*' or '<subject>:<verb>' (verb may be '*')"),GL=s.enum(["hide","disable","readOnly","denied","upsell"]).default("hide"),Gw=s.object({label:s.string().min(1).max(80),path:Kw,capability:gy.optional(),permission:_y.optional()}),Ww=s.enum(Bw),Jw=s.object({component:Ww,props:s.record(s.string().min(1).max(80),s.unknown()).optional(),capability:gy.optional(),permission:_y.optional(),gateMode:GL}),Yw=s.object({path:Kw,title:s.string().min(1).max(120),requiresAuth:s.boolean(),capability:gy.optional(),permission:_y.optional(),components:s.array(Jw).max(12).default([])}),yy=s.object({version:s.literal(qw),nav:s.array(Gw).max(12).default([]),pages:s.array(Yw).max(24).default([])}).superRefine((t,e)=>{let n=new Set;t.pages.forEach((o,r)=>{n.has(o.path)&&e.addIssue({code:"custom",message:`duplicate frontend page path "${o.path}"`,path:["pages",r,"path"]}),n.add(o.path),Xw(o.path)&&e.addIssue({code:"custom",message:`frontend page path "${o.path}" is reserved by the template`,path:["pages",r,"path"]})})});function Xw(t){return Hw.some(e=>{if(e.endsWith("/*")){let n=e.slice(0,-2);return t===n||t.startsWith(`${n}/`)}return t===e})}var Qw=s.enum(["subscription","subject"]),eE=s.enum(["reported","action_inferred"]),tE=s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/),rE=s.object({name:tE,display:s.string().min(1).max(120).optional(),scope:Qw.default("subscription"),subjectType:s.string().min(1).max(64).regex(/^[a-zA-Z0-9_.:-]+$/).optional(),countSource:eE.default("reported")}).superRefine((t,e)=>{t.scope==="subject"&&!t.subjectType&&e.addIssue({code:"custom",path:["subjectType"],message:"subjectType is required when resource scope is subject"}),t.scope==="subscription"&&t.subjectType&&e.addIssue({code:"custom",path:["subjectType"],message:"subjectType is only valid for subject-scoped counted resources"})}),vy=s.array(rE).max(100).default([]);var nE=/^[a-z0-9][a-z0-9_-]*$/,by=s.string().min(1).max(64).regex(nE,"backend id must be a lowercase slug ([a-z0-9][a-z0-9_-]*)"),oE=s.enum(["direct","tunnel"]),iE=s.enum(["embedded","sidecar"]);var aE=s.object({mode:oE.default("direct"),runner:iE.optional()}).strict(),sE=s.object({required:s.boolean().default(!1)}).strict(),cE=s.object({url:s.string().url().optional(),hostname:s.string().min(1).max(255).optional(),weight:s.number().int().min(0).max(1e3).optional()}).strict(),uE=s.discriminatedUnion("policy",[s.object({policy:s.literal("single")}).strict(),s.object({policy:s.literal("weighted")}).strict()]),lE=s.object({name:s.string().min(1).max(120).optional(),slug:by.optional(),transport:aE.default({mode:"direct"}),verification:sE.default({required:!1}),meters:s.array(s.string().min(1).max(64)).max(100).optional(),default:s.boolean().optional(),originUrl:s.string().url().optional(),originHostname:s.string().min(1).max(255).optional(),endpoints:s.array(cE).optional(),selection:uE.optional()}).strict(),ky=s.record(by,lE),Bo=by,Ho={unknownBackendInRoute:"UNKNOWN_BACKEND_IN_ROUTE",ambiguousDefaultBackend:"AMBIGUOUS_DEFAULT_BACKEND",routeMeterNotAllowedByBackend:"ROUTE_METER_NOT_ALLOWED_BY_BACKEND",unknownMeterInBackend:"UNKNOWN_METER_IN_BACKEND",multiEndpointNotSupported:"BACKEND_MULTI_ENDPOINT_NOT_SUPPORTED"};function xy(t){let e=Object.keys(t??{});if(e.length===0)return{defaultId:null,ambiguous:!1};if(e.length===1)return{defaultId:e[0],ambiguous:!1};let n=e.filter(o=>t[o]?.default===!0);return n.length===1?{defaultId:n[0],ambiguous:!1}:{defaultId:null,ambiguous:!0}}var WL=s.string().min(2).max(20).regex(/^\d+(ms|s|m|h)$/,"rate_limit window must look like `60s`, `5m`, `1h`"),dE=s.object({strategy:s.enum(["token_bucket","sliding_window","fixed_window"]).default("token_bucket"),dimensions:s.array(s.enum(["subscription","credential","ip","route"])).min(1).max(4).default(["subscription"]),limits:s.array(s.object({window:WL,max:s.number().int().positive().max(1e7)})).min(1).max(10),fail_open:s.object({max_consecutive_failures:s.number().int().positive().default(100),max_window_seconds:s.number().int().positive().default(60),recovery_threshold:s.number().int().positive().default(50),degraded_mode:s.enum(["safe_mode_block","safe_mode_throttle","runtime_killswitch_trigger"]).default("safe_mode_throttle")}).default({max_consecutive_failures:100,max_window_seconds:60,recovery_threshold:50,degraded_mode:"safe_mode_throttle"})}),pE=s.object({header_name:s.string().min(1).max(100).default("x-api-key"),upstream_token_source:s.discriminatedUnion("type",[s.object({type:s.literal("none")}),s.object({type:s.literal("static_bearer"),token_secret_ref:s.string().min(1).max(200).describe("Reference into the secret store (e.g. CF Secret name); not the raw token")})]).default({type:"none"}),scope_mode:s.enum(["strict","advisory","off"]).default("strict")}),mE=s.object({max_in_flight:s.number().int().positive().max(1e4),dimensions:s.array(s.enum(["subscription","credential","capability"])).min(1).max(3).default(["subscription"]),capability:s.string().min(1).max(120).optional(),lease_ttl_seconds:s.number().int().positive().max(600).default(30),fail_open:s.object({max_consecutive_failures:s.number().int().positive().default(50),max_window_seconds:s.number().int().positive().default(60),recovery_threshold:s.number().int().positive().default(20),degraded_mode:s.enum(["safe_mode_block","safe_mode_throttle","runtime_killswitch_trigger"]).default("safe_mode_throttle")}).default({max_consecutive_failures:50,max_window_seconds:60,recovery_threshold:20,degraded_mode:"safe_mode_throttle"})}),fE=s.object({max_attempts:s.number().int().min(1).max(5).default(2),retry_on_status:s.array(s.number().int().min(400).max(599)).min(1).max(20).default([502,503,504]),backoff:s.object({initial_ms:s.number().int().positive().max(5e3).default(100),multiplier:s.number().positive().max(10).default(2),jitter:s.enum(["none","full","equal"]).default("equal"),total_budget_ms:s.number().int().positive().max(3e4).default(5e3)}).default({initial_ms:100,multiplier:2,jitter:"equal",total_budget_ms:5e3})}),hE=s.object({applies_to:s.enum(["request","response","both"]).default("request"),rewrites:s.array(s.object({source:s.string().min(1).max(200),target:s.string().min(1).max(200).nullable()})).min(1).max(20)});var Sy=s.discriminatedUnion("type",[s.object({type:s.literal("rate_limit"),config:dE}),s.object({type:s.literal("auth"),config:pE}),s.object({type:s.literal("concurrency"),config:mE}),s.object({type:s.literal("retry"),config:fE}),s.object({type:s.literal("transform"),config:hE})]);var jd=s.enum(["long","short","blocking"]).default("long"),gE=s.object({route_types:s.array(s.enum(["http"])).max(5).optional(),meters:s.array(s.string().min(1).max(64)).max(20).optional(),auth_modes:s.array(s.enum(["api_key","oauth2","anonymous"])).max(5).optional()});var $y=s.intersection(s.object({name:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Policy name must be lowercase alphanumeric with hyphens/underscores"),description:s.string().max(500).optional(),compatible_with:gE.default({}),mutation_class:s.enum(["runtime","contractual"]).default("runtime"),cacheProfile:jd}),Sy);var JL=s.enum(["query","mutation"]),YL=s.enum(["none","metadata","full"]),XL=s.object({type:s.string().min(1).max(64).regex(/^[a-zA-Z0-9_.:-]+$/),from:s.enum(["header","path_param"]),name:s.string().min(1).max(120)}),QL=s.object({resource:s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/),effect:s.enum(["create","delete"])}),_E=s.object({id:s.string().min(1).max(160).regex(/^[a-z0-9_.:-]+$/),title:s.string().min(1).max(160).optional(),kind:JL,actorType:s.string().min(1).max(64).regex(/^[a-zA-Z0-9_.:-]+$/).optional(),subject:XL.optional(),inputSchemaRef:s.string().min(1).max(240).optional(),audit:YL.default("metadata"),resource:QL.optional()});var yE=s.object({method:s.enum(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","*"]).default("*"),path:s.string().min(1).max(500).regex(/^\/[a-zA-Z0-9_/:.{}*-]*$/,"path must start with / and contain only [a-zA-Z0-9_/:.{}*-]")});function eM(t){let e=t.trim();if(!e)return!1;let[n,o,r]=e.split("-");if(r!==void 0||!/^\d{3}$/.test(n??""))return!1;let i=Number(n),a=o===void 0?i:Number(o);return o!==void 0&&!/^\d{3}$/.test(o)?!1:i>=100&&i<=599&&a>=100&&a<=599&&i<=a}function vE(t){return t.split(",").every(eM)}var Ud=s.union([s.string().min(1).max(100).refine(vE,{message:"onStatusCodes must be comma-separated HTTP status codes or numeric ranges, e.g. 200-299,304"}),s.array(s.number().int().min(100).max(599)).min(1).max(100)]),bE=s.enum(["public","required"]),kE=s.enum(["network","5xx"]),xE=s.object({maxAttempts:s.number().int().min(1).max(3),retryOn:s.array(kE).min(1).max(2),backoff:s.object({base:s.number().int().min(0).max(6e4),max:s.number().int().min(0).max(6e4),jitter:s.number().min(0).max(1)}).strict().refine(t=>t.max>=t.base,{message:"retry.backoff.max must be >= retry.backoff.base"}),budgetRatio:s.number().min(0).max(1)}).strict(),SE=s.object({authMode:bE.optional(),timeoutMs:s.number().int().min(1).max(6e5).optional(),idleTimeoutMs:s.number().int().min(1).max(6e5).optional(),retry:xE.optional()}).strict(),Ld=s.object({dimension:s.string().min(1).max(64).default("requests"),window:s.union([s.object({type:s.literal("named"),name:s.enum(["second","minute","hour","day","week","month"])}),s.object({type:s.literal("custom"),seconds:s.number().int().positive(),label:s.string().min(1).max(64).optional()})]),capacity:s.number().nonnegative(),enforcement:s.enum(["enforce","track"]).default("enforce")}).strict(),$E=s.object({match:yE,metering:s.object({defaults:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),reports:s.array(s.string().min(1).max(64)).max(20).optional(),estimates:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),onStatusCodes:Ud.optional(),postStreamBilling:s.boolean().optional()}).optional(),unmetered:s.boolean().optional(),inheritDefaultMeters:s.boolean().optional(),action:s.string().min(1).max(160).regex(/^[a-z0-9_.:-]+$/).optional(),backend:Bo.optional(),usagePolicy:Cd.optional(),policy:SE.optional(),limits:s.array(Ld).min(1).max(8).optional()}).strict(),IE=s.object({override_origin:s.string().url("override_origin must be a valid URL").nullable().default(null)}),wE=s.object({rollout_key:s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/,"rollout_key must be lowercase alphanumeric with hyphens/underscores").optional(),required_flags:s.array(s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/)).max(10).optional()}),Iy=s.object({feature:s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/,"feature key must be lowercase alphanumeric with [_.:-]"),description:s.string().max(500).optional(),mutation_class:s.enum(["runtime","contractual"]).default("contractual"),cacheProfile:jd,routes:s.array($E).min(1).max(50),upstream:IE.default({override_origin:null}),policies:s.array(s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/)).max(20).default([]),runtime:wE.default({}),plans:s.array(s.string().min(1).max(64)).max(20).default([]),actions:s.array(_E).max(100).optional(),backend:Bo.optional()}).strict();function EE(t,e){t.usagePricing!==void 0&&e.addIssue({code:"custom",path:["usagePricing"],message:"usagePricing is not supported. Define usage.meters.<key>.rating instead."})}function TE(t,e){t.filter(o=>o.free).length>1&&e.addIssue({code:"custom",path:["plans"],message:"Only one free plan is allowed per product"}),t.forEach((o,r)=>{o.free&&(tM(o,r,e),rM(o,r,e))})}function tM(t,e,n){(zE(t)??0)!==0&&n.addIssue({code:"custom",path:["plans",e,"recurring_fee_cents"],message:"Free plans must have zero price"})}function rM(t,e,n){t.limits.some(r=>!r.enforcement||r.enforcement==="enforce")||n.addIssue({code:"custom",path:["plans",e,"limits"],message:"Free plans must include at least one hard enforced limit"})}function PE(t,e){let n=new Map;t.forEach((o,r)=>{if(o.free)return;let i=zE(o);if(i===void 0||i<=0)return;let a=sM(o,i),c=n.get(a);if(c){e.addIssue({code:"custom",path:["plans",r,"recurring_fee_cents"],message:`Paid plan price duplicates plan "${c}" (${a})`});return}n.set(a,o.key)})}function RE(t,e){let n=new Set((t.metering?.meters??[]).map(r=>r.key).filter(r=>typeof r=="string"&&r.length>0)),o=new Set(Object.keys(t.usage?.meters??{}));t.plans.forEach((r,i)=>{let a=r.meters;a&&a.forEach((c,u)=>{let d=c.dimension;typeof d!="string"||d.length===0||n.has(d)||o.has(d)||e.addIssue({code:"custom",path:["plans",i,"meters",u,"dimension"],message:`Plan "${r.key}" prices meter "${d}" but no metering.meters[] entry and no usage.meters[] entry declares it.`})})})}function OE(t,e){if(!t.features)return;let n=new Set(t.plans.map(o=>o.key));for(let[o,r]of Object.entries(t.features)){if(!r.plans)continue;r.plans.forEach((a,c)=>{n.has(a)||e.addIssue({code:"custom",path:["features",o,"plans",c],message:`Feature "${o}" references unknown plan "${a}"`})});let i=new Set;r.plans.forEach((a,c)=>{i.has(a)&&e.addIssue({code:"custom",path:["features",o,"plans",c],message:`Feature "${o}" lists plan "${a}" more than once`}),i.add(a)})}}function AE(t,e){if(!t.features)return;let n=new Set((t.metering?.meters??[]).map(r=>r.key).filter(r=>typeof r=="string"&&r.length>0)),o=!1;for(let[r,i]of Object.entries(t.features))(i.routes??[]).forEach((c,u)=>{let d=wy(c);d.length!==0&&(o=!0,d.forEach((l,p)=>{n.has(l)||e.addIssue({code:"custom",path:["features",r,"routes",u,"metering",p],message:`Route references unknown meter "${l}". Declare it in metering.meters[].`})}))});o&&n.size===0&&e.addIssue({code:"custom",path:["metering","meters"],message:"One or more routes declare metering keys but `metering.meters[]` is empty. Declare meters at the product level first."})}function nM(t,e){let n=new Map;for(let o of t.plans)n.set(o.key,new Set);if(!t.features){for(let o of n.values())for(let r of e)o.add(r);return n}for(let o of Object.values(t.features))oM(o,n);return n}function oM(t,e){let n=t.plans??[],o=t.routes??[];for(let r of n){let i=e.get(r);if(i)for(let a of o){if(a.unmetered===!0)continue;let c=wy(a);if(c.length>0){for(let u of c)i.add(u);continue}}}}function wy(t){let e=new Set;for(let n of Object.keys(t.metering?.defaults??{}))e.add(n);for(let n of t.metering?.reports??[])e.add(n);for(let n of Object.keys(t.metering?.estimates??{}))e.add(n);return[...e]}function iM(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.dimension=="string"?e.dimension:null}var aM=new Set(["credits"]);function CE(t,e){if(!t.plans||t.plans.length===0)return;let n=new Set((t.metering?.meters??[]).map(i=>i.key).filter(i=>typeof i=="string"&&i.length>0)),o=new Set(Object.keys(t.usage?.meters??{})),r=nM(t,n);t.plans.forEach((i,a)=>{let c=i.limits??[],u=r.get(i.key)??new Set;c.forEach((d,l)=>{if(d&&typeof d=="object"?d.acknowledgeUnreachable===!0:!1)return;let m=iM(d);m&&(u.has(m)||o.has(m)||aM.has(m)||e.addIssue({code:"custom",path:["plans",a,"limits",l,"meter"],message:`Plan "${i.key}" limits meter "${m}" but no route in any granted feature emits this meter, and the meter is not declared under usage.meters either. Either grant a feature whose routes meter "${m}" to this plan, declare the meter under metering.meters[] or usage.meters, or set acknowledgeUnreachable: true if the limit is intentional (e.g. soft budget).`}))})})}function NE(t,e){let n=t.backend;if(!n||Object.keys(n).length===0)return;let o=new Set(Object.keys(n)),r=new Set((t.metering?.meters??[]).map(u=>u.key).filter(u=>typeof u=="string"&&u.length>0));for(let[u,d]of Object.entries(n))(d.meters??[]).forEach((l,p)=>{r.has(l)||e.addIssue({code:"custom",path:["backend",u,"meters",p],message:`${Ho.unknownMeterInBackend}: backend "${u}" allows meter "${l}" but no metering.meters[] entry declares it.`})});let{defaultId:i,ambiguous:a}=xy(n),c=!1;for(let u of Object.values(t.features??{}))for(let d of u.routes??[])d.backend===void 0&&(c=!0);a&&c&&e.addIssue({code:"custom",path:["backend"],message:`${Ho.ambiguousDefaultBackend}: product declares ${o.size} backends but no single default \u2014 mark exactly one backend \`default: true\` or bind every route explicitly.`});for(let[u,d]of Object.entries(t.features??{}))(d.routes??[]).forEach((l,p)=>{let m=l.backend??i;if(l.backend!==void 0&&!o.has(l.backend)){e.addIssue({code:"custom",path:["features",u,"routes",p,"backend"],message:`${Ho.unknownBackendInRoute}: route binds backend "${l.backend}" which is not declared in the product \`backend\` block.`});return}if(!m)return;let g=n[m]?.meters;if(!g)return;let v=new Set(g);for(let b of wy(l))v.has(b)||e.addIssue({code:"custom",path:["features",u,"routes",p,"metering"],message:`${Ho.routeMeterNotAllowedByBackend}: route meters "${b}" but backend "${m}" does not allow it (backend.meters[] = [${g.join(", ")}]).`})})}function zE(t){return t.recurring_fee_cents}function sM(t,e){return`USD:month:${e}`}var cM=s.object({subdomain:s.string().min(1).max(63).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,"Subdomain must be lowercase alphanumeric with optional hyphens")}),DE=s.enum(["exact_pre_request","estimated_then_settled","postpaid","strict_concurrency"]),uM=s.enum(ww),Ey=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"Meter key must be lowercase alphanumeric with underscores"),display:s.string().min(1).max(100),unit:s.string().max(20).optional(),estimate:s.number().finite().nonnegative().optional(),routeDefault:s.number().finite().nonnegative().optional(),enforcementType:DE.default("estimated_then_settled"),aggregation:s.enum(["SUM","COUNT","MAX","UNIQUE_COUNT","LATEST"]).default("COUNT"),window:s.enum(["minute","hour","day","month","billing_period"]).default("billing_period"),valueProperty:s.string().optional(),uniqueProperty:s.string().optional(),groupBy:s.array(s.string()).optional(),eventCode:s.string().optional(),tokenCategory:uM.optional(),reserveStrategy:s.enum(["reserve_max","estimate","count_actual"]).optional(),reserveCeiling:s.number().int().positive().optional(),pairsWith:s.string().min(1).max(64).optional()}),jE=s.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"Usage measure must be lowercase alphanumeric with underscores"),lM=s.enum(["pass_through","markup"]),dM=s.object({source:s.literal("fixed"),rates:s.record(s.string().min(1),s.record(jE,s.number().int().nonnegative()))}),pM=s.object({source:s.literal("provider_catalog"),catalog:s.string().min(1).max(100),pricePolicy:lM.default("pass_through"),markupPercent:s.number().nonnegative().max(1e4).optional(),marginMicros:s.number().int().nonnegative().optional()}),UE=s.discriminatedUnion("source",[dM,pM]),LE=s.object({selector:s.string().min(1).max(100).optional(),measures:s.array(jE).min(1).max(20),rating:UE.optional()}),ME=s.object({meters:s.record(s.string().min(1).max(64).regex(/^[a-z0-9_]+$/),LE)}),mM=s.object({defaults:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),reports:s.array(s.string().min(1).max(64)).max(20).optional(),estimates:s.record(s.string().min(1).max(64),s.number().finite().nonnegative()).optional(),onStatusCodes:Ud.optional(),postStreamBilling:s.boolean().optional()}),ZE=s.object({method:s.enum(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","*"]).default("*"),path:s.string().min(1).max(500).regex(/^\/[a-zA-Z0-9_/:.{}*-]*$/,"path must start with / and contain only [a-zA-Z0-9_/:.{}*-]"),unmetered:s.boolean().optional(),metering:mM.optional(),inheritDefaultMeters:s.boolean().optional(),backend:Bo.optional(),limits:s.array(Ld).min(1).max(8).optional()}).strict(),Ty=s.object({description:s.string().max(500).optional(),routes:s.array(ZE).min(1).max(50),plans:s.array(s.string().min(1)).min(1).max(20)}),FE=s.record(s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/),Ty),VE=s.enum(["report","pull_request"]),qE=s.enum(["safe","non_blocking","economic_risk","blocking"]),BE=s.object({cleanup:s.object({enabled:s.boolean().default(!1),mode:VE.default("report")}).default({enabled:!1,mode:"report"}),change_approval:s.object({auto_merge_max_risk:s.enum(["none","safe","non_blocking"]).default("none"),require_human_for:s.array(qE).default(["economic_risk","blocking"])}).default({auto_merge_max_risk:"none",require_human_for:["economic_risk","blocking"]})}).default({cleanup:{enabled:!1,mode:"report"},change_approval:{auto_merge_max_risk:"none",require_human_for:["economic_risk","blocking"]}}),HE=s.enum(["org_only","org_and_user"]),KE=s.enum(["clerk","test-personas"]),GE=s.object({identity_requirement:HE.optional(),context_tokens:s.object({enabled:s.boolean().default(!0)}).optional(),portal_auth:s.object({strategy:KE}).optional()}),WE=s.enum(["frontend","api","docs","widget","dashboard","webhook","worker","agent"]),JE=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Surface key must be lowercase alphanumeric with hyphens/underscores"),type:WE,display:s.string().min(1).max(100).optional(),description:s.string().max(500).optional()}),YE=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Entitlement key must be lowercase alphanumeric with hyphens/underscores"),description:s.string().max(500).optional(),capabilities:s.array(s.string().min(1).max(100)).max(100).optional(),featureGates:s.record(s.string().min(1),s.boolean()).optional(),limits:s.array(Zr).max(100).optional(),meters:s.array(s.string().min(1).max(64)).max(100).optional()}),XE=s.array(JE).max(20).default([]),QE=s.array(YE).max(100).default([]),eT=s.enum(["async_job","agent_task","scheduled","lifecycle","background"]),tT=s.discriminatedUnion("type",[s.object({type:s.literal("manual")}),s.object({type:s.literal("schedule"),cron:s.string().min(1).max(120)}),s.object({type:s.literal("event"),event:s.string().min(1).max(120)}),s.object({type:s.literal("api"),path:s.string().min(1).max(240).regex(/^\//,"path must start with /")}),s.object({type:s.literal("lifecycle"),event:s.string().min(1).max(120)})]),rT=s.object({key:s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/,"Workflow key must be lowercase alphanumeric with hyphens/underscores"),title:s.string().min(1).max(120).optional(),description:s.string().max(1e3).optional(),kind:eT,trigger:tT,capabilities:s.array(s.string().min(1).max(100)).max(100).optional(),meters:s.array(s.string().min(1).max(64)).max(100).optional(),estimates:s.record(s.string().min(1).max(64),s.number().finite()).optional(),metadata:s.record(s.string().min(1),s.unknown()).optional()}),nT=s.array(rT).max(100).default([]),gn=s.object({product:s.object({name:s.string().min(1).max(100),visibility:s.enum(["public","private"]).default("public"),rbac:s.union([s.boolean(),s.object({capability:s.string().min(1)}).strict()]).optional()}),gateway:s.object({authHeader:s.string().min(1).max(100).default("x-api-key"),upstreamAuth:s.object({type:s.enum(["none","static_bearer"]),token:s.string().optional()}).default({type:"none"})}),metering:s.object({meters:s.array(Ey).max(10).default([]),billOn4xx:s.boolean().default(!1)}).default({meters:[],billOn4xx:!1}),backend:ky.optional(),usage:ME.optional(),usagePricing:s.never({error:"usagePricing is not supported. Define usage.meters.<key>.rating instead."}).optional(),features:FE.optional(),resources:vy,policies:BE,customer_context:GE.optional(),surfaces:XE,entitlements:QE,workflows:nT,frontend:yy.optional(),billing:s.object({applyLimitUpgradesInstantly:s.boolean().optional(),subscriberChangePolicy:qo.default({default:"period_end",when:{price_increase:"period_end",price_decrease:"immediate",feature_added:"immediate",feature_removed:"period_end",limit_increased:"immediate",limit_reduced:"period_end",credit_increased:"immediate",credit_reduced:"period_end",rating_changed:"period_end"},allowImmediatePriceIncrease:!1,allowImmediateEntitlementReduction:!1})}).default({subscriberChangePolicy:{default:"period_end",when:{price_increase:"period_end",price_decrease:"immediate",feature_added:"immediate",feature_removed:"period_end",limit_increased:"immediate",limit_reduced:"period_end",credit_increased:"immediate",credit_reduced:"period_end",rating_changed:"period_end"},allowImmediatePriceIncrease:!1,allowImmediateEntitlementReduction:!1}}),plans:s.array(Dd).max(4).default([]),lifecycle:s.object({breaking_changes:s.object({require_deprecation_window_days:s.number().int().nonnegative().default(0),require_successor_route:s.boolean().default(!1)}).default({require_deprecation_window_days:0,require_successor_route:!1})}).default({breaking_changes:{require_deprecation_window_days:0,require_successor_route:!1}}),webhooks:fy.optional(),environments:hy.optional(),ephemeral:s.object({defaultPlan:s.string().min(1).optional()}).optional()}).superRefine((t,e)=>{EE(t,e),TE(t.plans,e),PE(t.plans,e),RE(t,e),OE(t,e),AE(t,e),CE(t,e),NE(t,e)}),fM=s.object({product:gn.shape.product}),hM=s.object({gateway:gn.shape.gateway}),gM=s.object({metering:gn.shape.metering}),_M=s.object({plans:gn.shape.plans});var Py=s.object({capability:s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/,"capability name must be lowercase alphanumeric with hyphens/underscores"),description:s.string().max(500).optional(),mutation_class:s.enum(["runtime","contractual"]).default("contractual"),includes_features:s.array(s.string().min(1).max(100).regex(/^[a-z0-9_.:-]+$/)).max(20).default([]),includes_policies:s.array(s.string().min(1).max(64).regex(/^[a-z0-9_-]+$/)).max(20).default([]),includes_capabilities:s.array(s.string().min(1).max(120).regex(/^[a-z0-9_-]+$/)).max(20).default([])});var oT=1,iT="business",yM=`${iT}/business.ts`,vM=s.object({irVersion:s.literal(oT),sdkVersion:s.string().min(1).max(64),product:gn,routes:s.array(Iy).max(200).default([]),policies:s.array($y).max(200).default([]),capabilities:s.array(Py).max(200).default([])}).strict();var W5=s.object({subscriberChangePolicy:qo.optional()}),J5=s.object({code:s.string(),kind:s.enum(["percent_off","amount_off","free_months"]),amount:s.number().optional(),durationMonths:s.number(),applicablePlanIds:s.array(s.string()).optional(),maxRedemptions:s.number().optional(),activeFrom:s.string().optional(),activeUntil:s.string().optional(),status:s.enum(["ACTIVE","ARCHIVED"]).optional()}),Y5=s.object({id:s.string(),actorUserId:s.string().optional(),action:s.string(),decision:s.string().optional(),timestamp:s.string(),details:s.unknown().optional()}),X5=s.object({name:s.string(),branch:s.string().optional(),isProduction:s.boolean().optional()}),Q5=s.object({id:s.string(),name:s.string(),apiKeyId:s.string().optional()});var bM=["IMMEDIATE_NO_PRORATE","IMMEDIATE_PRORATE_CHARGE_NEW","IMMEDIATE_PRORATE_REFUND_OLD","IMMEDIATE_PRORATE_BOTH","DEFER_TO_PERIOD_END"],a3=s.enum(bM);var aT=s.object({id:s.string(),billingCycleId:s.string(),effectiveStart:s.string(),effectiveEnd:s.string(),compiledPlanId:s.string()}),sT=s.object({currentPeriod:aT,priorPeriod:aT.optional()});var kM=s.object({subjectKey:s.string(),subscriptionId:s.string(),subscriberId:s.string(),productId:s.string(),organizationId:s.string(),compiledPlanId:s.string(),activeEntitlementHash:s.string().optional(),generation:s.number(),enforcementMode:s.enum(["STRICT","GRACE","TRACK_ONLY"]),dedicatedShard:s.enum(["ACTIVE","DRAINING"]).optional(),resourceCounts:s.record(s.string(),s.number()).optional(),memberAuthz:s.record(s.string(),s.object({permissions:s.array(s.string()),roles:s.array(s.string())})).optional(),memberAuthzComputedAt:s.number().optional(),postStreamLockouts:s.array(s.object({code:s.literal("post_stream_overspend"),reason:s.literal("usage_exhausted"),constraintKey:s.string().min(1),cycleId:s.string().min(1),dimension:s.string().min(1),currentCapacity:s.number().nonnegative(),observedUsage:s.number().nonnegative(),lockedAt:s.string().min(1),expiresAt:s.string().min(1)})).optional(),subscriptionStatus:s.string(),subscriberStatus:s.string(),scopes:s.array(s.string()),periods:sT,expiresAt:s.number().optional(),trialEndsAt:s.string().optional()}),xM=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),state:kM,expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("revoked"),negativeCacheTtlSeconds:s.number().default(300),reason:s.string().optional()}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]),p3=s.object({environmentId:s.string().nullable(),subjectKeys:s.array(s.string()).min(1).max(500)}),m3=s.object({results:s.array(s.object({subjectKey:s.string(),result:xM}))}),SM=s.object({keyId:s.string(),orgId:s.string(),productId:s.string(),compiledPlanId:s.string(),entitlementHash:s.string().optional(),subscriptionId:s.string(),subscriberId:s.string(),apiKeyId:s.string().nullable(),subjectKey:s.string(),entitlementVersion:s.number().int(),identityRequirement:s.enum(["org_only","org_and_user"]),status:s.enum(["active","revoked"]),subscriberStatus:s.enum(["ONBOARDING","ACTIVE","SUSPENDED"]),subscriptionStatus:s.string(),environment:s.enum(["production","sandbox"]).optional(),environmentId:s.string().optional(),scopes:s.array(s.string()).default([]),entitlement:s.unknown().optional(),actorType:s.enum(["org","user"]).optional(),actorId:s.string().nullable().optional(),currentPeriodId:s.string().optional(),currentPeriodStartMs:s.number().int().nonnegative().optional(),expiresAt:s.number().nullable().optional()}),f3=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),record:SM,expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("revoked"),negativeCacheTtlSeconds:s.number().default(300),reason:s.string().optional()}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]),h3=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),entitlement:s.unknown(),expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]),$M=s.object({id:s.string(),origin:s.string(),sandboxOrigin:s.string().nullable().optional(),authHeader:s.string().optional(),pricing:s.record(s.string(),s.number()).optional(),metering:s.object({tokens:s.object({estimatePerRequest:s.number().optional()}).optional(),computeMs:s.object({estimatePerRequest:s.number().optional()}).optional(),billOn4xx:s.boolean().optional()}).optional(),tenantLimits:s.array(s.object({unit:s.enum(["requests","tokens","computeMs","dollars"]),window:s.enum(["second","minute","hour","day","week","month"]),capacity:s.number()})).optional(),userLimits:s.array(s.object({unit:s.enum(["requests","tokens","computeMs","dollars"]),window:s.enum(["second","minute","hour","day","week","month"]),capacity:s.number()})).optional(),environmentId:s.string().optional(),contextTokenSecret:s.string().nullable().optional(),timeoutMs:s.number().positive().optional(),idleTimeoutMs:s.number().positive().optional(),hasPublicRoutes:s.boolean().optional()}),g3=s.discriminatedUnion("kind",[s.object({kind:s.literal("found"),tenant:$M,expiresAt:s.number(),ttlSeconds:s.number()}),s.object({kind:s.literal("not_found"),negativeCacheTtlSeconds:s.number().default(60)}),s.object({kind:s.literal("rate_limited"),retryAfterSeconds:s.number().default(10)})]);var Md=["consumer_api_key","consumer_session_token","test_persona_session_token","builder_master_key","builder_session_token","maker_jwt","service_jwt","internal_service","context_token"],cT=s.enum(Md);var IM=s.object({fromIssuer:s.string().min(1),fromTokenId:s.string().min(1),intent:s.string().min(1)}),uT=s.object({issuer:s.string().min(1),issuedAt:s.number().int().nonnegative(),expiresAt:s.number().int().nonnegative().optional(),tokenId:s.string().min(1).optional(),delegationChain:s.array(IM)});var Ry=["template","embedded","provisioned","agent"],wM=s.enum(Ry),EM=["builder_user","builder_org","maker","consumer_subject","internal_service","service_jwt","agent_runtime"],TM=s.enum(EM),lT=s.object({kind:TM,id:s.string().min(1),label:s.string().optional()}),PM=["subscription","organization","platform"],RM=s.enum(PM),OM=s.object({kind:RM,id:s.string().min(1)}),AM=s.object({type:cT,id:s.string().min(1),hint:s.string().max(8).optional()}),CM=s.object({compiledPlanId:s.string().min(1),fromCache:s.boolean().optional()}),dT=s.object({requestId:s.string().min(1),surface:wM,builderOrgId:s.string().min(1),productId:s.string().min(1).optional(),runtimeId:s.string().min(1).optional(),template:s.string().optional(),caller:lT,actor:lT,billingSubject:OM,credential:AM,capability:s.string().min(1),scopes:s.array(s.string()),entitlement:CM.optional(),trust:uT});var us;(function(t){t.AUTHZ_DECISION="authz_decision",t.ENTITLEMENT_DECISION="entitlement_decision",t.RUNTIME_LIMIT_DECISION="runtime_limit_decision",t.RESOURCE_GOVERNANCE_DECISION="resource_governance_decision",t.RESOURCE_MUTATION="resource_mutation",t.LIFECYCLE_EVENT="lifecycle_event",t.RUNTIME_CONTEXT_CREATED="runtime_context_created",t.SYSTEM_ACTION="system_action"})(us||(us={}));var pT=Object.values(us),z3=s.enum(pT),mT=s.object({decisionId:s.string().optional(),ctx:dT,details:s.record(s.string(),s.unknown()).optional(),createdAt:s.string().min(1)}),NM=pT.filter(t=>t!==us.SYSTEM_ACTION),zM=mT.extend({kind:s.enum(NM)}),DM=mT.extend({kind:s.literal(us.SYSTEM_ACTION),actorType:s.string().min(1),action:s.string().min(1)}),D3=s.discriminatedUnion("kind",[zM,DM]);var ue=["template","agent"],jM=["provisioned"],fT=[...Ry],le=["builder_master_key","builder_session_token","maker_jwt"],Ko=["service_jwt","internal_service"],Oy=["consumer_api_key","consumer_session_token","test_persona_session_token","context_token"],hT=[...Md],ls="subscriptions:write",UM=[{id:"products.create",operation:"Create a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Create a new product in the builder org"},{id:"products.update",operation:"Update a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update product metadata or compiled config"},{id:"products.delete",operation:"Delete a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Delete a product (soft-archive if subscriptions exist)"},{id:"products.read",operation:"Read a product",requiredScopes:["products:read"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Read product metadata + compiled config"},{id:"products.publish",operation:"Publish a product",requiredScopes:["products:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Compile + publish the product to the gateway"},{id:"plans.create",operation:"Create a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Add a new plan to a product"},{id:"plans.update",operation:"Update a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update plan pricing, limits, or features"},{id:"plans.delete",operation:"Delete a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Delete a plan (denied if subscriptions are attached)"},{id:"plans.publish",operation:"Publish a plan",requiredScopes:["plans:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Mark a plan as available for new subscriptions"},{id:"subscriptions.create",operation:"Create a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Provision a new subscription for a subscriber"},{id:"subscriptions.update",operation:"Update a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Change plan, enforcement mode, or schedule"},{id:"subscriptions.cancel",operation:"Cancel a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Cancel a subscription (immediate or end-of-period)"},{id:"subscriptions.pause",operation:"Pause a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Pause a subscription (no usage, no billing)"},{id:"subscriptions.resume",operation:"Resume a subscription",requiredScopes:[ls],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Resume a paused subscription"},{id:"subscriptions.read",operation:"Read a subscription",requiredScopes:["subscriptions:read"],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Ko],description:"Read subscription state and usage"},{id:"webhooks.create",operation:"Create a webhook endpoint",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Register a new webhook endpoint URL"},{id:"webhooks.update",operation:"Update a webhook endpoint",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update endpoint URL, secret, or subscribed events"},{id:"webhooks.delete",operation:"Delete a webhook endpoint",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Remove a webhook endpoint"},{id:"webhooks.test",operation:"Send a test webhook payload",requiredScopes:["webhooks:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Trigger a synthetic payload to verify an endpoint"},{id:"api-keys.create",operation:"Create an API key",requiredScopes:["api-keys:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Mint a new consumer or master API key"},{id:"api-keys.revoke",operation:"Revoke an API key",requiredScopes:["api-keys:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Revoke an API key (immediate invalidation)"},{id:"api-keys.read",operation:"Read API key metadata",requiredScopes:["api-keys:read"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Read key id + hint + scopes (never the secret)"},{id:"organizations.create",operation:"Create an organization",requiredScopes:["orgs:write"],allowedSurfaces:["template"],allowedCredentialTypes:["builder_session_token"],description:"Create a builder org (top-level signup)"},{id:"organizations.update",operation:"Update an organization",requiredScopes:["orgs:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Update org metadata or billing email"},{id:"members.invite",operation:"Invite a member to an organization",requiredScopes:["members:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Send an invitation to join the org"},{id:"members.remove",operation:"Remove a member from an organization",requiredScopes:["members:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Revoke a member's access to the org"},{id:"projects.create",operation:"Create a project",requiredScopes:["projects:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Create a project (groups products + environments)"},{id:"environments.create",operation:"Create an environment",requiredScopes:["environments:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Add a deployment environment (stage / branch)"},{id:"environments.delete",operation:"Delete an environment",requiredScopes:["environments:write"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Remove a deployment environment"},{id:"billing.portal-redirect",operation:"Generate Stripe customer-portal redirect",requiredScopes:["billing:portal"],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Oy],description:"Mint a one-time Stripe portal-session redirect URL"},{id:"billing.read",operation:"Read billing state",requiredScopes:["billing:read"],allowedSurfaces:ue,allowedCredentialTypes:[...le,...Oy],description:"Read invoices, balances, scheduled changes"},{id:"runtime-context.read",operation:"Read the caller's runtime context",requiredScopes:[],allowedSurfaces:fT,allowedCredentialTypes:hT,description:"Introspect the resolved RuntimeContext (minus secrets)"},{id:"capabilities.list",operation:"List registered capabilities",requiredScopes:[],allowedSurfaces:fT,allowedCredentialTypes:hT,description:"List all capabilities the registry knows about"},{id:"explain-denial.read",operation:"Explain a denial decision",requiredScopes:["audit:read"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Look up a decision id + return the full ctx + reason"},{id:"replay.execute",operation:"Replay a historical billing period",requiredScopes:["replay:execute"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Re-run billing for a past period; verify deltas"},{id:"rollback.execute",operation:"Execute a GitHub-driven product rollback",requiredScopes:["rollback:execute"],allowedSurfaces:ue,allowedCredentialTypes:le,description:"Revert business.ts to a previous commit (dry-run capable)"},{id:"api.invoke",operation:"Invoke a consumer-facing gateway route",requiredScopes:[],allowedSurfaces:jM,allowedCredentialTypes:Oy,description:"Consumer-side traffic into a deployed product (catch-all). The EntitlementEngine + RuntimeLimitEngine handle the fine-grained gating; this capability is the umbrella entry-point."}],M3=Object.freeze(UM);var LM=["BusinessApplyWorkflow","RollbackWorkflow","StripeSyncWorkflow","WebhookDispatchWorkflow","SubscriptionTransitionWorkflow","CompiledPlanLifecycleWorkflow","ShardReshardWorkflow","MaintenanceJobWorkflow"],q3=s.enum(LM),MM=["transient","permanent","rollback-required","human-intervention"],B3=s.enum(MM);var ZM=["SAFE_AUTOMATIC","REQUIRES_APPROVAL","IRREVERSIBLE","BILLING_IMPACTING","EDGE_BREAKING"],H3=s.enum(ZM);var X3=s.object({workflowExecutionId:s.string().min(1),eventType:s.string().min(1),phase:s.string().min(1).optional(),stepId:s.string().min(1).optional(),cohortKey:s.string().min(1).optional(),payload:s.record(s.string(),s.unknown()),occurredAt:s.string().min(1),correlationId:s.string().min(1).optional()}).transform(t=>({...t,workflowExecutionId:t.workflowExecutionId,stepId:t.stepId===void 0?void 0:t.stepId}));var FM=["GATEWAY","HOSTED_UI_PAGE","HOSTED_UI_PROXY"],VM=["platform_requests"],qM=s.object({requestId:s.string().optional(),productId:s.string().optional(),route:s.string().optional(),usageEventId:s.string().optional()}).strict(),BM=s.object({organizationId:s.string().min(1),source:s.enum(FM),dimension:s.enum(VM),quantity:s.number().int().positive(),idempotencyKey:s.string().min(1).max(512),occurredAt:s.string().datetime(),metadata:qM.optional()}).strict(),bJ=s.object({entries:s.array(BM).min(1).max(500)});var gT={contract:{label:"Managed as code",summary:"Declarative product state, canonical in the GitHub repo; the API returns 409 MANAGED_BY_CODE once published. Author via the manifest + push.",canonicalHome:"repo",mcpMayWrite:!1},operate:{label:"Runtime operation",summary:"Imperative action on the running platform; never in the repo. Tokens, usage, readiness, builds, publish triggers, runtime knobs, brand edits.",canonicalHome:"api",mcpMayWrite:!0},dual:{label:"Repo or API",summary:"Reconciles via either the repo or the API/MCP; both converge to the same state. Preview environments are the canonical example.",canonicalHome:"both",mcpMayWrite:!0}};function HM(t){return gT[t].mcpMayWrite}function KM(t){return gT[t].canonicalHome}function _T(t,e){return e==="write"&&!HM(t)?`An MCP tool that writes cannot have operationClass "${t}": ${t}-class state is managed as code in the business repo (canonical home: ${KM(t)}). Make the tool read-only, or author the change in the manifest and push instead.`:null}var et={VALIDATION_ERROR:"VALIDATION_ERROR",CONFLICT:"CONFLICT",NOT_FOUND:"NOT_FOUND",NOT_IMPLEMENTED:"NOT_IMPLEMENTED",NOT_CONFIGURED:"NOT_CONFIGURED",INTERNAL_ERROR:"INTERNAL_ERROR",SERVICE_UNAVAILABLE:"SERVICE_UNAVAILABLE",RATE_LIMIT_EXCEEDED:"RATE_LIMIT_EXCEEDED",DELETE_CONFIRMATION_REQUIRED:"DELETE_CONFIRMATION_REQUIRED",MISSING_HOST:"MISSING_HOST",MISSING_CONNECTIONS:"MISSING_CONNECTIONS",SECRET_NOT_CONFIGURED:"SECRET_NOT_CONFIGURED",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",SEALED_VARIABLE:"SEALED_VARIABLE",INVALID_ACCESS_KEY:"INVALID_ACCESS_KEY",AUTO_KEY_CREATION_FAILED:"AUTO_KEY_CREATION_FAILED",PERSONA_NOT_FOUND:"PERSONA_NOT_FOUND",PERSONA_REVOKED:"PERSONA_REVOKED",PERSONA_SESSIONS_NOT_SUPPORTED:"PERSONA_SESSIONS_NOT_SUPPORTED",NOT_TEST_PERSONA_ENV:"NOT_TEST_PERSONA_ENV",PERSONA_AUTH_DISABLED_IN_PROD:"PERSONA_AUTH_DISABLED_IN_PROD",MAKER_TOKEN_NOT_FOUND:"MAKER_TOKEN_NOT_FOUND",MAKER_TOKEN_NOT_REVOKED:"MAKER_TOKEN_NOT_REVOKED",MAKER_TOKEN_NO_PRODUCT:"MAKER_TOKEN_NO_PRODUCT",MAKER_TOKEN_REVOKED:"MAKER_TOKEN_REVOKED",ORGANIZATION_NOT_FOUND:"ORGANIZATION_NOT_FOUND",ORG_HAS_ACTIVE_SUBSCRIPTIONS:"ORG_HAS_ACTIVE_SUBSCRIPTIONS",ORG_HAS_OUTSTANDING_BALANCE:"ORG_HAS_OUTSTANDING_BALANCE",PERSONAL_ORG_NOT_DELETABLE:"PERSONAL_ORG_NOT_DELETABLE",PERSONAL_OWNER_IMMUTABLE:"PERSONAL_OWNER_IMMUTABLE",PERSONAL_CO_OWNER_NOT_ALLOWED:"PERSONAL_CO_OWNER_NOT_ALLOWED",PRIMARY_OWNER_TRANSFER_REQUIRED:"PRIMARY_OWNER_TRANSFER_REQUIRED",MEMBER_NOT_FOUND:"MEMBER_NOT_FOUND",INVITATION_NOT_FOUND:"INVITATION_NOT_FOUND",RBAC_REQUIRES_TEAM_ORG:"RBAC_REQUIRES_TEAM_ORG",RBAC_NOT_ENABLED_BY_PRODUCT:"RBAC_NOT_ENABLED_BY_PRODUCT",RBAC_CAPABILITY_NOT_GRANTED:"RBAC_CAPABILITY_NOT_GRANTED",UNKNOWN_PERMISSION:"UNKNOWN_PERMISSION",CUSTOMER_NOT_FOUND:"CUSTOMER_NOT_FOUND",PRODUCT_NOT_FOUND:"PRODUCT_NOT_FOUND",PRODUCT_DELETE_BLOCKED:"PRODUCT_DELETE_BLOCKED",PRODUCT_REPO_NOT_LINKED:"PRODUCT_REPO_NOT_LINKED",PRODUCT_SCOPE_MISMATCH:"PRODUCT_SCOPE_MISMATCH",YAML_PARSE_ERROR:"YAML_PARSE_ERROR",COMPILATION_NOT_FOUND:"COMPILATION_NOT_FOUND",PLAN_NOT_FOUND:"PLAN_NOT_FOUND",PLAN_HAS_ACTIVE_SUBSCRIPTIONS:"PLAN_HAS_ACTIVE_SUBSCRIPTIONS",PLAN_SLUG_CONFLICT:"PLAN_SLUG_CONFLICT",PLAN_UPGRADE_REQUIRED:"PLAN_UPGRADE_REQUIRED",PLAN_OFFER_CHANGED:"PLAN_OFFER_CHANGED",SLUG_CONFLICT:"SLUG_CONFLICT",SLUG_BLOCKED:"SLUG_BLOCKED",SLUG_OFFENSIVE:"SLUG_OFFENSIVE",SLUG_RESERVED:"SLUG_RESERVED",SLUG_IMPERSONATION:"SLUG_IMPERSONATION",SLUG_INVALID_FORMAT:"SLUG_INVALID_FORMAT",SLUG_VALIDATOR_NOT_READY:"SLUG_VALIDATOR_NOT_READY",PRICING_PREVIEW_FAILED:"PRICING_PREVIEW_FAILED",PRICING_REPLAY_FAILED:"PRICING_REPLAY_FAILED",RESERVATION_NOT_FOUND:"RESERVATION_NOT_FOUND",PROMO_CODE_NOT_FOUND:"PROMO_CODE_NOT_FOUND",PROMO_CODE_INVALID:"PROMO_CODE_INVALID",BILLING_EVENT_NOT_FOUND:"BILLING_EVENT_NOT_FOUND",BILLING_NOT_CONFIGURED:"BILLING_NOT_CONFIGURED",SUBSCRIPTION_NOT_READY:"SUBSCRIPTION_NOT_READY",SUBSCRIPTION_FETCH_FAILED:"SUBSCRIPTION_FETCH_FAILED",INVALID_STATE:"INVALID_STATE",DUPLICATE_TRANSITION:"DUPLICATE_TRANSITION",LEGACY_STABLE_NOT_SELF_SERVICE:"LEGACY_STABLE_NOT_SELF_SERVICE",ARCHIVED_TARGET:"ARCHIVED_TARGET",FREE_TO_PAID_VIA_CHECKOUT_ONLY:"FREE_TO_PAID_VIA_CHECKOUT_ONLY",CAPABILITY_LIMIT_EXCEEDED:"CAPABILITY_LIMIT_EXCEEDED",CAPABILITY_CHECK_UNAVAILABLE:"CAPABILITY_CHECK_UNAVAILABLE",STRIPE_NOT_CONFIGURED:"STRIPE_NOT_CONFIGURED",STRIPE_BALANCE_OUTSTANDING:"STRIPE_BALANCE_OUTSTANDING",STRIPE_OPERATION_FAILED:"STRIPE_OPERATION_FAILED",STRIPE_RESYNC_FAILED:"STRIPE_RESYNC_FAILED",CHECKOUT_SESSION_FAILED:"CHECKOUT_SESSION_FAILED",POLAR_PRODUCT_NOT_CONFIGURED:"POLAR_PRODUCT_NOT_CONFIGURED",BILLING_TAX_NOT_ENROLLED:"BILLING_TAX_NOT_ENROLLED",WEBHOOK_NOT_FOUND:"WEBHOOK_NOT_FOUND",WEBHOOK_DISPATCH_FAILED:"WEBHOOK_DISPATCH_FAILED",WEBHOOK_SECRET_NOT_CONFIGURED:"WEBHOOK_SECRET_NOT_CONFIGURED",INVALID_WEBHOOK_SIGNATURE:"INVALID_WEBHOOK_SIGNATURE",MISSING_RAW_BODY:"MISSING_RAW_BODY",WEBHOOK_REDIRECTED:"WEBHOOK_REDIRECTED",MANAGED_BY_CODE:"MANAGED_BY_CODE",GITHUB_CONNECTION_NOT_FOUND:"GITHUB_CONNECTION_NOT_FOUND",GITHUB_NOT_CONNECTED:"GITHUB_NOT_CONNECTED",GITHUB_SYNC_FAILED:"GITHUB_SYNC_FAILED",GITHUB_SYNC_UNAVAILABLE:"GITHUB_SYNC_UNAVAILABLE",GITHUB_TOKEN_FAILED:"GITHUB_TOKEN_FAILED",GIT_PROVIDER_NOT_CONFIGURED:"GIT_PROVIDER_NOT_CONFIGURED",ENVIRONMENT_NOT_FOUND:"ENVIRONMENT_NOT_FOUND",ENVIRONMENT_CLEANUP_FAILED:"ENVIRONMENT_CLEANUP_FAILED",DEPLOYMENT_RUN_NOT_FOUND:"DEPLOYMENT_RUN_NOT_FOUND",BRANCH_NO_MATCHING_ENV:"BRANCH_NO_MATCHING_ENV",APPLY_SPEC_FAILED:"APPLY_SPEC_FAILED",BOOTSTRAP_FAILED:"BOOTSTRAP_FAILED",JOB_ALREADY_RUNNING:"JOB_ALREADY_RUNNING",LOGO_DELETE_FAILED:"LOGO_DELETE_FAILED",LOGO_UPLOAD_FAILED:"LOGO_UPLOAD_FAILED",INVALID_LOGO_FORMAT:"INVALID_LOGO_FORMAT",CHANGE_SET_STALE:"CHANGE_SET_STALE",SIMULATION_STALE:"SIMULATION_STALE",IDEMPOTENCY_KEY_REUSED:"IDEMPOTENCY_KEY_REUSED",SELF_APPROVAL_FORBIDDEN:"SELF_APPROVAL_FORBIDDEN",HUMAN_APPROVAL_REQUIRED:"HUMAN_APPROVAL_REQUIRED",GOVERNED_BY_CHANGE_SET:"GOVERNED_BY_CHANGE_SET",COMPENSATION_REQUIRED:"COMPENSATION_REQUIRED",MIGRATION_TOO_LARGE:"MIGRATION_TOO_LARGE"};var IJ={missing_token:et.UNAUTHORIZED,invalid_token:et.UNAUTHORIZED,context_unverified:et.UNAUTHORIZED,missing_signature:et.UNAUTHORIZED,malformed_signature:et.UNAUTHORIZED,unknown_key_id:et.UNAUTHORIZED,bad_signature:et.UNAUTHORIZED,expired_signature:et.UNAUTHORIZED,clock_skew:et.UNAUTHORIZED,replayed_nonce:et.UNAUTHORIZED,body_hash_mismatch:et.UNAUTHORIZED,route_mismatch:et.UNAUTHORIZED,environment_mismatch:et.UNAUTHORIZED,jwks_unavailable:et.SERVICE_UNAVAILABLE,body_too_large:et.VALIDATION_ERROR};var wJ=Object.values(Pw);var xe={BATCHER_ENUM:"batcher-enum",RUNTIME_INLINE:"runtime-inline",CONSTRAINT:"constraint",GATEWAY_ERROR:"gateway-error"};var yT={limit_allocator_unavailable:{statuses:[503],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/runtime.ts:471"]},limit_exceeded:{statuses:[402],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:326","engine/enforcement/constraints/quota.ts:69"]},rate_limited:{statuses:[429],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:328","engine/enforcement/constraints/rate-limit.ts:74","engine/pipeline/rate-limit.ts:83"]},credit_exhausted:{statuses:[402],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:333"]},enforcement_denied:{statuses:[402],source:xe.BATCHER_ENUM,retryAfter:!0,verifiedAt:["engine/enforcement/batcher.ts:335"]},feature_not_enabled:{statuses:[403],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:188"]},invalid_entitlement_shape:{statuses:[503],source:xe.RUNTIME_INLINE,retryAfter:!0,verifiedAt:["engine/enforcement/runtime.ts:144"]},unsupported_constraint_schema:{statuses:[503],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:154"]},enforcement_error:{statuses:[500],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:342"]},enforcement_dependency_unavailable:{statuses:[503],source:xe.RUNTIME_INLINE,retryAfter:!1,verifiedAt:["engine/enforcement/runtime.ts:427"]},concurrency_limit_exceeded:{statuses:[429],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/concurrency.ts"]},concurrency_context_unavailable:{statuses:[503],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/concurrency.ts:291"]},concurrency_coordinator_unavailable:{statuses:[503],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/concurrency.ts:305"]},key_expired:{statuses:[401],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/credential-validity.ts:33"]},permission_denied:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/permission.ts:63"]},permission_unresolved:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/permission.ts"]},geo_context_unavailable:{statuses:[503],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/geo-restriction.ts:44"]},geo_blocked:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/geo-restriction.ts:51"]},geo_not_allowed:{statuses:[403],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/geo-restriction.ts:58"]},resource_count_limit_exceeded:{statuses:[403,402],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/resource-count.ts:95","apps/core:routes/internal/gateway-resources.ts:144"]},post_stream_overspend:{statuses:[402],source:xe.CONSTRAINT,retryAfter:!0,verifiedAt:["engine/enforcement/constraints/lifecycle-block.ts"]},request_too_large:{statuses:[413],source:xe.CONSTRAINT,retryAfter:!1,verifiedAt:["engine/enforcement/constraints/capacity.ts"]},resolver_rate_limited:{statuses:[503],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/errors.ts:55"]},resolver_unavailable:{statuses:[503],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/errors.ts:73"]},credential_resolver_miss_rate_limited:{statuses:[429],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/errors.ts:89"]},provider_throttled:{statuses:[503],source:xe.GATEWAY_ERROR,retryAfter:!0,verifiedAt:["engine/pipeline/provider-adapter.ts"]}},GM=Object.keys(yT);var WM=new Set([429,503]),TJ=new Set(GM.filter(t=>yT[t].statuses.every(e=>WM.has(e))));var JM=["quota","rate","concurrency","capacity","spend","adaptive"],RJ=new Set(JM);var YM=[402,403,413,429],AJ=new Set(YM);var FJ=s.object({targetUrl:s.string().url().refine(t=>t.startsWith("https://"),{message:"targetUrl must be https"}),variableName:s.string().min(1).regex(/^[A-Z][A-Z0-9_]*$/,{message:"variableName must be UPPER_SNAKE (e.g. MY_API_KEY)"}),header:s.string().min(1),template:s.string().min(1),method:s.string().min(1),body:s.unknown().optional()}).strict();import{existsSync as Cy,mkdirSync as XM,readFileSync as xT,writeFileSync as e8}from"node:fs";import{homedir as QM}from"node:os";import{join as Ny}from"node:path";var vT="https://core.farthershore.com";var zy=Ny(QM(),".farthershore"),bT=Ny(zy,"config.json"),kT=Ny(zy,"credentials.json");function e4(t){Cy(t)||XM(t,{recursive:!0,mode:448})}var Ay={apiUrl:vT};function ST(){if(e4(zy),!Cy(bT))return Ay;try{let t=JSON.parse(xT(bT,"utf-8"));return{...Ay,...t}}catch{return Ay}}function $T(){if(!Cy(kT))return null;try{return JSON.parse(xT(kT,"utf-8"))}catch{return null}}var A=class extends Error{constructor(n,o,r){super(n);this.status=o;this.name="CliError",this.code=r?.code,this.details=r?.details,this.param=r?.param}status;code;details;param};function IT(t){if(t)return t;let e=process.env.FARTHERSHORE_TOKEN;if(e)return e;let n=$T();if(n?.token)return n.token;throw new A("Not authenticated. Run `farthershore auth login` or set FARTHERSHORE_TOKEN environment variable.")}var Go="x-fs-surface",Wo="cli",t4="management";function Be(t,e){let n=new URLSearchParams;for(let[r,i]of Object.entries(e))i&&n.set(r,i);let o=n.toString();return o?`${t}?${o}`:t}function wT(t){let e=t.includes("?")?"&":"?";return`${t}${e}dry_run=true`}var r4=new Set([429,500,502,503,504]),n4=3,o4=3e4,ET=200,i4=4e3,a4=t=>new Promise(e=>setTimeout(e,t));function TT(t,e){if(e){let o=Number(e);if(Number.isFinite(o)&&o>=0)return Math.min(o*1e3,1e4)}return Math.min(ET*2**(t-1),i4)+Math.floor(Math.random()*ET)}function PT(t,e){let n=t.toUpperCase();return n==="GET"||n==="HEAD"?!0:"Idempotency-Key"in e}function RT(t){let e=t.retry?.attempts??n4,n=t.retry?.sleep??a4;async function o(l,p,m){let f=m?e:1,g;for(let v=1;v<=f;v++){let b=new AbortController,E=setTimeout(()=>b.abort(),o4);try{let N=await fetch(l,{...p,signal:b.signal});if(m&&v<f&&r4.has(N.status)){let z=N.headers?.get?.("retry-after")??null;await n(TT(v,z));continue}return N}catch(N){if(g=N,m&&v<f){await n(TT(v,null));continue}throw N}finally{clearTimeout(E)}}throw g}let r=null;async function i(){let l=await fetch(`${t.apiUrl}/auth/cli/exchange`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json",[Go]:Wo}});if(!l.ok){let m=(await l.json().catch(()=>null))?.error,f=typeof m=="string"?{message:m}:m;throw new A(f?.message??l.statusText,l.status,{code:f?.code,details:f?.details})}return r=await l.json(),r}function a(l){return l.split("/",3)[1]===t4}async function c(l){if(!t.token.startsWith("mk_")||a(l))return t.token;let p=r?Date.parse(r.expiresAt):0;return(!r||p-Date.now()<6e4)&&await i(),r.accessToken}async function u(l,p,m,f){let g=await c(p),v=f?.dryRun?wT(p):p,b={Authorization:`Bearer ${g}`,"Content-Type":"application/json",[Go]:Wo};f?.idempotencyKey&&(b["Idempotency-Key"]=f.idempotencyKey);let E=await o(`${t.apiUrl}${v}`,{method:l,headers:b,body:m?JSON.stringify(m):void 0},PT(l,b));if(!E.ok){let z=(await E.json().catch(()=>null))?.error,j=typeof z=="string"?{message:z}:z;throw new A(j?.message??E.statusText,E.status,{code:j?.code,details:j?.details})}if(E.status!==204)return E.json()}async function d(l,p,m,f,g){let v=await c(p),b=g?.dryRun?wT(p):p,E={Authorization:`Bearer ${v}`,"Content-Type":f,[Go]:Wo};g?.idempotencyKey&&(E["Idempotency-Key"]=g.idempotencyKey);let N=await o(`${t.apiUrl}${b}`,{method:l,headers:E,body:m},PT(l,E));if(!N.ok){let j=(await N.json().catch(()=>null))?.error,D=typeof j=="string"?{message:j}:j;throw new A(D?.message??N.statusText,N.status,{code:D?.code,details:D?.details})}if(N.status!==204)return N.json()}return{exchangeCliToken:i,authWhoami:async()=>{if(t.token.startsWith("mk_")){let p=await u("GET","/management/whoami");return{kind:"maker",tokenId:p.tokenId,organizationId:p.organizationId,productId:p.productId,scopes:p.scopes}}return{kind:"builder",...await u("POST","/builder/context/bootstrap")}},bootstrap:()=>u("POST","/builder/context/bootstrap"),listProducts:()=>u("GET","/businesses"),initProduct:(l,p)=>u("POST","/businesses/init",l,p),updateProduct:(l,p,m,f)=>u("PATCH",Be(`/businesses/${l}`,{env:m?.env}),p,f),uploadBrandAsset:(l,p,m,f,g)=>d("PUT",`/businesses/${l}/${p}`,m,f,g),deleteBrandAsset:(l,p,m)=>u("DELETE",`/businesses/${l}/${p}`,void 0,m),publishProduct:(l,p,m)=>u("POST",`/businesses/${l}/publish`,p&&Object.keys(p).length>0?p:void 0,m),migratePlan:(l,p,m,f)=>u("POST",`/businesses/${l}/plans/${encodeURIComponent(p)}/migration-batches`,m,f),getProduct:(l,p)=>u("GET",Be(`/businesses/${l}`,{env:p?.env})),getDeployments:l=>u("GET",`/businesses/${l}/deployments`),listApplyTimeline:(l,p)=>u("GET",Be(`/businesses/${l}/apply-timeline`,{env:p?.env})),proposeConsumerChangeSet:(l,p,m,f,g)=>u("POST",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets`,{env:f?.env}),m,g),listConsumerChangeSets:(l,p,m)=>u("GET",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets`,{env:m?.env,status:m?.status,cursor:m?.cursor,limit:m?.limit!==void 0?String(m.limit):void 0})),getConsumerChangeSet:(l,p,m,f)=>u("GET",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets/${encodeURIComponent(m)}`,{env:f?.env})),previewConsumerChangeSet:(l,p,m,f)=>u("POST",Be(`/businesses/${l}/consumers/${encodeURIComponent(p)}/change-sets/${encodeURIComponent(m)}/preview`,{env:f?.env})),compileManifest:(l,p,m)=>u("POST",`/businesses/${l}/manifest/compile`,{ir:p,...m?.env?{env:m.env}:{}}),listEnvironments:l=>u("GET",`/businesses/${l}/environments`),createEnvironment:(l,p,m)=>u("POST",`/businesses/${l}/environments`,p,m),deleteEnvironment:(l,p)=>u("DELETE",`/businesses/${l}/environments/${encodeURIComponent(p)}`),deleteProduct:(l,p)=>u("DELETE",`/businesses/${l}`,p?.deleteGitHubRepo?{deleteGitHubRepo:!0}:void 0),builderListConsumers:(l,p)=>u("GET",Be(`/businesses/${l}/consumers`,{env:p?.env})),builderBlockConsumer:(l,p)=>u("POST",`/businesses/${l}/consumers/${encodeURIComponent(p)}/block`),builderRemoveConsumer:(l,p)=>u("POST",`/businesses/${l}/consumers/${encodeURIComponent(p)}/remove`),builderAssignConsumerMemberRoles:(l,p,m,f)=>u("POST",`/businesses/${l}/consumers/${encodeURIComponent(p)}/members/${encodeURIComponent(m)}/roles`,{roles:f}),listPromoCodes:l=>u("GET",`/businesses/${l}/promo-codes`),createPromoCode:(l,p)=>u("POST",`/businesses/${l}/promo-codes`,p),updatePromoCode:(l,p,m)=>u("PATCH",`/businesses/${l}/promo-codes/${p}`,m),managementListPlans:l=>u("GET",`/management/businesses/${l}/plans`),managementGetUsage:l=>u("GET",`/management/businesses/${l}/usage`),managementListMakerTokens:()=>u("GET","/maker-tokens"),managementCreateMakerToken:(l,p)=>u("POST","/maker-tokens",l,p),managementRevokeMakerToken:l=>u("DELETE",`/maker-tokens/${l}`),managementRotateMakerToken:(l,p,m)=>u("POST",`/maker-tokens/${l}/rotate`,p,m),managementHardDeleteMakerToken:l=>u("DELETE",`/maker-tokens/${l}/hard`),managementListWebhooks:(l,p)=>u("GET",Be(`/management/businesses/${l}/webhooks`,{limit:p?.limit})),managementCreateWebhook:(l,p,m)=>u("POST",`/management/businesses/${l}/webhooks`,p,m),managementUpdateWebhook:(l,p,m,f)=>u("PATCH",`/management/businesses/${l}/webhooks/${p}`,m,f),managementDeleteWebhook:(l,p)=>u("DELETE",`/management/businesses/${l}/webhooks/${p}`),managementTestWebhook:(l,p)=>u("POST",`/management/businesses/${l}/webhooks/${p}/test`),managementListWebhookDeliveries:(l,p,m)=>u("GET",Be(`/management/businesses/${l}/webhooks/${p}/deliveries`,{limit:m?.limit})),builderListBackends:l=>u("GET",`/businesses/${l}/backends`),builderCreateBackend:(l,p,m)=>u("POST",`/businesses/${l}/backends`,p,m),builderDeleteBackend:(l,p)=>u("DELETE",`/businesses/${l}/backends/${p}`),builderListRuntimeTokens:l=>u("GET",`/businesses/${l}/runtime-tokens`),builderCreateRuntimeToken:(l,p,m)=>u("POST",`/businesses/${l}/runtime-tokens`,p,m),builderRotateRuntimeToken:(l,p,m)=>u("POST",`/businesses/${l}/runtime-tokens/${p}/rotate`,void 0,m),builderRevokeRuntimeToken:(l,p)=>u("DELETE",`/businesses/${l}/runtime-tokens/${p}`),builderFrontendDeploy:(l,p,m)=>u("POST",`/businesses/${l}/frontend/deploy`,p,m),builderFrontendStatus:(l,p)=>u("GET",`/businesses/${l}/frontend/status${p?`?environmentId=${encodeURIComponent(p)}`:""}`),builderFrontendReleases:(l,p)=>u("GET",`/businesses/${l}/frontend/releases${p?`?environmentId=${encodeURIComponent(p)}`:""}`),builderFrontendRollback:(l,p,m)=>u("POST",`/businesses/${l}/frontend/rollback`,p,m),builderListBulletin:(l,p)=>u("GET",Be(`/businesses/${l}/bulletin`,{kind:p?.kind,status:p?.status,cursor:p?.cursor,limit:p?.limit})),builderGetBulletinPost:(l,p)=>u("GET",`/businesses/${l}/bulletin/${encodeURIComponent(p)}`),builderSetBulletinStatus:(l,p,m)=>u("PATCH",`/businesses/${l}/bulletin/${encodeURIComponent(p)}`,{status:m}),builderListAgents:l=>u("GET",`/businesses/${l}/agents`),builderAgentStatus:(l,p)=>u("GET",`/businesses/${l}/agents/${encodeURIComponent(p)}`),builderAgentRunDetail:(l,p,m)=>u("GET",`/businesses/${l}/agents/${encodeURIComponent(p)}/runs/${encodeURIComponent(m)}`),builderConfigureAgent:(l,p,m,f)=>u("PUT",`/businesses/${l}/agents/${encodeURIComponent(p)}`,m,f),builderBusinessVariables:async(l,p)=>(await u("GET",Be(`/businesses/${l}/variables`,{environmentId:p}))).variables,builderSetBusinessVariable:async(l,p,m)=>(await u("PUT",`/businesses/${l}/variables/${encodeURIComponent(p)}`,m)).variable,builderRevealBusinessVariable:(l,p,m)=>u("GET",Be(`/businesses/${l}/variables/${encodeURIComponent(p)}/reveal`,{environmentId:m})),builderSealBusinessVariable:async(l,p,m)=>(await u("POST",Be(`/businesses/${l}/variables/${encodeURIComponent(p)}/seal`,{environmentId:m}))).data,builderDeleteBusinessVariable:(l,p,m)=>u("DELETE",Be(`/businesses/${l}/variables/${encodeURIComponent(p)}`,{environmentId:m})),builderGitHubStatus:()=>u("GET","/builder/git/github/status"),productStripeStatus:l=>u("GET",`/businesses/${l}/stripe/status`),issuePersonaBootstrapKey:async(l,p,m)=>{let f=await fetch(`${t.apiUrl}/portal/businesses/${l}/environments/${p}/test/bootstrap-key`,{method:"POST",headers:{Authorization:`Bearer ${t.token}`,"Content-Type":"application/json",[Go]:Wo},body:JSON.stringify(m??{})});if(!f.ok){let v=(await f.json().catch(()=>null))?.error,b=typeof v=="string"?{message:v}:v;throw new A(b?.message??f.statusText,f.status,{code:b?.code,details:b?.details})}return f.json()},listPersonas:async(l,p)=>{let m=await fetch(`${t.apiUrl}/portal/businesses/${l}/environments/${p}/test/personas`,{method:"GET",headers:{Authorization:`Bearer ${t.token}`,[Go]:Wo}});if(!m.ok){let g=(await m.json().catch(()=>null))?.error,v=typeof g=="string"?{message:g}:g;throw new A(v?.message??m.statusText,m.status,{code:v?.code,details:v?.details})}return m.json()},revokePersona:async(l,p,m)=>{let f=await fetch(`${t.apiUrl}/portal/businesses/${l}/environments/${p}/test/personas/${m}`,{method:"DELETE",headers:{Authorization:`Bearer ${t.token}`,[Go]:Wo}});if(!f.ok){let v=(await f.json().catch(()=>null))?.error,b=typeof v=="string"?{message:v}:v;throw new A(b?.message??f.statusText,f.status,{code:b?.code,details:b?.details})}return f.json()},getProductConfig:(l,p)=>u("GET",Be(`/businesses/${l}/config`,{format:"json",env:p?.env,state:p?.state})),updateProductConfigDraft:(l,p,m)=>u("PATCH",`/businesses/${l}/config/draft`,{spec:p,env:m?.env,branch:m?.branch,source:m?.source,baseDraftHash:m?.baseDraftHash})}}var OT=(t=0)=>e=>`\x1B[${e+t}m`,AT=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,CT=(t=0)=>(e,n,o)=>`\x1B[${38+t};2;${e};${n};${o}m`,we={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},d8=Object.keys(we.modifier),s4=Object.keys(we.color),c4=Object.keys(we.bgColor),p8=[...s4,...c4];function u4(){let t=new Map;for(let[e,n]of Object.entries(we)){for(let[o,r]of Object.entries(n))we[o]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},n[o]=we[o],t.set(r[0],r[1]);Object.defineProperty(we,e,{value:n,enumerable:!1})}return Object.defineProperty(we,"codes",{value:t,enumerable:!1}),we.color.close="\x1B[39m",we.bgColor.close="\x1B[49m",we.color.ansi=OT(),we.color.ansi256=AT(),we.color.ansi16m=CT(),we.bgColor.ansi=OT(10),we.bgColor.ansi256=AT(10),we.bgColor.ansi16m=CT(10),Object.defineProperties(we,{rgbToAnsi256:{value(e,n,o){return e===n&&n===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(e){let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!n)return[0,0,0];let[o]=n;o.length===3&&(o=[...o].map(i=>i+i).join(""));let r=Number.parseInt(o,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:e=>we.rgbToAnsi256(...we.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let n,o,r;if(e>=232)n=((e-232)*10+8)/255,o=n,r=n;else{e-=16;let c=e%36;n=Math.floor(e/36)/5,o=Math.floor(c/6)/5,r=c%6/5}let i=Math.max(n,o,r)*2;if(i===0)return 30;let a=30+(Math.round(r)<<2|Math.round(o)<<1|Math.round(n));return i===2&&(a+=60),a},enumerable:!1},rgbToAnsi:{value:(e,n,o)=>we.ansi256ToAnsi(we.rgbToAnsi256(e,n,o)),enumerable:!1},hexToAnsi:{value:e=>we.ansi256ToAnsi(we.hexToAnsi256(e)),enumerable:!1}}),we}var l4=u4(),Lt=l4;import Dy from"node:process";import d4 from"node:os";import NT from"node:tty";function It(t,e=globalThis.Deno?globalThis.Deno.args:Dy.argv){let n=t.startsWith("-")?"":t.length===1?"-":"--",o=e.indexOf(n+t),r=e.indexOf("--");return o!==-1&&(r===-1||o<r)}var{env:Ee}=Dy,Zd;It("no-color")||It("no-colors")||It("color=false")||It("color=never")?Zd=0:(It("color")||It("colors")||It("color=true")||It("color=always"))&&(Zd=1);function p4(){if("FORCE_COLOR"in Ee)return Ee.FORCE_COLOR==="true"?1:Ee.FORCE_COLOR==="false"?0:Ee.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(Ee.FORCE_COLOR,10),3)}function m4(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function f4(t,{streamIsTTY:e,sniffFlags:n=!0}={}){let o=p4();o!==void 0&&(Zd=o);let r=n?Zd:o;if(r===0)return 0;if(n){if(It("color=16m")||It("color=full")||It("color=truecolor"))return 3;if(It("color=256"))return 2}if("TF_BUILD"in Ee&&"AGENT_NAME"in Ee)return 1;if(t&&!e&&r===void 0)return 0;let i=r||0;if(Ee.TERM==="dumb")return i;if(Dy.platform==="win32"){let a=d4.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in Ee)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in Ee)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in Ee)||Ee.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in Ee)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(Ee.TEAMCITY_VERSION)?1:0;if(Ee.COLORTERM==="truecolor"||Ee.TERM==="xterm-kitty"||Ee.TERM==="xterm-ghostty"||Ee.TERM==="wezterm")return 3;if("TERM_PROGRAM"in Ee){let a=Number.parseInt((Ee.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(Ee.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(Ee.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(Ee.TERM)||"COLORTERM"in Ee?1:i}function zT(t,e={}){let n=f4(t,{streamIsTTY:t&&t.isTTY,...e});return m4(n)}var h4={stdout:zT({isTTY:NT.isatty(1)}),stderr:zT({isTTY:NT.isatty(2)})},DT=h4;function jT(t,e,n){let o=t.indexOf(e);if(o===-1)return t;let r=e.length,i=0,a="";do a+=t.slice(i,o)+e+n,i=o+r,o=t.indexOf(e,i);while(o!==-1);return a+=t.slice(i),a}function UT(t,e,n,o){let r=0,i="";do{let a=t[o-1]==="\r";i+=t.slice(r,a?o-1:o)+e+(a?`\r
|
|
81
81
|
`:`
|
|
82
82
|
`)+n,r=o+1,o=t.indexOf(`
|
|
83
83
|
`,r)}while(o!==-1);return i+=t.slice(r),i}var{stdout:LT,stderr:MT}=DT,jy=Symbol("GENERATOR"),Jo=Symbol("STYLER"),ds=Symbol("IS_EMPTY"),ZT=["ansi","ansi","ansi256","ansi16m"],Yo=Object.create(null),g4=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let n=LT?LT.level:0;t.level=e.level===void 0?n:e.level};var _4=t=>{let e=(...n)=>n.join(" ");return g4(e,t),Object.setPrototypeOf(e,ps.prototype),e};function ps(t){return _4(t)}Object.setPrototypeOf(ps.prototype,Function.prototype);for(let[t,e]of Object.entries(Lt))Yo[t]={get(){let n=Fd(this,Ly(e.open,e.close,this[Jo]),this[ds]);return Object.defineProperty(this,t,{value:n}),n}};Yo.visible={get(){let t=Fd(this,this[Jo],!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Uy=(t,e,n,...o)=>t==="rgb"?e==="ansi16m"?Lt[n].ansi16m(...o):e==="ansi256"?Lt[n].ansi256(Lt.rgbToAnsi256(...o)):Lt[n].ansi(Lt.rgbToAnsi(...o)):t==="hex"?Uy("rgb",e,n,...Lt.hexToRgb(...o)):Lt[n][t](...o),y4=["rgb","hex","ansi256"];for(let t of y4){Yo[t]={get(){let{level:n}=this;return function(...o){let r=Ly(Uy(t,ZT[n],"color",...o),Lt.color.close,this[Jo]);return Fd(this,r,this[ds])}}};let e="bg"+t[0].toUpperCase()+t.slice(1);Yo[e]={get(){let{level:n}=this;return function(...o){let r=Ly(Uy(t,ZT[n],"bgColor",...o),Lt.bgColor.close,this[Jo]);return Fd(this,r,this[ds])}}}}var v4=Object.defineProperties(()=>{},{...Yo,level:{enumerable:!0,get(){return this[jy].level},set(t){this[jy].level=t}}}),Ly=(t,e,n)=>{let o,r;return n===void 0?(o=t,r=e):(o=n.openAll+t,r=e+n.closeAll),{open:t,close:e,openAll:o,closeAll:r,parent:n}},Fd=(t,e,n)=>{let o=(...r)=>b4(o,r.length===1?""+r[0]:r.join(" "));return Object.setPrototypeOf(o,v4),o[jy]=t,o[Jo]=e,o[ds]=n,o},b4=(t,e)=>{if(t.level<=0||!e)return t[ds]?"":e;let n=t[Jo];if(n===void 0)return e;let{openAll:o,closeAll:r}=n;if(e.includes("\x1B"))for(;n!==void 0;)e=jT(e,n.close,n.open),n=n.parent;let i=e.indexOf(`
|
|
84
|
-
`);return i!==-1&&(e=UT(e,r,o,i)),o+e+r};Object.defineProperties(ps.prototype,Yo);var k4=ps(),x8=ps({level:MT?MT.level:0});var My=k4;var x4;function Vd(){return x4??S4(void 0)}function FT(){return Vd()==="json"}function VT(t){FT()||console.log(My.dim(t))}function qT(t){FT()||console.log(My.bold(t))}function Zy(){return process.stdout.isTTY===!0}function S4(t){if(t==="json"||t==="table")return t;if(t!==void 0)throw new C(`Unsupported --format "${t}". Use "json" or "table".`,400,{code:"INVALID_OUTPUT_FORMAT",param:"format"});return Zy()?"table":"json"}var $4={MANAGED_BY_CODE:"This business's contract is managed as code. Edit the Business SDK program in its GitHub repo (business/) and push \u2014 do NOT retry the API. (Branding stays editable via `farthershore business update`.)",UNAUTHORIZED:"Token is invalid or revoked. Run `farthershore auth login` to update it.",FORBIDDEN:"Your token doesn't have access to this resource. Check the org / product scope.",INVALID_ACCESS_KEY:"Token format is wrong. Generate a new one at https://farthershore.com/settings/tokens.",MAKER_TOKEN_REVOKED:"This maker token was revoked. Mint a new one in the product settings.",MAKER_TOKEN_NO_PRODUCT:"Maker token is not bound to a product. Re-create it from the product page.",AUTH_NO_TOKEN:"Pass --token <mk_...> or set FARTHERSHORE_TOKEN, or run interactively in a TTY.",AUTH_INVALID_TOKEN:"Token format is malformed. Maker tokens start with `mk_` and are 30+ characters.",DESTRUCTIVE_OP_REQUIRES_YES:"Destructive ops (delete) require an explicit `--yes` to proceed. This is intentional safety.",PRODUCT_UPDATE_NO_FIELDS:"Pass at least one field flag (--display-name, --origin, --description).",PLAN_UPDATE_NO_FIELDS:"Pass at least one of --name, --recurring-fee-cents, --grant, --trial-days, --max-monthly-spend-cents, or --meter.",ENV_NOT_FOUND:"Environment doesn't exist. Use `farthershore env list <product>` to see available envs, or create one with `farthershore env create`.",STRIPE_NOT_CONFIGURED:"Stripe isn't connected on this product. Connect it in the dashboard before running billing operations.",STRIPE_NOT_CONNECTED:"Publishing requires a connected Stripe account. Connect one on the dashboard Connections page, then re-run `farthershore business publish`.",STRIPE_NOT_VERIFIED:"Your Stripe account isn't fully verified yet. Finish Stripe onboarding, then re-run `farthershore business publish`.",BILLING_TAX_NOT_ENROLLED:"Stripe Tax isn't enrolled for this account. Enable it from the dashboard Connections page, then re-run `farthershore business publish`.",STRIPE_BALANCE_OUTSTANDING:"Customer has an outstanding balance. Resolve the invoice in Stripe before retrying.",CHECKOUT_SESSION_FAILED:"Stripe rejected the checkout request. Check that the plan exists and Stripe credentials are valid.",PRODUCT_NOT_FOUND:"Check the business slug. Run `farthershore` (no args) for a list of businesses you can see.",PRODUCT_REPO_NOT_LINKED:"Link a GitHub repo to this business before publishing or validating business manifests.",YAML_PARSE_ERROR:"Business manifest is not valid. Run `farthershore build` locally, fix business/ source, then push again for bot validation.",GITHUB_NOT_CONNECTED:"Connect GitHub on the org page before running `init` (it provisions the repo).",BRANCH_NO_MATCHING_ENV:"The current branch isn't mapped to an environment. Add a branch rule in business settings or pass --branch explicitly.",PLAN_NOT_FOUND:"Plan key doesn't exist on this business. Check the `plans` block in your local business manifest.",PLAN_HAS_ACTIVE_SUBSCRIPTIONS:"Plan has active subscribers and can't be deleted. Migrate them to another plan first.",PLAN_SLUG_CONFLICT:"Another plan already uses this key. Pick a unique plan key in your manifest.",SLUG_CONFLICT:"This business slug is taken. Pick a different name.",SLUG_BLOCKED:"This slug is reserved or blocked. Pick a different name.",SLUG_RESERVED:"This slug is reserved by Farther Shore. Pick a different name.",SLUG_INVALID_FORMAT:"Slug must be lowercase letters, digits, and hyphens (no leading/trailing hyphen).",DECISION_NOT_FOUND:"No DenialEvent recorded for that decisionId. Verify the id from the original deny response or audit log.",AUTH_UNAUTHORIZED:"Token is missing, expired, or lacks the audit:read scope required to read denial events.",RATE_LIMIT_EXCEEDED:"You've hit the rate limit. Wait a moment and retry.",VALIDATION_ERROR:"Request is malformed. The `details` field has the field-level errors.",CONFLICT:"The resource is in a state that conflicts with the request. Inspect `details` to learn more."};function BT(t){if(t)return $4[t]}function KT(t,e){return{schema_version:1,ok:!0,op:t,data:e}}function GT(t,e){let n=e.status??0;return{schema_version:1,ok:!1,op:t,error:{code:e.code??"INTERNAL_ERROR",message:e.message,status:n,param:e.param,retryable:w4(n,e.code),details:e.details,hint:BT(e.code)}}}var I4=new Set(["RATE_LIMIT_EXCEEDED","SERVICE_UNAVAILABLE"]);function w4(t,e){return t>=500||t===429||t===503?!0:e?I4.has(e):!1}var E4=/^(mk_[^.\s]+\.[^\s]+|fsrt_(test|live)_[^\s]+|fsk_[A-Za-z0-9_-]{8,}|sk_(test|live)_[A-Za-z0-9_-]{8,}|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)$/,T4=/^(secret|clientSecret|privateKey|password|plaintext|connectorToken|tunnelToken|accessToken|refreshToken|tokenHash)$/i;function WT(t){return t.length<=8?"***redacted***":`${t.slice(0,4)}\u2026${t.slice(-4)}`}function qd(t){if(typeof t=="string")return E4.test(t)?WT(t):t;if(Array.isArray(t))return t.map(e=>qd(e));if(t&&typeof t=="object"){let e={};for(let[n,o]of Object.entries(t))T4.test(n)&&typeof o=="string"?e[n]=WT(o):e[n]=qd(o);return e}return t}import{createInterface as P4}from"node:readline";import{readFile as R4}from"node:fs/promises";import{extname as O4}from"node:path";var He={idempotencyKey:s.string().optional().describe("A UUID you generate; REUSE the same value when retrying so the retry replays the first result instead of double-provisioning.")};function JT(t){let e=t?.trim().toLowerCase();return e?e.split(".")[0]??null:null}async function ve(t,e){if(e){if(e.length===36)return e;let n=e.trim().toLowerCase(),r=(await t.listProducts()).find(i=>i.id===e||i.name.toLowerCase()===n||i.runtimeHostname?.toLowerCase()===n||i.portalHostname?.toLowerCase()===n||JT(i.runtimeHostname)===n||JT(i.portalHostname)===n);if(r)return r.id}throw new Error("No business selected. Pass a business id or slug, or run `farthershore business create` first.")}async function _n(t,e,n){let r=await t.listEnvironments(e),a=(Array.isArray(r.data)?r.data:Array.isArray(r.environments)?r.environments:[]).find(c=>c.name.toLowerCase()===n.toLowerCase()||c.id===n);if(!a)throw new Error(`Environment "${n}" not found on product ${e}.`);return a.id}var Bd=["frontend","api","docs","widget","dashboard","webhook","worker","agent"];function YT(t){let e=t.trim().toLowerCase();if(!Bd.includes(e))throw new C(`Unknown business surface "${t}". Available: ${Bd.join(", ")}.`,void 0,{code:"UNKNOWN_BUSINESS_SURFACE"});return e}function Vy(t){let e=(t.surface??[]).map(YT);if(e.length===0)return;if(new Set(e).size!==e.length)throw new C("Duplicate business surfaces in --surface flags.",void 0,{code:"INVALID_BUSINESS_SURFACES"});return e}function XT(t){let e={};return typeof t.bump=="string"&&(e.bump=t.bump),typeof t.version=="string"&&(e.version=t.version),t.acceptBreaking===!0&&(e.acceptBreaking=!0),e}async function A4(t){let e=P4({input:process.stdin,output:process.stderr,terminal:!0});return new Promise(n=>{e.question(`Cut release ${t}? [y/N] `,o=>{e.close(),n(/^y(es)?$/i.test(o.trim()))})})}function C4(t){return t.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function N4(t){let[e="",n,o]=t.split(":");if(!/^[a-z0-9_]+$/.test(e))throw new C(`Invalid meter key in "--meter ${t}" \u2014 keys are lowercase letters, digits, and underscores (e.g. input_tokens).`,void 0,{code:"INVALID_METER_SPEC"});return{key:e,display:n?.trim()||C4(e),unit:o?.trim()||void 0}}function z4(t){let e=t.meter??[];if(e.length>0&&t.meters)throw new C("Pass either --meters <template> or repeated --meter entries, not both.",void 0,{code:"CONFLICTING_METER_FLAGS"});if(e.length>0){let n=e.map(N4);if(new Set(n.map(r=>r.key)).size!==n.length)throw new C("Duplicate meter keys in --meter flags.",void 0,{code:"INVALID_METER_SPEC"});return n}if(t.meters){let n=Ew(t.meters);if(!n)throw new C(`Unknown meter template "${t.meters}". Available: ${Tw().join(", ")}.`,void 0,{code:"UNKNOWN_METER_TEMPLATE"});return n.meters.map(o=>({...o}))}}var lr="<businessIdOrName>",D4={BRANCH_PREFIX:"branch-prefix",PULL_REQUEST:"pull-request",DISABLED:"disabled"},j4=Object.fromEntries(ay.map(t=>[D4[t],t])),U4=/^.{1,50}$/,L4={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp"};function QT(t){return[sy(t,"GET"),sy(t,"*")]}function M4(t){return!t||Object.keys(t).length===0?[{feature:"all",permissions:QT("all")}]:Object.entries(t).filter(([,e])=>Array.isArray(e?.routes)&&e.routes.length>0).map(([e,n])=>({feature:e,...n?.description?{title:n.description}:{},permissions:QT(e)})).sort((e,n)=>e.feature.localeCompare(n.feature))}function Z4(t){return t===void 0||t===!1?{enabled:!1,capability:null}:t===!0?{enabled:!0,capability:null}:{enabled:!0,capability:t.capability}}function F4(t){let{product:e,...n}=t;return{...n,business:e}}function V4(t){let e=L4[O4(t).toLowerCase()];if(!e)throw new C(`Cannot infer image Content-Type for "${t}". Use a .png, .jpg, .jpeg, or .webp file.`,void 0,{code:"UNSUPPORTED_BRAND_ASSET_TYPE"});return e}function q4(t){return t.filter(e=>e!==void 0&&e!==!1).length}function e0(t,e){let n=e==="icon"?"icon":"logo",o=e==="icon"?"icon":"logo",r=e==="icon"?"clearIcon":"clearLogo";if(q4([t[`${o}Url`],t[`${o}File`],t[r]])>1)throw new C(`Choose only one ${n} operation: --${o}-url, --${o}-file, or --clear-${o}.`,void 0,{code:"CONFLICTING_BRAND_ASSET_FLAGS"})}function B4(t){let e=j4[t];if(!e)throw new C(`Invalid preview environment trigger "${t}". Use branch-prefix, pull-request, or disabled.`,void 0,{code:"INVALID_PREVIEW_ENV_TRIGGER"});return e}function H4(t){let e={};if(typeof t.trigger=="string"&&(e.previewEnvTrigger=B4(t.trigger)),t.clearBranchPrefix===!0)e.envBranchPrefix=null;else if(typeof t.branchPrefix=="string"){if(!U4.test(t.branchPrefix))throw new C("--branch-prefix must be 1-50 characters.",void 0,{code:"INVALID_ENV_BRANCH_PREFIX"});e.envBranchPrefix=t.branchPrefix}if(e.previewEnvTrigger===void 0&&e.envBranchPrefix===void 0)throw new C("Pass at least one preview environment setting: --trigger, --branch-prefix, or --clear-branch-prefix.",void 0,{code:"MISSING_PREVIEW_ENV_UPDATE"});return e}async function t0(t,e,n,o){let r=await R4(o);return t.uploadBrandAsset(e,n,r,V4(o))}var r0=[{opKey:"business.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"list",summary:"List businesses in the current org",args:[],handler:async({client:t,emit:e})=>{let n=await t.listProducts();e({count:n.length,businesses:n.map(o=>({...o,displayName:o.displayName??null,status:o.status??null}))},`${n.length} business(es)`)}},mcp:{tool:"fs_business_list",title:"List businesses",description:"List every business in the authenticated FartherShore workspace (id, name, status). Read-only; use this to discover business ids for the other tools.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{},handler:async t=>{let e=await t.listProducts();return{count:e.length,businesses:e.map(n=>({id:n.id,name:n.name,status:n.status??null}))}}}},{opKey:"business.read",operationClass:"dual",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"show",summary:"Show a business",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope (preview branch name)"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getProduct(o,{env:e.env});n({business:r},`Business ${o}`)}},mcp:null},{opKey:"business.status",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"status",summary:"Show a business's lifecycle/release/live state (status, latest release version, latest deployment, and a derived `live` boolean) \u2014 verify a business is serving after publish.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getDeployments(o),i=r.data[0]??null,a={id:r.product.id,status:r.product.status,latestReleaseVersion:r.product.latestReleaseVersion,live:r.live,latestDeployment:i?{id:i.id,status:i.status,edgePublishStatus:i.edgePublishStatus,createdAt:i.createdAt}:null};n(a,`Business ${o}: ${r.product.status}${r.product.latestReleaseVersion?` @ ${r.product.latestReleaseVersion}`:""} (${r.live?"live":"not live"})`)}},mcp:{tool:"fs_business_status",title:"Business status",description:"Verify a business's lifecycle/release state by id or slug: its status (DRAFT|ACTIVE), latest release version, latest deployment run, and a derived `live` boolean (ACTIVE + a real non-bootstrap release applied + the edge serving the snapshot). Read-only; use this to confirm a business is live after publishing.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to check.")},handler:async(t,e)=>{let n=await ve(t,e.productId),o=await t.getDeployments(n),r=o.data[0]??null;return{id:o.product.id,status:o.product.status,latestReleaseVersion:o.product.latestReleaseVersion,live:o.live,latestDeployment:r?{id:r.id,status:r.status,edgePublishStatus:r.edgePublishStatus,createdAt:r.createdAt}:null}}}},{opKey:"rbac.enable",operationClass:"contract",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"rbac",summary:"Show a business's Managed-RBAC contract state: the accepted spec's `rbac` flag and the derived grantable-permission catalog.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope (preview branch name)"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getProductConfig(o,{state:"accepted",env:e.env}),i=r.config??{},a=Z4(i.product?.rbac),c=M4(i.features);n({productId:o,environment:r.environment??null,rbac:a,catalog:c},`Managed RBAC ${a.enabled?"enabled":"not enabled"}${a.capability?` (capability-gated: ${a.capability})`:""} \u2014 ${c.length} catalog feature(s)`)}},mcp:null},{opKey:"business.create",operationClass:"dual",scope:["products:create"],sideEffect:"write",cli:{group:"business",command:"create",summary:"Create a new business and provision the frontend starter repo",idempotent:!0,args:[{field:"name",kind:"flag",token:"--name <name>",describe:"Business slug (becomes the subdomain)",required:!0},{field:"displayName",kind:"flag",token:"--display-name <displayName>",describe:"Human-friendly business name"},{field:"description",kind:"flag",token:"--description <description>"},{field:"origin",kind:"flag",token:"--origin <url>",describe:"Optional business origin Farther Shore calls for customer-facing actions"},{field:"meters",kind:"flag",token:"--meters <template>",describe:`Meter template: ${Nd.map(t=>`${t.id} (${t.label})`).join(", ")}. Default: requests.`},{field:"meter",kind:"flag",token:"--meter <key[:display[:unit]]>",describe:"Custom meter, repeatable (e.g. --meter input_tokens:'Input Tokens':token). Overrides --meters.",parser:(t,e)=>[...e,t],defaultValue:[]},{field:"surface",kind:"flag",token:"--surface <surface>",describe:`Initial Business SDK surface, repeatable. Available: ${Bd.join(", ")}.`,parser:(t,e)=>[...e,t],defaultValue:[]},{field:"docs",kind:"flag",token:"--docs",describe:"Enable docs for this business (default when omitted)."},{field:"docs",kind:"flag",token:"--no-docs",describe:"Opt out of docs for this business."}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=z4({meters:e.meters,meter:e.meter}),a=Vy({surface:e.surface}),c=e.docs===!0?!0:e.docs===!1?!1:void 0,u=await t.initProduct({name:e.name,...typeof e.origin=="string"?{origin:e.origin}:{},description:e.description,displayName:e.displayName,meters:i,surfaces:a,...c!==void 0?{docsEnabled:c}:{}},n);r(u)||o({result:F4(u)},`Business created: ${e.name}`)}},mcp:null},{opKey:"business.origin.update",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business",command:"update",summary:"Update business presentation metadata and per-env origin",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"displayName",kind:"flag",token:"--display-name <displayName>"},{field:"description",kind:"flag",token:"--description <description>"},{field:"iconUrl",kind:"flag",token:"--icon-url <url>",describe:"Set the square icon/favicon URL"},{field:"iconFile",kind:"flag",token:"--icon-file <path>",describe:"Upload a local PNG, JPEG, or WEBP square icon"},{field:"clearIcon",kind:"flag",token:"--clear-icon",describe:"Remove the current icon asset"},{field:"logoUrl",kind:"flag",token:"--logo-url <url>",describe:"Set the wordmark/logo URL"},{field:"logoFile",kind:"flag",token:"--logo-file <path>",describe:"Upload a local PNG, JPEG, or WEBP wordmark/logo"},{field:"clearLogo",kind:"flag",token:"--clear-logo",describe:"Remove the current logo asset"},{field:"keyPrefix",kind:"flag",token:"--key-prefix <prefix>",describe:"White-label prefix for subscriber API keys (fsk_ \u2192 e.g. acme_). 2-12 lowercase letters/digits; fs/fsk/fsc/fsm reserved."},{field:"clearKeyPrefix",kind:"flag",token:"--clear-key-prefix",describe:"Reset the subscriber API key prefix to the default (fsk)."},{field:"origin",kind:"flag",token:"--origin <url>",describe:"Set the business upstream origin (the URL the gateway proxies to). With --env, sets that environment's override."},{field:"sandboxOrigin",kind:"flag",token:"--sandbox-origin <url>",describe:"Set the sandbox upstream origin. With --env, env-scoped."},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId;e0(e,"icon"),e0(e,"logo");let r={};e.displayName!==void 0&&(r.displayName=e.displayName),e.description!==void 0&&(r.description=e.description),e.iconUrl!==void 0&&(r.iconUrl=e.iconUrl),e.logoUrl!==void 0&&(r.logoUrl=e.logoUrl),e.clearKeyPrefix===!0?r.keyPrefix=null:e.keyPrefix!==void 0&&(r.keyPrefix=e.keyPrefix),e.origin!==void 0&&(r.origin=e.origin),e.sandboxOrigin!==void 0&&(r.sandboxOrigin=e.sandboxOrigin);let i=[];if(typeof e.iconFile=="string"&&i.push(()=>t0(t,o,"icon",e.iconFile)),typeof e.logoFile=="string"&&i.push(()=>t0(t,o,"logo",e.logoFile)),e.clearIcon===!0&&i.push(()=>t.deleteBrandAsset(o,"icon")),e.clearLogo===!0&&i.push(()=>t.deleteBrandAsset(o,"logo")),Object.keys(r).length===0&&i.length===0)throw new C("No fields to update. Pass presentation metadata flags such as --display-name, --description, --origin, --icon-file, --logo-file, or a clear flag.",void 0,{code:"BUSINESS_UPDATE_NO_FIELDS"});let a=Object.keys(r).length>0?await t.updateProduct(o,r,{env:e.env}):await t.getProduct(o,{env:e.env}),c=await Promise.all(i.map(u=>u()));n({business:a,assets:c},`Business ${o} updated`)}},mcp:{tool:"fs_brand_update",title:"Update business brand",description:"Update a business's brand/presentation and upstream origin \u2014 display name, description, icon, logo (wordmark), origin (the URL the gateway proxies to), sandboxOrigin. Pass env to write an environment-scoped origin override instead of the business default. Plans, pricing, and routes are managed as code in the business repo and are NOT editable here. Only the fields you pass are changed.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to update."),displayName:s.string().optional().describe("Display name."),description:s.string().optional().describe("Short business description."),iconUrl:s.string().nullable().optional().describe("Square icon/favicon URL, or null to clear it."),logoUrl:s.string().nullable().optional().describe("Wordmark/logo URL, or null to clear it."),keyPrefix:s.string().nullable().optional().describe("White-label prefix for subscriber API keys (fsk_ \u2192 e.g. acme_). 2-12 lowercase letters/digits; fs/fsk/fsc/fsm reserved. Null clears to the default fsk."),origin:s.string().optional().describe("Business upstream origin (the URL the gateway proxies to)."),sandboxOrigin:s.string().optional().describe("Sandbox upstream origin."),env:s.string().optional().describe("Environment scope \u2014 when set, the origin override is written to that environment instead of the business default.")},handler:async(t,e)=>{let n=await ve(t,e.productId),o={};return e.displayName!==void 0&&(o.displayName=e.displayName),e.description!==void 0&&(o.description=e.description),e.iconUrl!==void 0&&(o.iconUrl=e.iconUrl),e.logoUrl!==void 0&&(o.logoUrl=e.logoUrl),e.keyPrefix!==void 0&&(o.keyPrefix=e.keyPrefix),e.origin!==void 0&&(o.origin=e.origin),e.sandboxOrigin!==void 0&&(o.sandboxOrigin=e.sandboxOrigin),t.updateProduct(n,o,{env:e.env})}}},{opKey:"business.publish",operationClass:"dual",scope:["products:publish"],sideEffect:"write",cli:{group:"business",command:"publish",summary:"Publish a draft business (make it live) and cut a versioned release with an auto-computed semver. Requires at least one plan, an origin, and a verified Stripe connection.",idempotent:!0,args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"bump",kind:"flag",token:"--bump <bump>",describe:"Force the semver bump (major|minor|patch). Omit to auto-derive from the change."},{field:"version",kind:"flag",token:"--version <version>",describe:"Pin the exact next release tag (vX.Y.Z), skipping derivation."},{field:"acceptBreaking",kind:"flag",token:"--accept-breaking",describe:"Consent to publish a breaking (blocking-risk) change as a major release."}],helpTextAfter:`
|
|
84
|
+
`);return i!==-1&&(e=UT(e,r,o,i)),o+e+r};Object.defineProperties(ps.prototype,Yo);var k4=ps(),x8=ps({level:MT?MT.level:0});var My=k4;var x4;function Vd(){return x4??S4(void 0)}function FT(){return Vd()==="json"}function VT(t){FT()||console.log(My.dim(t))}function qT(t){FT()||console.log(My.bold(t))}function Zy(){return process.stdout.isTTY===!0}function S4(t){if(t==="json"||t==="table")return t;if(t!==void 0)throw new A(`Unsupported --format "${t}". Use "json" or "table".`,400,{code:"INVALID_OUTPUT_FORMAT",param:"format"});return Zy()?"table":"json"}var $4={MANAGED_BY_CODE:"This business's contract is managed as code. Edit the Business SDK program in its GitHub repo (business/) and push \u2014 do NOT retry the API. (Branding stays editable via `farthershore business update`.)",UNAUTHORIZED:"Token is invalid or revoked. Run `farthershore auth login` to update it.",FORBIDDEN:"Your token doesn't have access to this resource. Check the org / product scope.",INVALID_ACCESS_KEY:"Token format is wrong. Generate a new one at https://farthershore.com/settings/tokens.",MAKER_TOKEN_REVOKED:"This maker token was revoked. Mint a new one in the product settings.",MAKER_TOKEN_NO_PRODUCT:"Maker token is not bound to a product. Re-create it from the product page.",AUTH_NO_TOKEN:"Pass --token <mk_...> or set FARTHERSHORE_TOKEN, or run interactively in a TTY.",AUTH_INVALID_TOKEN:"Token format is malformed. Maker tokens start with `mk_` and are 30+ characters.",DESTRUCTIVE_OP_REQUIRES_YES:"Destructive ops (delete) require an explicit `--yes` to proceed. This is intentional safety.",PRODUCT_UPDATE_NO_FIELDS:"Pass at least one field flag (--display-name, --origin, --description).",PLAN_UPDATE_NO_FIELDS:"Pass at least one of --name, --recurring-fee-cents, --grant, --trial-days, --max-monthly-spend-cents, or --meter.",ENV_NOT_FOUND:"Environment doesn't exist. Use `farthershore env list <product>` to see available envs, or create one with `farthershore env create`.",STRIPE_NOT_CONFIGURED:"Stripe isn't connected on this product. Connect it in the dashboard before running billing operations.",STRIPE_NOT_CONNECTED:"Publishing requires a connected Stripe account. Connect one on the dashboard Connections page, then re-run `farthershore business publish`.",STRIPE_NOT_VERIFIED:"Your Stripe account isn't fully verified yet. Finish Stripe onboarding, then re-run `farthershore business publish`.",BILLING_TAX_NOT_ENROLLED:"Stripe Tax isn't enrolled for this account. Enable it from the dashboard Connections page, then re-run `farthershore business publish`.",STRIPE_BALANCE_OUTSTANDING:"Customer has an outstanding balance. Resolve the invoice in Stripe before retrying.",CHECKOUT_SESSION_FAILED:"Stripe rejected the checkout request. Check that the plan exists and Stripe credentials are valid.",PRODUCT_NOT_FOUND:"Check the business slug. Run `farthershore` (no args) for a list of businesses you can see.",PRODUCT_REPO_NOT_LINKED:"Link a GitHub repo to this business before publishing or validating business manifests.",YAML_PARSE_ERROR:"Business manifest is not valid. Run `farthershore build` locally, fix business/ source, then push again for bot validation.",GITHUB_NOT_CONNECTED:"Connect GitHub on the org page before running `init` (it provisions the repo).",BRANCH_NO_MATCHING_ENV:"The current branch isn't mapped to an environment. Add a branch rule in business settings or pass --branch explicitly.",PLAN_NOT_FOUND:"Plan key doesn't exist on this business. Check the `plans` block in your local business manifest.",PLAN_HAS_ACTIVE_SUBSCRIPTIONS:"Plan has active subscribers and can't be deleted. Migrate them to another plan first.",PLAN_SLUG_CONFLICT:"Another plan already uses this key. Pick a unique plan key in your manifest.",SLUG_CONFLICT:"This business slug is taken. Pick a different name.",SLUG_BLOCKED:"This slug is reserved or blocked. Pick a different name.",SLUG_RESERVED:"This slug is reserved by Farther Shore. Pick a different name.",SLUG_INVALID_FORMAT:"Slug must be lowercase letters, digits, and hyphens (no leading/trailing hyphen).",DECISION_NOT_FOUND:"No DenialEvent recorded for that decisionId. Verify the id from the original deny response or audit log.",AUTH_UNAUTHORIZED:"Token is missing, expired, or lacks the audit:read scope required to read denial events.",RATE_LIMIT_EXCEEDED:"You've hit the rate limit. Wait a moment and retry.",VALIDATION_ERROR:"Request is malformed. The `details` field has the field-level errors.",CONFLICT:"The resource is in a state that conflicts with the request. Inspect `details` to learn more."};function BT(t){if(t)return $4[t]}function KT(t,e){return{schema_version:1,ok:!0,op:t,data:e}}function GT(t,e){let n=e.status??0;return{schema_version:1,ok:!1,op:t,error:{code:e.code??"INTERNAL_ERROR",message:e.message,status:n,param:e.param,retryable:w4(n,e.code),details:e.details,hint:BT(e.code)}}}var I4=new Set(["RATE_LIMIT_EXCEEDED","SERVICE_UNAVAILABLE"]);function w4(t,e){return t>=500||t===429||t===503?!0:e?I4.has(e):!1}var E4=/^(mk_[^.\s]+\.[^\s]+|fsrt_(test|live)_[^\s]+|fsk_[A-Za-z0-9_-]{8,}|sk_(test|live)_[A-Za-z0-9_-]{8,}|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)$/,T4=/^(secret|clientSecret|privateKey|password|plaintext|connectorToken|tunnelToken|accessToken|refreshToken|tokenHash)$/i;function WT(t){return t.length<=8?"***redacted***":`${t.slice(0,4)}\u2026${t.slice(-4)}`}function qd(t){if(typeof t=="string")return E4.test(t)?WT(t):t;if(Array.isArray(t))return t.map(e=>qd(e));if(t&&typeof t=="object"){let e={};for(let[n,o]of Object.entries(t))T4.test(n)&&typeof o=="string"?e[n]=WT(o):e[n]=qd(o);return e}return t}import{createInterface as P4}from"node:readline";import{readFile as R4}from"node:fs/promises";import{extname as O4}from"node:path";var He={idempotencyKey:s.string().optional().describe("A UUID you generate; REUSE the same value when retrying so the retry replays the first result instead of double-provisioning.")};function JT(t){let e=t?.trim().toLowerCase();return e?e.split(".")[0]??null:null}async function ve(t,e){if(e){if(e.length===36)return e;let n=e.trim().toLowerCase(),r=(await t.listProducts()).find(i=>i.id===e||i.name.toLowerCase()===n||i.runtimeHostname?.toLowerCase()===n||i.portalHostname?.toLowerCase()===n||JT(i.runtimeHostname)===n||JT(i.portalHostname)===n);if(r)return r.id;throw new A(`Business "${e}" not found`,404,{code:"NOT_FOUND"})}throw new Error("No business selected. Pass a business id or slug, or run `farthershore business create` first.")}async function _n(t,e,n){let r=await t.listEnvironments(e),a=(Array.isArray(r.data)?r.data:Array.isArray(r.environments)?r.environments:[]).find(c=>c.name.toLowerCase()===n.toLowerCase()||c.id===n);if(!a)throw new Error(`Environment "${n}" not found on product ${e}.`);return a.id}var Bd=["frontend","api","docs","widget","dashboard","webhook","worker","agent"];function YT(t){let e=t.trim().toLowerCase();if(!Bd.includes(e))throw new A(`Unknown business surface "${t}". Available: ${Bd.join(", ")}.`,void 0,{code:"UNKNOWN_BUSINESS_SURFACE"});return e}function Vy(t){let e=(t.surface??[]).map(YT);if(e.length===0)return;if(new Set(e).size!==e.length)throw new A("Duplicate business surfaces in --surface flags.",void 0,{code:"INVALID_BUSINESS_SURFACES"});return e}function XT(t){let e={};return typeof t.bump=="string"&&(e.bump=t.bump),typeof t.version=="string"&&(e.version=t.version),t.acceptBreaking===!0&&(e.acceptBreaking=!0),e}async function A4(t){let e=P4({input:process.stdin,output:process.stderr,terminal:!0});return new Promise(n=>{e.question(`Cut release ${t}? [y/N] `,o=>{e.close(),n(/^y(es)?$/i.test(o.trim()))})})}function C4(t){return t.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function N4(t){let[e="",n,o]=t.split(":");if(!/^[a-z0-9_]+$/.test(e))throw new A(`Invalid meter key in "--meter ${t}" \u2014 keys are lowercase letters, digits, and underscores (e.g. input_tokens).`,void 0,{code:"INVALID_METER_SPEC"});return{key:e,display:n?.trim()||C4(e),unit:o?.trim()||void 0}}function z4(t){let e=t.meter??[];if(e.length>0&&t.meters)throw new A("Pass either --meters <template> or repeated --meter entries, not both.",void 0,{code:"CONFLICTING_METER_FLAGS"});if(e.length>0){let n=e.map(N4);if(new Set(n.map(r=>r.key)).size!==n.length)throw new A("Duplicate meter keys in --meter flags.",void 0,{code:"INVALID_METER_SPEC"});return n}if(t.meters){let n=Ew(t.meters);if(!n)throw new A(`Unknown meter template "${t.meters}". Available: ${Tw().join(", ")}.`,void 0,{code:"UNKNOWN_METER_TEMPLATE"});return n.meters.map(o=>({...o}))}}var lr="<businessIdOrName>",D4={BRANCH_PREFIX:"branch-prefix",PULL_REQUEST:"pull-request",DISABLED:"disabled"},j4=Object.fromEntries(ay.map(t=>[D4[t],t])),U4=/^.{1,50}$/,L4={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp"};function QT(t){return[sy(t,"GET"),sy(t,"*")]}function M4(t){return!t||Object.keys(t).length===0?[{feature:"all",permissions:QT("all")}]:Object.entries(t).filter(([,e])=>Array.isArray(e?.routes)&&e.routes.length>0).map(([e,n])=>({feature:e,...n?.description?{title:n.description}:{},permissions:QT(e)})).sort((e,n)=>e.feature.localeCompare(n.feature))}function Z4(t){return t===void 0||t===!1?{enabled:!1,capability:null}:t===!0?{enabled:!0,capability:null}:{enabled:!0,capability:t.capability}}function F4(t){let{product:e,...n}=t;return{...n,business:e}}function V4(t){let e=L4[O4(t).toLowerCase()];if(!e)throw new A(`Cannot infer image Content-Type for "${t}". Use a .png, .jpg, .jpeg, or .webp file.`,void 0,{code:"UNSUPPORTED_BRAND_ASSET_TYPE"});return e}function q4(t){return t.filter(e=>e!==void 0&&e!==!1).length}function e0(t,e){let n=e==="icon"?"icon":"logo",o=e==="icon"?"icon":"logo",r=e==="icon"?"clearIcon":"clearLogo";if(q4([t[`${o}Url`],t[`${o}File`],t[r]])>1)throw new A(`Choose only one ${n} operation: --${o}-url, --${o}-file, or --clear-${o}.`,void 0,{code:"CONFLICTING_BRAND_ASSET_FLAGS"})}function B4(t){let e=j4[t];if(!e)throw new A(`Invalid preview environment trigger "${t}". Use branch-prefix, pull-request, or disabled.`,void 0,{code:"INVALID_PREVIEW_ENV_TRIGGER"});return e}function H4(t){let e={};if(typeof t.trigger=="string"&&(e.previewEnvTrigger=B4(t.trigger)),t.clearBranchPrefix===!0)e.envBranchPrefix=null;else if(typeof t.branchPrefix=="string"){if(!U4.test(t.branchPrefix))throw new A("--branch-prefix must be 1-50 characters.",void 0,{code:"INVALID_ENV_BRANCH_PREFIX"});e.envBranchPrefix=t.branchPrefix}if(e.previewEnvTrigger===void 0&&e.envBranchPrefix===void 0)throw new A("Pass at least one preview environment setting: --trigger, --branch-prefix, or --clear-branch-prefix.",void 0,{code:"MISSING_PREVIEW_ENV_UPDATE"});return e}async function t0(t,e,n,o){let r=await R4(o);return t.uploadBrandAsset(e,n,r,V4(o))}var r0=[{opKey:"business.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"list",summary:"List businesses in the current org",args:[],handler:async({client:t,emit:e})=>{let n=await t.listProducts();e({count:n.length,businesses:n.map(o=>({...o,displayName:o.displayName??null,status:o.status??null}))},`${n.length} business(es)`)}},mcp:{tool:"fs_business_list",title:"List businesses",description:"List every business in the authenticated FartherShore workspace (id, name, status). Read-only; use this to discover business ids for the other tools.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{},handler:async t=>{let e=await t.listProducts();return{count:e.length,businesses:e.map(n=>({id:n.id,name:n.name,status:n.status??null}))}}}},{opKey:"business.read",operationClass:"dual",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"show",summary:"Show a business",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope (preview branch name)"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getProduct(o,{env:e.env});n({business:r},`Business ${o}`)}},mcp:null},{opKey:"business.status",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"status",summary:"Show a business's lifecycle/release/live state (status, latest release version, latest deployment, and a derived `live` boolean) \u2014 verify a business is serving after publish.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getDeployments(o),i=r.data[0]??null,a={id:r.product.id,status:r.product.status,latestReleaseVersion:r.product.latestReleaseVersion,live:r.live,latestDeployment:i?{id:i.id,status:i.status,edgePublishStatus:i.edgePublishStatus,createdAt:i.createdAt}:null};n(a,`Business ${o}: ${r.product.status}${r.product.latestReleaseVersion?` @ ${r.product.latestReleaseVersion}`:""} (${r.live?"live":"not live"})`)}},mcp:{tool:"fs_business_status",title:"Business status",description:"Verify a business's lifecycle/release state by id or slug: its status (DRAFT|ACTIVE), latest release version, latest deployment run, and a derived `live` boolean (ACTIVE + a real non-bootstrap release applied + the edge serving the snapshot). Read-only; use this to confirm a business is live after publishing.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to check.")},handler:async(t,e)=>{let n=await ve(t,e.productId),o=await t.getDeployments(n),r=o.data[0]??null;return{id:o.product.id,status:o.product.status,latestReleaseVersion:o.product.latestReleaseVersion,live:o.live,latestDeployment:r?{id:r.id,status:r.status,edgePublishStatus:r.edgePublishStatus,createdAt:r.createdAt}:null}}}},{opKey:"rbac.enable",operationClass:"contract",scope:["products:read"],sideEffect:"read",cli:{group:"business",command:"rbac",summary:"Show a business's Managed-RBAC contract state: the accepted spec's `rbac` flag and the derived grantable-permission catalog.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope (preview branch name)"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getProductConfig(o,{state:"accepted",env:e.env}),i=r.config??{},a=Z4(i.product?.rbac),c=M4(i.features);n({productId:o,environment:r.environment??null,rbac:a,catalog:c},`Managed RBAC ${a.enabled?"enabled":"not enabled"}${a.capability?` (capability-gated: ${a.capability})`:""} \u2014 ${c.length} catalog feature(s)`)}},mcp:null},{opKey:"business.create",operationClass:"dual",scope:["products:create"],sideEffect:"write",cli:{group:"business",command:"create",summary:"Create a new business and provision the frontend starter repo",idempotent:!0,args:[{field:"name",kind:"flag",token:"--name <name>",describe:"Business slug (becomes the subdomain)",required:!0},{field:"displayName",kind:"flag",token:"--display-name <displayName>",describe:"Human-friendly business name"},{field:"description",kind:"flag",token:"--description <description>"},{field:"origin",kind:"flag",token:"--origin <url>",describe:"Optional business origin Farther Shore calls for customer-facing actions"},{field:"meters",kind:"flag",token:"--meters <template>",describe:`Meter template: ${Nd.map(t=>`${t.id} (${t.label})`).join(", ")}. Default: requests.`},{field:"meter",kind:"flag",token:"--meter <key[:display[:unit]]>",describe:"Custom meter, repeatable (e.g. --meter input_tokens:'Input Tokens':token). Overrides --meters.",parser:(t,e)=>[...e,t],defaultValue:[]},{field:"surface",kind:"flag",token:"--surface <surface>",describe:`Initial Business SDK surface, repeatable. Available: ${Bd.join(", ")}.`,parser:(t,e)=>[...e,t],defaultValue:[]},{field:"docs",kind:"flag",token:"--docs",describe:"Enable docs for this business (default when omitted)."},{field:"docs",kind:"flag",token:"--no-docs",describe:"Opt out of docs for this business."}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=z4({meters:e.meters,meter:e.meter}),a=Vy({surface:e.surface}),c=e.docs===!0?!0:e.docs===!1?!1:void 0,u=await t.initProduct({name:e.name,...typeof e.origin=="string"?{origin:e.origin}:{},description:e.description,displayName:e.displayName,meters:i,surfaces:a,...c!==void 0?{docsEnabled:c}:{}},n);r(u)||o({result:F4(u)},`Business created: ${e.name}`)}},mcp:null},{opKey:"business.origin.update",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business",command:"update",summary:"Update business presentation metadata and per-env origin",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"displayName",kind:"flag",token:"--display-name <displayName>"},{field:"description",kind:"flag",token:"--description <description>"},{field:"iconUrl",kind:"flag",token:"--icon-url <url>",describe:"Set the square icon/favicon URL"},{field:"iconFile",kind:"flag",token:"--icon-file <path>",describe:"Upload a local PNG, JPEG, or WEBP square icon"},{field:"clearIcon",kind:"flag",token:"--clear-icon",describe:"Remove the current icon asset"},{field:"logoUrl",kind:"flag",token:"--logo-url <url>",describe:"Set the wordmark/logo URL"},{field:"logoFile",kind:"flag",token:"--logo-file <path>",describe:"Upload a local PNG, JPEG, or WEBP wordmark/logo"},{field:"clearLogo",kind:"flag",token:"--clear-logo",describe:"Remove the current logo asset"},{field:"keyPrefix",kind:"flag",token:"--key-prefix <prefix>",describe:"White-label prefix for subscriber API keys (fsk_ \u2192 e.g. acme_). 2-12 lowercase letters/digits; fs/fsk/fsc/fsm reserved."},{field:"clearKeyPrefix",kind:"flag",token:"--clear-key-prefix",describe:"Reset the subscriber API key prefix to the default (fsk)."},{field:"origin",kind:"flag",token:"--origin <url>",describe:"Set the business upstream origin (the URL the gateway proxies to). With --env, sets that environment's override."},{field:"sandboxOrigin",kind:"flag",token:"--sandbox-origin <url>",describe:"Set the sandbox upstream origin. With --env, env-scoped."},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId;e0(e,"icon"),e0(e,"logo");let r={};e.displayName!==void 0&&(r.displayName=e.displayName),e.description!==void 0&&(r.description=e.description),e.iconUrl!==void 0&&(r.iconUrl=e.iconUrl),e.logoUrl!==void 0&&(r.logoUrl=e.logoUrl),e.clearKeyPrefix===!0?r.keyPrefix=null:e.keyPrefix!==void 0&&(r.keyPrefix=e.keyPrefix),e.origin!==void 0&&(r.origin=e.origin),e.sandboxOrigin!==void 0&&(r.sandboxOrigin=e.sandboxOrigin);let i=[];if(typeof e.iconFile=="string"&&i.push(()=>t0(t,o,"icon",e.iconFile)),typeof e.logoFile=="string"&&i.push(()=>t0(t,o,"logo",e.logoFile)),e.clearIcon===!0&&i.push(()=>t.deleteBrandAsset(o,"icon")),e.clearLogo===!0&&i.push(()=>t.deleteBrandAsset(o,"logo")),Object.keys(r).length===0&&i.length===0)throw new A("No fields to update. Pass presentation metadata flags such as --display-name, --description, --origin, --icon-file, --logo-file, or a clear flag.",void 0,{code:"BUSINESS_UPDATE_NO_FIELDS"});let a=Object.keys(r).length>0?await t.updateProduct(o,r,{env:e.env}):await t.getProduct(o,{env:e.env}),c=await Promise.all(i.map(u=>u()));n({business:a,assets:c},`Business ${o} updated`)}},mcp:{tool:"fs_brand_update",title:"Update business brand",description:"Update a business's brand/presentation and upstream origin \u2014 display name, description, icon, logo (wordmark), origin (the URL the gateway proxies to), sandboxOrigin. Pass env to write an environment-scoped origin override instead of the business default. Plans, pricing, and routes are managed as code in the business repo and are NOT editable here. Only the fields you pass are changed.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to update."),displayName:s.string().optional().describe("Display name."),description:s.string().optional().describe("Short business description."),iconUrl:s.string().nullable().optional().describe("Square icon/favicon URL, or null to clear it."),logoUrl:s.string().nullable().optional().describe("Wordmark/logo URL, or null to clear it."),keyPrefix:s.string().nullable().optional().describe("White-label prefix for subscriber API keys (fsk_ \u2192 e.g. acme_). 2-12 lowercase letters/digits; fs/fsk/fsc/fsm reserved. Null clears to the default fsk."),origin:s.string().optional().describe("Business upstream origin (the URL the gateway proxies to)."),sandboxOrigin:s.string().optional().describe("Sandbox upstream origin."),env:s.string().optional().describe("Environment scope \u2014 when set, the origin override is written to that environment instead of the business default.")},handler:async(t,e)=>{let n=await ve(t,e.productId),o={};return e.displayName!==void 0&&(o.displayName=e.displayName),e.description!==void 0&&(o.description=e.description),e.iconUrl!==void 0&&(o.iconUrl=e.iconUrl),e.logoUrl!==void 0&&(o.logoUrl=e.logoUrl),e.keyPrefix!==void 0&&(o.keyPrefix=e.keyPrefix),e.origin!==void 0&&(o.origin=e.origin),e.sandboxOrigin!==void 0&&(o.sandboxOrigin=e.sandboxOrigin),t.updateProduct(n,o,{env:e.env})}}},{opKey:"business.publish",operationClass:"dual",scope:["products:publish"],sideEffect:"write",cli:{group:"business",command:"publish",summary:"Publish a draft business (make it live) and cut a versioned release with an auto-computed semver. Requires at least one plan, an origin, and a verified Stripe connection.",idempotent:!0,args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"bump",kind:"flag",token:"--bump <bump>",describe:"Force the semver bump (major|minor|patch). Omit to auto-derive from the change."},{field:"version",kind:"flag",token:"--version <version>",describe:"Pin the exact next release tag (vX.Y.Z), skipping derivation."},{field:"acceptBreaking",kind:"flag",token:"--accept-breaking",describe:"Consent to publish a breaking (blocking-risk) change as a major release."}],helpTextAfter:`
|
|
85
85
|
Publish auto-derives the semver bump from the change and cuts a vX.Y.Z release.
|
|
86
86
|
Use --dry-run to preview the computed bump + reasons without cutting a tag.
|
|
87
|
-
A blocking-risk (breaking) change is refused unless --accept-breaking is passed.`,handler:async({client:t,args:e,opts:n,reqOpts:o,emit:r,emitDryRunPreview:i})=>{let a=e.productId,c=XT(n);if(o.dryRun){let d=await t.publishProduct(a,c,o);if(i(d))return}if(Zy()&&n.input!==!1){let l=(await t.publishProduct(a,c,{...o,dryRun:!0,idempotencyKey:void 0})).wouldHave?._release;if(l){qT(`Publishing ${a}: ${l.computedBump} \u2192 ${l.version}`+(l.previousVersion?` (from ${l.previousVersion})`:" (first release)"));for(let m of l.reasons)VT(` \u2022 ${m}`);if(!await A4(l.version)){r({cancelled:!0},"Publish cancelled.");return}}}let u=await t.publishProduct(a,c,o);r({business:u,_release:u._release??null},`Business ${a} published`)}},mcp:{tool:"fs_business_publish",title:"Publish a business",description:"Publish a business \u2014 deploy its current spec live and cut a versioned release with an auto-computed semver. Equivalent to a repo-driven deploy (operationClass=dual); both reconcile to the same published state.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id to publish."),bump:s.enum(["major","minor","patch"]).optional().describe("Force the semver bump. Omit to auto-derive from the change."),version:s.string().optional().describe("Pin the exact next release tag (vX.Y.Z)."),acceptBreaking:s.boolean().optional().describe("Consent to publish a breaking (blocking-risk) change as major."),dryRun:s.boolean().optional().describe("Preview the change (computed semver + reasons) without cutting a release."),...He},handler:async(t,e)=>{let n=XT({bump:e.bump,version:e.version,acceptBreaking:e.acceptBreaking});return t.publishProduct(e.productId,n,{idempotencyKey:e.idempotencyKey,dryRun:e.dryRun})}}},{opKey:"business.delete",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business",command:"delete",summary:"Permanently delete a business. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm business deletion.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"deleteGithubRepo",kind:"flag",token:"--delete-github-repo",describe:"Also delete the connected GitHub repository. Requires the same builder-session authorization as dashboard deletion."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId;try{await t.deleteProduct(o,{deleteGitHubRepo:e.deleteGithubRepo===!0})}catch(r){throw r instanceof C&&(r.status===403||r.code==="FORBIDDEN")?new C("Deleting a whole business requires a builder/browser session \u2014 open the business in the dashboard to delete it. (Preview environments CAN be deleted via the CLI: `farthershore env delete`.)",r.status,{code:r.code??"FORBIDDEN"}):r}n({deleted:o},`Business ${o} deleted`)}},mcp:null},{opKey:"business.preview_env.set",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business preview-env",command:"set",summary:"Configure automatic preview-environment creation for a business.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"trigger",kind:"flag",token:"--trigger <branch-prefix|pull-request|disabled>",describe:"Auto-create previews from env branch prefixes, pull requests, or disable automatic creation."},{field:"branchPrefix",kind:"flag",token:"--branch-prefix <prefix>",describe:"Set the env branch prefix used by --trigger branch-prefix (1-50 characters)."},{field:"clearBranchPrefix",kind:"flag",token:"--clear-branch-prefix",describe:"Reset the env branch prefix to the platform default (env/)."}],handler:async({client:t,args:e,emit:n})=>{if(e.branchPrefix!==void 0&&e.clearBranchPrefix===!0)throw new C("Pass either --branch-prefix or --clear-branch-prefix, not both.",void 0,{code:"CONFLICTING_BRANCH_PREFIX_FLAGS"});let o=e.productId,r=H4(e),i=await t.updateProduct(o,r,{});n({business:i},`Preview environment policy updated for ${o}`)}},mcp:{tool:"fs_business_preview_env_set",title:"Set business preview environment policy",description:"Configure automatic preview environment creation for a business. Modes: BRANCH_PREFIX creates previews from matching env branches, PULL_REQUEST creates previews for PRs against the default branch, and DISABLED stops automatic creation while explicit `farthershore env create` continues to work. Pass envBranchPrefix to customize the branch-prefix mode, or null to reset to env/.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to update."),previewEnvTrigger:s.enum(ay).optional().describe("Automatic preview mode: BRANCH_PREFIX, PULL_REQUEST, or DISABLED."),envBranchPrefix:s.string().min(1).max(50).nullable().optional().describe("Branch prefix for BRANCH_PREFIX mode, or null for env/.")},handler:async(t,e)=>{let n=await ve(t,e.productId),o={};if(e.previewEnvTrigger!==void 0&&(o.previewEnvTrigger=e.previewEnvTrigger),e.envBranchPrefix!==void 0&&(o.envBranchPrefix=e.envBranchPrefix),o.previewEnvTrigger===void 0&&o.envBranchPrefix===void 0)throw new C("Pass previewEnvTrigger, envBranchPrefix, or both.",void 0,{code:"MISSING_PREVIEW_ENV_UPDATE"});return t.updateProduct(n,o,{})}}},{opKey:"business.docs.enable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business docs",command:"enable",summary:"Enable docs for a business (publish/serve docs scaffold).",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.updateProduct(o,{docsEnabled:!0},{});n({business:r},`Docs enabled for ${o}`)}},mcp:{tool:"fs_business_docs_enable",title:"Enable business docs",description:"Enable docs for a business \u2014 opens the publish/sync gate so docs are served from R2 and `boot.docsEnabled=true` is emitted to the portal. Idempotent if docs are already enabled.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to enable docs on.")},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.updateProduct(n,{docsEnabled:!0},{})}}},{opKey:"business.docs.disable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business docs",command:"disable",summary:"Disable docs for a business (stop publishing/serving docs; scaffold kept in the repo).",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.updateProduct(o,{docsEnabled:!1},{});n({business:r},`Docs disabled for ${o}`)}},mcp:{tool:"fs_business_docs_disable",title:"Disable business docs",description:"Disable docs for a business \u2014 closes the publish/sync gate so docs are no longer served and `boot.docsEnabled=false` is emitted to the portal. The docs scaffold stays in the repo; re-enabling is a pure flag flip. Idempotent if docs are already disabled.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to disable docs on.")},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.updateProduct(n,{docsEnabled:!1},{})}}}];var K4={kind:"free",label:"Free",description:"No recurring fee and no metered usage. Pure freemium tier.",pricing:{meters:[],recurring_fee_cents:0,billing_interval:"month",grants:[],trial_days:0}},G4={kind:"starter",label:"Starter \u2014 $20/mo + $20 included",description:"$20/month subscription with $20 of usage credit each period. Stripe-style minimum-spend; overage billed at $0.001/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:1e3}],recurring_fee_cents:2e3,billing_interval:"month",grants:[{kind:"credit",amount_cents:2e3,recurs:!0}],trial_days:0}},W4={kind:"pro",label:"Pro \u2014 $100/mo + $200 included",description:"$100/month subscription with $200 of usage credit each period and a 14-day trial. Overage billed at $0.0005/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:500}],recurring_fee_cents:1e4,billing_interval:"month",grants:[{kind:"credit",amount_cents:2e4,recurs:!0}],trial_days:14}},J4={kind:"prepaid",label:"Prepaid \u2014 $50 sign-up credit, then PAYG",description:"$50 one-time credit at signup. Once depleted the subscriber pays-as-they-go at $0.001/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:1e3}],recurring_fee_cents:0,billing_interval:"month",grants:[{kind:"credit",amount_cents:5e3,recurs:!1}],trial_days:0}},Y4={kind:"metered",label:"Metered (pay-as-you-go)",description:"No subscription fee. Pure usage billing at $0.001/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:1e3}],recurring_fee_cents:0,billing_interval:"month",grants:[],trial_days:0}},sX=Object.freeze({free:K4,starter:G4,pro:W4,prepaid:J4,metered:Y4});var hX=s.object({recurring_fee_cents:s.number().int().nonnegative().optional(),grants:s.array(sr).max(40).optional(),creditPolicy:cr.optional(),min_monthly_spend_cents:s.number().int().nonnegative().optional(),max_monthly_spend_cents:s.number().int().nonnegative().optional(),meters:s.array(ur).optional(),notes:s.string().max(2e3).optional()});var Hd=["grandfather","next_renewal","immediate","by_date","opt_in"];function X4(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.plans)?e.plans:Array.isArray(t)?t:[]}function Q4(t){if(t.length===0)return"(no plans)";let e=["KEY","NAME","FREE","FEE\xA2","RECURRING\xA2","ONE_TIME\xA2","TRIAL_D","MAX_SPEND\xA2","STATUS"],n=c=>c===null?"\u2014":c.toLocaleString("en-US"),o=t.map(c=>[c.key,c.name,c.free?"Y":"N",n(c.recurring_fee_cents),n(c.recurring_grant_cents),n(c.one_time_grant_cents),n(c.trial_days),n(c.max_monthly_spend_cents),c.status]),r=e.map((c,u)=>Math.max(c.length,...o.map(d=>d[u]?.length??0))),i=c=>c.map((u,d)=>u.padEnd(r[d]??u.length)).join(" "),a=r.map(c=>"-".repeat(c)).join(" ");return[i(e),a,...o.map(i)].join(`
|
|
87
|
+
A blocking-risk (breaking) change is refused unless --accept-breaking is passed.`,handler:async({client:t,args:e,opts:n,reqOpts:o,emit:r,emitDryRunPreview:i})=>{let a=e.productId,c=XT(n);if(o.dryRun){let d=await t.publishProduct(a,c,o);if(i(d))return}if(Zy()&&n.input!==!1){let l=(await t.publishProduct(a,c,{...o,dryRun:!0,idempotencyKey:void 0})).wouldHave?._release;if(l){qT(`Publishing ${a}: ${l.computedBump} \u2192 ${l.version}`+(l.previousVersion?` (from ${l.previousVersion})`:" (first release)"));for(let m of l.reasons)VT(` \u2022 ${m}`);if(!await A4(l.version)){r({cancelled:!0},"Publish cancelled.");return}}}let u=await t.publishProduct(a,c,o);r({business:u,_release:u._release??null},`Business ${a} published`)}},mcp:{tool:"fs_business_publish",title:"Publish a business",description:"Publish a business \u2014 deploy its current spec live and cut a versioned release with an auto-computed semver. Equivalent to a repo-driven deploy (operationClass=dual); both reconcile to the same published state.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id to publish."),bump:s.enum(["major","minor","patch"]).optional().describe("Force the semver bump. Omit to auto-derive from the change."),version:s.string().optional().describe("Pin the exact next release tag (vX.Y.Z)."),acceptBreaking:s.boolean().optional().describe("Consent to publish a breaking (blocking-risk) change as major."),dryRun:s.boolean().optional().describe("Preview the change (computed semver + reasons) without cutting a release."),...He},handler:async(t,e)=>{let n=XT({bump:e.bump,version:e.version,acceptBreaking:e.acceptBreaking});return t.publishProduct(e.productId,n,{idempotencyKey:e.idempotencyKey,dryRun:e.dryRun})}}},{opKey:"business.delete",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business",command:"delete",summary:"Permanently delete a business. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm business deletion.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"deleteGithubRepo",kind:"flag",token:"--delete-github-repo",describe:"Also delete the connected GitHub repository. Requires the same builder-session authorization as dashboard deletion."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId;try{await t.deleteProduct(o,{deleteGitHubRepo:e.deleteGithubRepo===!0})}catch(r){throw r instanceof A&&(r.status===403||r.code==="FORBIDDEN")?new A("Deleting a whole business requires a builder/browser session \u2014 open the business in the dashboard to delete it. (Preview environments CAN be deleted via the CLI: `farthershore env delete`.)",r.status,{code:r.code??"FORBIDDEN"}):r}n({deleted:o},`Business ${o} deleted`)}},mcp:null},{opKey:"business.preview_env.set",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business preview-env",command:"set",summary:"Configure automatic preview-environment creation for a business.",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0},{field:"trigger",kind:"flag",token:"--trigger <branch-prefix|pull-request|disabled>",describe:"Auto-create previews from env branch prefixes, pull requests, or disable automatic creation."},{field:"branchPrefix",kind:"flag",token:"--branch-prefix <prefix>",describe:"Set the env branch prefix used by --trigger branch-prefix (1-50 characters)."},{field:"clearBranchPrefix",kind:"flag",token:"--clear-branch-prefix",describe:"Reset the env branch prefix to the platform default (env/)."}],handler:async({client:t,args:e,emit:n})=>{if(e.branchPrefix!==void 0&&e.clearBranchPrefix===!0)throw new A("Pass either --branch-prefix or --clear-branch-prefix, not both.",void 0,{code:"CONFLICTING_BRANCH_PREFIX_FLAGS"});let o=e.productId,r=H4(e),i=await t.updateProduct(o,r,{});n({business:i},`Preview environment policy updated for ${o}`)}},mcp:{tool:"fs_business_preview_env_set",title:"Set business preview environment policy",description:"Configure automatic preview environment creation for a business. Modes: BRANCH_PREFIX creates previews from matching env branches, PULL_REQUEST creates previews for PRs against the default branch, and DISABLED stops automatic creation while explicit `farthershore env create` continues to work. Pass envBranchPrefix to customize the branch-prefix mode, or null to reset to env/.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to update."),previewEnvTrigger:s.enum(ay).optional().describe("Automatic preview mode: BRANCH_PREFIX, PULL_REQUEST, or DISABLED."),envBranchPrefix:s.string().min(1).max(50).nullable().optional().describe("Branch prefix for BRANCH_PREFIX mode, or null for env/.")},handler:async(t,e)=>{let n=await ve(t,e.productId),o={};if(e.previewEnvTrigger!==void 0&&(o.previewEnvTrigger=e.previewEnvTrigger),e.envBranchPrefix!==void 0&&(o.envBranchPrefix=e.envBranchPrefix),o.previewEnvTrigger===void 0&&o.envBranchPrefix===void 0)throw new A("Pass previewEnvTrigger, envBranchPrefix, or both.",void 0,{code:"MISSING_PREVIEW_ENV_UPDATE"});return t.updateProduct(n,o,{})}}},{opKey:"business.docs.enable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business docs",command:"enable",summary:"Enable docs for a business (publish/serve docs scaffold).",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.updateProduct(o,{docsEnabled:!0},{});n({business:r},`Docs enabled for ${o}`)}},mcp:{tool:"fs_business_docs_enable",title:"Enable business docs",description:"Enable docs for a business \u2014 opens the publish/sync gate so docs are served from R2 and `boot.docsEnabled=true` is emitted to the portal. Idempotent if docs are already enabled.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to enable docs on.")},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.updateProduct(n,{docsEnabled:!0},{})}}},{opKey:"business.docs.disable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"business docs",command:"disable",summary:"Disable docs for a business (stop publishing/serving docs; scaffold kept in the repo).",args:[{field:"productId",kind:"positional",token:lr,resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.updateProduct(o,{docsEnabled:!1},{});n({business:r},`Docs disabled for ${o}`)}},mcp:{tool:"fs_business_docs_disable",title:"Disable business docs",description:"Disable docs for a business \u2014 closes the publish/sync gate so docs are no longer served and `boot.docsEnabled=false` is emitted to the portal. The docs scaffold stays in the repo; re-enabling is a pure flag flip. Idempotent if docs are already disabled.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The business id or slug to disable docs on.")},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.updateProduct(n,{docsEnabled:!1},{})}}}];var K4={kind:"free",label:"Free",description:"No recurring fee and no metered usage. Pure freemium tier.",pricing:{meters:[],recurring_fee_cents:0,billing_interval:"month",grants:[],trial_days:0}},G4={kind:"starter",label:"Starter \u2014 $20/mo + $20 included",description:"$20/month subscription with $20 of usage credit each period. Stripe-style minimum-spend; overage billed at $0.001/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:1e3}],recurring_fee_cents:2e3,billing_interval:"month",grants:[{kind:"credit",amount_cents:2e3,recurs:!0}],trial_days:0}},W4={kind:"pro",label:"Pro \u2014 $100/mo + $200 included",description:"$100/month subscription with $200 of usage credit each period and a 14-day trial. Overage billed at $0.0005/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:500}],recurring_fee_cents:1e4,billing_interval:"month",grants:[{kind:"credit",amount_cents:2e4,recurs:!0}],trial_days:14}},J4={kind:"prepaid",label:"Prepaid \u2014 $50 sign-up credit, then PAYG",description:"$50 one-time credit at signup. Once depleted the subscriber pays-as-they-go at $0.001/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:1e3}],recurring_fee_cents:0,billing_interval:"month",grants:[{kind:"credit",amount_cents:5e3,recurs:!1}],trial_days:0}},Y4={kind:"metered",label:"Metered (pay-as-you-go)",description:"No subscription fee. Pure usage billing at $0.001/request by default.",pricing:{meters:[{dimension:"requests",kind:"linear",price_per_unit_micros:1e3}],recurring_fee_cents:0,billing_interval:"month",grants:[],trial_days:0}},cX=Object.freeze({free:K4,starter:G4,pro:W4,prepaid:J4,metered:Y4});var gX=s.object({recurring_fee_cents:s.number().int().nonnegative().optional(),grants:s.array(sr).max(40).optional(),creditPolicy:cr.optional(),min_monthly_spend_cents:s.number().int().nonnegative().optional(),max_monthly_spend_cents:s.number().int().nonnegative().optional(),meters:s.array(ur).optional(),notes:s.string().max(2e3).optional()});var Hd=["grandfather","next_renewal","immediate","by_date","opt_in"];function X4(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.plans)?e.plans:Array.isArray(t)?t:[]}function Q4(t){if(t.length===0)return"(no plans)";let e=["KEY","NAME","FREE","FEE\xA2","RECURRING\xA2","ONE_TIME\xA2","TRIAL_D","MAX_SPEND\xA2","STATUS"],n=c=>c===null?"\u2014":c.toLocaleString("en-US"),o=t.map(c=>[c.key,c.name,c.free?"Y":"N",n(c.recurring_fee_cents),n(c.recurring_grant_cents),n(c.one_time_grant_cents),n(c.trial_days),n(c.max_monthly_spend_cents),c.status]),r=e.map((c,u)=>Math.max(c.length,...o.map(d=>d[u]?.length??0))),i=c=>c.map((u,d)=>u.padEnd(r[d]??u.length)).join(" "),a=r.map(c=>"-".repeat(c)).join(" ");return[i(e),a,...o.map(i)].join(`
|
|
88
88
|
`)}var e6=[{opKey:"plan.read",operationClass:"contract",scope:["products:read"],sideEffect:"read",cli:{group:"plan",command:"list",summary:"List plans for a product",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0}],helpTextAfter:`
|
|
89
89
|
Output:
|
|
90
90
|
--format json \u2014 stable agent-friendly JSON envelope (default for non-TTY)
|
|
@@ -93,7 +93,7 @@ Output:
|
|
|
93
93
|
Examples:
|
|
94
94
|
farthershore plan migrate my-product pro --from 1 --to head --policy next_renewal
|
|
95
95
|
farthershore plan migrate my-product pro --from 1 --to 2 --policy immediate --proration prorate
|
|
96
|
-
`,handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=e.planKey,c=e.policy;if(!Hd.includes(c))throw new C(`Invalid --policy "${c}". Supported: ${Hd.join(", ")}.`,void 0,{code:"INVALID_MIGRATION_POLICY"});let u=await t.migratePlan(i,a,{fromVersion:e.from,toVersion:e.to,policy:c,proration:e.proration,completeBy:e.completeBy},n);r(u)||o({productId:i,planKey:a,migration:u},`Migration scheduled for plan ${a}`)}},mcp:{tool:"fs_plan_migrate",title:"Migrate subscribers between plan versions",description:"Schedule a subscriber migration for a plan: move subscribers from one plan version to another under a policy. Pass the plan KEY plus fromVersion/toVersion (each an integer or 'head'/'latest') \u2014 the server resolves them to the right plan versions. Policies: grandfather (keep existing subs as-is), next_renewal (migrate at each sub's renewal), immediate (migrate now), by_date (migrate everyone by a deadline), opt_in (subs choose). This is an OPERATE action (it changes live subscriber state, not the product's code-managed definition).",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose subscribers to migrate."),planKey:s.string().describe("The stable plan key (e.g. 'pro') to migrate within."),fromVersion:s.union([s.string(),s.number().int().positive()]).describe("Source plan version: an integer or 'head'/'latest'."),toVersion:s.union([s.string(),s.number().int().positive()]).describe("Target plan version: an integer or 'head'/'latest'."),policy:s.enum(Hd).describe("Migration policy: grandfather | next_renewal | immediate | by_date | opt_in."),proration:s.enum(["none","prorate","credit"]).optional().describe("Optional proration behaviour."),completeBy:s.string().optional().describe("ISO 8601 deadline \u2014 required by the by_date policy."),...He},handler:async(t,e)=>t.migratePlan(e.productId,e.planKey,{fromVersion:e.fromVersion,toVersion:e.toVersion,policy:e.policy,proration:e.proration,completeBy:e.completeBy},{idempotencyKey:e.idempotencyKey})}}],n0=e6;function t6(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.environments)?e.environments:[]}var o0=[{opKey:"environment.read",operationClass:"dual",scope:["products:read"],sideEffect:"read",cli:{group:"env",command:"list",summary:"List environments for a product",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=t6(await t.listEnvironments(o));n({productId:o,count:r.length,environments:r.map(i=>({id:i.id,name:i.name,branch:i.branch??null,portalHostname:i.portalHostname??null,runtimeHostname:i.runtimeHostname??null,status:i.status??null}))},`${r.length} environment(s)`)}},mcp:{tool:"fs_env_list",title:"List environments",description:"List a product's preview environments (name, branch, hostnames). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose environments to list.")},handler:async(t,{productId:e})=>t.listEnvironments(e)}},{opKey:"environment.create",operationClass:"dual",scope:["products:update"],sideEffect:"write",cli:{group:"env",command:"create",summary:"Create a preview environment bound to a git branch",idempotent:!0,args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"name",kind:"flag",token:"--name <name>",describe:"Environment name (e.g. preview, staging)",required:!0},{field:"branch",kind:"flag",token:"--branch <branch>",describe:"Git branch to track (e.g. env/preview)",required:!0},{field:"cloneVariables",kind:"flag",token:"--no-clone-variables",describe:"Skip cloning Main variables into the new environment (variables are cloned by default).",defaultValue:!0}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=await t.createEnvironment(i,{name:e.name,branch:e.branch,cloneVariablesFromMain:e.cloneVariables!==!1},n);r(a)||o({productId:i,environment:a},`Environment ${e.name} created`)}},mcp:{tool:"fs_env_create",title:"Create preview environment",description:"Create a preview environment bound to a git branch. Equivalent to pushing the branch \u2014 both reconcile to the same environment (operationClass=dual). Provide a name and the git branch it tracks.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id to create the environment in."),name:s.string().describe("Environment name (e.g. 'staging', 'preview-pr-42')."),branch:s.string().describe("The git branch this environment tracks."),cloneVariablesFromMain:s.boolean().optional().describe("Copy Main/production variables into the new environment. Default: true."),...He},handler:async(t,e)=>{let n=await t.createEnvironment(e.productId,{name:e.name,branch:e.branch,cloneVariablesFromMain:e.cloneVariablesFromMain??!0},{idempotencyKey:e.idempotencyKey});return{ok:!0,productId:e.productId,environment:n}}}},{opKey:"environment.delete",operationClass:"dual",scope:["products:update"],sideEffect:"write",cli:{group:"env",command:"delete",summary:"Delete an environment by name. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm environment deletion.",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"envName",kind:"positional",token:"<envName>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.envName;await t.deleteEnvironment(o,r),n({productId:o,deleted:r},`Environment ${r} deleted`)}},mcp:null}];var qy=["gateway_verification","metering","health","tunnel"],r6="<productId>",ms="products:update",fs="The product id.",yn={field:"productId",kind:"positional",token:r6};function i0(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.backends)?e.backends:Array.isArray(e.tokens)?e.tokens:Array.isArray(t)?t:[]}function n6(t){let e=t.status;if(typeof e=="string"&&e.length>0)return e;let n=typeof t.readinessState=="string"?t.readinessState:null,o=typeof t.provisionStatus=="string"?t.provisionStatus:null;return n??o??"unknown"}function o6(t){return{id:t.id,name:t.name,slug:t.slug,transport:t.transportMode,default:t.isDefault??!1,status:n6(t),originUrl:t.originUrl??null,lastSeenAt:t.lastSeenAt??null}}async function a0(t,e,n){if(!n)return null;try{return await _n(t,e,n)}catch(o){throw new C(o instanceof Error?o.message:`Environment "${n}" not found on product ${e}.`,void 0,{code:"ENV_NOT_FOUND"})}}var By=t=>typeof t=="string"&&t.length>0?t.split(",").map(e=>e.trim()).filter(e=>e.length>0):void 0,s0=[{opKey:"backend.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"backend",command:"list",summary:"List backends for a product (id, name, transport, status)",args:[yn],handler:async({client:t,args:e,emit:n})=>{let r=i0(await t.builderListBackends(e.productId)).map(o6);n({count:r.length,backends:r},`${r.length} backend(s)`)}},mcp:{tool:"fs_backend_list",title:"List backends",description:"List a product's backends (origins) \u2014 id, name, slug, transport (direct|tunnel), default flag, and derived status. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose backends to list.")},handler:async(t,{productId:e})=>t.builderListBackends(e)}},{opKey:"backend.create",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend",command:"create",summary:"Create a backend (default transport: direct)",idempotent:!0,args:[yn,{field:"name",kind:"flag",token:"--name <name>",describe:"Human-friendly backend name",required:!0},{field:"slug",kind:"flag",token:"--slug <slug>",describe:"Stable slug (defaults to a slugified name)"},{field:"env",kind:"flag",token:"--env <environment>",describe:"Scope backend to an environment name or id"},{field:"transport",kind:"flag",token:"--transport <mode>",describe:"Transport mode: direct | tunnel",defaultValue:"direct"},{field:"runner",kind:"flag",token:"--runner <runner>",describe:"embedded | sidecar"},{field:"runtime",kind:"flag",token:"--runtime <runtime>",describe:"Container/runtime descriptor"},{field:"originUrl",kind:"flag",token:"--origin-url <url>",describe:"Builder origin URL (direct)"},{field:"default",kind:"flag",token:"--default",describe:"Mark this backend the product default"}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=await a0(t,i,e.env),c=e.transport==="tunnel"?"tunnel":"direct",u=await t.builderCreateBackend(i,{name:e.name,slug:e.slug,environmentId:a,transportMode:c,runner:e.runner==="embedded"||e.runner==="sidecar"?e.runner:null,runtime:e.runtime??null,originUrl:e.originUrl??null,isDefault:e.default},n);r(u)||o({result:u},"Backend created")}},mcp:{tool:"fs_backend_create",title:"Create a backend",description:"Create a backend (origin) for a product. Pick a transport mode: direct (public HTTPS URL, secured by Ed25519 request signing) or tunnel (private outbound-only cloudflared, secure bring-your-own-backend). Mark it default to route traffic to it.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id to create the backend in."),name:s.string().describe("Backend name (e.g. 'prod-origin')."),slug:s.string().optional().describe("URL-safe slug; derived from name if omitted."),transportMode:s.enum(["direct","tunnel"]).optional().describe("How the gateway reaches the origin; defaults to direct."),originUrl:s.string().optional().describe("The origin URL (for direct mode)."),isDefault:s.boolean().optional().describe("Route traffic to this backend by default."),...He},handler:async(t,e)=>t.builderCreateBackend(e.productId,{name:e.name,slug:e.slug,transportMode:e.transportMode,originUrl:e.originUrl,isDefault:e.isDefault},{idempotencyKey:e.idempotencyKey})}},{opKey:"backend.delete",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend",command:"delete",summary:"Delete a backend (revokes its runtime tokens). Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm backend deletion.",args:[yn,{field:"backendId",kind:"positional",token:"<backendId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.backendId;await t.builderDeleteBackend(o,r),n({productId:o,deleted:r},`Backend ${r} deleted`)}},mcp:{tool:"fs_backend_delete",title:"Delete a backend",description:"Delete a backend (origin). Traffic routed to it stops; re-create to restore.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),backendId:s.string().describe("The backend id to delete.")},handler:async(t,{productId:e,backendId:n})=>t.builderDeleteBackend(e,n)}},{opKey:"runtime_token.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"backend tokens",command:"list",summary:"List runtime tokens for a product",args:[yn],handler:async({client:t,args:e,emit:n})=>{let o=i0(await t.builderListRuntimeTokens(e.productId));n({count:o.length,tokens:o},`${o.length} runtime token(s)`)}},mcp:{tool:"fs_runtime_token_list",title:"List runtime tokens",description:"List a product's runtime tokens (fsrt_) \u2014 id, last-four, capabilities, status. Read-only; secrets are never shown.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs)},handler:async(t,{productId:e})=>t.builderListRuntimeTokens(e)}},{opKey:"runtime_token.mint",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend tokens",command:"create",summary:"Create a runtime token (returns FS_RUNTIME_TOKEN once)",idempotent:!0,args:[yn,{field:"env",kind:"flag",token:"--env <environment>",describe:"Scope token to an environment name or id"},{field:"backend",kind:"flag",token:"--backend <backendId>",describe:"Bind token to a specific backend"},{field:"kind",kind:"flag",token:"--kind <kind>",describe:"live | test (defaults from env scope)"},{field:"capabilities",kind:"flag",token:"--capabilities <list>",describe:`Comma-separated capabilities: ${qy.join(" | ")}. Default: core's DEFAULT_CAPABILITIES. Use tunnel for tunnel backends.`},{field:"meters",kind:"flag",token:"--meters <list>",describe:"Comma-separated allowed meters (default: all product meters)"},{field:"routes",kind:"flag",token:"--routes <list>",describe:"Comma-separated allowed routes"}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=await a0(t,i,e.env),c=e.kind==="test"||e.kind==="live"?e.kind:void 0,u=By(e.capabilities);if(u){for(let l of u)if(!qy.includes(l))throw new C(`Unknown capability "${l}". Available: ${qy.join(", ")}.`,void 0,{code:"UNKNOWN_RUNTIME_TOKEN_CAPABILITY"})}let d=await t.builderCreateRuntimeToken(i,{environmentId:a,backendId:e.backend??null,kind:c,capabilities:u,allowedMeters:By(e.meters),allowedRoutes:By(e.routes)},n);r(d)||o({envVar:"FS_RUNTIME_TOKEN",result:d},"Runtime token created")}},mcp:{tool:"fs_runtime_token_mint",title:"Mint a runtime token",description:"Mint a new runtime token (fsrt_) for a backend. Returns the plaintext token ONCE \u2014 store it now (e.g. as FS_RUNTIME_TOKEN). Capabilities default to the backend's needs (gateway_verification, metering, health).",returnsOneTimeSecret:!0,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),backendId:s.string().optional().describe("Bind the token to this backend."),environmentId:s.string().optional().describe("Scope to a preview environment (omit for production)."),kind:s.enum(["live","test"]).optional().describe("Token kind; defaults from the env scope."),capabilities:s.array(s.string()).optional().describe("Capabilities (gateway_verification, metering, health, tunnel)."),...He},handler:async(t,e)=>t.builderCreateRuntimeToken(e.productId,{backendId:e.backendId??null,environmentId:e.environmentId??null,kind:e.kind,capabilities:e.capabilities},{idempotencyKey:e.idempotencyKey})}},{opKey:"runtime_token.rotate",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend tokens",command:"rotate",summary:"Rotate a runtime token (returns a fresh FS_RUNTIME_TOKEN once)",args:[yn,{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.tokenId,i=await t.builderRotateRuntimeToken(o,r);n({envVar:"FS_RUNTIME_TOKEN",result:i},`Runtime token ${r} rotated`)}},mcp:{tool:"fs_runtime_token_rotate",title:"Rotate a runtime token",description:"Rotate a runtime token: mint a fresh secret carrying the same scope and revoke the old one. Returns the new plaintext token ONCE.",returnsOneTimeSecret:!0,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),tokenId:s.string().describe("The runtime token id to rotate."),...He},handler:async(t,e)=>t.builderRotateRuntimeToken(e.productId,e.tokenId,{idempotencyKey:e.idempotencyKey})}},{opKey:"runtime_token.revoke",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend tokens",command:"revoke",summary:"Revoke a runtime token. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm runtime token revocation.",args:[yn,{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.tokenId;await t.builderRevokeRuntimeToken(o,r),n({productId:o,revoked:r},`Runtime token ${r} revoked`)}},mcp:{tool:"fs_runtime_token_revoke",title:"Revoke a runtime token",description:"Revoke a runtime token. The backend using it stops verifying.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),tokenId:s.string().describe("The runtime token id to revoke.")},handler:async(t,{productId:e,tokenId:n})=>t.builderRevokeRuntimeToken(e,n)}}];var Kd="The business id or slug.",Hy="Scope to a preview environment (omit for production).",Ky={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:Kd,resolveProduct:!0},Gy={field:"env",kind:"flag",token:"--env <environmentId>",describe:"Scope to a preview environment id (omit for production)."};async function Wy(t,e){return ve(t,e)}var c0=[{opKey:"frontend.deploy",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"frontend",command:"deploy",summary:"Trigger a frontend build (deploy) for a product's connected repo",idempotent:!0,args:[Ky,Gy,{field:"ref",kind:"flag",token:"--ref <ref>",describe:"Git ref to build (defaults to the env branch / repo default)."},{field:"buildCmd",kind:"flag",token:"--build-cmd <cmd>",describe:"Override the build command."}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=await t.builderFrontendDeploy(e.productId,{ref:e.ref,buildCmd:e.buildCmd,environmentId:e.env},n);r(i)||o({result:i},"Frontend build triggered")}},mcp:{tool:"fs_frontend_deploy",title:"Deploy a product frontend",description:"Trigger a Managed Frontend Hosting build for the product's connected repo (production by default; pass environmentId for a preview env). Returns the enqueued build.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Kd),ref:s.string().optional().describe("Git ref to build (defaults to the env branch / repo default)."),buildCmd:s.string().optional().describe("Override the build command."),environmentId:s.string().optional().describe(Hy),...He},handler:async(t,e)=>{let n=await Wy(t,e.productId);return t.builderFrontendDeploy(n,{ref:e.ref,buildCmd:e.buildCmd,environmentId:e.environmentId},{idempotencyKey:e.idempotencyKey})}}},{opKey:"frontend.status",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"frontend",command:"status",summary:"Show the current frontend release, recent releases, and recent builds (incl. failure reasons)",args:[Ky,Gy],handler:async({client:t,args:e,emit:n})=>{let o=await t.builderFrontendStatus(e.productId,e.env);n(o,"Frontend status")}},mcp:{tool:"fs_frontend_status",title:"Get frontend status",description:"Read a product's current frontend serve state (uiMode, active release hash + producing build, pin flag), the recent SUCCEEDED releases (rollback targets), and the recent builds \u2014 a FAILED build's `error` explains why a deploy didn't go live. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Kd),environmentId:s.string().optional().describe(Hy)},handler:async(t,e)=>{let n=await Wy(t,e.productId);return t.builderFrontendStatus(n,e.environmentId)}}},{opKey:"frontend.rollback",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"frontend",command:"rollback",summary:"Roll the product frontend back to a prior release (re-activate its releaseId)",idempotent:!0,args:[Ky,{field:"releaseId",kind:"flag",token:"--release-id <releaseId>",describe:"The prior release id (manifest hash) to re-activate \u2014 see `frontend status`.",required:!0},Gy],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=await t.builderFrontendRollback(e.productId,{releaseId:e.releaseId,environmentId:e.env},n);r(i)||o({result:i},"Frontend rolled back")}},mcp:{tool:"fs_frontend_rollback",title:"Roll back a product frontend",description:"Roll a product's frontend back to a prior release by its releaseId (manifest hash, from fs_frontend_status). Flips the live pointer back and pins it. The releaseId must belong to this target's build history.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Kd),releaseId:s.string().describe("The prior release id (manifest hash) to re-activate."),environmentId:s.string().optional().describe(Hy),...He},handler:async(t,e)=>{let n=await Wy(t,e.productId);return t.builderFrontendRollback(n,{releaseId:e.releaseId,environmentId:e.environmentId},{idempotencyKey:e.idempotencyKey})}}}];var u0=[{opKey:"usage.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"usage",command:"summary",summary:"Show usage summary for the last 30 days",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.managementGetUsage(o);n({productId:o,summary:r},"Usage summary")}},mcp:{tool:"fs_usage_read",title:"Read usage summary",description:"Read a product's usage summary \u2014 metered request counts and tier utilization. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose usage to read.")},handler:async(t,{productId:e})=>t.managementGetUsage(e)}}];var l0=[{opKey:"persona.bootstrap",operationClass:"operate",scope:["products:read"],sideEffect:"write",cli:{group:"persona",command:"bootstrap",summary:"Issue a fresh fsk_test_ API key in a test environment",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment name (must be test-strategy)",required:!0},{field:"plan",kind:"flag",token:"--plan <planKey>",describe:"Plan key to assign (e.g. starter)"},{field:"displayName",kind:"flag",token:"--display-name <name>",describe:"Persona display name"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await Jy(t,o,e.env),i=await t.issuePersonaBootstrapKey(o,r,{planKey:e.plan,displayName:e.displayName});n({productId:o,environmentId:r,result:i},"Persona bootstrapped")}},mcp:{tool:"fs_persona_bootstrap",title:"Bootstrap a test persona",description:"Issue a one-time test bootstrap key for a product environment \u2014 use it to provision a test persona. Returns the key ONCE; store it now.",returnsOneTimeSecret:!0,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id."),environmentId:s.string().describe("The environment id to scope the persona to.")},handler:async(t,{productId:e,environmentId:n})=>t.issuePersonaBootstrapKey(e,n)}},{opKey:"persona.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"persona",command:"list",summary:"List personas for a test environment",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment name",required:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await Jy(t,o,e.env),i=await t.listPersonas(o,r);n({productId:o,environmentId:r,result:i},"Personas")}},mcp:{tool:"fs_persona_list",title:"List personas",description:"List a product environment's test personas (id, label, status). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id."),environmentId:s.string().describe("The environment id whose personas to list.")},handler:async(t,{productId:e,environmentId:n})=>t.listPersonas(e,n)}},{opKey:"persona.revoke",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"persona",command:"revoke",summary:"Revoke a persona's API key",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"personaId",kind:"positional",token:"<personaId>"},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment name",required:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.personaId,i=await Jy(t,o,e.env),a=await t.revokePersona(o,i,r);n({productId:o,environmentId:i,result:a},`Persona ${r} revoked`)}},mcp:{tool:"fs_persona_revoke",title:"Revoke a persona",description:"Revoke a test persona. Its credentials stop working.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id."),environmentId:s.string().describe("The environment id."),personaId:s.string().describe("The persona id to revoke.")},handler:async(t,{productId:e,environmentId:n,personaId:o})=>t.revokePersona(e,n,o)}}];async function Jy(t,e,n){try{return await _n(t,e,n)}catch(o){throw new C(o instanceof Error?o.message:`Environment "${n}" not found on product ${e}.`,void 0,{code:"ENV_NOT_FOUND"})}}function i6(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.tokens)?e.tokens:Array.isArray(t)?t:[]}var d0=[{opKey:"maker_token.read",operationClass:"operate",scope:[],sideEffect:"read",cli:{group:"token",command:"list",summary:"List maker tokens in the current org",args:[],handler:async({client:t,emit:e})=>{let n=i6(await t.managementListMakerTokens());e({count:n.length,tokens:n.map(o=>({id:o.id,name:o.name??null,scopes:o.scopes??[],productId:o.productId??null,lastFour:o.lastFour??null,createdAt:o.createdAt??null,revokedAt:o.revokedAt??null}))},`${n.length} token(s)`)}},mcp:{tool:"fs_maker_token_list",title:"List maker tokens",description:"List the workspace's maker tokens (mk_) \u2014 id, label, scopes, last-four, status. Read-only; secrets are never shown. Creating/revoking maker tokens is intentionally not exposed via MCP.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{},handler:async t=>t.managementListMakerTokens()}},{opKey:"maker_token.create",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"create",summary:"Create a new maker token (returns the secret once)",args:[{field:"name",kind:"flag",token:"--name <name>",describe:"Human-friendly token name",required:!0},{field:"scope",kind:"flag",token:"--scope <scope...>",describe:"Scope(s) to attach (e.g. products:update products:publish)"},{field:"product",kind:"flag",token:"--product <productId>",describe:"Scope to a specific product"},{field:"restrict",kind:"flag",token:"--restrict <perm...>",describe:"Narrow the token's role bundle to these permissions (e.g. business:read plan:read). Must be within your own permissions."}],handler:async({client:t,args:e,emit:n})=>{let o=await t.managementCreateMakerToken({name:e.name,scopes:e.scope,productId:e.product,restrictedPermissions:e.restrict});n({result:o},"Token created")}},mcp:null},{opKey:"maker_token.revoke",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"revoke",summary:"Revoke a maker token. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm token revocation.",args:[{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.tokenId;await t.managementRevokeMakerToken(o),n({revoked:o},`Token ${o} revoked`)}},mcp:null},{opKey:"maker_token.rotate",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"rotate",summary:"Rotate a maker token secret (returns the new secret once)",idempotent:!0,args:[{field:"tokenId",kind:"positional",token:"<tokenId>"},{field:"syncToGithub",kind:"flag",token:"--sync-to-github",describe:"Also update the connected GitHub repo FARTHERSHORE_TOKEN secret when this is a platform token"}],handler:async({client:t,args:e,reqOpts:n,emit:o})=>{let r=e.tokenId,i=await t.managementRotateMakerToken(r,{syncToGithub:e.syncToGithub===!0},n);o({result:i},`Token ${r} rotated`)}},mcp:null},{opKey:"maker_token.hard_delete",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"delete",summary:"Permanently delete an already-revoked maker token. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to permanently delete the revoked token row.",args:[{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.tokenId;await t.managementHardDeleteMakerToken(o),n({deleted:o},`Token ${o} permanently deleted`)}},mcp:null}];var p0=[{opKey:"apply_timeline.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"apply-timeline",command:"list",summary:"List a business's Apply Timeline: repo-triggered manifest applies (PRs, pushes, releases), checks, semantic diffs, and apply phases.",args:[{field:"productId",kind:"positional",token:"<businessIdOrName>",resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope: production, all, or a preview environment name."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.listApplyTimeline(o,{env:e.env});n({productId:o,count:r.data.length,applyTimeline:r.data},`${r.data.length} apply timeline entr(ies)`)}},mcp:null},{opKey:"apply_timeline.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"apply-timeline",command:"inspect",summary:"Inspect one Apply Timeline entry by id, PR number, branch, or commit SHA.",args:[{field:"productId",kind:"positional",token:"<businessIdOrName>",resolveProduct:!0},{field:"selector",kind:"positional",token:"<id|pr|branch|sha>"},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope: production, all, or a preview environment name."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=String(e.selector),i=await t.listApplyTimeline(o,{env:e.env}),a=i.data.find(c=>c.id===r)??i.data.find(c=>c.prNumber!==null&&String(c.prNumber)===r)??i.data.find(c=>c.branch===r)??i.data.find(c=>c.commitSha.startsWith(r));if(!a)throw new C(`Apply timeline entry ${r} was not found.`,404,{code:"APPLY_TIMELINE_ENTRY_NOT_FOUND"});n({productId:o,applyTimelineEntry:a},`Apply timeline entry ${a.id}: ${a.status}`)}},mcp:null}];var hs="The business id or slug.",gs="The subscriber (client org) id \u2014 from `consumer list`.",Yy="The governed ChangeSet id.",Gd={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:hs,resolveProduct:!0},Wd={field:"subscriberId",kind:"positional",token:"<subscriberId>",describe:gs},m0={field:"changeSetId",kind:"positional",token:"<changeSetId>",describe:Yy},Jd={field:"env",kind:"flag",token:"--env <env>",describe:"Environment name/id to scope the proposal to."};function a6(t){let e;try{e=JSON.parse(t)}catch{throw new C("--operations must be a JSON array of governed operations.",0,{code:"INVALID_OPERATIONS"})}if(!Array.isArray(e))throw new C("--operations must be a JSON array.",0,{code:"INVALID_OPERATIONS"});return e}async function Yd(t,e){return ve(t,e)}var f0=[{opKey:"change_set.propose",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"proposal",command:"create",summary:"Propose a governed ChangeSet against a subscriber (agent/builder proposer; a human approves + applies in the portal)",idempotent:!0,args:[Gd,Wd,{field:"intent",kind:"flag",token:"--intent <intent>",describe:"Human-readable description of the proposed change.",required:!0},{field:"operations",kind:"flag",token:"--operations <json>",describe:"JSON array of governed operations (e.g. update_role_permissions).",required:!0,parser:t=>a6(t)},Jd],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=e.subscriberId,c=await t.proposeConsumerChangeSet(i,a,{intent:e.intent,operations:e.operations,...n.idempotencyKey?{idempotencyKey:n.idempotencyKey}:{}},{env:e.env},n);r(c)||o(c,"ChangeSet proposed")}},mcp:{tool:"fs_proposal_create",title:"Propose a governed ChangeSet",description:"Propose a governed ChangeSet against a subscriber's live RBAC state (Agent Proposal Flow). Creates a DRAFT proposal that a HUMAN in the subscriber org must preview, approve, and apply in the portal \u2014 an agent can propose but never self-approve or apply. Operate-class live-state action; does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),intent:s.string().describe("Human-readable description of the proposed change."),operations:s.array(s.record(s.string(),s.unknown())).describe("Governed operations, e.g. [{ type: 'update_role_permissions', schemaVersion: 1, target: { resourceType: 'subscriber_product_role', resourceId: '<roleKey>' }, payload: { permissions: [...] } }]."),env:s.string().optional().describe("Environment name/id to scope the proposal to."),idempotencyKey:s.string().optional().describe("Replay-safe idempotency key for the proposal.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.proposeConsumerChangeSet(n,e.subscriberId,{intent:e.intent,operations:e.operations,...e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:{}},{env:e.env})}}},{opKey:"change_set.preview",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"proposal",command:"preview",summary:"Simulate + store a preview on a proposed ChangeSet (rides the propose authority)",args:[Gd,Wd,m0,Jd],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.previewConsumerChangeSet(o,e.subscriberId,e.changeSetId,{env:e.env});n(r,"ChangeSet preview stored")}},mcp:{tool:"fs_proposal_preview",title:"Preview a proposed ChangeSet",description:"Simulate the impact of a proposed ChangeSet and store the preview (Agent Proposal Flow). Enforced by the same authority as propose \u2014 there is no separate preview permission. Read-shaped but writes the stored simulation; does not apply the change.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),changeSetId:s.string().describe(Yy),env:s.string().optional().describe("Environment name/id.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.previewConsumerChangeSet(n,e.subscriberId,e.changeSetId,{env:e.env})}}},{opKey:"change_set.proposal_list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"proposal",command:"list",summary:"List governed ChangeSets proposed against a subscriber",args:[Gd,Wd,{field:"status",kind:"flag",token:"--status <status>",describe:"Filter by status (e.g. draft, approval_required)."},Jd],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.listConsumerChangeSets(o,e.subscriberId,{env:e.env,status:e.status});n(r,"Proposed ChangeSets")}},mcp:{tool:"fs_proposal_list",title:"List proposed ChangeSets",description:"List governed ChangeSets proposed against a subscriber (Agent Proposal Flow). Read-only; use it to discover proposal ids + their status before previewing.",annotations:{readOnlyHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),status:s.string().optional().describe("Filter by status (e.g. draft, approval_required)."),env:s.string().optional().describe("Environment name/id.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.listConsumerChangeSets(n,e.subscriberId,{env:e.env,status:e.status})}}},{opKey:"change_set.proposal_read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"proposal",command:"get",summary:"Read one governed ChangeSet proposed against a subscriber",args:[Gd,Wd,m0,Jd],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getConsumerChangeSet(o,e.subscriberId,e.changeSetId,{env:e.env});n(r,"ChangeSet")}},mcp:{tool:"fs_proposal_get",title:"Read a proposed ChangeSet",description:"Read one governed ChangeSet proposed against a subscriber (Agent Proposal Flow) \u2014 its operations, risk, simulation, approvals, and status. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),changeSetId:s.string().describe(Yy),env:s.string().optional().describe("Environment name/id.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.getConsumerChangeSet(n,e.subscriberId,e.changeSetId,{env:e.env})}}}];var vn="The business id or slug.",_s="The webhook endpoint id.",Xo="billing:manage",Qo={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:vn,resolveProduct:!0},Xd={field:"webhookId",kind:"positional",token:"<webhookId>",describe:_s},h0={field:"events",kind:"flag",token:"--events <events>",describe:"Comma-separated event names, e.g. subscription.created,payment.failed"},g0={field:"limit",kind:"flag",token:"--limit <n>",describe:"Max rows to return."};function _0(t){if(typeof t!="string")return;let e=t.split(",").map(n=>n.trim()).filter(n=>n.length>0);return e.length>0?e:void 0}function y0(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:[]}function v0(t,e){if(!t||typeof t!="object")return e;let n=t;return typeof n.total=="number"?n.total:typeof n.pagination?.total=="number"?n.pagination.total:e}function s6(t){let e=t.enable===!0,n=t.disable===!0;if(e&&n)throw new C("Pass either --enable or --disable, not both.",400,{code:"VALIDATION_ERROR",param:"enabled"});if(e)return!0;if(n)return!1}async function ei(t,e){return ve(t,e)}var b0=[{opKey:"webhook.read",operationClass:"operate",scope:[Xo],sideEffect:"read",cli:{group:"webhook",command:"list",summary:"List API-managed webhook endpoints",args:[Qo,g0],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.managementListWebhooks(o,{limit:e.limit}),i=y0(r);n({productId:o,count:i.length,total:v0(r,i.length),webhooks:i},`${i.length} webhook(s)`)}},mcp:{tool:"fs_webhook_list",title:"List webhook endpoints",description:"List API-managed outbound webhook endpoints for a business. Read-only; signing secrets are never returned.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),limit:s.string().optional().describe("Max rows to return.")},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementListWebhooks(n,{limit:e.limit})}}},{opKey:"webhook.create",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"create",summary:"Create an API-managed webhook endpoint",idempotent:!0,args:[Qo,{field:"url",kind:"flag",token:"--url <url>",describe:"HTTPS receiver URL.",required:!0},{...h0,required:!0}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=_0(e.events);if(!i)throw new C("At least one webhook event is required.",400,{code:"VALIDATION_ERROR",param:"events"});let a=await t.managementCreateWebhook(e.productId,{url:e.url,events:i},n);r(a)||o({productId:e.productId,webhook:a.data},"Webhook endpoint created")}},mcp:{tool:"fs_webhook_create",title:"Create webhook endpoint",description:"Create an API-managed outbound webhook endpoint for a business. Returns the signing secret once. If webhooks are declared in business/business.ts, Core returns 409 MANAGED_BY_CODE and the repo must be edited instead.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},returnsOneTimeSecret:!0,inputSchema:{productId:s.string().describe(vn),url:s.string().url().describe("HTTPS receiver URL."),events:s.array(s.string()).min(1).describe("Webhook event names to subscribe to."),...He},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementCreateWebhook(n,{url:e.url,events:e.events},{idempotencyKey:e.idempotencyKey})}}},{opKey:"webhook.update",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"update",summary:"Update a webhook endpoint's events or enabled state",idempotent:!0,args:[Qo,Xd,h0,{field:"enable",kind:"flag",token:"--enable",describe:"Enable delivery for this endpoint."},{field:"disable",kind:"flag",token:"--disable",describe:"Disable delivery for this endpoint."}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=_0(e.events),a=s6(e);if(!i&&a===void 0)throw new C("Pass --events, --enable, or --disable to update a webhook.",400,{code:"VALIDATION_ERROR"});let c=await t.managementUpdateWebhook(e.productId,e.webhookId,{...i?{events:i}:{},...a!==void 0?{enabled:a}:{}},n);r(c)||o({productId:e.productId,webhook:c.data},"Webhook endpoint updated")}},mcp:{tool:"fs_webhook_update",title:"Update webhook endpoint",description:"Update an API-managed webhook endpoint's event list and/or enabled state. URL and secret are immutable; create a new endpoint for those changes.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s),events:s.array(s.string()).min(1).optional().describe("Replacement webhook event list."),enabled:s.boolean().optional().describe("Enable or disable delivery."),...He},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementUpdateWebhook(n,e.webhookId,{events:e.events,enabled:e.enabled},{idempotencyKey:e.idempotencyKey})}}},{opKey:"webhook.delete",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"delete",summary:"Delete an API-managed webhook endpoint. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm webhook endpoint deletion.",args:[Qo,Xd],handler:async({client:t,args:e,emit:n})=>{await t.managementDeleteWebhook(e.productId,e.webhookId),n({productId:e.productId,deleted:e.webhookId},"Webhook endpoint deleted")}},mcp:{tool:"fs_webhook_delete",title:"Delete webhook endpoint",description:"Delete an API-managed outbound webhook endpoint. If webhooks are repo-managed, Core returns 409 MANAGED_BY_CODE.",annotations:{readOnlyHint:!1,destructiveHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s)},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementDeleteWebhook(n,e.webhookId)}}},{opKey:"webhook.test",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"test",summary:"Send a signed test event to a webhook endpoint",args:[Qo,Xd],handler:async({client:t,args:e,emit:n})=>{let o=await t.managementTestWebhook(e.productId,e.webhookId);n({productId:e.productId,result:o},"Webhook test sent")}},mcp:{tool:"fs_webhook_test",title:"Test webhook endpoint",description:"Send a signed test event to an API-managed webhook endpoint and persist the delivery result.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s)},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementTestWebhook(n,e.webhookId)}}},{opKey:"webhook.delivery.read",operationClass:"operate",scope:[Xo],sideEffect:"read",cli:{group:"webhook",command:"deliveries",summary:"List recent delivery attempts for a webhook endpoint",args:[Qo,Xd,g0],handler:async({client:t,args:e,emit:n})=>{let o=await t.managementListWebhookDeliveries(e.productId,e.webhookId,{limit:e.limit}),r=y0(o);n({productId:e.productId,webhookId:e.webhookId,count:r.length,total:v0(o,r.length),deliveries:r},`${r.length} delivery attempt(s)`)}},mcp:{tool:"fs_webhook_deliveries",title:"List webhook deliveries",description:"List recent delivery attempts for a webhook endpoint. Payload and response body are intentionally omitted by Core.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s),limit:s.string().optional().describe("Max rows to return.")},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementListWebhookDeliveries(n,e.webhookId,{limit:e.limit})}}}];var ti="The business id or slug.",Fr="operator",ys={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:ti,resolveProduct:!0};async function vs(t,e){return ve(t,e)}var k0=[{opKey:"agents.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"agents",command:"list",summary:"List a business's operating agents + enableable roles",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderListAgents(o);n({productId:o,...r},`${r.agents.length} agent(s) \u2014 enableable roles: ${r.availableRoles.join(", ")}`)}},mcp:{tool:"fs_agents_list",title:"List operating agents",description:"The agent roster for a business: the enabled/disabled Operator plus any roles that can still be enabled. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderListAgents(n)}}},{opKey:"agents.status",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"agents",command:"status",summary:"The Operator's activation state, recent runs, and usage totals",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderAgentStatus(o,Fr);n({productId:o,...r},`operator: ${r.enabled?"ENABLED":"disabled"} \u2014 last run ${r.lastRunAt??"never"}; ${r.recentRuns.length} recent run(s); ${r.usage.tokensIn+r.usage.tokensOut} tokens, ${r.usage.actionsCount} action(s) lifetime`)}},mcp:{tool:"fs_agents_status",title:"Get the Operator's status",description:"The Operator's activation state, recent run history (newest-first), and lifetime usage totals (LLM tokens + actions). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderAgentStatus(n,Fr)}}},{opKey:"agents.runs.show",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"agents",command:"runs-show",summary:"One run's full paper trail: trace, launches, action receipts",args:[ys,{field:"runId",kind:"positional",token:"<runId>",describe:"The agent run id (from `agents status`)."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderAgentRunDetail(o,Fr,e.runId),i=r.launches?.length??0,a=r.actions?.length??0;n({productId:o,...r},`run ${r.run?.id}: ${i} launch(es), ${a} action receipt(s)`)}},mcp:{tool:"fs_agents_run_show",title:"Get one agent run's paper trail",description:"One run's full audit view: the orchestrator's trace summary (composed launches, verify flags, catalog changes), the per-launch performance ledger, and every platform-action receipt. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti),runId:s.string().describe("The agent run id.")},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderAgentRunDetail(n,Fr,e.runId)}}},{opKey:"agents.enable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"agents",command:"enable",summary:"Turn the Operator on (creates it on first enable)",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderConfigureAgent(o,Fr,{enabled:!0});n({productId:o,agent:r},"operator ENABLED \u2014 it runs autonomously on its cadence and posts to the bulletin; usage bills while enabled")}},mcp:{tool:"fs_agents_enable",title:"Enable the Operator",description:"Turn the business's Operator agent on (created on first enable). It runs autonomously on its cadence; agent-work billing accrues while enabled.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderConfigureAgent(n,Fr,{enabled:!0})}}},{opKey:"agents.disable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"agents",command:"disable",summary:"Turn the Operator off (stops runs + billing)",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderConfigureAgent(o,Fr,{enabled:!1});n({productId:o,agent:r},"operator disabled \u2014 no further runs; billing stops accruing")}},mcp:{tool:"fs_agents_disable",title:"Disable the Operator",description:"Turn the Operator off: the dispatcher stops scheduling runs and agent-work billing stops accruing. Re-enable at any time.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderConfigureAgent(n,Fr,{enabled:!1})}}}];var bs="The business id or slug.",tp="The bulletin post id.",Qd={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:bs,resolveProduct:!0},Xy={field:"postId",kind:"positional",token:"<postId>",describe:tp};async function ep(t,e){return ve(t,e)}var x0=[{opKey:"bulletin.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"bulletin",command:"list",summary:"List the agents' bulletin feed (trends + change requests)",args:[Qd,{field:"kind",kind:"flag",token:"--kind <kind>",describe:"Filter: trend | insight | change_request"},{field:"status",kind:"flag",token:"--status <status>",describe:"Filter: open | acknowledged | resolved"},{field:"limit",kind:"flag",token:"--limit <n>",describe:"Max rows to return."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderListBulletin(o,{kind:e.kind,status:e.status,limit:e.limit});n({productId:o,...r},`${r.items.length} post(s)${r.nextCursor?" (more available)":""}`)}},mcp:{tool:"fs_bulletin_list",title:"List bulletin posts",description:"The agents' bulletin feed for a business: trend/insight posts (aggregated data + deltas) and change_request posts (the coding agent's backlog \u2014 filter --kind change_request --status open). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),kind:s.enum(["trend","insight","change_request"]).optional().describe("Filter by post kind."),status:s.enum(["open","acknowledged","resolved"]).optional().describe("Filter by post status."),limit:s.string().optional().describe("Max rows to return.")},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderListBulletin(n,{kind:e.kind,status:e.status,limit:e.limit})}}},{opKey:"bulletin.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"bulletin",command:"show",summary:"Show one bulletin post (full body + data payload)",args:[Qd,Xy],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderGetBulletinPost(o,e.postId);n({productId:o,post:r},`[${r.kind}] ${r.title} \u2014 ${r.status}${r.changeSetId?` (changeSet ${r.changeSetId})`:""}`)}},mcp:{tool:"fs_bulletin_show",title:"Show a bulletin post",description:"One bulletin post in full: markdown body, the dataJson payload backing the claim, and for change requests the referenced ChangeSet id + proposal. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),postId:s.string().describe(tp)},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderGetBulletinPost(n,e.postId)}}},{opKey:"bulletin.ack",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"bulletin",command:"ack",summary:"Acknowledge a post (the coding agent picked it up)",args:[Qd,Xy],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderSetBulletinStatus(o,e.postId,"acknowledged");n({productId:o,post:r},`Post acknowledged: ${r.title}`)}},mcp:{tool:"fs_bulletin_ack",title:"Acknowledge a bulletin post",description:"Mark a bulletin post acknowledged \u2014 the hand-off signal that the coding agent (or builder) has picked the item up. Forward-only; idempotent on an already-acknowledged post.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),postId:s.string().describe(tp)},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderSetBulletinStatus(n,e.postId,"acknowledged")}}},{opKey:"bulletin.resolve",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"bulletin",command:"resolve",summary:"Resolve a post (the work landed)",args:[Qd,Xy],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderSetBulletinStatus(o,e.postId,"resolved");n({productId:o,post:r},`Post resolved: ${r.title}`)}},mcp:{tool:"fs_bulletin_resolve",title:"Resolve a bulletin post",description:"Mark a bulletin post resolved \u2014 the referenced work landed (or the trend was addressed). Terminal state.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),postId:s.string().describe(tp)},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderSetBulletinStatus(n,e.postId,"resolved")}}}];var ri="The business id or slug.",np="The promo code id.",ev=["percent_off","amount_off","free_months"],ks="promo-code",xs={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:ri,resolveProduct:!0},Qy={field:"promoCodeId",kind:"positional",token:"<promoCodeId>",describe:np},S0={field:"plan",kind:"flag",token:"--plan <planId>",describe:"Limit to a plan id. Repeatable. Omit for all launch plans; use --all-plans on update to clear scoped plans.",parser:(t,e)=>[...e,t],defaultValue:[]};function $0(t){if(typeof t!="string")return;let e=t.trim().toLowerCase();if(ev.includes(e))return e;throw new C(`Invalid promo code kind "${t}". Use percent_off, amount_off, or free_months.`,400,{code:"INVALID_PROMO_CODE_KIND",param:"kind"})}function ni(t,e){if(e===void 0)return;let n=typeof e=="number"?e:typeof e=="string"&&/^\d+$/.test(e.trim())?Number.parseInt(e,10):Number.NaN;if(!Number.isInteger(n)||n<=0)throw new C(`${t} must be a positive integer.`,400,{code:"INVALID_PROMO_CODE_FIELD",param:t});return n}function $s(t){return typeof t=="string"&&t.length>0?t:void 0}function I0(t,e){let n=ni("percent",t.percent),o=ni("amountCents",t.amountCents);if(n!==void 0&&o!==void 0)throw new C("Pass either --percent or --amount-cents, not both.",400,{code:"CONFLICTING_PROMO_AMOUNT_FLAGS",param:"amount"});if(e==="percent_off"){if(n===void 0)throw new C("percent_off promo codes require --percent.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"percent"});if(n>100)throw new C("--percent must be between 1 and 100.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"percent"});return n}if(e==="amount_off"){if(o===void 0)throw new C("amount_off promo codes require --amount-cents.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"amountCents"});return o}if(e==="free_months"&&(n!==void 0||o!==void 0))throw new C("free_months promo codes do not accept --percent or --amount-cents.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"amount"});return n??o}function w0(t){let e=t.plan??[];if(t.allPlans===!0&&e.length>0)throw new C("Pass either --plan or --all-plans, not both.",400,{code:"CONFLICTING_PROMO_PLAN_FLAGS",param:"plan"});return t.allPlans===!0?[]:e.length>0?e:void 0}function c6(t){let e=$0(t.kind);if(!e)throw new C("Promo code kind is required.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"kind"});let n=ni("durationMonths",t.durationMonths);if(n===void 0)throw new C("--duration-months is required.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"durationMonths"});let o=w0(t);return{code:String(t.code),kind:e,amount:I0(t,e),durationMonths:n,...o!==void 0?{applicablePlanIds:o}:{},maxRedemptions:ni("maxRedemptions",t.maxRedemptions),activeFrom:$s(t.activeFrom),activeUntil:$s(t.activeUntil)}}function u6(t){let e=$0(t.kind),n=ni("durationMonths",t.durationMonths),o=ni("maxRedemptions",t.maxRedemptions),r=w0(t);if(t.code!==void 0||e!==void 0||t.percent!==void 0||t.amountCents!==void 0||n!==void 0||o!==void 0||t.clearMaxRedemptions===!0||t.activeFrom!==void 0||t.activeUntil!==void 0||t.clearActiveFrom===!0||t.clearActiveUntil===!0||r!==void 0){if(e===void 0)throw new C("Promo-code spec updates rotate the Stripe coupon, so pass the complete spec: --kind plus --duration-months and the required amount flag for that kind.",400,{code:"PROMO_CODE_UPDATE_REQUIRES_FULL_SPEC",param:"kind"});if(n===void 0)throw new C("Promo-code spec updates require --duration-months.",400,{code:"PROMO_CODE_UPDATE_REQUIRES_FULL_SPEC",param:"durationMonths"})}let a={},c=$s(t.code);c!==void 0&&(a.code=c),e!==void 0&&(a.kind=e);let u=I0(t,e);if(u!==void 0&&(a.amount=u),n!==void 0&&(a.durationMonths=n),o!==void 0&&(a.maxRedemptions=o),t.clearMaxRedemptions===!0&&(a.maxRedemptions=null),r!==void 0&&(a.applicablePlanIds=r),t.activeFrom!==void 0&&(a.activeFrom=$s(t.activeFrom)??null),t.activeUntil!==void 0&&(a.activeUntil=$s(t.activeUntil)??null),t.clearActiveFrom===!0&&(a.activeFrom=null),t.clearActiveUntil===!0&&(a.activeUntil=null),Object.keys(a).length===0)throw new C("No promo-code fields to update. Pass --code, --kind, amount, duration, plan, status-window, or redemption flags.",400,{code:"PROMO_CODE_UPDATE_NO_FIELDS"});return a}async function Ss(t,e){return ve(t,e)}function rp(t){return{status:t}}var E0=[{opKey:"promo_code.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:ks,command:"list",summary:"List API-managed promo codes for checkout",args:[xs],handler:async({client:t,args:e,emit:n})=>{let o=await t.listPromoCodes(e.productId);n({productId:e.productId,count:o.length,promoCodes:o},`${o.length} promo code(s)`)}},mcp:{tool:"fs_promo_code_list",title:"List promo codes",description:"List API-managed promo codes for a business. Promo codes are checkout operational state, not repo-authored Business SDK state.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ri)},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.listPromoCodes(n)}}},{opKey:"promo_code.create",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"create",summary:"Create an API-managed checkout promo code",args:[xs,{field:"code",kind:"flag",token:"--code <code>",describe:"Customer-entered promo code.",required:!0},{field:"kind",kind:"flag",token:"--kind <kind>",describe:"percent_off, amount_off, or free_months.",required:!0},{field:"percent",kind:"flag",token:"--percent <n>",describe:"Percent discount for percent_off promos."},{field:"amountCents",kind:"flag",token:"--amount-cents <cents>",describe:"Fixed discount in cents for amount_off promos."},{field:"durationMonths",kind:"flag",token:"--duration-months <n>",describe:"Discount duration in months.",required:!0},{field:"maxRedemptions",kind:"flag",token:"--max-redemptions <n>",describe:"Optional maximum redemption count."},{field:"activeFrom",kind:"flag",token:"--active-from <iso>",describe:"Optional ISO-8601 activation timestamp."},{field:"activeUntil",kind:"flag",token:"--active-until <iso>",describe:"Optional ISO-8601 expiration timestamp."},S0],handler:async({client:t,args:e,emit:n})=>{let o=await t.createPromoCode(e.productId,c6(e));n({productId:e.productId,promoCode:o},"Promo code created")}},mcp:{tool:"fs_promo_code_create",title:"Create promo code",description:"Create an API-managed checkout promo code. Use percent for percent_off, amountCents for amount_off, and no amount for free_months.",annotations:{readOnlyHint:!1,destructiveHint:!1,openWorldHint:!0},inputSchema:{productId:s.string().describe(ri),code:s.string().min(1).max(64),kind:s.enum(ev),percent:s.number().int().min(1).max(100).optional(),amountCents:s.number().int().positive().optional(),durationMonths:s.number().int().min(1).max(24),maxRedemptions:s.number().int().positive().optional(),activeFrom:s.string().datetime().optional(),activeUntil:s.string().datetime().optional(),applicablePlanIds:s.array(s.string()).optional()},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.createPromoCode(n,{code:e.code,kind:e.kind,amount:e.kind==="percent_off"?e.percent:e.kind==="amount_off"?e.amountCents:void 0,durationMonths:e.durationMonths,maxRedemptions:e.maxRedemptions,activeFrom:e.activeFrom,activeUntil:e.activeUntil,applicablePlanIds:e.applicablePlanIds})}}},{opKey:"promo_code.update",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"update",summary:"Update an API-managed checkout promo code",args:[xs,Qy,{field:"code",kind:"flag",token:"--code <code>",describe:"Replacement customer-entered promo code."},{field:"kind",kind:"flag",token:"--kind <kind>",describe:"percent_off, amount_off, or free_months."},{field:"percent",kind:"flag",token:"--percent <n>",describe:"Percent discount for percent_off promos."},{field:"amountCents",kind:"flag",token:"--amount-cents <cents>",describe:"Fixed discount in cents for amount_off promos."},{field:"durationMonths",kind:"flag",token:"--duration-months <n>",describe:"Discount duration in months."},{field:"maxRedemptions",kind:"flag",token:"--max-redemptions <n>",describe:"Set maximum redemption count."},{field:"clearMaxRedemptions",kind:"flag",token:"--clear-max-redemptions",describe:"Clear the maximum redemption count."},{field:"activeFrom",kind:"flag",token:"--active-from <iso>",describe:"Set ISO-8601 activation timestamp."},{field:"clearActiveFrom",kind:"flag",token:"--clear-active-from",describe:"Clear activation timestamp."},{field:"activeUntil",kind:"flag",token:"--active-until <iso>",describe:"Set ISO-8601 expiration timestamp."},{field:"clearActiveUntil",kind:"flag",token:"--clear-active-until",describe:"Clear expiration timestamp."},S0,{field:"allPlans",kind:"flag",token:"--all-plans",describe:"Clear plan scoping so the promo applies to all launch plans."}],handler:async({client:t,args:e,emit:n})=>{let o=await t.updatePromoCode(e.productId,e.promoCodeId,u6(e));n({productId:e.productId,promoCode:o},"Promo code updated")}},mcp:{tool:"fs_promo_code_update",title:"Update promo code",description:"Update an API-managed checkout promo code. Spec changes rotate the Stripe coupon/promotion code behind the scenes.",annotations:{readOnlyHint:!1,destructiveHint:!1,openWorldHint:!0},inputSchema:{productId:s.string().describe(ri),promoCodeId:s.string().describe(np),code:s.string().min(1).max(64).optional(),kind:s.enum(ev).optional(),percent:s.number().int().min(1).max(100).optional(),amountCents:s.number().int().positive().optional(),durationMonths:s.number().int().min(1).max(24).optional(),maxRedemptions:s.number().int().positive().nullable().optional(),activeFrom:s.string().datetime().nullable().optional(),activeUntil:s.string().datetime().nullable().optional(),applicablePlanIds:s.array(s.string()).optional()},handler:async(t,e)=>{let n=await Ss(t,e.productId),o={code:e.code,kind:e.kind,amount:e.kind==="percent_off"?e.percent:e.kind==="amount_off"?e.amountCents:void 0,durationMonths:e.durationMonths,maxRedemptions:e.maxRedemptions,activeFrom:e.activeFrom,activeUntil:e.activeUntil,applicablePlanIds:e.applicablePlanIds};return t.updatePromoCode(n,e.promoCodeId,o)}}},{opKey:"promo_code.archive",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"archive",summary:"Archive a checkout promo code",args:[xs,Qy],handler:async({client:t,args:e,emit:n})=>{let o=await t.updatePromoCode(e.productId,e.promoCodeId,rp("ARCHIVED"));n({productId:e.productId,promoCode:o},"Promo code archived")}},mcp:{tool:"fs_promo_code_archive",title:"Archive promo code",description:"Archive an API-managed checkout promo code.",annotations:{readOnlyHint:!1,destructiveHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ri),promoCodeId:s.string().describe(np)},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.updatePromoCode(n,e.promoCodeId,rp("ARCHIVED"))}}},{opKey:"promo_code.reactivate",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"reactivate",summary:"Reactivate an archived checkout promo code",args:[xs,Qy],handler:async({client:t,args:e,emit:n})=>{let o=await t.updatePromoCode(e.productId,e.promoCodeId,rp("ACTIVE"));n({productId:e.productId,promoCode:o},"Promo code reactivated")}},mcp:{tool:"fs_promo_code_reactivate",title:"Reactivate promo code",description:"Reactivate an archived API-managed checkout promo code.",annotations:{readOnlyHint:!1,destructiveHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(ri),promoCodeId:s.string().describe(np)},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.updatePromoCode(n,e.promoCodeId,rp("ACTIVE"))}}}];var Is="The business id or slug.",ap="The subscriber id from `consumer list`.",op={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:Is,resolveProduct:!0},tv={field:"subscriberId",kind:"positional",token:"<subscriberId>",describe:ap},l6={field:"env",kind:"flag",token:"--env <env>",describe:"Environment name for preview-scoped consumers."},T0="The member's external identity id (Clerk userId) within the client org.",d6="Comma-separated product-role keys to set (replaces the current assignment; pass an empty string to clear).",p6={field:"userExternalId",kind:"positional",token:"<userExternalId>",describe:T0};function m6(t){return t.split(",").map(e=>e.trim()).filter(Boolean)}var f6={field:"roles",kind:"flag",token:"--roles <roles>",describe:d6,required:!0,parser:t=>m6(t)};async function ip(t,e){return ve(t,e)}function h6(t){return Array.isArray(t)?t:[]}var P0=[{opKey:"consumer.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"consumer",command:"list",summary:"List users/consumers for a business",args:[op,l6],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=h6(await t.builderListConsumers(o,{env:e.env}));n({productId:o,count:r.length,consumers:r},`${r.length} consumer(s)`)}},mcp:{tool:"fs_consumer_list",title:"List business consumers",description:"List users/consumers for a business. Read-only; use this to discover subscriber ids before blocking or removing a user.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Is),env:s.string().optional().describe("Environment name for preview-scoped consumers.")},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderListConsumers(n,{env:e.env})}}},{opKey:"consumer.block",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"consumer",command:"block",summary:"Block a user and revoke their active API keys",destructive:!0,yesMessage:"Blocking a user revokes active API keys. Pass --yes to confirm.",args:[op,tv],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.subscriberId,i=await t.builderBlockConsumer(o,r);n({productId:o,subscriberId:r,result:i},`Consumer blocked: ${r}`)}},mcp:{tool:"fs_consumer_block",title:"Block business consumer",description:"Block a user/consumer for a business and revoke their active API keys. Destructive live-state operation; it does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(Is),subscriberId:s.string().describe(ap)},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderBlockConsumer(n,e.subscriberId)}}},{opKey:"consumer.remove",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"consumer",command:"remove",summary:"Force-remove a user from a business",destructive:!0,yesMessage:"Removing a user tears down subscriptions, edge credentials, and related live state. Pass --yes to confirm.",args:[op,tv],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.subscriberId,i=await t.builderRemoveConsumer(o,r);n({productId:o,subscriberId:r,result:i},`Consumer removed: ${r}`)}},mcp:{tool:"fs_consumer_remove",title:"Remove business consumer",description:"Force-remove a user/consumer from a business, tearing down subscriptions, edge credentials, and related live state. Destructive and irreversible; it does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(Is),subscriberId:s.string().describe(ap)},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderRemoveConsumer(n,e.subscriberId)}}},{opKey:"consumer.roles.assign",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"consumer rbac",command:"assign",summary:"Replace a client-org member's Managed-RBAC product roles (builder support override)",args:[op,tv,p6,f6],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.subscriberId,i=e.userExternalId,a=e.roles,c=await t.builderAssignConsumerMemberRoles(o,r,i,a);n({productId:o,subscriberId:r,membership:c},`Product roles set for ${i}: ${c.productRoleKeys.length>0?c.productRoleKeys.join(", "):"(none)"}`)}},mcp:{tool:"fs_consumer_rbac_assign",title:"Assign consumer member product roles",description:"Support override: replace a client-org member's Managed-RBAC product-role assignment on a business (set-replace \u2014 the given list becomes the member's full assignment; an empty list clears it). Role keys must exist in the org's role set. Live-state operation; it does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(Is),subscriberId:s.string().describe(ap),userExternalId:s.string().describe(T0),roles:s.array(s.string()).describe("Product-role keys to set (replaces the current assignment; [] clears it).")},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderAssignConsumerMemberRoles(n,e.subscriberId,e.userExternalId,e.roles)}}}];var bn="The business id or slug.",ai="Scope to a branch environment by slug (omit for Main/production).",si="Variable name, e.g. STRIPE_SECRET_KEY.";async function g6(){if(process.stdin.isTTY)throw new C("Pipe the variable value via stdin (e.g. echo $VALUE | farthershore variables set \u2026). Never pass a value as a flag.",400,{code:"VARIABLE_STDIN_REQUIRED"});let t="";for await(let e of process.stdin)t+=Buffer.isBuffer(e)?e.toString("utf8"):String(e);return t.replace(/\r?\n$/,"")}var R0=g6;async function ws(t,e,n){if(n)return _n(t,e,n)}var oi={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:bn,resolveProduct:!0},Es={field:"name",kind:"positional",token:"<name>",describe:si},ii={field:"env",kind:"flag",token:"--env <slug>",describe:ai},_6={field:"exposeToBrowser",kind:"flag",token:"--expose-to-browser",describe:"Make this variable available in the browser (publishable keys only). Default: off (server-only)."},y6={field:"allowedHost",kind:"flag",token:"--allowed-host <host>",describe:"Allow fs.fetch to send this variable to <host> (custom/unknown providers). Repeatable or comma-separated, e.g. --allowed-host api.example.com.",parser:(t,e)=>[...e,...t.split(",").map(n=>n.trim()).filter(Boolean)],defaultValue:[]},O0=[{opKey:"business_variable.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"variables",command:"list",summary:"List variable metadata for a business (names + flags, never values)",args:[oi,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i=await t.builderBusinessVariables(o,r);n({productId:o,environmentId:r??null,count:i.length,variables:i.map(a=>({name:a.name,exposeToBrowser:a.exposeToBrowser,sealed:a.sealed,hasValue:!0,environmentId:a.environmentId}))},"Business variables (metadata only \u2014 values are never returned)")}},mcp:{tool:"fs_variable_list",title:"List business variables",description:"List masked variable metadata for a business \u2014 names, exposeToBrowser flag, sealed status. Values are never returned.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderBusinessVariables(n,e.environmentId)}}},{opKey:"business_variable.set",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"variables",command:"set",summary:"Create or update a variable (value read from stdin \u2014 never echoed)",helpTextAfter:`
|
|
96
|
+
`,handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=e.planKey,c=e.policy;if(!Hd.includes(c))throw new A(`Invalid --policy "${c}". Supported: ${Hd.join(", ")}.`,void 0,{code:"INVALID_MIGRATION_POLICY"});let u=await t.migratePlan(i,a,{fromVersion:e.from,toVersion:e.to,policy:c,proration:e.proration,completeBy:e.completeBy},n);r(u)||o({productId:i,planKey:a,migration:u},`Migration scheduled for plan ${a}`)}},mcp:{tool:"fs_plan_migrate",title:"Migrate subscribers between plan versions",description:"Schedule a subscriber migration for a plan: move subscribers from one plan version to another under a policy. Pass the plan KEY plus fromVersion/toVersion (each an integer or 'head'/'latest') \u2014 the server resolves them to the right plan versions. Policies: grandfather (keep existing subs as-is), next_renewal (migrate at each sub's renewal), immediate (migrate now), by_date (migrate everyone by a deadline), opt_in (subs choose). This is an OPERATE action (it changes live subscriber state, not the product's code-managed definition).",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose subscribers to migrate."),planKey:s.string().describe("The stable plan key (e.g. 'pro') to migrate within."),fromVersion:s.union([s.string(),s.number().int().positive()]).describe("Source plan version: an integer or 'head'/'latest'."),toVersion:s.union([s.string(),s.number().int().positive()]).describe("Target plan version: an integer or 'head'/'latest'."),policy:s.enum(Hd).describe("Migration policy: grandfather | next_renewal | immediate | by_date | opt_in."),proration:s.enum(["none","prorate","credit"]).optional().describe("Optional proration behaviour."),completeBy:s.string().optional().describe("ISO 8601 deadline \u2014 required by the by_date policy."),...He},handler:async(t,e)=>t.migratePlan(e.productId,e.planKey,{fromVersion:e.fromVersion,toVersion:e.toVersion,policy:e.policy,proration:e.proration,completeBy:e.completeBy},{idempotencyKey:e.idempotencyKey})}}],n0=e6;function t6(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.environments)?e.environments:[]}var o0=[{opKey:"environment.read",operationClass:"dual",scope:["products:read"],sideEffect:"read",cli:{group:"env",command:"list",summary:"List environments for a product",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=t6(await t.listEnvironments(o));n({productId:o,count:r.length,environments:r.map(i=>({id:i.id,name:i.name,branch:i.branch??null,portalHostname:i.portalHostname??null,runtimeHostname:i.runtimeHostname??null,status:i.status??null}))},`${r.length} environment(s)`)}},mcp:{tool:"fs_env_list",title:"List environments",description:"List a product's preview environments (name, branch, hostnames). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose environments to list.")},handler:async(t,{productId:e})=>t.listEnvironments(e)}},{opKey:"environment.create",operationClass:"dual",scope:["products:update"],sideEffect:"write",cli:{group:"env",command:"create",summary:"Create a preview environment bound to a git branch",idempotent:!0,args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"name",kind:"flag",token:"--name <name>",describe:"Environment name (e.g. preview, staging)",required:!0},{field:"branch",kind:"flag",token:"--branch <branch>",describe:"Git branch to track (e.g. env/preview)",required:!0},{field:"cloneVariables",kind:"flag",token:"--no-clone-variables",describe:"Skip cloning Main variables into the new environment (variables are cloned by default).",defaultValue:!0}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=await t.createEnvironment(i,{name:e.name,branch:e.branch,cloneVariablesFromMain:e.cloneVariables!==!1},n);r(a)||o({productId:i,environment:a},`Environment ${e.name} created`)}},mcp:{tool:"fs_env_create",title:"Create preview environment",description:"Create a preview environment bound to a git branch. Equivalent to pushing the branch \u2014 both reconcile to the same environment (operationClass=dual). Provide a name and the git branch it tracks.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id to create the environment in."),name:s.string().describe("Environment name (e.g. 'staging', 'preview-pr-42')."),branch:s.string().describe("The git branch this environment tracks."),cloneVariablesFromMain:s.boolean().optional().describe("Copy Main/production variables into the new environment. Default: true."),...He},handler:async(t,e)=>{let n=await t.createEnvironment(e.productId,{name:e.name,branch:e.branch,cloneVariablesFromMain:e.cloneVariablesFromMain??!0},{idempotencyKey:e.idempotencyKey});return{ok:!0,productId:e.productId,environment:n}}}},{opKey:"environment.delete",operationClass:"dual",scope:["products:update"],sideEffect:"write",cli:{group:"env",command:"delete",summary:"Delete an environment by name. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm environment deletion.",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"envName",kind:"positional",token:"<envName>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.envName;await t.deleteEnvironment(o,r),n({productId:o,deleted:r},`Environment ${r} deleted`)}},mcp:null}];var qy=["gateway_verification","metering","health","tunnel"],r6="<productId>",ms="products:update",fs="The product id.",yn={field:"productId",kind:"positional",token:r6};function i0(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.backends)?e.backends:Array.isArray(e.tokens)?e.tokens:Array.isArray(t)?t:[]}function n6(t){let e=t.status;if(typeof e=="string"&&e.length>0)return e;let n=typeof t.readinessState=="string"?t.readinessState:null,o=typeof t.provisionStatus=="string"?t.provisionStatus:null;return n??o??"unknown"}function o6(t){return{id:t.id,name:t.name,slug:t.slug,transport:t.transportMode,default:t.isDefault??!1,status:n6(t),originUrl:t.originUrl??null,lastSeenAt:t.lastSeenAt??null}}async function a0(t,e,n){if(!n)return null;try{return await _n(t,e,n)}catch(o){throw new A(o instanceof Error?o.message:`Environment "${n}" not found on product ${e}.`,void 0,{code:"ENV_NOT_FOUND"})}}var By=t=>typeof t=="string"&&t.length>0?t.split(",").map(e=>e.trim()).filter(e=>e.length>0):void 0,s0=[{opKey:"backend.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"backend",command:"list",summary:"List backends for a product (id, name, transport, status)",args:[yn],handler:async({client:t,args:e,emit:n})=>{let r=i0(await t.builderListBackends(e.productId)).map(o6);n({count:r.length,backends:r},`${r.length} backend(s)`)}},mcp:{tool:"fs_backend_list",title:"List backends",description:"List a product's backends (origins) \u2014 id, name, slug, transport (direct|tunnel), default flag, and derived status. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose backends to list.")},handler:async(t,{productId:e})=>t.builderListBackends(e)}},{opKey:"backend.create",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend",command:"create",summary:"Create a backend (default transport: direct)",idempotent:!0,args:[yn,{field:"name",kind:"flag",token:"--name <name>",describe:"Human-friendly backend name",required:!0},{field:"slug",kind:"flag",token:"--slug <slug>",describe:"Stable slug (defaults to a slugified name)"},{field:"env",kind:"flag",token:"--env <environment>",describe:"Scope backend to an environment name or id"},{field:"transport",kind:"flag",token:"--transport <mode>",describe:"Transport mode: direct | tunnel",defaultValue:"direct"},{field:"runner",kind:"flag",token:"--runner <runner>",describe:"embedded | sidecar"},{field:"runtime",kind:"flag",token:"--runtime <runtime>",describe:"Container/runtime descriptor"},{field:"originUrl",kind:"flag",token:"--origin-url <url>",describe:"Builder origin URL (direct)"},{field:"default",kind:"flag",token:"--default",describe:"Mark this backend the product default"}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=await a0(t,i,e.env),c=e.transport==="tunnel"?"tunnel":"direct",u=await t.builderCreateBackend(i,{name:e.name,slug:e.slug,environmentId:a,transportMode:c,runner:e.runner==="embedded"||e.runner==="sidecar"?e.runner:null,runtime:e.runtime??null,originUrl:e.originUrl??null,isDefault:e.default},n);r(u)||o({result:u},"Backend created")}},mcp:{tool:"fs_backend_create",title:"Create a backend",description:"Create a backend (origin) for a product. Pick a transport mode: direct (public HTTPS URL, secured by Ed25519 request signing) or tunnel (private outbound-only cloudflared, secure bring-your-own-backend). Mark it default to route traffic to it.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id to create the backend in."),name:s.string().describe("Backend name (e.g. 'prod-origin')."),slug:s.string().optional().describe("URL-safe slug; derived from name if omitted."),transportMode:s.enum(["direct","tunnel"]).optional().describe("How the gateway reaches the origin; defaults to direct."),originUrl:s.string().optional().describe("The origin URL (for direct mode)."),isDefault:s.boolean().optional().describe("Route traffic to this backend by default."),...He},handler:async(t,e)=>t.builderCreateBackend(e.productId,{name:e.name,slug:e.slug,transportMode:e.transportMode,originUrl:e.originUrl,isDefault:e.isDefault},{idempotencyKey:e.idempotencyKey})}},{opKey:"backend.delete",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend",command:"delete",summary:"Delete a backend (revokes its runtime tokens). Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm backend deletion.",args:[yn,{field:"backendId",kind:"positional",token:"<backendId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.backendId;await t.builderDeleteBackend(o,r),n({productId:o,deleted:r},`Backend ${r} deleted`)}},mcp:{tool:"fs_backend_delete",title:"Delete a backend",description:"Delete a backend (origin). Traffic routed to it stops; re-create to restore.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),backendId:s.string().describe("The backend id to delete.")},handler:async(t,{productId:e,backendId:n})=>t.builderDeleteBackend(e,n)}},{opKey:"runtime_token.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"backend tokens",command:"list",summary:"List runtime tokens for a product",args:[yn],handler:async({client:t,args:e,emit:n})=>{let o=i0(await t.builderListRuntimeTokens(e.productId));n({count:o.length,tokens:o},`${o.length} runtime token(s)`)}},mcp:{tool:"fs_runtime_token_list",title:"List runtime tokens",description:"List a product's runtime tokens (fsrt_) \u2014 id, last-four, capabilities, status. Read-only; secrets are never shown.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs)},handler:async(t,{productId:e})=>t.builderListRuntimeTokens(e)}},{opKey:"runtime_token.mint",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend tokens",command:"create",summary:"Create a runtime token (returns FS_RUNTIME_TOKEN once)",idempotent:!0,args:[yn,{field:"env",kind:"flag",token:"--env <environment>",describe:"Scope token to an environment name or id"},{field:"backend",kind:"flag",token:"--backend <backendId>",describe:"Bind token to a specific backend"},{field:"kind",kind:"flag",token:"--kind <kind>",describe:"live | test (defaults from env scope)"},{field:"capabilities",kind:"flag",token:"--capabilities <list>",describe:`Comma-separated capabilities: ${qy.join(" | ")}. Default: core's DEFAULT_CAPABILITIES. Use tunnel for tunnel backends.`},{field:"meters",kind:"flag",token:"--meters <list>",describe:"Comma-separated allowed meters (default: all product meters)"},{field:"routes",kind:"flag",token:"--routes <list>",describe:"Comma-separated allowed routes"}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=await a0(t,i,e.env),c=e.kind==="test"||e.kind==="live"?e.kind:void 0,u=By(e.capabilities);if(u){for(let l of u)if(!qy.includes(l))throw new A(`Unknown capability "${l}". Available: ${qy.join(", ")}.`,void 0,{code:"UNKNOWN_RUNTIME_TOKEN_CAPABILITY"})}let d=await t.builderCreateRuntimeToken(i,{environmentId:a,backendId:e.backend??null,kind:c,capabilities:u,allowedMeters:By(e.meters),allowedRoutes:By(e.routes)},n);r(d)||o({envVar:"FS_RUNTIME_TOKEN",result:d},"Runtime token created")}},mcp:{tool:"fs_runtime_token_mint",title:"Mint a runtime token",description:"Mint a new runtime token (fsrt_) for a backend. Returns the plaintext token ONCE \u2014 store it now (e.g. as FS_RUNTIME_TOKEN). Capabilities default to the backend's needs (gateway_verification, metering, health).",returnsOneTimeSecret:!0,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),backendId:s.string().optional().describe("Bind the token to this backend."),environmentId:s.string().optional().describe("Scope to a preview environment (omit for production)."),kind:s.enum(["live","test"]).optional().describe("Token kind; defaults from the env scope."),capabilities:s.array(s.string()).optional().describe("Capabilities (gateway_verification, metering, health, tunnel)."),...He},handler:async(t,e)=>t.builderCreateRuntimeToken(e.productId,{backendId:e.backendId??null,environmentId:e.environmentId??null,kind:e.kind,capabilities:e.capabilities},{idempotencyKey:e.idempotencyKey})}},{opKey:"runtime_token.rotate",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend tokens",command:"rotate",summary:"Rotate a runtime token (returns a fresh FS_RUNTIME_TOKEN once)",args:[yn,{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.tokenId,i=await t.builderRotateRuntimeToken(o,r);n({envVar:"FS_RUNTIME_TOKEN",result:i},`Runtime token ${r} rotated`)}},mcp:{tool:"fs_runtime_token_rotate",title:"Rotate a runtime token",description:"Rotate a runtime token: mint a fresh secret carrying the same scope and revoke the old one. Returns the new plaintext token ONCE.",returnsOneTimeSecret:!0,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),tokenId:s.string().describe("The runtime token id to rotate."),...He},handler:async(t,e)=>t.builderRotateRuntimeToken(e.productId,e.tokenId,{idempotencyKey:e.idempotencyKey})}},{opKey:"runtime_token.revoke",operationClass:"operate",scope:[ms],sideEffect:"write",cli:{group:"backend tokens",command:"revoke",summary:"Revoke a runtime token. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm runtime token revocation.",args:[yn,{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.tokenId;await t.builderRevokeRuntimeToken(o,r),n({productId:o,revoked:r},`Runtime token ${r} revoked`)}},mcp:{tool:"fs_runtime_token_revoke",title:"Revoke a runtime token",description:"Revoke a runtime token. The backend using it stops verifying.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(fs),tokenId:s.string().describe("The runtime token id to revoke.")},handler:async(t,{productId:e,tokenId:n})=>t.builderRevokeRuntimeToken(e,n)}}];var Kd="The business id or slug.",Hy="Scope to a preview environment (omit for production).",Ky={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:Kd,resolveProduct:!0},Gy={field:"env",kind:"flag",token:"--env <environmentId>",describe:"Scope to a preview environment id (omit for production)."};async function Wy(t,e){return ve(t,e)}var c0=[{opKey:"frontend.deploy",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"frontend",command:"deploy",summary:"Trigger a frontend build (deploy) for a product's connected repo",idempotent:!0,args:[Ky,Gy,{field:"ref",kind:"flag",token:"--ref <ref>",describe:"Git ref to build (defaults to the env branch / repo default)."},{field:"buildCmd",kind:"flag",token:"--build-cmd <cmd>",describe:"Override the build command."}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=await t.builderFrontendDeploy(e.productId,{ref:e.ref,buildCmd:e.buildCmd,environmentId:e.env},n);r(i)||o({result:i},"Frontend build triggered")}},mcp:{tool:"fs_frontend_deploy",title:"Deploy a product frontend",description:"Trigger a Managed Frontend Hosting build for the product's connected repo (production by default; pass environmentId for a preview env). Returns the enqueued build.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Kd),ref:s.string().optional().describe("Git ref to build (defaults to the env branch / repo default)."),buildCmd:s.string().optional().describe("Override the build command."),environmentId:s.string().optional().describe(Hy),...He},handler:async(t,e)=>{let n=await Wy(t,e.productId);return t.builderFrontendDeploy(n,{ref:e.ref,buildCmd:e.buildCmd,environmentId:e.environmentId},{idempotencyKey:e.idempotencyKey})}}},{opKey:"frontend.status",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"frontend",command:"status",summary:"Show the current frontend release, recent releases, and recent builds (incl. failure reasons)",args:[Ky,Gy],handler:async({client:t,args:e,emit:n})=>{let o=await t.builderFrontendStatus(e.productId,e.env);n(o,"Frontend status")}},mcp:{tool:"fs_frontend_status",title:"Get frontend status",description:"Read a product's current frontend serve state (uiMode, active release hash + producing build, pin flag), the recent SUCCEEDED releases (rollback targets), and the recent builds \u2014 a FAILED build's `error` explains why a deploy didn't go live. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Kd),environmentId:s.string().optional().describe(Hy)},handler:async(t,e)=>{let n=await Wy(t,e.productId);return t.builderFrontendStatus(n,e.environmentId)}}},{opKey:"frontend.rollback",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"frontend",command:"rollback",summary:"Roll the product frontend back to a prior release (re-activate its releaseId)",idempotent:!0,args:[Ky,{field:"releaseId",kind:"flag",token:"--release-id <releaseId>",describe:"The prior release id (manifest hash) to re-activate \u2014 see `frontend status`.",required:!0},Gy],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=await t.builderFrontendRollback(e.productId,{releaseId:e.releaseId,environmentId:e.env},n);r(i)||o({result:i},"Frontend rolled back")}},mcp:{tool:"fs_frontend_rollback",title:"Roll back a product frontend",description:"Roll a product's frontend back to a prior release by its releaseId (manifest hash, from fs_frontend_status). Flips the live pointer back and pins it. The releaseId must belong to this target's build history.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Kd),releaseId:s.string().describe("The prior release id (manifest hash) to re-activate."),environmentId:s.string().optional().describe(Hy),...He},handler:async(t,e)=>{let n=await Wy(t,e.productId);return t.builderFrontendRollback(n,{releaseId:e.releaseId,environmentId:e.environmentId},{idempotencyKey:e.idempotencyKey})}}}];var u0=[{opKey:"usage.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"usage",command:"summary",summary:"Show usage summary for the last 30 days",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.managementGetUsage(o);n({productId:o,summary:r},"Usage summary")}},mcp:{tool:"fs_usage_read",title:"Read usage summary",description:"Read a product's usage summary \u2014 metered request counts and tier utilization. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id whose usage to read.")},handler:async(t,{productId:e})=>t.managementGetUsage(e)}}];var l0=[{opKey:"persona.bootstrap",operationClass:"operate",scope:["products:read"],sideEffect:"write",cli:{group:"persona",command:"bootstrap",summary:"Issue a fresh fsk_test_ API key in a test environment",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment name (must be test-strategy)",required:!0},{field:"plan",kind:"flag",token:"--plan <planKey>",describe:"Plan key to assign (e.g. starter)"},{field:"displayName",kind:"flag",token:"--display-name <name>",describe:"Persona display name"}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await Jy(t,o,e.env),i=await t.issuePersonaBootstrapKey(o,r,{planKey:e.plan,displayName:e.displayName});n({productId:o,environmentId:r,result:i},"Persona bootstrapped")}},mcp:{tool:"fs_persona_bootstrap",title:"Bootstrap a test persona",description:"Issue a one-time test bootstrap key for a product environment \u2014 use it to provision a test persona. Returns the key ONCE; store it now.",returnsOneTimeSecret:!0,annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id."),environmentId:s.string().describe("The environment id to scope the persona to.")},handler:async(t,{productId:e,environmentId:n})=>t.issuePersonaBootstrapKey(e,n)}},{opKey:"persona.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"persona",command:"list",summary:"List personas for a test environment",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment name",required:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await Jy(t,o,e.env),i=await t.listPersonas(o,r);n({productId:o,environmentId:r,result:i},"Personas")}},mcp:{tool:"fs_persona_list",title:"List personas",description:"List a product environment's test personas (id, label, status). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id."),environmentId:s.string().describe("The environment id whose personas to list.")},handler:async(t,{productId:e,environmentId:n})=>t.listPersonas(e,n)}},{opKey:"persona.revoke",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"persona",command:"revoke",summary:"Revoke a persona's API key",args:[{field:"productId",kind:"positional",token:"<productIdOrName>",resolveProduct:!0},{field:"personaId",kind:"positional",token:"<personaId>"},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment name",required:!0}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.personaId,i=await Jy(t,o,e.env),a=await t.revokePersona(o,i,r);n({productId:o,environmentId:i,result:a},`Persona ${r} revoked`)}},mcp:{tool:"fs_persona_revoke",title:"Revoke a persona",description:"Revoke a test persona. Its credentials stop working.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe("The product id."),environmentId:s.string().describe("The environment id."),personaId:s.string().describe("The persona id to revoke.")},handler:async(t,{productId:e,environmentId:n,personaId:o})=>t.revokePersona(e,n,o)}}];async function Jy(t,e,n){try{return await _n(t,e,n)}catch(o){throw new A(o instanceof Error?o.message:`Environment "${n}" not found on product ${e}.`,void 0,{code:"ENV_NOT_FOUND"})}}function i6(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:Array.isArray(e.tokens)?e.tokens:Array.isArray(t)?t:[]}var d0=[{opKey:"maker_token.read",operationClass:"operate",scope:[],sideEffect:"read",cli:{group:"token",command:"list",summary:"List maker tokens in the current org",args:[],handler:async({client:t,emit:e})=>{let n=i6(await t.managementListMakerTokens());e({count:n.length,tokens:n.map(o=>({id:o.id,name:o.name??null,scopes:o.scopes??[],productId:o.productId??null,lastFour:o.lastFour??null,createdAt:o.createdAt??null,revokedAt:o.revokedAt??null}))},`${n.length} token(s)`)}},mcp:{tool:"fs_maker_token_list",title:"List maker tokens",description:"List the workspace's maker tokens (mk_) \u2014 id, label, scopes, last-four, status. Read-only; secrets are never shown. Creating/revoking maker tokens is intentionally not exposed via MCP.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{},handler:async t=>t.managementListMakerTokens()}},{opKey:"maker_token.create",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"create",summary:"Create a new maker token (returns the secret once)",args:[{field:"name",kind:"flag",token:"--name <name>",describe:"Human-friendly token name",required:!0},{field:"scope",kind:"flag",token:"--scope <scope...>",describe:"Scope(s) to attach (e.g. products:update products:publish)"},{field:"product",kind:"flag",token:"--product <productId>",describe:"Scope to a specific product"},{field:"restrict",kind:"flag",token:"--restrict <perm...>",describe:"Narrow the token's role bundle to these permissions (e.g. business:read plan:read). Must be within your own permissions."}],handler:async({client:t,args:e,emit:n})=>{let o=await t.managementCreateMakerToken({name:e.name,scopes:e.scope,productId:e.product,restrictedPermissions:e.restrict});n({result:o},"Token created")}},mcp:null},{opKey:"maker_token.revoke",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"revoke",summary:"Revoke a maker token. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm token revocation.",args:[{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.tokenId;await t.managementRevokeMakerToken(o),n({revoked:o},`Token ${o} revoked`)}},mcp:null},{opKey:"maker_token.rotate",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"rotate",summary:"Rotate a maker token secret (returns the new secret once)",idempotent:!0,args:[{field:"tokenId",kind:"positional",token:"<tokenId>"},{field:"syncToGithub",kind:"flag",token:"--sync-to-github",describe:"Also update the connected GitHub repo FARTHERSHORE_TOKEN secret when this is a platform token"}],handler:async({client:t,args:e,reqOpts:n,emit:o})=>{let r=e.tokenId,i=await t.managementRotateMakerToken(r,{syncToGithub:e.syncToGithub===!0},n);o({result:i},`Token ${r} rotated`)}},mcp:null},{opKey:"maker_token.hard_delete",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"token",command:"delete",summary:"Permanently delete an already-revoked maker token. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to permanently delete the revoked token row.",args:[{field:"tokenId",kind:"positional",token:"<tokenId>"}],handler:async({client:t,args:e,emit:n})=>{let o=e.tokenId;await t.managementHardDeleteMakerToken(o),n({deleted:o},`Token ${o} permanently deleted`)}},mcp:null}];var p0=[{opKey:"apply_timeline.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"apply-timeline",command:"list",summary:"List a business's Apply Timeline: repo-triggered manifest applies (PRs, pushes, releases), checks, semantic diffs, and apply phases.",args:[{field:"productId",kind:"positional",token:"<businessIdOrName>",resolveProduct:!0},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope: production, all, or a preview environment name."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.listApplyTimeline(o,{env:e.env});n({productId:o,count:r.data.length,applyTimeline:r.data},`${r.data.length} apply timeline entr(ies)`)}},mcp:null},{opKey:"apply_timeline.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"apply-timeline",command:"inspect",summary:"Inspect one Apply Timeline entry by id, PR number, branch, or commit SHA.",args:[{field:"productId",kind:"positional",token:"<businessIdOrName>",resolveProduct:!0},{field:"selector",kind:"positional",token:"<id|pr|branch|sha>"},{field:"env",kind:"flag",token:"--env <env>",describe:"Environment scope: production, all, or a preview environment name."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=String(e.selector),i=await t.listApplyTimeline(o,{env:e.env}),a=i.data.find(c=>c.id===r)??i.data.find(c=>c.prNumber!==null&&String(c.prNumber)===r)??i.data.find(c=>c.branch===r)??i.data.find(c=>c.commitSha.startsWith(r));if(!a)throw new A(`Apply timeline entry ${r} was not found.`,404,{code:"APPLY_TIMELINE_ENTRY_NOT_FOUND"});n({productId:o,applyTimelineEntry:a},`Apply timeline entry ${a.id}: ${a.status}`)}},mcp:null}];var hs="The business id or slug.",gs="The subscriber (client org) id \u2014 from `consumer list`.",Yy="The governed ChangeSet id.",Gd={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:hs,resolveProduct:!0},Wd={field:"subscriberId",kind:"positional",token:"<subscriberId>",describe:gs},m0={field:"changeSetId",kind:"positional",token:"<changeSetId>",describe:Yy},Jd={field:"env",kind:"flag",token:"--env <env>",describe:"Environment name/id to scope the proposal to."};function a6(t){let e;try{e=JSON.parse(t)}catch{throw new A("--operations must be a JSON array of governed operations.",0,{code:"INVALID_OPERATIONS"})}if(!Array.isArray(e))throw new A("--operations must be a JSON array.",0,{code:"INVALID_OPERATIONS"});return e}async function Yd(t,e){return ve(t,e)}var f0=[{opKey:"change_set.propose",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"proposal",command:"create",summary:"Propose a governed ChangeSet against a subscriber (agent/builder proposer; a human approves + applies in the portal)",idempotent:!0,args:[Gd,Wd,{field:"intent",kind:"flag",token:"--intent <intent>",describe:"Human-readable description of the proposed change.",required:!0},{field:"operations",kind:"flag",token:"--operations <json>",describe:"JSON array of governed operations (e.g. update_role_permissions).",required:!0,parser:t=>a6(t)},Jd],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=e.productId,a=e.subscriberId,c=await t.proposeConsumerChangeSet(i,a,{intent:e.intent,operations:e.operations,...n.idempotencyKey?{idempotencyKey:n.idempotencyKey}:{}},{env:e.env},n);r(c)||o(c,"ChangeSet proposed")}},mcp:{tool:"fs_proposal_create",title:"Propose a governed ChangeSet",description:"Propose a governed ChangeSet against a subscriber's live RBAC state (Agent Proposal Flow). Creates a DRAFT proposal that a HUMAN in the subscriber org must preview, approve, and apply in the portal \u2014 an agent can propose but never self-approve or apply. Operate-class live-state action; does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),intent:s.string().describe("Human-readable description of the proposed change."),operations:s.array(s.record(s.string(),s.unknown())).describe("Governed operations, e.g. [{ type: 'update_role_permissions', schemaVersion: 1, target: { resourceType: 'subscriber_product_role', resourceId: '<roleKey>' }, payload: { permissions: [...] } }]."),env:s.string().optional().describe("Environment name/id to scope the proposal to."),idempotencyKey:s.string().optional().describe("Replay-safe idempotency key for the proposal.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.proposeConsumerChangeSet(n,e.subscriberId,{intent:e.intent,operations:e.operations,...e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:{}},{env:e.env})}}},{opKey:"change_set.preview",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"proposal",command:"preview",summary:"Simulate + store a preview on a proposed ChangeSet (rides the propose authority)",args:[Gd,Wd,m0,Jd],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.previewConsumerChangeSet(o,e.subscriberId,e.changeSetId,{env:e.env});n(r,"ChangeSet preview stored")}},mcp:{tool:"fs_proposal_preview",title:"Preview a proposed ChangeSet",description:"Simulate the impact of a proposed ChangeSet and store the preview (Agent Proposal Flow). Enforced by the same authority as propose \u2014 there is no separate preview permission. Read-shaped but writes the stored simulation; does not apply the change.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),changeSetId:s.string().describe(Yy),env:s.string().optional().describe("Environment name/id.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.previewConsumerChangeSet(n,e.subscriberId,e.changeSetId,{env:e.env})}}},{opKey:"change_set.proposal_list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"proposal",command:"list",summary:"List governed ChangeSets proposed against a subscriber",args:[Gd,Wd,{field:"status",kind:"flag",token:"--status <status>",describe:"Filter by status (e.g. draft, approval_required)."},Jd],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.listConsumerChangeSets(o,e.subscriberId,{env:e.env,status:e.status});n(r,"Proposed ChangeSets")}},mcp:{tool:"fs_proposal_list",title:"List proposed ChangeSets",description:"List governed ChangeSets proposed against a subscriber (Agent Proposal Flow). Read-only; use it to discover proposal ids + their status before previewing.",annotations:{readOnlyHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),status:s.string().optional().describe("Filter by status (e.g. draft, approval_required)."),env:s.string().optional().describe("Environment name/id.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.listConsumerChangeSets(n,e.subscriberId,{env:e.env,status:e.status})}}},{opKey:"change_set.proposal_read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"proposal",command:"get",summary:"Read one governed ChangeSet proposed against a subscriber",args:[Gd,Wd,m0,Jd],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.getConsumerChangeSet(o,e.subscriberId,e.changeSetId,{env:e.env});n(r,"ChangeSet")}},mcp:{tool:"fs_proposal_get",title:"Read a proposed ChangeSet",description:"Read one governed ChangeSet proposed against a subscriber (Agent Proposal Flow) \u2014 its operations, risk, simulation, approvals, and status. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(hs),subscriberId:s.string().describe(gs),changeSetId:s.string().describe(Yy),env:s.string().optional().describe("Environment name/id.")},handler:async(t,e)=>{let n=await Yd(t,e.productId);return t.getConsumerChangeSet(n,e.subscriberId,e.changeSetId,{env:e.env})}}}];var vn="The business id or slug.",_s="The webhook endpoint id.",Xo="billing:manage",Qo={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:vn,resolveProduct:!0},Xd={field:"webhookId",kind:"positional",token:"<webhookId>",describe:_s},h0={field:"events",kind:"flag",token:"--events <events>",describe:"Comma-separated event names, e.g. subscription.created,payment.failed"},g0={field:"limit",kind:"flag",token:"--limit <n>",describe:"Max rows to return."};function _0(t){if(typeof t!="string")return;let e=t.split(",").map(n=>n.trim()).filter(n=>n.length>0);return e.length>0?e:void 0}function y0(t){if(!t||typeof t!="object")return[];let e=t;return Array.isArray(e.data)?e.data:[]}function v0(t,e){if(!t||typeof t!="object")return e;let n=t;return typeof n.total=="number"?n.total:typeof n.pagination?.total=="number"?n.pagination.total:e}function s6(t){let e=t.enable===!0,n=t.disable===!0;if(e&&n)throw new A("Pass either --enable or --disable, not both.",400,{code:"VALIDATION_ERROR",param:"enabled"});if(e)return!0;if(n)return!1}async function ei(t,e){return ve(t,e)}var b0=[{opKey:"webhook.read",operationClass:"operate",scope:[Xo],sideEffect:"read",cli:{group:"webhook",command:"list",summary:"List API-managed webhook endpoints",args:[Qo,g0],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.managementListWebhooks(o,{limit:e.limit}),i=y0(r);n({productId:o,count:i.length,total:v0(r,i.length),webhooks:i},`${i.length} webhook(s)`)}},mcp:{tool:"fs_webhook_list",title:"List webhook endpoints",description:"List API-managed outbound webhook endpoints for a business. Read-only; signing secrets are never returned.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),limit:s.string().optional().describe("Max rows to return.")},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementListWebhooks(n,{limit:e.limit})}}},{opKey:"webhook.create",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"create",summary:"Create an API-managed webhook endpoint",idempotent:!0,args:[Qo,{field:"url",kind:"flag",token:"--url <url>",describe:"HTTPS receiver URL.",required:!0},{...h0,required:!0}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=_0(e.events);if(!i)throw new A("At least one webhook event is required.",400,{code:"VALIDATION_ERROR",param:"events"});let a=await t.managementCreateWebhook(e.productId,{url:e.url,events:i},n);r(a)||o({productId:e.productId,webhook:a.data},"Webhook endpoint created")}},mcp:{tool:"fs_webhook_create",title:"Create webhook endpoint",description:"Create an API-managed outbound webhook endpoint for a business. Returns the signing secret once. If webhooks are declared in business/business.ts, Core returns 409 MANAGED_BY_CODE and the repo must be edited instead.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},returnsOneTimeSecret:!0,inputSchema:{productId:s.string().describe(vn),url:s.string().url().describe("HTTPS receiver URL."),events:s.array(s.string()).min(1).describe("Webhook event names to subscribe to."),...He},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementCreateWebhook(n,{url:e.url,events:e.events},{idempotencyKey:e.idempotencyKey})}}},{opKey:"webhook.update",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"update",summary:"Update a webhook endpoint's events or enabled state",idempotent:!0,args:[Qo,Xd,h0,{field:"enable",kind:"flag",token:"--enable",describe:"Enable delivery for this endpoint."},{field:"disable",kind:"flag",token:"--disable",describe:"Disable delivery for this endpoint."}],handler:async({client:t,args:e,reqOpts:n,emit:o,emitDryRunPreview:r})=>{let i=_0(e.events),a=s6(e);if(!i&&a===void 0)throw new A("Pass --events, --enable, or --disable to update a webhook.",400,{code:"VALIDATION_ERROR"});let c=await t.managementUpdateWebhook(e.productId,e.webhookId,{...i?{events:i}:{},...a!==void 0?{enabled:a}:{}},n);r(c)||o({productId:e.productId,webhook:c.data},"Webhook endpoint updated")}},mcp:{tool:"fs_webhook_update",title:"Update webhook endpoint",description:"Update an API-managed webhook endpoint's event list and/or enabled state. URL and secret are immutable; create a new endpoint for those changes.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s),events:s.array(s.string()).min(1).optional().describe("Replacement webhook event list."),enabled:s.boolean().optional().describe("Enable or disable delivery."),...He},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementUpdateWebhook(n,e.webhookId,{events:e.events,enabled:e.enabled},{idempotencyKey:e.idempotencyKey})}}},{opKey:"webhook.delete",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"delete",summary:"Delete an API-managed webhook endpoint. Requires --yes.",destructive:!0,yesMessage:"Pass --yes to confirm webhook endpoint deletion.",args:[Qo,Xd],handler:async({client:t,args:e,emit:n})=>{await t.managementDeleteWebhook(e.productId,e.webhookId),n({productId:e.productId,deleted:e.webhookId},"Webhook endpoint deleted")}},mcp:{tool:"fs_webhook_delete",title:"Delete webhook endpoint",description:"Delete an API-managed outbound webhook endpoint. If webhooks are repo-managed, Core returns 409 MANAGED_BY_CODE.",annotations:{readOnlyHint:!1,destructiveHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s)},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementDeleteWebhook(n,e.webhookId)}}},{opKey:"webhook.test",operationClass:"operate",scope:[Xo],sideEffect:"write",cli:{group:"webhook",command:"test",summary:"Send a signed test event to a webhook endpoint",args:[Qo,Xd],handler:async({client:t,args:e,emit:n})=>{let o=await t.managementTestWebhook(e.productId,e.webhookId);n({productId:e.productId,result:o},"Webhook test sent")}},mcp:{tool:"fs_webhook_test",title:"Test webhook endpoint",description:"Send a signed test event to an API-managed webhook endpoint and persist the delivery result.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s)},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementTestWebhook(n,e.webhookId)}}},{opKey:"webhook.delivery.read",operationClass:"operate",scope:[Xo],sideEffect:"read",cli:{group:"webhook",command:"deliveries",summary:"List recent delivery attempts for a webhook endpoint",args:[Qo,Xd,g0],handler:async({client:t,args:e,emit:n})=>{let o=await t.managementListWebhookDeliveries(e.productId,e.webhookId,{limit:e.limit}),r=y0(o);n({productId:e.productId,webhookId:e.webhookId,count:r.length,total:v0(o,r.length),deliveries:r},`${r.length} delivery attempt(s)`)}},mcp:{tool:"fs_webhook_deliveries",title:"List webhook deliveries",description:"List recent delivery attempts for a webhook endpoint. Payload and response body are intentionally omitted by Core.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(vn),webhookId:s.string().describe(_s),limit:s.string().optional().describe("Max rows to return.")},handler:async(t,e)=>{let n=await ei(t,e.productId);return t.managementListWebhookDeliveries(n,e.webhookId,{limit:e.limit})}}}];var ti="The business id or slug.",Fr="operator",ys={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:ti,resolveProduct:!0};async function vs(t,e){return ve(t,e)}var k0=[{opKey:"agents.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"agents",command:"list",summary:"List a business's operating agents + enableable roles",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderListAgents(o);n({productId:o,...r},`${r.agents.length} agent(s) \u2014 enableable roles: ${r.availableRoles.join(", ")}`)}},mcp:{tool:"fs_agents_list",title:"List operating agents",description:"The agent roster for a business: the enabled/disabled Operator plus any roles that can still be enabled. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderListAgents(n)}}},{opKey:"agents.status",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"agents",command:"status",summary:"The Operator's activation state, recent runs, and usage totals",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderAgentStatus(o,Fr);n({productId:o,...r},`operator: ${r.enabled?"ENABLED":"disabled"} \u2014 last run ${r.lastRunAt??"never"}; ${r.recentRuns.length} recent run(s); ${r.usage.tokensIn+r.usage.tokensOut} tokens, ${r.usage.actionsCount} action(s) lifetime`)}},mcp:{tool:"fs_agents_status",title:"Get the Operator's status",description:"The Operator's activation state, recent run history (newest-first), and lifetime usage totals (LLM tokens + actions). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderAgentStatus(n,Fr)}}},{opKey:"agents.runs.show",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"agents",command:"runs-show",summary:"One run's full paper trail: trace, launches, action receipts",args:[ys,{field:"runId",kind:"positional",token:"<runId>",describe:"The agent run id (from `agents status`)."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderAgentRunDetail(o,Fr,e.runId),i=r.launches?.length??0,a=r.actions?.length??0;n({productId:o,...r},`run ${r.run?.id}: ${i} launch(es), ${a} action receipt(s)`)}},mcp:{tool:"fs_agents_run_show",title:"Get one agent run's paper trail",description:"One run's full audit view: the orchestrator's trace summary (composed launches, verify flags, catalog changes), the per-launch performance ledger, and every platform-action receipt. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti),runId:s.string().describe("The agent run id.")},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderAgentRunDetail(n,Fr,e.runId)}}},{opKey:"agents.enable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"agents",command:"enable",summary:"Turn the Operator on (creates it on first enable)",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderConfigureAgent(o,Fr,{enabled:!0});n({productId:o,agent:r},"operator ENABLED \u2014 it runs autonomously on its cadence and posts to the bulletin; usage bills while enabled")}},mcp:{tool:"fs_agents_enable",title:"Enable the Operator",description:"Turn the business's Operator agent on (created on first enable). It runs autonomously on its cadence; agent-work billing accrues while enabled.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderConfigureAgent(n,Fr,{enabled:!0})}}},{opKey:"agents.disable",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"agents",command:"disable",summary:"Turn the Operator off (stops runs + billing)",args:[ys],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderConfigureAgent(o,Fr,{enabled:!1});n({productId:o,agent:r},"operator disabled \u2014 no further runs; billing stops accruing")}},mcp:{tool:"fs_agents_disable",title:"Disable the Operator",description:"Turn the Operator off: the dispatcher stops scheduling runs and agent-work billing stops accruing. Re-enable at any time.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ti)},handler:async(t,e)=>{let n=await vs(t,e.productId);return t.builderConfigureAgent(n,Fr,{enabled:!1})}}}];var bs="The business id or slug.",tp="The bulletin post id.",Qd={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:bs,resolveProduct:!0},Xy={field:"postId",kind:"positional",token:"<postId>",describe:tp};async function ep(t,e){return ve(t,e)}var x0=[{opKey:"bulletin.list",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"bulletin",command:"list",summary:"List the agents' bulletin feed (trends + change requests)",args:[Qd,{field:"kind",kind:"flag",token:"--kind <kind>",describe:"Filter: trend | insight | change_request"},{field:"status",kind:"flag",token:"--status <status>",describe:"Filter: open | acknowledged | resolved"},{field:"limit",kind:"flag",token:"--limit <n>",describe:"Max rows to return."}],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderListBulletin(o,{kind:e.kind,status:e.status,limit:e.limit});n({productId:o,...r},`${r.items.length} post(s)${r.nextCursor?" (more available)":""}`)}},mcp:{tool:"fs_bulletin_list",title:"List bulletin posts",description:"The agents' bulletin feed for a business: trend/insight posts (aggregated data + deltas) and change_request posts (the coding agent's backlog \u2014 filter --kind change_request --status open). Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),kind:s.enum(["trend","insight","change_request"]).optional().describe("Filter by post kind."),status:s.enum(["open","acknowledged","resolved"]).optional().describe("Filter by post status."),limit:s.string().optional().describe("Max rows to return.")},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderListBulletin(n,{kind:e.kind,status:e.status,limit:e.limit})}}},{opKey:"bulletin.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"bulletin",command:"show",summary:"Show one bulletin post (full body + data payload)",args:[Qd,Xy],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderGetBulletinPost(o,e.postId);n({productId:o,post:r},`[${r.kind}] ${r.title} \u2014 ${r.status}${r.changeSetId?` (changeSet ${r.changeSetId})`:""}`)}},mcp:{tool:"fs_bulletin_show",title:"Show a bulletin post",description:"One bulletin post in full: markdown body, the dataJson payload backing the claim, and for change requests the referenced ChangeSet id + proposal. Read-only.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),postId:s.string().describe(tp)},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderGetBulletinPost(n,e.postId)}}},{opKey:"bulletin.ack",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"bulletin",command:"ack",summary:"Acknowledge a post (the coding agent picked it up)",args:[Qd,Xy],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderSetBulletinStatus(o,e.postId,"acknowledged");n({productId:o,post:r},`Post acknowledged: ${r.title}`)}},mcp:{tool:"fs_bulletin_ack",title:"Acknowledge a bulletin post",description:"Mark a bulletin post acknowledged \u2014 the hand-off signal that the coding agent (or builder) has picked the item up. Forward-only; idempotent on an already-acknowledged post.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),postId:s.string().describe(tp)},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderSetBulletinStatus(n,e.postId,"acknowledged")}}},{opKey:"bulletin.resolve",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"bulletin",command:"resolve",summary:"Resolve a post (the work landed)",args:[Qd,Xy],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await t.builderSetBulletinStatus(o,e.postId,"resolved");n({productId:o,post:r},`Post resolved: ${r.title}`)}},mcp:{tool:"fs_bulletin_resolve",title:"Resolve a bulletin post",description:"Mark a bulletin post resolved \u2014 the referenced work landed (or the trend was addressed). Terminal state.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bs),postId:s.string().describe(tp)},handler:async(t,e)=>{let n=await ep(t,e.productId);return t.builderSetBulletinStatus(n,e.postId,"resolved")}}}];var ri="The business id or slug.",np="The promo code id.",ev=["percent_off","amount_off","free_months"],ks="promo-code",xs={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:ri,resolveProduct:!0},Qy={field:"promoCodeId",kind:"positional",token:"<promoCodeId>",describe:np},S0={field:"plan",kind:"flag",token:"--plan <planId>",describe:"Limit to a plan id. Repeatable. Omit for all launch plans; use --all-plans on update to clear scoped plans.",parser:(t,e)=>[...e,t],defaultValue:[]};function $0(t){if(typeof t!="string")return;let e=t.trim().toLowerCase();if(ev.includes(e))return e;throw new A(`Invalid promo code kind "${t}". Use percent_off, amount_off, or free_months.`,400,{code:"INVALID_PROMO_CODE_KIND",param:"kind"})}function ni(t,e){if(e===void 0)return;let n=typeof e=="number"?e:typeof e=="string"&&/^\d+$/.test(e.trim())?Number.parseInt(e,10):Number.NaN;if(!Number.isInteger(n)||n<=0)throw new A(`${t} must be a positive integer.`,400,{code:"INVALID_PROMO_CODE_FIELD",param:t});return n}function $s(t){return typeof t=="string"&&t.length>0?t:void 0}function I0(t,e){let n=ni("percent",t.percent),o=ni("amountCents",t.amountCents);if(n!==void 0&&o!==void 0)throw new A("Pass either --percent or --amount-cents, not both.",400,{code:"CONFLICTING_PROMO_AMOUNT_FLAGS",param:"amount"});if(e==="percent_off"){if(n===void 0)throw new A("percent_off promo codes require --percent.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"percent"});if(n>100)throw new A("--percent must be between 1 and 100.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"percent"});return n}if(e==="amount_off"){if(o===void 0)throw new A("amount_off promo codes require --amount-cents.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"amountCents"});return o}if(e==="free_months"&&(n!==void 0||o!==void 0))throw new A("free_months promo codes do not accept --percent or --amount-cents.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"amount"});return n??o}function w0(t){let e=t.plan??[];if(t.allPlans===!0&&e.length>0)throw new A("Pass either --plan or --all-plans, not both.",400,{code:"CONFLICTING_PROMO_PLAN_FLAGS",param:"plan"});return t.allPlans===!0?[]:e.length>0?e:void 0}function c6(t){let e=$0(t.kind);if(!e)throw new A("Promo code kind is required.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"kind"});let n=ni("durationMonths",t.durationMonths);if(n===void 0)throw new A("--duration-months is required.",400,{code:"INVALID_PROMO_CODE_FIELD",param:"durationMonths"});let o=w0(t);return{code:String(t.code),kind:e,amount:I0(t,e),durationMonths:n,...o!==void 0?{applicablePlanIds:o}:{},maxRedemptions:ni("maxRedemptions",t.maxRedemptions),activeFrom:$s(t.activeFrom),activeUntil:$s(t.activeUntil)}}function u6(t){let e=$0(t.kind),n=ni("durationMonths",t.durationMonths),o=ni("maxRedemptions",t.maxRedemptions),r=w0(t);if(t.code!==void 0||e!==void 0||t.percent!==void 0||t.amountCents!==void 0||n!==void 0||o!==void 0||t.clearMaxRedemptions===!0||t.activeFrom!==void 0||t.activeUntil!==void 0||t.clearActiveFrom===!0||t.clearActiveUntil===!0||r!==void 0){if(e===void 0)throw new A("Promo-code spec updates rotate the Stripe coupon, so pass the complete spec: --kind plus --duration-months and the required amount flag for that kind.",400,{code:"PROMO_CODE_UPDATE_REQUIRES_FULL_SPEC",param:"kind"});if(n===void 0)throw new A("Promo-code spec updates require --duration-months.",400,{code:"PROMO_CODE_UPDATE_REQUIRES_FULL_SPEC",param:"durationMonths"})}let a={},c=$s(t.code);c!==void 0&&(a.code=c),e!==void 0&&(a.kind=e);let u=I0(t,e);if(u!==void 0&&(a.amount=u),n!==void 0&&(a.durationMonths=n),o!==void 0&&(a.maxRedemptions=o),t.clearMaxRedemptions===!0&&(a.maxRedemptions=null),r!==void 0&&(a.applicablePlanIds=r),t.activeFrom!==void 0&&(a.activeFrom=$s(t.activeFrom)??null),t.activeUntil!==void 0&&(a.activeUntil=$s(t.activeUntil)??null),t.clearActiveFrom===!0&&(a.activeFrom=null),t.clearActiveUntil===!0&&(a.activeUntil=null),Object.keys(a).length===0)throw new A("No promo-code fields to update. Pass --code, --kind, amount, duration, plan, status-window, or redemption flags.",400,{code:"PROMO_CODE_UPDATE_NO_FIELDS"});return a}async function Ss(t,e){return ve(t,e)}function rp(t){return{status:t}}var E0=[{opKey:"promo_code.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:ks,command:"list",summary:"List API-managed promo codes for checkout",args:[xs],handler:async({client:t,args:e,emit:n})=>{let o=await t.listPromoCodes(e.productId);n({productId:e.productId,count:o.length,promoCodes:o},`${o.length} promo code(s)`)}},mcp:{tool:"fs_promo_code_list",title:"List promo codes",description:"List API-managed promo codes for a business. Promo codes are checkout operational state, not repo-authored Business SDK state.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ri)},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.listPromoCodes(n)}}},{opKey:"promo_code.create",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"create",summary:"Create an API-managed checkout promo code",args:[xs,{field:"code",kind:"flag",token:"--code <code>",describe:"Customer-entered promo code.",required:!0},{field:"kind",kind:"flag",token:"--kind <kind>",describe:"percent_off, amount_off, or free_months.",required:!0},{field:"percent",kind:"flag",token:"--percent <n>",describe:"Percent discount for percent_off promos."},{field:"amountCents",kind:"flag",token:"--amount-cents <cents>",describe:"Fixed discount in cents for amount_off promos."},{field:"durationMonths",kind:"flag",token:"--duration-months <n>",describe:"Discount duration in months.",required:!0},{field:"maxRedemptions",kind:"flag",token:"--max-redemptions <n>",describe:"Optional maximum redemption count."},{field:"activeFrom",kind:"flag",token:"--active-from <iso>",describe:"Optional ISO-8601 activation timestamp."},{field:"activeUntil",kind:"flag",token:"--active-until <iso>",describe:"Optional ISO-8601 expiration timestamp."},S0],handler:async({client:t,args:e,emit:n})=>{let o=await t.createPromoCode(e.productId,c6(e));n({productId:e.productId,promoCode:o},"Promo code created")}},mcp:{tool:"fs_promo_code_create",title:"Create promo code",description:"Create an API-managed checkout promo code. Use percent for percent_off, amountCents for amount_off, and no amount for free_months.",annotations:{readOnlyHint:!1,destructiveHint:!1,openWorldHint:!0},inputSchema:{productId:s.string().describe(ri),code:s.string().min(1).max(64),kind:s.enum(ev),percent:s.number().int().min(1).max(100).optional(),amountCents:s.number().int().positive().optional(),durationMonths:s.number().int().min(1).max(24),maxRedemptions:s.number().int().positive().optional(),activeFrom:s.string().datetime().optional(),activeUntil:s.string().datetime().optional(),applicablePlanIds:s.array(s.string()).optional()},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.createPromoCode(n,{code:e.code,kind:e.kind,amount:e.kind==="percent_off"?e.percent:e.kind==="amount_off"?e.amountCents:void 0,durationMonths:e.durationMonths,maxRedemptions:e.maxRedemptions,activeFrom:e.activeFrom,activeUntil:e.activeUntil,applicablePlanIds:e.applicablePlanIds})}}},{opKey:"promo_code.update",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"update",summary:"Update an API-managed checkout promo code",args:[xs,Qy,{field:"code",kind:"flag",token:"--code <code>",describe:"Replacement customer-entered promo code."},{field:"kind",kind:"flag",token:"--kind <kind>",describe:"percent_off, amount_off, or free_months."},{field:"percent",kind:"flag",token:"--percent <n>",describe:"Percent discount for percent_off promos."},{field:"amountCents",kind:"flag",token:"--amount-cents <cents>",describe:"Fixed discount in cents for amount_off promos."},{field:"durationMonths",kind:"flag",token:"--duration-months <n>",describe:"Discount duration in months."},{field:"maxRedemptions",kind:"flag",token:"--max-redemptions <n>",describe:"Set maximum redemption count."},{field:"clearMaxRedemptions",kind:"flag",token:"--clear-max-redemptions",describe:"Clear the maximum redemption count."},{field:"activeFrom",kind:"flag",token:"--active-from <iso>",describe:"Set ISO-8601 activation timestamp."},{field:"clearActiveFrom",kind:"flag",token:"--clear-active-from",describe:"Clear activation timestamp."},{field:"activeUntil",kind:"flag",token:"--active-until <iso>",describe:"Set ISO-8601 expiration timestamp."},{field:"clearActiveUntil",kind:"flag",token:"--clear-active-until",describe:"Clear expiration timestamp."},S0,{field:"allPlans",kind:"flag",token:"--all-plans",describe:"Clear plan scoping so the promo applies to all launch plans."}],handler:async({client:t,args:e,emit:n})=>{let o=await t.updatePromoCode(e.productId,e.promoCodeId,u6(e));n({productId:e.productId,promoCode:o},"Promo code updated")}},mcp:{tool:"fs_promo_code_update",title:"Update promo code",description:"Update an API-managed checkout promo code. Spec changes rotate the Stripe coupon/promotion code behind the scenes.",annotations:{readOnlyHint:!1,destructiveHint:!1,openWorldHint:!0},inputSchema:{productId:s.string().describe(ri),promoCodeId:s.string().describe(np),code:s.string().min(1).max(64).optional(),kind:s.enum(ev).optional(),percent:s.number().int().min(1).max(100).optional(),amountCents:s.number().int().positive().optional(),durationMonths:s.number().int().min(1).max(24).optional(),maxRedemptions:s.number().int().positive().nullable().optional(),activeFrom:s.string().datetime().nullable().optional(),activeUntil:s.string().datetime().nullable().optional(),applicablePlanIds:s.array(s.string()).optional()},handler:async(t,e)=>{let n=await Ss(t,e.productId),o={code:e.code,kind:e.kind,amount:e.kind==="percent_off"?e.percent:e.kind==="amount_off"?e.amountCents:void 0,durationMonths:e.durationMonths,maxRedemptions:e.maxRedemptions,activeFrom:e.activeFrom,activeUntil:e.activeUntil,applicablePlanIds:e.applicablePlanIds};return t.updatePromoCode(n,e.promoCodeId,o)}}},{opKey:"promo_code.archive",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"archive",summary:"Archive a checkout promo code",args:[xs,Qy],handler:async({client:t,args:e,emit:n})=>{let o=await t.updatePromoCode(e.productId,e.promoCodeId,rp("ARCHIVED"));n({productId:e.productId,promoCode:o},"Promo code archived")}},mcp:{tool:"fs_promo_code_archive",title:"Archive promo code",description:"Archive an API-managed checkout promo code.",annotations:{readOnlyHint:!1,destructiveHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(ri),promoCodeId:s.string().describe(np)},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.updatePromoCode(n,e.promoCodeId,rp("ARCHIVED"))}}},{opKey:"promo_code.reactivate",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:ks,command:"reactivate",summary:"Reactivate an archived checkout promo code",args:[xs,Qy],handler:async({client:t,args:e,emit:n})=>{let o=await t.updatePromoCode(e.productId,e.promoCodeId,rp("ACTIVE"));n({productId:e.productId,promoCode:o},"Promo code reactivated")}},mcp:{tool:"fs_promo_code_reactivate",title:"Reactivate promo code",description:"Reactivate an archived API-managed checkout promo code.",annotations:{readOnlyHint:!1,destructiveHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(ri),promoCodeId:s.string().describe(np)},handler:async(t,e)=>{let n=await Ss(t,e.productId);return t.updatePromoCode(n,e.promoCodeId,rp("ACTIVE"))}}}];var Is="The business id or slug.",ap="The subscriber id from `consumer list`.",op={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:Is,resolveProduct:!0},tv={field:"subscriberId",kind:"positional",token:"<subscriberId>",describe:ap},l6={field:"env",kind:"flag",token:"--env <env>",describe:"Environment name for preview-scoped consumers."},T0="The member's external identity id (Clerk userId) within the client org.",d6="Comma-separated product-role keys to set (replaces the current assignment; pass an empty string to clear).",p6={field:"userExternalId",kind:"positional",token:"<userExternalId>",describe:T0};function m6(t){return t.split(",").map(e=>e.trim()).filter(Boolean)}var f6={field:"roles",kind:"flag",token:"--roles <roles>",describe:d6,required:!0,parser:t=>m6(t)};async function ip(t,e){return ve(t,e)}function h6(t){return Array.isArray(t)?t:[]}var P0=[{opKey:"consumer.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"consumer",command:"list",summary:"List users/consumers for a business",args:[op,l6],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=h6(await t.builderListConsumers(o,{env:e.env}));n({productId:o,count:r.length,consumers:r},`${r.length} consumer(s)`)}},mcp:{tool:"fs_consumer_list",title:"List business consumers",description:"List users/consumers for a business. Read-only; use this to discover subscriber ids before blocking or removing a user.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(Is),env:s.string().optional().describe("Environment name for preview-scoped consumers.")},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderListConsumers(n,{env:e.env})}}},{opKey:"consumer.block",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"consumer",command:"block",summary:"Block a user and revoke their active API keys",destructive:!0,yesMessage:"Blocking a user revokes active API keys. Pass --yes to confirm.",args:[op,tv],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.subscriberId,i=await t.builderBlockConsumer(o,r);n({productId:o,subscriberId:r,result:i},`Consumer blocked: ${r}`)}},mcp:{tool:"fs_consumer_block",title:"Block business consumer",description:"Block a user/consumer for a business and revoke their active API keys. Destructive live-state operation; it does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(Is),subscriberId:s.string().describe(ap)},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderBlockConsumer(n,e.subscriberId)}}},{opKey:"consumer.remove",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"consumer",command:"remove",summary:"Force-remove a user from a business",destructive:!0,yesMessage:"Removing a user tears down subscriptions, edge credentials, and related live state. Pass --yes to confirm.",args:[op,tv],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.subscriberId,i=await t.builderRemoveConsumer(o,r);n({productId:o,subscriberId:r,result:i},`Consumer removed: ${r}`)}},mcp:{tool:"fs_consumer_remove",title:"Remove business consumer",description:"Force-remove a user/consumer from a business, tearing down subscriptions, edge credentials, and related live state. Destructive and irreversible; it does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(Is),subscriberId:s.string().describe(ap)},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderRemoveConsumer(n,e.subscriberId)}}},{opKey:"consumer.roles.assign",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"consumer rbac",command:"assign",summary:"Replace a client-org member's Managed-RBAC product roles (builder support override)",args:[op,tv,p6,f6],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.subscriberId,i=e.userExternalId,a=e.roles,c=await t.builderAssignConsumerMemberRoles(o,r,i,a);n({productId:o,subscriberId:r,membership:c},`Product roles set for ${i}: ${c.productRoleKeys.length>0?c.productRoleKeys.join(", "):"(none)"}`)}},mcp:{tool:"fs_consumer_rbac_assign",title:"Assign consumer member product roles",description:"Support override: replace a client-org member's Managed-RBAC product-role assignment on a business (set-replace \u2014 the given list becomes the member's full assignment; an empty list clears it). Role keys must exist in the org's role set. Live-state operation; it does not edit repo-authored business behavior.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:{productId:s.string().describe(Is),subscriberId:s.string().describe(ap),userExternalId:s.string().describe(T0),roles:s.array(s.string()).describe("Product-role keys to set (replaces the current assignment; [] clears it).")},handler:async(t,e)=>{let n=await ip(t,e.productId);return t.builderAssignConsumerMemberRoles(n,e.subscriberId,e.userExternalId,e.roles)}}}];var bn="The business id or slug.",ai="Scope to a branch environment by slug (omit for Main/production).",si="Variable name, e.g. STRIPE_SECRET_KEY.";async function g6(){if(process.stdin.isTTY)throw new A("Pipe the variable value via stdin (e.g. echo $VALUE | farthershore variables set \u2026). Never pass a value as a flag.",400,{code:"VARIABLE_STDIN_REQUIRED"});let t="";for await(let e of process.stdin)t+=Buffer.isBuffer(e)?e.toString("utf8"):String(e);return t.replace(/\r?\n$/,"")}var R0=g6;async function ws(t,e,n){if(n)return _n(t,e,n)}var oi={field:"productId",kind:"positional",token:"<businessIdOrSlug>",describe:bn,resolveProduct:!0},Es={field:"name",kind:"positional",token:"<name>",describe:si},ii={field:"env",kind:"flag",token:"--env <slug>",describe:ai},_6={field:"exposeToBrowser",kind:"flag",token:"--expose-to-browser",describe:"Make this variable available in the browser (publishable keys only). Default: off (server-only)."},y6={field:"allowedHost",kind:"flag",token:"--allowed-host <host>",describe:"Allow fs.fetch to send this variable to <host> (custom/unknown providers). Repeatable or comma-separated, e.g. --allowed-host api.example.com.",parser:(t,e)=>[...e,...t.split(",").map(n=>n.trim()).filter(Boolean)],defaultValue:[]},O0=[{opKey:"business_variable.read",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"variables",command:"list",summary:"List variable metadata for a business (names + flags, never values)",args:[oi,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i=await t.builderBusinessVariables(o,r);n({productId:o,environmentId:r??null,count:i.length,variables:i.map(a=>({name:a.name,exposeToBrowser:a.exposeToBrowser,sealed:a.sealed,hasValue:!0,environmentId:a.environmentId}))},"Business variables (metadata only \u2014 values are never returned)")}},mcp:{tool:"fs_variable_list",title:"List business variables",description:"List masked variable metadata for a business \u2014 names, exposeToBrowser flag, sealed status. Values are never returned.",annotations:{readOnlyHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderBusinessVariables(n,e.environmentId)}}},{opKey:"business_variable.set",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"variables",command:"set",summary:"Create or update a variable (value read from stdin \u2014 never echoed)",helpTextAfter:`
|
|
97
97
|
Examples:
|
|
98
98
|
echo $STRIPE_SECRET | farthershore variables set my-biz STRIPE_SECRET_KEY
|
|
99
99
|
cat .env | farthershore variables set my-biz DATABASE_URL --env staging
|
|
@@ -101,4 +101,4 @@ Examples:
|
|
|
101
101
|
echo $CUSTOM_KEY | farthershore variables set my-biz CUSTOM_API_KEY --allowed-host api.example.com # custom provider`,args:[oi,Es,ii,_6,y6],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i=await R0(),a=e.allowedHost,c=await t.builderSetBusinessVariable(o,e.name,{value:i,exposeToBrowser:e.exposeToBrowser===!0,environmentId:r,...a&&a.length>0?{allowedHosts:a}:{}});n({productId:o,variable:{name:c.name,exposeToBrowser:c.exposeToBrowser,sealed:c.sealed,environmentId:c.environmentId}},`Variable ${c.name} saved`)}},mcp:{tool:"fs_variable_set",title:"Set a business variable",description:"Create or update a business variable. The value is encrypted at rest and not returned after write. Pass exposeToBrowser:true for publishable keys only.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),name:s.string().describe(si),value:s.string().describe("The variable value (encrypted at rest)."),exposeToBrowser:s.boolean().optional().describe("Expose to the browser (publishable keys only). Default: false."),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderSetBusinessVariable(n,e.name,{value:e.value,exposeToBrowser:e.exposeToBrowser??!1,environmentId:e.environmentId})}}},{opKey:"business_variable.set",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"variables",command:"rotate",summary:"Rotate (update) a variable value without changing its exposeToBrowser setting (value read from stdin)",helpTextAfter:`
|
|
102
102
|
Examples:
|
|
103
103
|
echo $NEW_STRIPE_SECRET | farthershore variables rotate my-biz STRIPE_SECRET_KEY
|
|
104
|
-
cat .env | farthershore variables rotate my-biz DATABASE_URL --env staging`,args:[oi,Es,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i=await R0(),a=await t.builderSetBusinessVariable(o,e.name,{value:i,environmentId:r});n({productId:o,variable:{name:a.name,exposeToBrowser:a.exposeToBrowser,sealed:a.sealed,environmentId:a.environmentId}},`Variable ${a.name} rotated`)}},mcp:{tool:"fs_variable_rotate",title:"Rotate a business variable",description:"Update a business variable's value without changing its exposeToBrowser setting. Use this instead of set when you want to guarantee visibility is unchanged.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),name:s.string().describe(si),value:s.string().describe("The new variable value (encrypted at rest)."),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderSetBusinessVariable(n,e.name,{value:e.value,environmentId:e.environmentId})}}},{opKey:"business_variable.reveal",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"variables",command:"reveal",summary:"Print the plaintext value of a variable (sealed variables return a 403)",args:[oi,Es,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i;try{i=await t.builderRevealBusinessVariable(o,e.name,r)}catch(c){throw c instanceof Error&&"status"in c&&c.status===403?new
|
|
104
|
+
cat .env | farthershore variables rotate my-biz DATABASE_URL --env staging`,args:[oi,Es,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i=await R0(),a=await t.builderSetBusinessVariable(o,e.name,{value:i,environmentId:r});n({productId:o,variable:{name:a.name,exposeToBrowser:a.exposeToBrowser,sealed:a.sealed,environmentId:a.environmentId}},`Variable ${a.name} rotated`)}},mcp:{tool:"fs_variable_rotate",title:"Rotate a business variable",description:"Update a business variable's value without changing its exposeToBrowser setting. Use this instead of set when you want to guarantee visibility is unchanged.",annotations:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),name:s.string().describe(si),value:s.string().describe("The new variable value (encrypted at rest)."),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderSetBusinessVariable(n,e.name,{value:e.value,environmentId:e.environmentId})}}},{opKey:"business_variable.reveal",operationClass:"operate",scope:["products:read"],sideEffect:"read",cli:{group:"variables",command:"reveal",summary:"Print the plaintext value of a variable (sealed variables return a 403)",args:[oi,Es,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i;try{i=await t.builderRevealBusinessVariable(o,e.name,r)}catch(c){throw c instanceof Error&&"status"in c&&c.status===403?new A(`${e.name} is sealed \u2014 only rotation can change a sealed variable. To update, rotate it with a new value.`,403,{code:"VARIABLE_SEALED"}):c}let a=e.name;n({name:a,value:i.value},a)}},mcp:{tool:"fs_variable_reveal",title:"Reveal a business variable value",description:"Return the plaintext value of an unsealed variable. Returns a 403 for sealed variables (only rotation can change them).",annotations:{readOnlyHint:!0,openWorldHint:!1},returnsOneTimeSecret:!0,inputSchema:{productId:s.string().describe(bn),name:s.string().describe(si),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderRevealBusinessVariable(n,e.name,e.environmentId)}}},{opKey:"business_variable.seal",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"variables",command:"seal",summary:"Irreversibly seal a variable (value can never be revealed; only rotation can update it). Requires --yes.",destructive:!0,yesMessage:"Sealing is irreversible \u2014 the value can never be revealed again. Only `variables rotate` can update a sealed variable. Pass --yes to confirm.",args:[oi,Es,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=await ws(t,o,e.env),i=await t.builderSealBusinessVariable(o,e.name,r);n({productId:o,name:e.name,sealed:i.sealed},`Variable ${e.name} sealed \u2014 rotation is the only way to update it`)}},mcp:{tool:"fs_variable_seal",title:"Seal a business variable",description:"Irreversibly seal a variable \u2014 its value can never be revealed again. Only `variables rotate` / fs_variable_rotate can update the value after sealing. This action cannot be undone.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),name:s.string().describe(si),environmentId:s.string().optional().describe(ai)},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderSealBusinessVariable(n,e.name,e.environmentId)}}},{opKey:"business_variable.delete",operationClass:"operate",scope:["products:update"],sideEffect:"write",cli:{group:"variables",command:"rm",summary:"Delete a variable from a branch environment (Main deletions must go through the dashboard)",destructive:!0,yesMessage:"Pass --yes to confirm variable deletion. Main/production variables must be deleted in the dashboard.",args:[oi,Es,ii],handler:async({client:t,args:e,emit:n})=>{let o=e.productId,r=e.env;if(!r)throw new A("delete production variables in the dashboard",403,{code:"VARIABLE_MAIN_DELETE_FORBIDDEN"});let i=await _n(t,o,r);await t.builderDeleteBusinessVariable(o,e.name,i),n({productId:o,name:e.name,environmentId:i},`Variable ${e.name} deleted`)}},mcp:{tool:"fs_variable_rm",title:"Delete a business variable",description:"Delete a variable from a branch environment. Main/production variables must be deleted in the dashboard \u2014 this operation requires environmentId to target a branch.",annotations:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:{productId:s.string().describe(bn),name:s.string().describe(si),environmentId:s.string().describe("The branch environment id. Main deletions are dashboard-only.")},handler:async(t,e)=>{let n=await ve(t,e.productId);return t.builderDeleteBusinessVariable(n,e.name,e.environmentId)}}}];var A0=[...r0,...p0,...f0,...n0,...o0,...s0,...c0,...b0,...k0,...x0,...E0,...P0,...O0,...u0,...l0,...d0];function C0(t){if(!t.mcp)throw new Error(`toMcpTool called on CLI-only operation "${t.opKey}" (mcp === null).`);let e={name:t.mcp.tool,title:t.mcp.title,description:t.mcp.description,operationClass:t.operationClass,scope:t.scope,sideEffect:t.sideEffect,annotations:t.mcp.annotations,inputSchema:t.mcp.inputSchema,handler:t.mcp.handler};return t.mcp.returnsOneTimeSecret&&(e.returnsOneTimeSecret=!0),e}var rv=A0.filter(t=>t.mcp).map(C0);function N0(){let t=ST(),e=IT(void 0),n=process.env.FARTHERSHORE_API_URL??t.apiUrl;return RT({apiUrl:n,token:e})}function v6(t){if(t&&typeof t=="object"){let e=t,n=typeof e.code=="string"?` [${e.code}]`:"",o=typeof e.status=="number"?` (HTTP ${e.status})`:"";if(typeof e.message=="string")return`${e.message}${n}${o}`}return String(t)}function b6(t,e,n){let o=async c=>{try{let u=await e.handler(n,c??{}),d=e.returnsOneTimeSecret?u:qd(u),l=KT(e.name,d);return{content:[{type:"text",text:JSON.stringify(l,null,2)}]}}catch(u){let d=u instanceof A?u:new A(v6(u),0),l=GT(e.name,d);return{content:[{type:"text",text:JSON.stringify(l,null,2)}],isError:!0}}},r=Object.keys(e.inputSchema).length>0,i={title:e.title,description:e.description,annotations:{title:e.title,...e.annotations},...r?{inputSchema:e.inputSchema}:{}},a=r?c=>o(c):()=>o({});t.registerTool(e.name,i,a)}function k6(t){for(let e of t){let n=_T(e.operationClass,e.sideEffect);if(n)throw new Error(`[mcp] tool "${e.name}" is misclassified: ${n}`)}}function z0(t){k6(rv);let e=new Od({name:"farthershore-agent-business-builder",version:"0.2.0"});for(let n of rv)b6(e,n,t);return e}function nv(){return z0(N0())}async function x6(){let t=nv(),e=new zl;await t.connect(e)}import.meta.url===`file://${process.argv[1]}`&&x6();export{rv as ALL_TOOLS,z0 as buildServer,nv as createMcpServer,N0 as mcpClient};
|