fern-api 5.139.2 → 5.139.3

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.
Files changed (2) hide show
  1. package/cli.cjs +9 -9
  2. package/package.json +1 -1
package/cli.cjs CHANGED
@@ -3388,7 +3388,7 @@ ${l4u.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&D3o(th
3388
3388
  `+l4e.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?l4e.default.cyan(b4u(t,this.opt.mask)):l4e.default.italic(l4e.default.dim("[hidden]")):this.opt.mask?b4u(t,this.opt.mask):l4e.default.italic(l4e.default.dim("[input is hidden] "))}getSpinningValue(t){return this.getMaskedValue(t)}filterInput(t){return t||(this.opt.default==null?"":this.opt.default)}onEnd(t){this.status="answered",this.answer=t.value,this.render(),this.screen.done(),this.done(t.value)}onError(t){this.render(t.isValid)}onKeypress(){this.opt.default&&=void 0,this.render()}};var EKr=be(sS(),1);var yVu=be(f4o(),1),yKr=require("child_process"),Mst=require("fs"),AKr=be(require("path"),1),bVu=be(require("os"),1),EVu=require("crypto"),Y4o=be(gVu(),1);var mKr=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var X5t=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var hKr=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var gKr=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function bKr(e="",t,r){let n=new X4o(e,r);n.runAsync((i,o)=>{if(i)setImmediate(t,i,void 0);else try{n.cleanup(),setImmediate(t,void 0,o)}catch(s){setImmediate(t,s,void 0)}})}function AVu(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function Fjm(e){let t=[],r="";for(let n=0;n<e.length;n++){let i=e.charAt(n);n>0&&i===" "&&e[n-1]!=="\\"&&r.length>0?(t.push(r),r=""):r=`${r}${i}`}return r.length>0&&t.push(r),t}var X4o=class{text="";tempFile;editor;lastExitStatus=0;fileOptions={};get temp_file(){return console.log("DEPRECATED: temp_file. Use tempFile moving forward."),this.tempFile}get last_exit_status(){return console.log("DEPRECATED: last_exit_status. Use lastExitStatus moving forward."),this.lastExitStatus}constructor(t="",r){this.text=t,r&&(this.fileOptions=r),this.determineEditor(),this.createTemporaryFile()}run(){return this.launchEditor(),this.readTemporaryFile(),this.text}runAsync(t){try{this.launchEditorAsync(()=>{try{this.readTemporaryFile(),setImmediate(t,void 0,this.text)}catch(r){setImmediate(t,r,void 0)}})}catch(r){setImmediate(t,r,void 0)}}cleanup(){this.removeTemporaryFile()}determineEditor(){let t=process.env.VISUAL?process.env.VISUAL:process.env.EDITOR?process.env.EDITOR:process.platform.startsWith("win")?"notepad":"vim",r=Fjm(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??bVu.default.tmpdir(),r=(0,EVu.randomUUID)(),n=AVu(this.fileOptions.prefix),i=AVu(this.fileOptions.postfix),o=`${n}${r}${i}`,s=AKr.default.resolve(t,o),a=AKr.default.resolve(t)+AKr.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let c={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(c.mode=this.fileOptions.mode),(0,Mst.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new mKr(t)}}readTemporaryFile(){try{let t=(0,Mst.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,yVu.detect)(t)??"utf8";Y4o.default.encodingExists(r)||(r="utf8"),this.text=Y4o.default.decode(t,r)}}catch(t){throw new hKr(t)}}removeTemporaryFile(){try{(0,Mst.unlinkSync)(this.tempFile)}catch(t){throw new gKr(t)}}launchEditor(){try{let t=(0,yKr.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new X5t(t)}}launchEditorAsync(t){try{(0,yKr.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new X5t(r)}}};var IVu=be(F3(),1);var Z5t=class extends aS{_run(t){this.done=t,this.editorResult=new IVu.Subject;let r=$P(this.rl);this.lineSubscription=r.line.subscribe(this.startExternalEditor.bind(this));let n=this.opt.waitUserInput===void 0?!0:this.opt.waitUserInput,i=this.handleSubmitEvents(this.editorResult);return i.success.forEach(this.onEnd.bind(this)),i.error.forEach(this.onError.bind(this)),this.currentText=this.opt.default,this.opt.default=null,n?this.render():this.startExternalEditor(),this}render(t){let r="",n=this.getQuestion();n+=this.status==="answered"?EKr.default.dim("Received"):EKr.default.dim("Press <enter> to launch your preferred editor."),t&&(r=EKr.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),bKr(this.currentText,this.endExternalEditor.bind(this),{postfix:this.opt.postfix??".txt"})}endExternalEditor(t,r){this.rl.resume(),t?this.editorResult.error(t):this.editorResult.next(r)}onEnd(t){this.editorResult.unsubscribe(),this.lineSubscription.unsubscribe(),this.answer=t.value,this.status="answered",this.render(),this.screen.done(),this.done(this.answer)}onError(t){this.render(t.isValid)}};var SVu=require("stream");var CVu=be(require("readline"),1),wVu=be(xVu(),1),m4e=class{constructor(t){this.rl||=CVu.default.createInterface(jjm(t)),this.rl.resume(),this.onForceClose=this.onForceClose.bind(this),process.on("exit",this.onForceClose),this.rl.on("SIGINT",this.onForceClose)}onForceClose(){this.close(),process.kill(process.pid,"SIGINT"),console.log("")}close(){this.rl.removeListener("SIGINT",this.onForceClose),process.removeListener("exit",this.onForceClose),this.rl.output.unmute(),this.activePrompt&&typeof this.activePrompt.close=="function"&&this.activePrompt.close(),this.rl.output.end(),this.rl.pause(),this.rl.close()}};function jjm(e={}){e.skipTTYChecks=e.skipTTYChecks===void 0?!0:e.skipTTYChecks;let t=e.input||process.stdin;if(!e.skipTTYChecks&&!t.isTTY){let i=new Error("Prompts can not be meaningfully rendered in non-TTY environments");throw i.isTtyError=!0,i}let r=new wVu.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var $5t=class extends m4e{constructor(t={}){super(t),this.log=new SVu.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return j5t(this.rl,this.bottomBar.split(`
3389
3389
  `).length),this}updateBottomBar(t){return j5t(this.rl,1),this.rl.output.unmute(),this.clean(),this.bottomBar=t,this.render(),this.rl.output.mute(),this}writeLog(t){return this.rl.output.unmute(),this.clean(),this.rl.output.write(this.enforceLF(t.toString())),this.render(),this.rl.output.mute(),this}enforceLF(t){return/[\n\r]$/.test(t)?t:t+`
3390
3390
  `}write(t){let r=t.split(/\n/);this.height=r.length,this.rl.setPrompt(r.at(-1)),this.rl.output.rows===0&&this.rl.output.columns===0&&UHr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var Hd=be(F3(),1),PVu=be(d5t(),1);var IKr=be(F3(),1),TVu=be(d5t(),1),vKr=function(e,t,r){return typeof e[t]!="function"?(0,IKr.of)(e):(0,IKr.from)((0,TVu.default)(e[t])(r).then(n=>(e[t]=n,e)))};var OVu={set:(e,t="",r)=>{let n=e;t.split(".").forEach((i,o,s)=>{i==="__proto__"||i==="constructor"||(o===s.length-1?n[i]=r:(!(i in n)||typeof n[i]!="object")&&(n[i]={}),n=n[i])})},get:(e,t="",r)=>{let n=o=>String.prototype.split.call(t,o).filter(Boolean).reduce((s,a)=>s!=null?s[a]:s,e),i=n(/[,[\]]+?/)||n(/[,.[\]]+?/);return i===void 0||i===e?r:i}},Lst=class extends m4e{constructor(t,r){super(r),this.prompts=t}run(t,r){this.answers=typeof r=="object"?{...r}:{};let n;return Array.isArray(t)?n=(0,Hd.from)(t):(0,Hd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,Hd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,Hd.from)([t]),this.process=n.pipe((0,Hd.concatMap)(this.processQuestion.bind(this)),(0,Hd.publish)()),this.process.connect(),this.process.pipe((0,Hd.reduce)((i,o)=>(OVu.set(i,o.name,o.answer),i),this.answers)).toPromise(Promise).then(this.onCompletion.bind(this),this.onError.bind(this))}onCompletion(){return this.close(),this.answers}onError(t){return this.close(),Promise.reject(t)}processQuestion(t){return t={...t},(0,Hd.defer)(()=>(0,Hd.of)(t).pipe((0,Hd.concatMap)(this.setDefaultType.bind(this)),(0,Hd.concatMap)(this.filterIfRunnable.bind(this)),(0,Hd.concatMap)(()=>vKr(t,"message",this.answers)),(0,Hd.concatMap)(()=>vKr(t,"default",this.answers)),(0,Hd.concatMap)(()=>vKr(t,"choices",this.answers)),(0,Hd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,Hd.defer)(()=>(0,Hd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,Hd.defer)(()=>(0,Hd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&OVu.get(this.answers,t.name)!==void 0)return Hd.EMPTY;if(t.when===!1)return Hd.EMPTY;if(typeof t.when!="function")return(0,Hd.of)(t);let{answers:r}=this;return(0,Hd.defer)(()=>(0,Hd.from)((0,PVu.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,Hd.filter)(n=>n!=null)))}};function BVu(e){let t=function(r,n){let i;try{i=new Lst(t.prompts,e)}catch(s){return Promise.reject(s)}let o=i.run(r,n);return o.ui=i,o};return t.prompts={},t.registerPrompt=function(r,n){return t.prompts[r]=n,this},t.restoreDefaultPrompts=function(){this.registerPrompt("list",z5t),this.registerPrompt("input",u4e),this.registerPrompt("number",M5t),this.registerPrompt("confirm",L5t),this.registerPrompt("rawlist",V5t),this.registerPrompt("expand",U5t),this.registerPrompt("checkbox",_5t),this.registerPrompt("password",G5t),this.registerPrompt("editor",Z5t)},t.restoreDefaultPrompts(),t}var $4o=BVu();function zjm(e,t){$4o.registerPrompt(e,t)}function Mjm(){$4o.restoreDefaultPrompts()}var Ljm={prompt:$4o,ui:{BottomBar:$5t,Prompt:Lst},createPromptModule:BVu,registerPrompt:zjm,restoreDefaultPrompts:Mjm,Separator:wz},yu=Ljm;var Vst=require("path");function RVu(){let e=Vjm();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function Vjm(e=process.argv[1]?(0,Vst.dirname)(process.argv[1]):process.cwd(),t=Vst.sep==="\\"){let r=t?DVu(e):e;return n=>{if(!n)return;let i=t?DVu(n):n,{dir:o,base:s,ext:a}=Vst.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(s=s.slice(0,-1*a.length));let c=decodeURIComponent(s);o||(o=".");let u=o.lastIndexOf("/node_modules");if(u>-1)return`${o.slice(u+14).replace(/\//g,".")}:${c}`;if(o.startsWith(r)){let l=o.slice(r.length+1).replace(/\//g,".");return l?`${l}:${c}`:c}return c}}function DVu(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var eVo=e=>{if("flags"in e){let t=kVu(e.flags),r=FVu(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,tVo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,Ujm(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function Ujm(e,t,r){return{key:e,enabled:typeof t=="string"?!0:t,variant:typeof t=="string"?t:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:r?JSON.stringify(r):void 0,description:void 0}}}var kVu=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,e8t(r)]).filter(([,t])=>t!==void 0)),FVu=e=>{let t=e??{};return Object.fromEntries(Object.keys(t).filter(r=>{let n=t[r];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(r=>{let n=t[r].metadata?.payload;return[r,n?tVo(n):void 0]}))};var e8t=e=>e===void 0?void 0:e.variant??e.enabled,tVo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var B2=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.LogsQueue="logs_queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e})({});function rVo(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var Gjm="NativeGzipValidationError",qjm=31,Wjm=139,Hjm=8,Kjm=e=>e.length>=2&&e[0]===qjm&&e[1]===Wjm;var t8t,Jjm=()=>{if(t8t)return t8t;t8t=[];for(let e=0;e<256;e++){let t=e;for(let r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;t8t[e]=t>>>0}return t8t},Yjm=e=>{let t=Jjm(),r=4294967295;for(let n=0;n<e.length;n++)r=t[(r^e[n])&255]^r>>>8;return(4294967295^r)>>>0},xKr=e=>{let t=new Error(`Native gzip produced invalid output: ${e}`);throw t.name=Gjm,t},Xjm=async(e,t)=>{e.size<18&&xKr("too-short");let r=new Uint8Array(await e.slice(0,10).arrayBuffer());(!Kjm(r)||r[2]!==Hjm)&&xKr("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());n.getUint32(0,!0)!==Yjm(t)&&xKr("invalid-crc");let i=t.length>>>0;n.getUint32(4,!0)!==i&&xKr("invalid-size")};async function r8t(e,t=!0,r){try{let n=new TextEncoder().encode(e),i=new CompressionStream("gzip"),o=i.writable.getWriter(),s=o.write(n).then(()=>o.close()).catch(async u=>{try{await o.abort(u)}catch{}throw u}),a=new Response(i.readable).blob(),[c]=await Promise.all([a,s]);return await Xjm(c,n),c}catch(n){if(r?.rethrow)throw n;return t&&console.error("Failed to gzip compress data",n),null}}var Zjm=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],NVu=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return Zjm.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var eQm=Array.isArray,jVu=Object.prototype,Eev=jVu.hasOwnProperty,nVo=jVu.toString,Ust=eQm||function(e){return nVo.call(e)==="[object Array]"};var n8t=e=>e===Object(e)&&!Ust(e);var _st=e=>e===void 0,cCe=e=>nVo.call(e)=="[object String]",QVu=e=>cCe(e)&&e.trim().length===0;var i8t=e=>nVo.call(e)=="[object Number]"&&e===e;var iVo=e=>e instanceof Error;function CKr(e){return e===null||typeof e!="object"}function h4e(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function zVu(e){return h4e(e,"ErrorEvent")}function Gst(e){return typeof Event<"u"&&tQm(e,Event)}function MVu(e){return h4e(e,"Object")}function tQm(e,t){try{return e instanceof t}catch{return!1}}function o8t(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),i8t(e)?e>r?(n.warn(" cannot be greater than max: "+r+". Using max value instead."),r):e<t?(n.warn(" cannot be less than min: "+t+". Using min value instead."),t):e:(n.warn(" must be a number. using max or fallback. max: "+r+", fallback: "+i),o8t(i||r,t,r,n))}var rQm=864e5,wKr=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=o8t(t.bucketSize,0,100,t._logger),this._refillRate=o8t(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=o8t(t.refillInterval,0,rQm,t._logger)}_applyRefill(t,r){let n=r-t.lastAccess,i=Math.floor(n/this._refillInterval);if(i>0){let o=i*this._refillRate;t.tokens=Math.min(t.tokens+o,this._bucketSize),t.lastAccess=t.lastAccess+i*this._refillInterval}}consumeRateLimit(t){let r=Date.now(),n=String(t),i=this._buckets[n];return i?this._applyRefill(i,r):(i={tokens:this._bucketSize,lastAccess:r},this._buckets[n]=i),i.tokens===0?!0:(i.tokens--,i.tokens===0&&this._onBucketRateLimited?.(t),i.tokens===0)}stop(){this._buckets={}}};var SKr="0123456789abcdef",TKr=class e{constructor(t){this.bytes=t}static ofInner(t){if(t.length===16)return new e(t);throw new TypeError("not 128-bit length")}static fromFieldsV7(t,r,n,i){if(!Number.isInteger(t)||!Number.isInteger(r)||!Number.isInteger(n)||!Number.isInteger(i)||t<0||r<0||n<0||i<0||t>0xffffffffffff||r>4095||n>1073741823||i>4294967295)throw new RangeError("invalid field value");let o=new Uint8Array(16);return o[0]=t/2**40,o[1]=t/2**32,o[2]=t/2**24,o[3]=t/2**16,o[4]=t/256,o[5]=t,o[6]=112|r>>>8,o[7]=r,o[8]=128|n>>>24,o[9]=n>>>16,o[10]=n>>>8,o[11]=n,o[12]=i>>>24,o[13]=i>>>16,o[14]=i>>>8,o[15]=i,new e(o)}static parse(t){let r;switch(t.length){case 32:r=/^[0-9a-f]{32}$/i.exec(t)?.[0];break;case 36:r=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(t)?.slice(1,6).join("");break;case 38:r=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(t)?.slice(1,6).join("");break;case 45:r=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(t)?.slice(1,6).join("");break;default:break}if(r){let n=new Uint8Array(16);for(let i=0;i<16;i+=4){let o=parseInt(r.substring(2*i,2*i+8),16);n[i+0]=o>>>24,n[i+1]=o>>>16,n[i+2]=o>>>8,n[i+3]=o}return new e(n)}throw new SyntaxError("could not parse UUID string")}toString(){let t="";for(let r=0;r<this.bytes.length;r++)t+=SKr.charAt(this.bytes[r]>>>4),t+=SKr.charAt(15&this.bytes[r]),(r===3||r===5||r===7||r===9)&&(t+="-");return t}toHex(){let t="";for(let r=0;r<this.bytes.length;r++)t+=SKr.charAt(this.bytes[r]>>>4),t+=SKr.charAt(15&this.bytes[r]);return t}toJSON(){return this.toString()}getVariant(){let t=this.bytes[8]>>>4;if(t<0)throw new Error("unreachable");if(t<=7)return this.bytes.every(r=>r===0)?"NIL":"VAR_0";if(t<=11)return"VAR_10";if(t<=13)return"VAR_110";if(t<=15)return this.bytes.every(r=>r===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new e(this.bytes.slice(0))}equals(t){return this.compareTo(t)===0}compareTo(t){for(let r=0;r<16;r++){let n=this.bytes[r]-t.bytes[r];if(n!==0)return Math.sign(n)}return 0}},oVo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??nQm()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(t,r){let n=this.generateOrAbortCore(t,r);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(t,r)),n}generateOrAbortCore(t,r){if(!Number.isInteger(t)||t<1||t>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(r<0||r>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(t>this.timestamp)this.timestamp=t,this.resetCounter();else{if(!(t+r>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return TKr.fromFieldsV7(this.timestamp,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let t=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return t[6]=64|t[6]>>>4,t[8]=128|t[8]>>>2,TKr.ofInner(t)}},nQm=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),LVu,Ete=()=>iQm().toString(),iQm=()=>(LVu||(LVu=new oVo)).generate();var OKr=class{add(t){let r=Ete();return this.promiseByIds[r]=t,t.catch(()=>{}).finally(()=>{delete this.promiseByIds[r]}),t}async join(){let t=Object.values(this.promiseByIds),r=t.length;for(;r>0;)await Promise.all(t),t=Object.values(this.promiseByIds),r=t.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}};function oQm(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var VVu=(e,t,r)=>{function n(o,...s){t(()=>{let a=r[o];a(e,...s)})}return{debug:(...o)=>{n("debug",...o)},info:(...o)=>{n("log",...o)},warn:(...o)=>{n("warn",...o)},error:(...o)=>{n("error",...o)},critical:(...o)=>{r.error(e,...o)},createLogger:o=>VVu(`${e} ${o}`,t,r)}},sQm=e=>e();function UVu(e,t=sQm){return VVu(e,t,oQm())}var Wst="Mobile",BKr="iOS",qst="Android",_Vu="Tablet",Rev=qst+" "+_Vu;var cQm="Apple",kev=cQm+" Watch",GVu="Safari",DKr="BlackBerry",qVu="Samsung",uQm=qVu+"Browser",lQm=qVu+" Internet",RKr="Chrome",pQm=RKr+" OS",fQm=RKr+" "+BKr,WVu="Internet Explorer",dQm=WVu+" "+Wst,aVo="Opera",Fev=aVo+" Mini",HVu="Edge",mQm="Microsoft "+HVu,cVo="Firefox",hQm=cVo+" "+BKr,uVo="Nintendo",lVo="PlayStation",PKr="Xbox",gQm=qst+" "+Wst,AQm=Wst+" "+GVu,s8t="Windows",yQm=s8t+" Phone";var KVu="Generic",Nev=KVu+" "+Wst.toLowerCase(),jev=KVu+" "+_Vu.toLowerCase(),bQm="Konqueror",EQm="Oculus Browser",tR="(\\d+(\\.\\d+)?)",sVo=new RegExp("Version/"+tR),Qev=new RegExp(PKr,"i"),zev=new RegExp(lVo+" \\w+","i"),Mev=new RegExp(uVo+" \\w+","i"),IQm=new RegExp(DKr+"|PlayBook|BB10","i"),vQm={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var Lev={[dQm]:[new RegExp("rv:"+tR)],[mQm]:[new RegExp(HVu+"?\\/"+tR)],[RKr]:[new RegExp("("+RKr+"|CrMo)\\/"+tR)],[fQm]:[new RegExp("CriOS\\/"+tR)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+tR)],[GVu]:[sVo],[AQm]:[sVo],[aVo]:[new RegExp("("+aVo+"|OPR)\\/"+tR)],[cVo]:[new RegExp(cVo+"\\/"+tR)],[hQm]:[new RegExp("FxiOS\\/"+tR)],[bQm]:[new RegExp("Konqueror[:/]?"+tR,"i")],[DKr]:[new RegExp(DKr+" "+tR),sVo],[gQm]:[new RegExp("android\\s"+tR,"i")],[lQm]:[new RegExp(uQm+"\\/"+tR)],[EQm]:[new RegExp("OculusBrowser\\/"+tR)],[WVu]:[new RegExp("(rv:|MSIE )"+tR)],Mozilla:[new RegExp("rv:"+tR)]};var Vev=[[new RegExp(PKr+"; "+PKr+" (.*?)[);]","i"),e=>[PKr,e&&e[1]||""]],[new RegExp(uVo,"i"),[uVo,""]],[new RegExp(lVo,"i"),[lVo,""]],[IQm,[DKr,""]],[new RegExp(s8t,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[yQm,""];if(new RegExp(Wst).test(t)&&!/IEMobile\b/.test(t))return[s8t+" "+Wst,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=vQm[n]||"";return/arm/i.test(t)&&(i="RT"),[s8t,i]}return[s8t,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[BKr,t.join(".")]}return[BKr,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=_st(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+qst+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+qst+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[qst,t.join(".")]}return[qst,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,e=>{let t=["Mac OS X",""];if(e&&e[1]){let r=[e[1],e[2],e[3]||"0"];t[1]=r.join(".")}return t}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[pQm,""]],[/Linux|debian/i,["Linux",""]]];var JVu="utf8";function YVu(e){return e?.replace(/\/+$/,"")}async function XVu(e,t){let r=null;for(let n=0;n<t.retryCount+1;n++){n>0&&await new Promise(i=>setTimeout(i,t.retryDelay));try{return await e()}catch(i){if(r=i,!t.retryCheck(i))throw i}}throw r}function kKr(){return new Date().toISOString()}function Ite(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var ZVu=e=>e instanceof Error;function pVo(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var xQm={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},ttv=xQm.info;var FKr=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};var A4e=class extends Error{constructor(t,r){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}},g4e=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function $Vu(e){if(e instanceof A4e){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function NKr(e){return typeof e=="object"&&(e instanceof A4e||e instanceof g4e)}function jKr(e){return typeof e=="object"&&e instanceof A4e&&e.status===413}var a8t=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new OKr,this._events=new FKr,this._isInitialized=!1;let n=typeof t=="string"?t.trim():"",i=typeof r.host=="string"?r.host.trim():"",o=!n;this._logger=UVu("[PostHog]",this.logMsgIfDebug.bind(this)),o&&this._logger.error("You must pass your PostHog project's api key. The client will be disabled."),this.apiKey=n,this.host=YVu(i||"https://us.i.posthog.com"),this.flushAt=r.flushAt?Math.max(r.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,r.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,r.maxQueueSize??1e3),this.flushInterval=r.flushInterval??1e4,this.preloadFeatureFlags=r.preloadFeatureFlags??!0,this.defaultOptIn=r.defaultOptIn??!0,this.disableSurveys=r.disableSurveys??!1,this._retryOptions={retryCount:r.fetchRetryCount??3,retryDelay:r.fetchRetryDelay??3e3,retryCheck:NKr},this.requestTimeout=r.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=r.featureFlagsRequestTimeoutMs??3e3,this.remoteConfigRequestTimeoutMs=r.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=r.disableGeoip??!0,this.disabled=(r.disabled??!1)||o,this.historicalMigration=r?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=r?.evaluationContexts??r?.evaluationEnvironments,r?.evaluationEnvironments&&!r?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!rVo()||(r?.disableCompression??!1)}logMsgIfDebug(t){this.isDebug&&t()}wrap(t){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return t();this._initPromise.then(()=>t())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(B2.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(B2.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(B2.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!1){await this._initPromise;let a=s?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,u={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};n.$device_id&&(u.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(u.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:eVo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof A4e)return{type:"api_error",statusCode:t.status};if(t instanceof g4e){let r=t.error;return r instanceof Error&&(r.name==="AbortError"||r.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(t,r,n,i,o,s);if(a===void 0)return{response:void 0,requestId:void 0};let c=e8t(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let c=a[t];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let c=await this.getFlags(t,r,n,i,a);if(!c.success)return;let u=c.response;return u.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),u.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:u?.requestId,quotaLimited:u.quotaLimited}):u}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(B2.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(B2.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(B2.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}enqueue(t,r,n){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o=this.getPersistedProperty(B2.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(B2.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=Ite(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o={api_key:this.apiKey,batch:[i],sent_at:kKr()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await r8t(s,this.isDebug),u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...c!==null&&{"Content-Encoding":"gzip"}},body:c||s};try{await(await this.fetchWithRetry(a,u)).body?.cancel()?.catch(()=>{})}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:kKr(),uuid:n?.uuid?n.uuid:Ete()};return(n?.disableGeoip??this.disableGeoip)&&(i.properties||(i.properties={}),i.properties.$geoip_disable=!0),i.distinctId&&(i.distinct_id=i.distinctId,delete i.distinctId),i}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.flush().catch(async t=>{await $Vu(t)})}async flush(){if(this.disabled)return;let t=pVo([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),pVo([t]).then(()=>{this.flushPromise===t&&(this.flushPromise=null)}),t}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getPersistedProperty(B2.Queue)||[];if(!t.length)return;let r=[],n=t.length;for(;t.length>0&&r.length<n;){let i=t.slice(0,this.maxBatchSize),o=i.map(f=>f.message),s=async()=>{let m=(this.getPersistedProperty(B2.Queue)||[]).slice(i.length);this.setPersistedProperty(B2.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:kKr()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await r8t(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>jKr(f)?!1:NKr(f)};try{await(await this.fetchWithRetry(u,p,d)).body?.cancel()?.catch(()=>{})}catch(f){if(jKr(f)&&o.length>1){this.maxBatchSize=Math.max(1,Math.floor(o.length/2)),this._logger.warn(`Received 413 when sending batch of size ${o.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw f instanceof g4e||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async _sendLogsBatch(t){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let r=JSON.stringify(t),n=`${this.host}/i/v1/logs?token=${encodeURIComponent(this.apiKey)}`,i=this.disableCompression?null:await r8t(r,this.isDebug),o={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...i!==null&&{"Content-Encoding":"gzip"}},body:i||r};try{return await this.fetchWithRetry(n,o,{retryCheck:s=>jKr(s)?!1:NKr(s)}),{kind:"ok"}}catch(s){return jKr(s)?{kind:"too-large"}:s instanceof g4e?{kind:"retry-later",error:s}:{kind:"fatal",error:s}}}async fetchWithRetry(t,r,n,i){let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,JVu)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await XVu(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=Ite(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new g4e(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new A4e(l,s);return l},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;if(this.clearFlushTimer(),this.disabled)return;let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(B2.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!NKr(o))throw o;await $Vu(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=Ite(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}finally{clearTimeout(i)}}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var Tz={};Z(Tz,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>VKr,DOMExceptionCoercer:()=>hVo,EXCEPTION_STEP_INTERNAL_FIELDS:()=>c8t,ErrorCoercer:()=>gVo,ErrorEventCoercer:()=>AVo,ErrorPropertiesBuilder:()=>fVo,EventCoercer:()=>EVo,ExceptionStepsBuffer:()=>wVo,ObjectCoercer:()=>bVo,PrimitiveCoercer:()=>IVo,PromiseRejectionEventCoercer:()=>vVo,ReduceableCache:()=>xVo,StringCoercer:()=>yVo,chromeStackLineParser:()=>dVo,createDefaultStackParser:()=>LQm,createStackParser:()=>lUu,geckoStackLineParser:()=>mVo,getUtf8ByteLength:()=>fUu,nodeStackLineParser:()=>sUu,opera10StackLineParser:()=>nUu,opera11StackLineParser:()=>iUu,resolveExceptionStepsConfig:()=>CVo,reverseAndStripFrames:()=>uUu,stripReservedExceptionStepFields:()=>_Qm,winjsStackLineParser:()=>rUu});var QKr,eUu,zKr;function tUu(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return zKr&&r.length===eUu||(eUu=r.length,zKr=r.reduce((n,i)=>{QKr||(QKr={});let o=QKr[i];if(o)n[o[0]]=o[1];else{let s=e(i);for(let a=s.length-1;a>=0;a--){let u=s[a]?.filename,l=t[i];if(u&&l){n[u]=l,QKr[i]=[u,l];break}}}return n},{})),zKr}var TQm=4,fVo=class{constructor(t,r,n=[]){this.coercers=t,this.stackParser=r,this.modifiers=n}buildFromUnknown(t,r={}){let i=r&&r.mechanism||{handled:!0,type:"generic"},s=this.buildCoercingContext(i,r,0).apply(t),a=this.buildParsingContext(r),c=this.parseStacktrace(s,a);return{$exception_list:this.convertToExceptionList(c,i),$exception_level:"error"}}async modifyFrames(t){for(let r of t)r.stacktrace&&r.stacktrace.frames&&Ust(r.stacktrace.frames)&&(r.stacktrace.frames=await this.applyModifiers(r.stacktrace.frames));return t}coerceFallback(t){return{type:"Error",value:"Unknown error",stack:t.syntheticException?.stack,synthetic:!0}}parseStacktrace(t,r){let n;t.cause!=null&&(n=this.parseStacktrace(t.cause,r));let i;return t.stack!=""&&t.stack!=null&&(i=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?r.skipFirstLines:0),r.chunkIdMap)),{...t,cause:n,stack:i}}applyChunkIds(t,r){return t.map(n=>(n.filename&&r&&(n.chunk_id=r[n.filename]),n))}applyCoercers(t,r){for(let n of this.coercers)if(n.match(t))return n.coerce(t,r);return this.coerceFallback(r)}async applyModifiers(t){let r=t;for(let n of this.modifiers)r=await n(r);return r}convertToExceptionList(t,r){let n={type:t.type,value:t.value,mechanism:{type:r.type??"generic",handled:r.handled??!0,synthetic:t.synthetic??!1}};t.stack&&(n.stacktrace={type:"raw",frames:t.stack});let i=[n];return t.cause!=null&&i.push(...this.convertToExceptionList(t.cause,{...r,handled:!0})),i}buildParsingContext(t){return{chunkIdMap:tUu(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=TQm){let c=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,c)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var tB="?";function vte(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?tB:r,in_app:!0};return _st(n)||(o.lineno=n),_st(i)||(o.colno=i),o}var MKr=(e,t)=>{let r=e.indexOf("safari-extension")!==-1,n=e.indexOf("safari-web-extension")!==-1;return r||n?[e.indexOf("@")!==-1?e.split("@")[0]:tB,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var OQm=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,PQm=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,BQm=/\((\S*)(?::(\d+))(?::(\d+))\)/,dVo=(e,t)=>{let r=OQm.exec(e);if(r){let[,i,o,s]=r;return vte(t,i,tB,+o,+s)}let n=PQm.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=BQm.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=MKr(n[1]||tB,n[2]);return vte(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var DQm=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,RQm=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,mVo=(e,t)=>{let r=DQm.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=RQm.exec(r[3]);s&&(r[1]=r[1]||"eval",r[3]=s[1],r[4]=s[2],r[5]="")}let i=r[3],o=r[1]||tB;return[o,i]=MKr(o,i),vte(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var kQm=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,rUu=(e,t)=>{let r=kQm.exec(e);return r?vte(t,r[2],r[1]||tB,+r[3],r[4]?+r[4]:void 0):void 0};var FQm=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,nUu=(e,t)=>{let r=FQm.exec(e);return r?vte(t,r[2],r[3]||tB,+r[1]):void 0},NQm=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,iUu=(e,t)=>{let r=NQm.exec(e);return r?vte(t,r[5],r[3]||r[4]||tB,+r[1],+r[2]):void 0};var jQm=/^\s*[-]{4,}$/,QQm=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,sUu=(e,t)=>{let r=e.match(QQm);if(r){let n,i,o,s,a;if(r[1]){o=r[1];let l=o.lastIndexOf(".");if(o[l-1]==="."&&l--,l>0){n=o.slice(0,l),i=o.slice(l+1);let p=n.indexOf(".Module");p>0&&(o=o.slice(p+1),n=n.slice(0,p))}s=void 0}i&&(s=n,a=i),i==="<anonymous>"&&(a=void 0,o=void 0),o===void 0&&(a=a||tB,o=s?`${s}.${a}`:a);let c=r[2]?.startsWith("file://")?r[2].slice(7):r[2],u=r[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&r[5]&&!u&&(c=r[5]),{filename:c?decodeURI(c):void 0,module:void 0,function:o,lineno:oUu(r[3]),colno:oUu(r[4]),in_app:zQm(c||"",u),platform:t}}if(e.match(jQm))return{filename:e,platform:t}};function zQm(e,t=!1){return!(t||e&&!e.startsWith("/")&&!e.match(/^[A-Z]:/)&&!e.startsWith(".")&&!e.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&e!==void 0&&!e.includes("node_modules/")}function oUu(e){return parseInt(e||"",10)||void 0}var aUu=/\(error: (.*)\)/,cUu=50;function uUu(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,cUu).map(r=>({...r,filename:r.filename||MQm(t).filename,function:r.function||tB}))}function MQm(e){return e[e.length-1]||{}}function LQm(){return lUu("web:javascript",dVo,mVo)}function lUu(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
3391
- `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=aUu.test(a)?a.replace(aUu,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=cUu)break}}return uUu(i)}}var hVo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=cCe(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return h4e(t,"DOMException")}isDOMError(t){return h4e(t,"DOMError")}};var gVo=class{match(t){return iVo(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var AVo=class{constructor(){}match(t){return zVu(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var VQm=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,yVo=class{match(t){return typeof t=="string"}coerce(t,r){let[n,i]=this.getInfos(t);return{type:n??"Error",value:i??t,stack:r.syntheticException?.stack,synthetic:!0}}getInfos(t){let r="Error",n=t,i=t.match(VQm);return i&&(r=i[1],n=i[2]),[r,n]}};var pUu=["fatal","error","warning","log","info","debug"];function LKr(e,t=40){let r=Object.keys(e);if(r.sort(),!r.length)return"[object has no keys]";for(let n=r.length;n>0;n--){let i=r.slice(0,n).join(", ");if(!(i.length>t))return n===r.length||i.length<=t?i:`${i.slice(0,t)}...`}return""}var bVo=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return Gst(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=LKr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return cCe(t)&&!QVu(t)&&pUu.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(ZVu(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var EVo=class{match(t){return Gst(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${LKr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var IVo=class{match(t){return CKr(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var vVo=class{match(t){return h4e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Gst(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return CKr(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var xVo=class{constructor(t){this._maxSize=t,this._cache=new Map}get(t){let r=this._cache.get(t);if(r!==void 0)return this._cache.delete(t),this._cache.set(t,r),r}set(t,r){this._cache.set(t,r)}reduce(){for(;this._cache.size>=this._maxSize;){let t=this._cache.keys().next().value;t&&this._cache.delete(t)}}};var c8t={MESSAGE:"$message",TIMESTAMP:"$timestamp"},UQm=new Set([c8t.MESSAGE,c8t.TIMESTAMP]),VKr={enabled:!0,max_bytes:32768};function CVo(e){return e?{enabled:e.enabled??VKr.enabled,max_bytes:GQm(e.max_bytes,VKr.max_bytes)}:{...VKr}}function _Qm(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>UQm.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var wVo=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=CVo(t)}setConfig(t){this._config=CVo(t),this._trimToMaxBytes()}add(t){let r=qQm(t);if(!r)return;let n=fUu(r.json);n>this._config.max_bytes||(this._entries.push({step:r.step,bytes:n}),this._totalBytes+=n,this._trimToMaxBytes())}getAttachable(){return this._entries.map(t=>t.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){for(;this._totalBytes>this._config.max_bytes&&this._entries.length>0;){let t=this._entries.shift();t&&(this._totalBytes-=t.bytes)}}};function GQm(e,t){if(!i8t(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function qQm(e){let t=WQm(e);if(t)try{let r=JSON.parse(t);if(!n8t(r))return;let n=r,i=n[c8t.MESSAGE],o=n[c8t.TIMESTAMP];return!cCe(i)||i.trim().length===0||!cCe(o)&&!i8t(o)?void 0:{step:n,json:t}}catch{return}}function WQm(e){let t=new WeakSet;try{return JSON.stringify(e,(r,n)=>{if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Date)return n.toISOString();if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){if(t.has(n))return"[Circular]";t.add(n)}return n}})}catch{return}}function fUu(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e).length;let t=encodeURIComponent(e),r=0;for(let n=0;n<t.length;n++)t[n]==="%"?(r+=1,n+=2):r+=1;return r}var hUu=require("fs"),gUu=require("readline"),UKr=new Tz.ReduceableCache(25),AUu=new Tz.ReduceableCache(20),SVo=7,HQm=1e3,KQm=1e4;async function yUu(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||ZQm(s)||$Qm(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(AUu.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=tzm(o);if(s.every(c=>ezm(i,c)))continue;let a=rzm(UKr,i,{});n.push(JQm(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&YQm(e,UKr),UKr.reduce(),e}function JQm(e,t,r){return new Promise(n=>{let i=(0,hUu.createReadStream)(e),o=(0,gUu.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){AUu.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=nzm(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function YQm(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;XQm(r.lineno,r,n)}}function XQm(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=bUu(e);i<e;i++){let o=r[i];if(o===void 0)return void dUu(t);t.pre_context.push(o)}if(r[e]===void 0)return void dUu(t);t.context_line=r[e];let n=EUu(e);t.post_context=[];for(let i=e+1;i<=n;i++){let o=r[i];if(o===void 0)break;t.post_context.push(o)}}function dUu(e){delete e.pre_context,delete e.context_line,delete e.post_context}function ZQm(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function $Qm(e){return e.lineno!==void 0&&e.lineno>KQm||e.colno!==void 0&&e.colno>HQm}function ezm(e,t){let r=UKr.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function tzm(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=mUu(r),i=[];for(;;){if(t===e.length-1){i.push(n);break}let o=e[t+1];if(typeof o!="number")break;o<=n[1]?n[1]=o+SVo:(i.push(n),n=mUu(o)),t++}return i}function mUu(e){return[bUu(e),EUu(e)]}function bUu(e){return Math.max(1,e-SVo)}function EUu(e){return e+SVo}function rzm(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function nzm(e,t){let r=e,n=r.length;if(n<=150)return r;t>n&&(t=n);let i=Math.max(t-60,0);i<5&&(i=0);let o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r=`...${r}`),o<n&&(r+="..."),r}var Hst=require("path");function IUu(e=process.cwd()){let t=Hst.sep==="\\",r=i=>t?i.replace(/\\/g,"/"):i,n=r(e);return async i=>{for(let o of i)!o.filename||o.filename.startsWith("node:")||o.filename.startsWith("data:")||(0,Hst.isAbsolute)(o.filename)&&(o.filename=r((0,Hst.relative)(n,r(o.filename))));return i}}function izm(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function vUu(e,t){globalThis.process?.on("uncaughtException",izm(e,t))}function xUu(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var ozm=2e3,$H=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new wKr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return n8t(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(vUu(this.onException.bind(this),this.onFatalError.bind(this)),xUu(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(ozm),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var CUu="5.35.1";var Rde={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var Kst=class e{constructor(t){this._host=t.host,this._distinctId=t.distinctId,this._groups=t.groups,this._disableGeoip=t.disableGeoip,this._flags=t.flags,this._requestId=t.requestId,this._evaluatedAt=t.evaluatedAt,this._flagDefinitionsLoadedAt=t.flagDefinitionsLoadedAt,this._errorsWhileComputing=t.errorsWhileComputing??!1,this._quotaLimited=t.quotaLimited??!1,this._accessed=t.accessed??new Set,this._isSlice=t.isSlice??!1}isEnabled(t){let r=this._flags[t];return this._recordAccess(t),r?.enabled??!1}getFlag(t){let r=this._flags[t];if(this._recordAccess(t),!!r)return r.enabled?r.variant??!0:!1}getFlagPayload(t){return this._flags[t]?.payload}onlyAccessed(){let t={};for(let r of this._accessed){let n=this._flags[r];n&&(t[r]=n)}return this._cloneWith(t)}only(t){let r={},n=[];for(let i of t){let o=this._flags[i];o?r[i]=o:n.push(i)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(r)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let t={},r=[];for(let[n,i]of Object.entries(this._flags)){let o=i.enabled===!1?!1:i.variant??!0;t[`$feature/${n}`]=o,i.enabled&&r.push(n)}return r.length>0&&(r.sort(),t.$active_feature_flags=r),t}_cloneWith(t){return new e({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:t,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(t){if(this._accessed.add(t),this._distinctId===""||this._isSlice&&!(t in this._flags))return;let r=this._flags[t],n=r===void 0?void 0:r.enabled===!1?!1:r.variant??!0,i={$feature_flag:t,$feature_flag_response:n,$feature_flag_id:r?.id,$feature_flag_version:r?.version,$feature_flag_reason:r?.reason,locally_evaluated:r?.locallyEvaluated??!1,[`$feature/${t}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:r?.locallyEvaluated?Date.now():this._evaluatedAt};r?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(i.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let o=[];this._errorsWhileComputing&&o.push(Rde.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(Rde.QUOTA_LIMITED),r===void 0&&o.push(Rde.FLAG_MISSING),o.length>0&&(i.$feature_flag_error=o.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:t,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:i})}};async function wUu(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var szm=6e4,azm=1152921504606847e3,czm=["is_not","is_set"],Jst=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Kd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},xte=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},_Kr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof xte||u instanceof Kd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof xte||u instanceof Kd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(!t.active)return!1;if(t.ensure_experience_continuity)throw new Kd("Flag has experience continuity enabled");let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Kd("Flag has unknown group type index");if(!(u in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new Kd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Kd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Kd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Kd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Kd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Kd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Kd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Kd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=o.aggregation_group_type_index,{groups:c,groupProperties:u}=i,l=!1,p;for(let d of s)try{let f=d.aggregation_group_type_index!==void 0?d.aggregation_group_type_index:a,m=n,g=r;if(f!==a&&f!=null){let A=this.groupTypeMapping[String(f)];if(!A||!(A in c)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${t.key}': group type index ${f} not available`));continue}if(!(A in u)){l=!0;continue}m=u[A],g=c[A]}if(await this.isConditionMatch(t,g,d,m,i)){let A=d.variant,y=o.multivariate?.variants||[];p=A&&y.some(E=>E.key===A)?A:await this.getMatchingVariant(t,g)||!0;break}}catch(f){if(f instanceof xte)throw f;if(f instanceof Kd)l=!0;else throw f}if(p!==void 0)return p;if(l)throw new Kd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?await BUu(c,i,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,i,o)):u==="flag"?await this.evaluateFlagDependency(c,i,o):PUu(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await SUu(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await SUu(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(szm,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Jst(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new Jst(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Jst(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof Jst&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=Ite(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function SUu(e,t,r=""){let n=await wUu(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/azm}function PUu(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")return!1}else{if(o==="is_not_set")return!0;throw new Kd(`Property ${n} not found in propertyValues`)}let s=t[n];if(s==null&&!czm.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return TUu(String(i))&&String(s).match(String(i))!==null;case"not_regex":return TUu(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:parseFloat(String(i)),l;return l=typeof s=="number"?s:s!=null?parseFloat(String(s)):NaN,Number.isFinite(u)&&Number.isFinite(l)?c(l,u,o):c(String(s),String(i),o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Kd("Date operations cannot be performed on boolean values");let u=dzm(String(i));if(u==null&&(u=OUu(i)),u==null)throw new Kd(`Invalid date: ${i}`);let l=OUu(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return E5(rB(String(s)),rB(String(i)))===0;case"semver_neq":return E5(rB(String(s)),rB(String(i)))!==0;case"semver_gt":return E5(rB(String(s)),rB(String(i)))>0;case"semver_gte":return E5(rB(String(s)),rB(String(i)))>=0;case"semver_lt":return E5(rB(String(s)),rB(String(i)))<0;case"semver_lte":return E5(rB(String(s)),rB(String(i)))<=0;case"semver_tilde":{let u=rB(String(s)),{lower:l,upper:p}=lzm(String(i));return E5(u,l)>=0&&E5(u,p)<0}case"semver_caret":{let u=rB(String(s)),{lower:l,upper:p}=pzm(String(i));return E5(u,l)>=0&&E5(u,p)<0}case"semver_wildcard":{let u=rB(String(s)),{lower:l,upper:p}=fzm(String(i));return E5(u,l)>=0&&E5(u,p)<0}default:throw new Kd(`Unknown operator: ${o}`)}}function uzm(e,t){if(!(e in t))throw new xte(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function BUu(e,t,r,n=!1,i){let o=String(e.value);uzm(o,r);let s=r[o];return DUu(s,t,r,n,i)}async function DUu(e,t,r,n=!1,i){if(!e)return!0;let o=e.type,s=e.values;if(!s||s.length===0)return!0;let a=!1;if("values"in s[0]){for(let c of s)try{let u=await DUu(c,t,r,n,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof xte)throw u;if(u instanceof Kd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Kd("Can't match cohort without a given cohort property value");return o==="AND"}for(let c of s)try{let u;if(c.type==="cohort")u=await BUu(c,t,r,n,i);else if(c.type==="flag"){if(!i)throw new Kd(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await i(c)}else u=PUu(c,t);let l=c.negation||!1;if(o==="AND"){if(!u&&!l||u&&l)return!1}else if(u&&!l||!u&&l)return!0}catch(u){if(u instanceof xte)throw u;if(u instanceof Kd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Kd("can't match cohort without a given cohort property value");return o==="AND"}function TUu(e){try{return new RegExp(e),!0}catch{return!1}}function RUu(e,t){if(!/^\d+$/.test(e))throw new Kd(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new Kd(`Invalid semver: ${t}`);return parseInt(e,10)}function rB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Kd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>c===void 0||c===""?0:RUu(c,e),o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function E5(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function lzm(e){let t=rB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function pzm(e){let t=rB(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function fzm(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Kd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=c=>{try{return RUu(c,e)}catch{throw new Kd(`Invalid wildcard semver: ${e}`)}},o=i(n[0]),s,a;if(n.length===1)s=[o,0,0],a=[o+1,0,0];else{let c=i(n[1]);s=[o,c,0],a=[o,c+1,0]}return{lower:s,upper:a}}function OUu(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new Kd(`${e} is in an invalid date format`)}throw new Kd(`The date provided ${e} must be a string, number, or date object`)}function dzm(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var GKr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var mzm=100,kUu=3e4,hzm=5e4,gzm=50,Azm=500,yzm="https://us.i.posthog.com",FUu=new Set;function qKr(e,t){FUu.has(e)||(FUu.add(e),console.warn(`[PostHog] ${t}`))}function bzm(e){return typeof e=="string"?e.trim():""}function Ezm(e){return(typeof e=="string"?e.trim():"")||void 0}function Izm(e){return(typeof e=="string"?e.trim():"")||yzm}function vzm(e){if(!e)return{};let t={};for(let[n,i]of Object.entries(e))t[`$feature/${n}`]=i;let r=Object.keys(e).filter(n=>e[n]!==!1).sort();return r.length>0&&(t.$active_feature_flags=r),t}var WKr=class extends a8t{constructor(t,r={}){let n=bzm(t),i={...r,host:Izm(r.host),personalApiKey:Ezm(r.personalApiKey)};if(super(n,i),this._memoryStorage=new GKr,this.options=i,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,mzm):kUu,typeof i.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(i.waitUntilDebounceMs,0)),typeof i.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(i.waitUntilMaxWaitMs,0)),i.personalApiKey){if(i.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');i.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new _Kr({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:i.personalApiKey,projectApiKey:n,timeout:i.requestTimeout??1e4,host:this.host,fetch:i.fetch,onError:s=>{this._events.emit("error",s)},onLoad:s=>{this._events.emit("localEvaluationFlagsLoaded",s)},customHeaders:this.getCustomHeaders(),cacheProvider:i.flagDefinitionCacheProvider,strictLocalEvaluation:i.strictLocalEvaluation}))}this.errorTracking=new $H(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||hzm}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??Azm,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??gzm;this._waitUntilCycle.timer=Ite(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return CUu}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};await super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=kUu){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let O=this._flagOverrides[t];if(O===void 0)return;let D=this._payloadOverrides?.[t];return{key:t,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:D}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,g,A,y,E,x,v;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let O=this.featureFlagsPoller?.featureFlagsByKey[t];if(O)try{let D=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(O,d,{matchValue:i});if(D){m=!0;let R=D.value;E=O.id,v="Evaluated locally",f={key:t,enabled:R!==!1,variant:typeof R=="string"?R:void 0,payload:D.payload??void 0}}}catch(D){if(D instanceof xte||D instanceof Kd)this._logger?.info(`${D.name} when computing flag locally: ${t}: ${D.message}`);else throw D}}if(!m&&!c){let O=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(O===void 0)y=Rde.UNKNOWN_ERROR;else{g=O.requestId,A=O.evaluatedAt;let D=[];O.errorsWhileComputingFlags&&D.push(Rde.ERRORS_WHILE_COMPUTING),O.quotaLimited?.includes("feature_flags")&&D.push(Rde.QUOTA_LIMITED);let R=O.flags[t];if(R===void 0)D.push(Rde.FLAG_MISSING);else{E=R.metadata?.id,x=R.metadata?.version,v=R.reason?.description??R.reason?.code;let P;if(R.metadata?.payload!==void 0)try{P=JSON.parse(R.metadata.payload)}catch{P=R.metadata.payload}f={key:t,enabled:R.enabled,variant:R.variant,payload:P}}D.length>0&&(y=D.join(","))}}if(o){let O=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,D={$feature_flag:t,$feature_flag_response:O,$feature_flag_id:E,$feature_flag_version:x,$feature_flag_reason:v,locally_evaluated:m,[`$feature/${t}`]:O,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let R=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();R!==void 0&&(D.$feature_flag_definitions_loaded_at=R)}y&&(D.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:O,groups:s,disableGeoip:a,properties:D})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){qKr("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(qKr("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){qKr("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return i===void 0?void 0:i.enabled===!1?!1:!!(i.variant??!0)||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},g={},A=!0;if(f&&(m=f.response,g=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},g={...g,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(g={...g,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:g}}async evaluateFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new Kst({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f={},m,g,A=!1,y=!1,E=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),x=new Set;if(E)for(let[C,O]of Object.entries(E.response)){let D=this.featureFlagsPoller?.featureFlagsByKey[C];f[C]={key:C,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:E.payloads[C],id:D?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0},x.add(C)}if((E?E.fallbackToFlags:!0)&&!c){let C=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);if(C){m=C.requestId,g=C.evaluatedAt,A=!!C.errorsWhileComputingFlags,y=Array.isArray(C.quotaLimited)&&C.quotaLimited.includes("feature_flags");for(let[O,D]of Object.entries(C.flags)){if(x.has(O))continue;let R;if(D.metadata?.payload!==void 0)try{R=JSON.parse(D.metadata.payload)}catch{R=D.metadata.payload}f[O]={key:O,enabled:D.enabled,variant:D.variant,payload:R,id:D.metadata?.id,version:D.metadata?.version,reason:D.reason?.description??D.reason?.code,locallyEvaluated:!1}}}}if(this._flagOverrides!==void 0)for(let[C,O]of Object.entries(this._flagOverrides)){if(O===void 0){delete f[C];continue}let D=f[C];f[C]={key:C,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:D?.payload,id:D?.id,version:D?.version,reason:D?.reason,locallyEvaluated:D?.locallyEvaluated??!1}}if(this._payloadOverrides!==void 0)for(let[C,O]of Object.entries(this._payloadOverrides)){let D=f[C];D&&(f[C]={...D,payload:O})}return new Kst({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:f,requestId:m,evaluatedAt:g,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:A,quotaLimited:y})}_captureFlagCalledEventIfNeeded(t){let{distinctId:r,key:n,response:i,groups:o,disableGeoip:s,properties:a}=t,c=`${n}_${i}`;r in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[r].includes(c)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(c):this.distinctIdHasSentFlagCalls[r]=[c],this.capture({distinctId:r,event:"$feature_flag_called",properties:a,groups:o,disableGeoip:s}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:t=>this._captureFlagCalledEventIfNeeded(t),logWarning:t=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${t}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Ite(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(MVu(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i,o){if(!$H.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise($H.buildEventMessage(t,{syntheticException:s},r,n).then(a=>this.capture({...a,uuid:i,flags:o})))}}async captureExceptionImmediate(t,r,n,i){if(!$H.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise($H.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.captureImmediate({...s,flags:i})))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l}=t,p=this.context?.get(),d=r||p?.distinctId,f={...this.props,...p?.properties||{},...i||{}};d||(d=Ete(),f.$process_person_profile=!1),p?.sessionId&&!f.$session_id&&(f.$session_id=p.sessionId);let m=this._runBeforeSend({distinctId:d,event:n,properties:f,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l});if(!m)return Promise.reject(null);let g=await Promise.resolve().then(async()=>{if(s)return a&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),s._getEventProperties();if(a){qKr("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let A=typeof a=="object"?a:void 0,y=await this.getFeatureFlagsForEvent(m.distinctId,o,u,A);return vzm(y)}return{}}).catch(()=>({})).then(A=>({...A,...m.properties||{},$groups:m.groups||o}));return m.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof g.$raw_user_agent=="string"&&NVu(g.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(m.event="$bot_pageview",g.$browser_type="bot"),{distinctId:m.distinctId,event:m.event,properties:g,options:{timestamp:m.timestamp,disableGeoip:m.disableGeoip,uuid:m.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var NUu=require("async_hooks"),HKr=class{constructor(){this.storage=new NUu.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var jUu="posthog-node";function xzm(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let c=s.tags[TVo.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(g=>({...g,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var TVo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=jUu,this.name=jUu,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(xzm(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};$H.errorPropertiesBuilder=new Tz.ErrorPropertiesBuilder([new Tz.EventCoercer,new Tz.ErrorCoercer,new Tz.ObjectCoercer,new Tz.StringCoercer,new Tz.PrimitiveCoercer],Tz.createStackParser("node:javascript",Tz.nodeStackLineParser),[RVu(),yUu,IUu()]);var uCe=class extends WKr{getLibraryId(){return"posthog-node"}initializeContext(){return new HKr}};var KKr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new uCe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.139.2",usingAccessToken:!0,...fue()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var u8t=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};bd();Yt();var Yst=require("fs/promises"),QUu=require("os"),zUu=require("path");kit();var Czm="id",wzm=".fern",l8t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new uCe(r),this.userId=t==null?void 0:YQo(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"5.139.2",...t,...t.properties,usingAccessToken:!1,agent:IVr(),...r!=null?{userEmail:r}:{},...fue()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await jf({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=YD(),r=ze(Mt.of((0,QUu.homedir)()),ve.of(wzm),ve.of(Czm));try{await Jt(r)?this.persistedDistinctId=(await(0,Yst.readFile)(r)).toString():(await(0,Yst.mkdir)((0,zUu.dirname)(r),{recursive:!0}),await(0,Yst.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var OVo;async function p8t(){return OVo==null&&(OVo=await Szm()),OVo}async function Szm(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new u8t;let r=await pot();return r!=null?new l8t({token:r,posthogApiKey:e}):await bz()!=null?new KKr({posthogApiKey:e}):new l8t({token:void 0,posthogApiKey:e})}catch{return new u8t}}In();wt();Ft();J_();var f8t=be(require("process"),1);kWe();var VUu=be(BPo(),1),UUu=be(LUu(),1);function fT(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=F7(e),e.length===0))return 0;e=e.replace((0,UUu.default)()," ");let r=t.ambiguousIsNarrow?1:2,n=0;for(let i of e){let o=i.codePointAt(0);if(o<=31||o>=127&&o<=159||o>=768&&o<=879)continue;switch(VUu.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}In();function JKr(e){let t=0;for(let r of e.split(`
3391
+ `);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=aUu.test(a)?a.replace(aUu,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=cUu)break}}return uUu(i)}}var hVo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=cCe(t.stack);return{type:this.getType(t),value:this.getValue(t),stack:n?t.stack:void 0,cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return this.isDOMError(t)?"DOMError":"DOMException"}getValue(t){let r=t.name||(this.isDOMError(t)?"DOMError":"DOMException");return t.message?`${r}: ${t.message}`:r}isDOMException(t){return h4e(t,"DOMException")}isDOMError(t){return h4e(t,"DOMError")}};var gVo=class{match(t){return iVo(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var AVo=class{constructor(){}match(t){return zVu(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var VQm=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,yVo=class{match(t){return typeof t=="string"}coerce(t,r){let[n,i]=this.getInfos(t);return{type:n??"Error",value:i??t,stack:r.syntheticException?.stack,synthetic:!0}}getInfos(t){let r="Error",n=t,i=t.match(VQm);return i&&(r=i[1],n=i[2]),[r,n]}};var pUu=["fatal","error","warning","log","info","debug"];function LKr(e,t=40){let r=Object.keys(e);if(r.sort(),!r.length)return"[object has no keys]";for(let n=r.length;n>0;n--){let i=r.slice(0,n).join(", ");if(!(i.length>t))return n===r.length||i.length<=t?i:`${i.slice(0,t)}...`}return""}var bVo=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return Gst(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=LKr(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return cCe(t)&&!QVu(t)&&pUu.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(ZVu(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var EVo=class{match(t){return Gst(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${LKr(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var IVo=class{match(t){return CKr(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var vVo=class{match(t){return h4e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Gst(t))return!1;try{let r=t.detail;return r!=null&&typeof r=="object"&&"reason"in r}catch{return!1}}coerce(t,r){let n=this.getUnhandledRejectionReason(t);return CKr(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:r.syntheticException?.stack,synthetic:!0}:r.apply(n)}getUnhandledRejectionReason(t){try{if("reason"in t)return t.reason;if("detail"in t&&t.detail!=null&&typeof t.detail=="object"&&"reason"in t.detail)return t.detail.reason}catch{}return t}};var xVo=class{constructor(t){this._maxSize=t,this._cache=new Map}get(t){let r=this._cache.get(t);if(r!==void 0)return this._cache.delete(t),this._cache.set(t,r),r}set(t,r){this._cache.set(t,r)}reduce(){for(;this._cache.size>=this._maxSize;){let t=this._cache.keys().next().value;t&&this._cache.delete(t)}}};var c8t={MESSAGE:"$message",TIMESTAMP:"$timestamp"},UQm=new Set([c8t.MESSAGE,c8t.TIMESTAMP]),VKr={enabled:!0,max_bytes:32768};function CVo(e){return e?{enabled:e.enabled??VKr.enabled,max_bytes:GQm(e.max_bytes,VKr.max_bytes)}:{...VKr}}function _Qm(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>UQm.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var wVo=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=CVo(t)}setConfig(t){this._config=CVo(t),this._trimToMaxBytes()}add(t){let r=qQm(t);if(!r)return;let n=fUu(r.json);n>this._config.max_bytes||(this._entries.push({step:r.step,bytes:n}),this._totalBytes+=n,this._trimToMaxBytes())}getAttachable(){return this._entries.map(t=>t.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){for(;this._totalBytes>this._config.max_bytes&&this._entries.length>0;){let t=this._entries.shift();t&&(this._totalBytes-=t.bytes)}}};function GQm(e,t){if(!i8t(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function qQm(e){let t=WQm(e);if(t)try{let r=JSON.parse(t);if(!n8t(r))return;let n=r,i=n[c8t.MESSAGE],o=n[c8t.TIMESTAMP];return!cCe(i)||i.trim().length===0||!cCe(o)&&!i8t(o)?void 0:{step:n,json:t}}catch{return}}function WQm(e){let t=new WeakSet;try{return JSON.stringify(e,(r,n)=>{if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Date)return n.toISOString();if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){if(t.has(n))return"[Circular]";t.add(n)}return n}})}catch{return}}function fUu(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e).length;let t=encodeURIComponent(e),r=0;for(let n=0;n<t.length;n++)t[n]==="%"?(r+=1,n+=2):r+=1;return r}var hUu=require("fs"),gUu=require("readline"),UKr=new Tz.ReduceableCache(25),AUu=new Tz.ReduceableCache(20),SVo=7,HQm=1e3,KQm=1e4;async function yUu(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||ZQm(s)||$Qm(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(AUu.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=tzm(o);if(s.every(c=>ezm(i,c)))continue;let a=rzm(UKr,i,{});n.push(JQm(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&YQm(e,UKr),UKr.reduce(),e}function JQm(e,t,r){return new Promise(n=>{let i=(0,hUu.createReadStream)(e),o=(0,gUu.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){AUu.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=nzm(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function YQm(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;XQm(r.lineno,r,n)}}function XQm(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=bUu(e);i<e;i++){let o=r[i];if(o===void 0)return void dUu(t);t.pre_context.push(o)}if(r[e]===void 0)return void dUu(t);t.context_line=r[e];let n=EUu(e);t.post_context=[];for(let i=e+1;i<=n;i++){let o=r[i];if(o===void 0)break;t.post_context.push(o)}}function dUu(e){delete e.pre_context,delete e.context_line,delete e.post_context}function ZQm(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function $Qm(e){return e.lineno!==void 0&&e.lineno>KQm||e.colno!==void 0&&e.colno>HQm}function ezm(e,t){let r=UKr.get(e);if(r===void 0)return!1;for(let n=t[0];n<=t[1];n++)if(r[n]===void 0)return!1;return!0}function tzm(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=mUu(r),i=[];for(;;){if(t===e.length-1){i.push(n);break}let o=e[t+1];if(typeof o!="number")break;o<=n[1]?n[1]=o+SVo:(i.push(n),n=mUu(o)),t++}return i}function mUu(e){return[bUu(e),EUu(e)]}function bUu(e){return Math.max(1,e-SVo)}function EUu(e){return e+SVo}function rzm(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function nzm(e,t){let r=e,n=r.length;if(n<=150)return r;t>n&&(t=n);let i=Math.max(t-60,0);i<5&&(i=0);let o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r=`...${r}`),o<n&&(r+="..."),r}var Hst=require("path");function IUu(e=process.cwd()){let t=Hst.sep==="\\",r=i=>t?i.replace(/\\/g,"/"):i,n=r(e);return async i=>{for(let o of i)!o.filename||o.filename.startsWith("node:")||o.filename.startsWith("data:")||(0,Hst.isAbsolute)(o.filename)&&(o.filename=r((0,Hst.relative)(n,r(o.filename))));return i}}function izm(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function vUu(e,t){globalThis.process?.on("uncaughtException",izm(e,t))}function xUu(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var ozm=2e3,$H=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new wKr({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return n8t(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(vUu(this.onException.bind(this),this.onFatalError.bind(this)),xUu(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(ozm),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var CUu="5.35.1";var Rde={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var Kst=class e{constructor(t){this._host=t.host,this._distinctId=t.distinctId,this._groups=t.groups,this._disableGeoip=t.disableGeoip,this._flags=t.flags,this._requestId=t.requestId,this._evaluatedAt=t.evaluatedAt,this._flagDefinitionsLoadedAt=t.flagDefinitionsLoadedAt,this._errorsWhileComputing=t.errorsWhileComputing??!1,this._quotaLimited=t.quotaLimited??!1,this._accessed=t.accessed??new Set,this._isSlice=t.isSlice??!1}isEnabled(t){let r=this._flags[t];return this._recordAccess(t),r?.enabled??!1}getFlag(t){let r=this._flags[t];if(this._recordAccess(t),!!r)return r.enabled?r.variant??!0:!1}getFlagPayload(t){return this._flags[t]?.payload}onlyAccessed(){let t={};for(let r of this._accessed){let n=this._flags[r];n&&(t[r]=n)}return this._cloneWith(t)}only(t){let r={},n=[];for(let i of t){let o=this._flags[i];o?r[i]=o:n.push(i)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(r)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let t={},r=[];for(let[n,i]of Object.entries(this._flags)){let o=i.enabled===!1?!1:i.variant??!0;t[`$feature/${n}`]=o,i.enabled&&r.push(n)}return r.length>0&&(r.sort(),t.$active_feature_flags=r),t}_cloneWith(t){return new e({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:t,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(t){if(this._accessed.add(t),this._distinctId===""||this._isSlice&&!(t in this._flags))return;let r=this._flags[t],n=r===void 0?void 0:r.enabled===!1?!1:r.variant??!0,i={$feature_flag:t,$feature_flag_response:n,$feature_flag_id:r?.id,$feature_flag_version:r?.version,$feature_flag_reason:r?.reason,locally_evaluated:r?.locallyEvaluated??!1,[`$feature/${t}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:r?.locallyEvaluated?Date.now():this._evaluatedAt};r?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(i.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let o=[];this._errorsWhileComputing&&o.push(Rde.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(Rde.QUOTA_LIMITED),r===void 0&&o.push(Rde.FLAG_MISSING),o.length>0&&(i.$feature_flag_error=o.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:t,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:i})}};async function wUu(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var szm=6e4,azm=1152921504606847e3,czm=["is_not","is_set"],Jst=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Kd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},xte=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},_Kr=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof xte||u instanceof Kd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof xte||u instanceof Kd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(!t.active)return!1;if(t.ensure_experience_continuity)throw new Kd("Flag has experience continuity enabled");let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Kd("Flag has unknown group type index");if(!(u in i))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${t.key} without group names passed in`)),!1;t.bucketing_identifier==="device_id"&&(o?.$device_id===void 0||o?.$device_id===null||o?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${t.key}`));let l=s[u];return await this.matchFeatureFlagProperties(t,i[u],l,r)}{let u=this.getBucketingValueForFlag(t,n,o);if(u===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${t.key} without $device_id, falling back to server evaluation`)),new Kd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Kd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Kd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Kd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Kd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Kd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Kd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Kd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=o.aggregation_group_type_index,{groups:c,groupProperties:u}=i,l=!1,p;for(let d of s)try{let f=d.aggregation_group_type_index!==void 0?d.aggregation_group_type_index:a,m=n,g=r;if(f!==a&&f!=null){let A=this.groupTypeMapping[String(f)];if(!A||!(A in c)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${t.key}': group type index ${f} not available`));continue}if(!(A in u)){l=!0;continue}m=u[A],g=c[A]}if(await this.isConditionMatch(t,g,d,m,i)){let A=d.variant,y=o.multivariate?.variants||[];p=A&&y.some(E=>E.key===A)?A:await this.getMatchingVariant(t,g)||!0;break}}catch(f){if(f instanceof xte)throw f;if(f instanceof Kd)l=!0;else throw f}if(p!==void 0)return p;if(l)throw new Kd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?await BUu(c,i,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,i,o)):u==="flag"?await this.evaluateFlagDependency(c,i,o):PUu(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await SUu(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await SUu(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(szm,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Jst(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new Jst(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Jst(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof Jst&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=Ite(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function SUu(e,t,r=""){let n=await wUu(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/azm}function PUu(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")return!1}else{if(o==="is_not_set")return!0;throw new Kd(`Property ${n} not found in propertyValues`)}let s=t[n];if(s==null&&!czm.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return TUu(String(i))&&String(s).match(String(i))!==null;case"not_regex":return TUu(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:parseFloat(String(i)),l;return l=typeof s=="number"?s:s!=null?parseFloat(String(s)):NaN,Number.isFinite(u)&&Number.isFinite(l)?c(l,u,o):c(String(s),String(i),o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Kd("Date operations cannot be performed on boolean values");let u=dzm(String(i));if(u==null&&(u=OUu(i)),u==null)throw new Kd(`Invalid date: ${i}`);let l=OUu(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return E5(rB(String(s)),rB(String(i)))===0;case"semver_neq":return E5(rB(String(s)),rB(String(i)))!==0;case"semver_gt":return E5(rB(String(s)),rB(String(i)))>0;case"semver_gte":return E5(rB(String(s)),rB(String(i)))>=0;case"semver_lt":return E5(rB(String(s)),rB(String(i)))<0;case"semver_lte":return E5(rB(String(s)),rB(String(i)))<=0;case"semver_tilde":{let u=rB(String(s)),{lower:l,upper:p}=lzm(String(i));return E5(u,l)>=0&&E5(u,p)<0}case"semver_caret":{let u=rB(String(s)),{lower:l,upper:p}=pzm(String(i));return E5(u,l)>=0&&E5(u,p)<0}case"semver_wildcard":{let u=rB(String(s)),{lower:l,upper:p}=fzm(String(i));return E5(u,l)>=0&&E5(u,p)<0}default:throw new Kd(`Unknown operator: ${o}`)}}function uzm(e,t){if(!(e in t))throw new xte(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function BUu(e,t,r,n=!1,i){let o=String(e.value);uzm(o,r);let s=r[o];return DUu(s,t,r,n,i)}async function DUu(e,t,r,n=!1,i){if(!e)return!0;let o=e.type,s=e.values;if(!s||s.length===0)return!0;let a=!1;if("values"in s[0]){for(let c of s)try{let u=await DUu(c,t,r,n,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof xte)throw u;if(u instanceof Kd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Kd("Can't match cohort without a given cohort property value");return o==="AND"}for(let c of s)try{let u;if(c.type==="cohort")u=await BUu(c,t,r,n,i);else if(c.type==="flag"){if(!i)throw new Kd(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await i(c)}else u=PUu(c,t);let l=c.negation||!1;if(o==="AND"){if(!u&&!l||u&&l)return!1}else if(u&&!l||!u&&l)return!0}catch(u){if(u instanceof xte)throw u;if(u instanceof Kd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Kd("can't match cohort without a given cohort property value");return o==="AND"}function TUu(e){try{return new RegExp(e),!0}catch{return!1}}function RUu(e,t){if(!/^\d+$/.test(e))throw new Kd(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new Kd(`Invalid semver: ${t}`);return parseInt(e,10)}function rB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Kd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>c===void 0||c===""?0:RUu(c,e),o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function E5(e,t){for(let r=0;r<3;r++){if(e[r]<t[r])return-1;if(e[r]>t[r])return 1}return 0}function lzm(e){let t=rB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function pzm(e){let t=rB(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function fzm(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Kd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=c=>{try{return RUu(c,e)}catch{throw new Kd(`Invalid wildcard semver: ${e}`)}},o=i(n[0]),s,a;if(n.length===1)s=[o,0,0],a=[o+1,0,0];else{let c=i(n[1]);s=[o,c,0],a=[o,c+1,0]}return{lower:s,upper:a}}function OUu(e){if(e instanceof Date)return e;if(typeof e=="string"||typeof e=="number"){let t=new Date(e);if(!isNaN(t.valueOf()))return t;throw new Kd(`${e} is in an invalid date format`)}throw new Kd(`The date provided ${e} must be a string, number, or date object`)}function dzm(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var GKr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var mzm=100,kUu=3e4,hzm=5e4,gzm=50,Azm=500,yzm="https://us.i.posthog.com",FUu=new Set;function qKr(e,t){FUu.has(e)||(FUu.add(e),console.warn(`[PostHog] ${t}`))}function bzm(e){return typeof e=="string"?e.trim():""}function Ezm(e){return(typeof e=="string"?e.trim():"")||void 0}function Izm(e){return(typeof e=="string"?e.trim():"")||yzm}function vzm(e){if(!e)return{};let t={};for(let[n,i]of Object.entries(e))t[`$feature/${n}`]=i;let r=Object.keys(e).filter(n=>e[n]!==!1).sort();return r.length>0&&(t.$active_feature_flags=r),t}var WKr=class extends a8t{constructor(t,r={}){let n=bzm(t),i={...r,host:Izm(r.host),personalApiKey:Ezm(r.personalApiKey)};if(super(n,i),this._memoryStorage=new GKr,this.options=i,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,mzm):kUu,typeof i.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(i.waitUntilDebounceMs,0)),typeof i.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(i.waitUntilMaxWaitMs,0)),i.personalApiKey){if(i.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');i.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new _Kr({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:i.personalApiKey,projectApiKey:n,timeout:i.requestTimeout??1e4,host:this.host,fetch:i.fetch,onError:s=>{this._events.emit("error",s)},onLoad:s=>{this._events.emit("localEvaluationFlagsLoaded",s)},customHeaders:this.getCustomHeaders(),cacheProvider:i.flagDefinitionCacheProvider,strictLocalEvaluation:i.strictLocalEvaluation}))}this.errorTracking=new $H(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||hzm}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??Azm,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??gzm;this._waitUntilCycle.timer=Ite(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return CUu}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};await super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=kUu){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let O=this._flagOverrides[t];if(O===void 0)return;let D=this._payloadOverrides?.[t];return{key:t,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:D}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,g,A,y,E,x,v;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let O=this.featureFlagsPoller?.featureFlagsByKey[t];if(O)try{let D=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(O,d,{matchValue:i});if(D){m=!0;let R=D.value;E=O.id,v="Evaluated locally",f={key:t,enabled:R!==!1,variant:typeof R=="string"?R:void 0,payload:D.payload??void 0}}}catch(D){if(D instanceof xte||D instanceof Kd)this._logger?.info(`${D.name} when computing flag locally: ${t}: ${D.message}`);else throw D}}if(!m&&!c){let O=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(O===void 0)y=Rde.UNKNOWN_ERROR;else{g=O.requestId,A=O.evaluatedAt;let D=[];O.errorsWhileComputingFlags&&D.push(Rde.ERRORS_WHILE_COMPUTING),O.quotaLimited?.includes("feature_flags")&&D.push(Rde.QUOTA_LIMITED);let R=O.flags[t];if(R===void 0)D.push(Rde.FLAG_MISSING);else{E=R.metadata?.id,x=R.metadata?.version,v=R.reason?.description??R.reason?.code;let P;if(R.metadata?.payload!==void 0)try{P=JSON.parse(R.metadata.payload)}catch{P=R.metadata.payload}f={key:t,enabled:R.enabled,variant:R.variant,payload:P}}D.length>0&&(y=D.join(","))}}if(o){let O=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,D={$feature_flag:t,$feature_flag_response:O,$feature_flag_id:E,$feature_flag_version:x,$feature_flag_reason:v,locally_evaluated:m,[`$feature/${t}`]:O,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let R=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();R!==void 0&&(D.$feature_flag_definitions_loaded_at=R)}y&&(D.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:O,groups:s,disableGeoip:a,properties:D})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){qKr("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(i!==void 0)return i.enabled===!1?!1:i.variant??!0}async getFeatureFlagPayload(t,r,n,i){if(qKr("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){qKr("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return i===void 0?void 0:i.enabled===!1?!1:!!(i.variant??!0)||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},g={},A=!0;if(f&&(m=f.response,g=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},g={...g,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(g={...g,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:g}}async evaluateFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new Kst({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f={},m,g,A=!1,y=!1,E=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),x=new Set;if(E)for(let[C,O]of Object.entries(E.response)){let D=this.featureFlagsPoller?.featureFlagsByKey[C];f[C]={key:C,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:E.payloads[C],id:D?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0},x.add(C)}if((E?E.fallbackToFlags:!0)&&!c){let C=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);if(C){m=C.requestId,g=C.evaluatedAt,A=!!C.errorsWhileComputingFlags,y=Array.isArray(C.quotaLimited)&&C.quotaLimited.includes("feature_flags");for(let[O,D]of Object.entries(C.flags)){if(x.has(O))continue;let R;if(D.metadata?.payload!==void 0)try{R=JSON.parse(D.metadata.payload)}catch{R=D.metadata.payload}f[O]={key:O,enabled:D.enabled,variant:D.variant,payload:R,id:D.metadata?.id,version:D.metadata?.version,reason:D.reason?.description??D.reason?.code,locallyEvaluated:!1}}}}if(this._flagOverrides!==void 0)for(let[C,O]of Object.entries(this._flagOverrides)){if(O===void 0){delete f[C];continue}let D=f[C];f[C]={key:C,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:D?.payload,id:D?.id,version:D?.version,reason:D?.reason,locallyEvaluated:D?.locallyEvaluated??!1}}if(this._payloadOverrides!==void 0)for(let[C,O]of Object.entries(this._payloadOverrides)){let D=f[C];D&&(f[C]={...D,payload:O})}return new Kst({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:f,requestId:m,evaluatedAt:g,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:A,quotaLimited:y})}_captureFlagCalledEventIfNeeded(t){let{distinctId:r,key:n,response:i,groups:o,disableGeoip:s,properties:a}=t,c=`${n}_${i}`;r in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[r].includes(c)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(c):this.distinctIdHasSentFlagCalls[r]=[c],this.capture({distinctId:r,event:"$feature_flag_called",properties:a,groups:o,disableGeoip:s}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:t=>this._captureFlagCalledEventIfNeeded(t),logWarning:t=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${t}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=Ite(()=>{o.abort()},this.options.requestTimeout),n.signal=o.signal}try{return await this.fetch(r,n)}catch(o){this._events.emit("error",o);return}finally{i&&clearTimeout(i)}}extractPropertiesFromEvent(t,r){if(!t)return{personProperties:{},groupProperties:{}};let n={},i={};for(let[o,s]of Object.entries(t))if(MVu(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i,o){if(!$H.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise($H.buildEventMessage(t,{syntheticException:s},r,n).then(a=>this.capture({...a,uuid:i,flags:o})))}}async captureExceptionImmediate(t,r,n,i){if(!$H.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise($H.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.captureImmediate({...s,flags:i})))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l}=t,p=this.context?.get(),d=r||p?.distinctId,f={...this.props,...p?.properties||{},...i||{}};d||(d=Ete(),f.$process_person_profile=!1),p?.sessionId&&!f.$session_id&&(f.$session_id=p.sessionId);let m=this._runBeforeSend({distinctId:d,event:n,properties:f,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l});if(!m)return Promise.reject(null);let g=await Promise.resolve().then(async()=>{if(s)return a&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),s._getEventProperties();if(a){qKr("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let A=typeof a=="object"?a:void 0,y=await this.getFeatureFlagsForEvent(m.distinctId,o,u,A);return vzm(y)}return{}}).catch(()=>({})).then(A=>({...A,...m.properties||{},$groups:m.groups||o}));return m.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof g.$raw_user_agent=="string"&&NVu(g.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(m.event="$bot_pageview",g.$browser_type="bot"),{distinctId:m.distinctId,event:m.event,properties:g,options:{timestamp:m.timestamp,disableGeoip:m.disableGeoip,uuid:m.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var NUu=require("async_hooks"),HKr=class{constructor(){this.storage=new NUu.AsyncLocalStorage}get(){return this.storage.getStore()}run(t,r,n){return this.storage.run(this.resolve(t,n),r)}enter(t,r){this.storage.enterWith(this.resolve(t,r))}resolve(t,r){if(r?.fresh===!0)return t;let n=this.get()||{};return{distinctId:t.distinctId??n.distinctId,sessionId:t.sessionId??n.sessionId,properties:{...n.properties||{},...t.properties||{}}}}};var jUu="posthog-node";function xzm(e,{organization:t,projectId:r,prefix:n,severityAllowList:i=["error"],sendExceptionsToPostHog:o=!0}={}){return s=>{if(!(i==="*"||i.includes(s.level)))return s;s.tags||(s.tags={});let c=s.tags[TVo.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(g=>({...g,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var TVo=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=jUu,this.name=jUu,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(xzm(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};$H.errorPropertiesBuilder=new Tz.ErrorPropertiesBuilder([new Tz.EventCoercer,new Tz.ErrorCoercer,new Tz.ObjectCoercer,new Tz.StringCoercer,new Tz.PrimitiveCoercer],Tz.createStackParser("node:javascript",Tz.nodeStackLineParser),[RVu(),yUu,IUu()]);var uCe=class extends WKr{getLibraryId(){return"posthog-node"}initializeContext(){return new HKr}};var KKr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new uCe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.139.3",usingAccessToken:!0,...fue()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var u8t=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};bd();Yt();var Yst=require("fs/promises"),QUu=require("os"),zUu=require("path");kit();var Czm="id",wzm=".fern",l8t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new uCe(r),this.userId=t==null?void 0:YQo(t),this.token=t}async identify(){this.userId!=null&&this.posthog.alias({distinctId:this.userId,alias:await this.getPersistedDistinctId()})}async sendEvent(t){let r=await this.getUserEmail();this.posthog.capture({distinctId:this.userId??await this.getPersistedDistinctId(),event:"CLI",properties:{version:"5.139.3",...t,...t.properties,usingAccessToken:!1,agent:IVr(),...r!=null?{userEmail:r}:{},...fue()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await jf({token:this.token.value}).user.getMyself();if(t.ok&&t.body.email!=null)return this.userEmail=t.body.email,this.userEmail}catch{}this.userEmail=null}}persistedDistinctId;async getPersistedDistinctId(){if(this.persistedDistinctId==null){let t=YD(),r=ze(Mt.of((0,QUu.homedir)()),ve.of(wzm),ve.of(Czm));try{await Jt(r)?this.persistedDistinctId=(await(0,Yst.readFile)(r)).toString():(await(0,Yst.mkdir)((0,zUu.dirname)(r),{recursive:!0}),await(0,Yst.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var OVo;async function p8t(){return OVo==null&&(OVo=await Szm()),OVo}async function Szm(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new u8t;let r=await pot();return r!=null?new l8t({token:r,posthogApiKey:e}):await bz()!=null?new KKr({posthogApiKey:e}):new l8t({token:void 0,posthogApiKey:e})}catch{return new u8t}}In();wt();Ft();J_();var f8t=be(require("process"),1);kWe();var VUu=be(BPo(),1),UUu=be(LUu(),1);function fT(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=F7(e),e.length===0))return 0;e=e.replace((0,UUu.default)()," ");let r=t.ambiguousIsNarrow?1:2,n=0;for(let i of e){let o=i.codePointAt(0);if(o<=31||o>=127&&o<=159||o>=768&&o<=879)continue;switch(VUu.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}In();function JKr(e){let t=0;for(let r of e.split(`
3392
3392
  `))t=Math.max(t,fT(r));return t}var c_u=be(BVo(),1);var Ozm=/[\p{Lu}]/u,Pzm=/[\p{Ll}]/u,qUu=/^[\p{Lu}](?![\p{Lu}])/gu,KUu=/([\p{Alpha}\p{N}_]|$)/u,DVo=/[_.\- ]+/,Bzm=new RegExp("^"+DVo.source),WUu=new RegExp(DVo.source+KUu.source,"gu"),HUu=new RegExp("\\d+"+KUu.source,"gu"),Dzm=(e,t,r,n)=>{let i=!1,o=!1,s=!1,a=!1;for(let c=0;c<e.length;c++){let u=e[c];a=c>2?e[c-3]==="-":!0,i&&Ozm.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&Pzm.test(u)&&(!a||n)?(e=e.slice(0,c-1)+"-"+e.slice(c-1),s=o,o=!1,i=!0):(i=t(u)===u&&r(u)!==u,s=o,o=r(u)===u&&t(u)!==u)}return e},Rzm=(e,t)=>(qUu.lastIndex=0,e.replace(qUu,r=>t(r))),kzm=(e,t)=>(WUu.lastIndex=0,HUu.lastIndex=0,e.replace(WUu,(r,n)=>t(n)).replace(HUu,r=>t(r)));function RVo(e,t){if(!(typeof e=="string"||Array.isArray(e)))throw new TypeError("Expected the input to be `string | string[]`");if(t={pascalCase:!1,preserveConsecutiveUppercase:!1,...t},Array.isArray(e)?e=e.map(o=>o.trim()).filter(o=>o.length).join("-"):e=e.trim(),e.length===0)return"";let r=t.locale===!1?o=>o.toLowerCase():o=>o.toLocaleLowerCase(t.locale),n=t.locale===!1?o=>o.toUpperCase():o=>o.toLocaleUpperCase(t.locale);return e.length===1?DVo.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=Dzm(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(Bzm,""),e=t.preserveConsecutiveUppercase?Rzm(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),kzm(e,n))}var jVo=be(YUu(),1);kWe();var XUu=(e=0)=>t=>`\x1B[${t+e}m`,ZUu=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,$Uu=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,Y0={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]}},Hiv=Object.keys(Y0.modifier),Qzm=Object.keys(Y0.color),zzm=Object.keys(Y0.bgColor),Kiv=[...Qzm,...zzm];function Mzm(){let e=new Map;for(let[t,r]of Object.entries(Y0)){for(let[n,i]of Object.entries(r))Y0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=Y0[n],e.set(i[0],i[1]);Object.defineProperty(Y0,t,{value:r,enumerable:!1})}return Object.defineProperty(Y0,"codes",{value:e,enumerable:!1}),Y0.color.close="\x1B[39m",Y0.bgColor.close="\x1B[49m",Y0.color.ansi=XUu(),Y0.color.ansi256=ZUu(),Y0.color.ansi16m=$Uu(),Y0.bgColor.ansi=XUu(10),Y0.bgColor.ansi256=ZUu(10),Y0.bgColor.ansi16m=$Uu(10),Object.defineProperties(Y0,{rgbToAnsi256:{value(t,r,n){return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(t){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!r)return[0,0,0];let[n]=r;n.length===3&&(n=[...n].map(o=>o+o).join(""));let i=Number.parseInt(n,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:t=>Y0.rgbToAnsi256(...Y0.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return 90+(t-8);let r,n,i;if(t>=232)r=((t-232)*10+8)/255,n=r,i=r;else{t-=16;let a=t%36;r=Math.floor(t/36)/5,n=Math.floor(a/6)/5,i=a%6/5}let o=Math.max(r,n,i)*2;if(o===0)return 30;let s=30+(Math.round(i)<<2|Math.round(n)<<1|Math.round(r));return o===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(t,r,n)=>Y0.ansi256ToAnsi(Y0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>Y0.ansi256ToAnsi(Y0.hexToAnsi256(t)),enumerable:!1}}),Y0}var Lzm=Mzm(),e_u=Lzm;var YKr=new Set(["\x1B","\x9B"]),Vzm=39,FVo="\x07",n_u="[",Uzm="]",i_u="m",NVo=`${Uzm}8;;`,t_u=e=>`${YKr.values().next().value}${n_u}${e}${i_u}`,r_u=e=>`${YKr.values().next().value}${NVo}${e}${FVo}`,_zm=e=>e.split(" ").map(t=>fT(t)),kVo=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=fT(F7(e[e.length-1]));for(let[a,c]of n.entries()){let u=fT(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),YKr.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(NVo)),i){o?c===FVo&&(i=!1,o=!1):c===i_u&&(i=!1);continue}s+=u,s===r&&a<n.length-1&&(e.push(""),s=0)}!s&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},Gzm=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(fT(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},qzm=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=_zm(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=fT(a[a.length-1]);if(u!==0&&(p>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),p=0),(p>0||r.trim===!1)&&(a[a.length-1]+=" ",p++)),r.hard&&s[u]>t){let d=t-p,f=1+Math.floor((s[u]-d-1)/t);Math.floor((s[u]-1)/t)<f&&a.push(""),kVo(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){kVo(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){kVo(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>Gzm(u)));let c=[...a.join(`
3393
3393
  `)];for(let[u,l]of c.entries()){if(n+=l,YKr.has(l)){let{groups:d}=new RegExp(`(?:\\${n_u}(?<code>\\d+)m|\\${NVo}(?<uri>.*)${FVo})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===Vzm?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=e_u.codes.get(Number(i));c[u+1]===`
3394
3394
  `?(o&&(n+=r_u("")),i&&p&&(n+=t_u(p))):l===`
@@ -3963,7 +3963,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
3963
3963
  Add a 'docs:' section to your fern.yml to get started.`,code:S.Code.ConfigError});let o=await new NDe({context:t}).check({workspace:n,strict:r.strict}),s=new Set(o.mdxParseErrors.map(p=>p.displayRelativeFilepath)),a=new Set(o.mdxParseErrors.map(p=>p.rawMessage)),c=o.violations.filter(p=>!(s.size>0&&hSh(p,s,a))),u=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let p=this.buildJsonResponse({result:o,filteredViolations:c,hasErrors:u});if(t.stdout.info(JSON.stringify(p,null,2)),u)throw new S({code:S.Code.ValidationError});return}if(c.length>0)for(let p of c){let d=p.severity==="warning"?fe.yellow:fe.red;process.stderr.write(`${d(`${p.displayRelativeFilepath}:${p.line}:${p.column}: ${p.message}`)}
3964
3964
  `)}let l=0;if(o.mdxParseErrors.length>0){for(let p of o.mdxParseErrors)t.stderr.info(`
3965
3965
  ${p.toString()}
3966
- `);r.fix?l+=await xsi(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!Lri()&&await Csi(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new sIt({context:t}).fix({workspace:n,violations:c});l+=d.fixedCount}if(u&&(!r.fix||l===0))throw new S({code:S.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Mr.warning} ${fe.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(fe.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Mr.success} ${fe.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>Pte(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function hSh(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function sos(e){let t=new oos;si(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}).option("fix",{type:"boolean",description:"Automatically fix issues that have a known resolution",default:!1}))}jb();Ft();var Fbl=be(require("net"),1),Nbl=be(require("os"),1),Tsi=class extends Error{constructor(t){super(`${t} is locked`)}},lIt={old:new Set,young:new Set},gSh=1e3*15,jbl=new Set;var nWt,ASh=()=>{let e=Nbl.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},Rbl=e=>new Promise((t,r)=>{let n=Fbl.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),kbl=async(e,t)=>{if(e.host||e.port===0)return Rbl(e);for(let r of t)try{await Rbl({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},ySh=e=>lIt.old.has(e)||lIt.young.has(e)||jbl.has(e),bSh=function*(e){e&&(yield*e),yield 0};async function QDe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};nWt===void 0&&(nWt=setTimeout(()=>{nWt=void 0,lIt.old=lIt.young,lIt.young=new Set},gSh),nWt.unref&&nWt.unref());let o=ASh();for(let s of bSh(t))try{if(r.has(s))continue;let a=await kbl({...i,port:s},o);for(;ySh(a);){if(s!==0)throw new Tsi(s);a=await kbl({...i,port:s},o)}return n?jbl.add(a):lIt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof Tsi))throw a}throw new Error("No available ports found")}Ft();var Mbl=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Qbl="docs.buildwithfern.com",zbl=62;function OUe(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Mbl.test(t)}function Lbl(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function iWt({orgId:e,previewId:t}){let r=Lbl(t),n=`${e}-preview-${r}.${Qbl}`;if(n.length<=zbl)return n;let i=`${e}-preview-`,o=zbl-i.length;if(o<8)throw new S({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:S.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Qbl}`}wt();lv();nh();Yt();Q0();Ft();In();var Wcs=require("child_process"),lBl=be(uos(),1),Hcs=be(dai(),1),Kcs=be(require("fs"),1),nRe=require("fs/promises"),pBl=be(require("http"),1),fBl=be(require("os"),1),rui=be(require("path"),1);Oai();Yt();var CG=require("fs/promises"),CCl=require("os"),Yss=be(require("path"),1),sFh=".fern",aFh="logs",Jss=100*1024*1024;function cFh(){return"cli@5.139.2"}var UUe=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t,r){if(this.initialized)return;this.consoleLogger=t;let n=r??ze(ze(Mt.of((0,CCl.homedir)()),ve.of(sFh)),ve.of(aFh));await Jt(n)||await(0,CG.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=ze(n,ve.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Yss.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
3966
+ `);r.fix?l+=await xsi(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!Lri()&&await Csi(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new sIt({context:t}).fix({workspace:n,violations:c});l+=d.fixedCount}if(u&&(!r.fix||l===0))throw new S({code:S.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Mr.warning} ${fe.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(fe.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Mr.success} ${fe.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>Pte(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function hSh(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function sos(e){let t=new oos;si(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}).option("fix",{type:"boolean",description:"Automatically fix issues that have a known resolution",default:!1}))}jb();Ft();var Fbl=be(require("net"),1),Nbl=be(require("os"),1),Tsi=class extends Error{constructor(t){super(`${t} is locked`)}},lIt={old:new Set,young:new Set},gSh=1e3*15,jbl=new Set;var nWt,ASh=()=>{let e=Nbl.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},Rbl=e=>new Promise((t,r)=>{let n=Fbl.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),kbl=async(e,t)=>{if(e.host||e.port===0)return Rbl(e);for(let r of t)try{await Rbl({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},ySh=e=>lIt.old.has(e)||lIt.young.has(e)||jbl.has(e),bSh=function*(e){e&&(yield*e),yield 0};async function QDe(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};nWt===void 0&&(nWt=setTimeout(()=>{nWt=void 0,lIt.old=lIt.young,lIt.young=new Set},gSh),nWt.unref&&nWt.unref());let o=ASh();for(let s of bSh(t))try{if(r.has(s))continue;let a=await kbl({...i,port:s},o);for(;ySh(a);){if(s!==0)throw new Tsi(s);a=await kbl({...i,port:s},o)}return n?jbl.add(a):lIt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof Tsi))throw a}throw new Error("No available ports found")}Ft();var Mbl=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Qbl="docs.buildwithfern.com",zbl=62;function OUe(e){let t=e.toLowerCase().trim();t.startsWith("https://")?t=t.slice(8):t.startsWith("http://")&&(t=t.slice(7));let r=t.indexOf("/");return r!==-1&&(t=t.slice(0,r)),Mbl.test(t)}function Lbl(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function iWt({orgId:e,previewId:t}){let r=Lbl(t),n=`${e}-preview-${r}.${Qbl}`;if(n.length<=zbl)return n;let i=`${e}-preview-`,o=zbl-i.length;if(o<8)throw new S({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:S.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Qbl}`}wt();lv();nh();Yt();Q0();Ft();In();var Wcs=require("child_process"),lBl=be(uos(),1),Hcs=be(dai(),1),Kcs=be(require("fs"),1),nRe=require("fs/promises"),pBl=be(require("http"),1),fBl=be(require("os"),1),rui=be(require("path"),1);Oai();Yt();var CG=require("fs/promises"),CCl=require("os"),Yss=be(require("path"),1),sFh=".fern",aFh="logs",Jss=100*1024*1024;function cFh(){return"cli@5.139.3"}var UUe=class{logFilePath=null;initialized=!1;sessionStartTime;consoleLogger;constructor(){this.sessionStartTime=Date.now()}async initialize(t,r){if(this.initialized)return;this.consoleLogger=t;let n=r??ze(ze(Mt.of((0,CCl.homedir)()),ve.of(sFh)),ve.of(aFh));await Jt(n)||await(0,CG.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=ze(n,ve.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Yss.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
3967
3967
  `);await(0,CG.writeFile)(this.logFilePath,s,"utf-8"),this.initialized=!0,this.enforceLogSizeLimit(n)}getLogFilePath(){return this.logFilePath}async writeEntry(t){if(!this.initialized||!this.logFilePath)return;let r=JSON.stringify(t)+`
3968
3968
  `;try{await(0,CG.appendFile)(this.logFilePath,r,"utf-8")}catch{}}async logFrontendMetrics(t){let r={timestamp:t.timestamp,source:t.source,level:t.level,eventType:this.getEventType(t.payload,t.isAggregate),isAggregate:t.isAggregate,data:t.payload};await this.writeEntry(r)}async logCliMetric(t,r="info"){let n={timestamp:t.timestamp,source:cFh(),level:r,eventType:t.type,data:{durationMs:t.durationMs,metadata:t.metadata}};await this.writeEntry(n)}async logCliMemory(){let t=process.memoryUsage(),r={type:"cli_memory",timestamp:new Date().toISOString(),metadata:{heapUsed:t.heapUsed,heapTotal:t.heapTotal,external:t.external,rss:t.rss,heapUsedMB:Math.round(t.heapUsed/1024/1024*100)/100,heapTotalMB:Math.round(t.heapTotal/1024/1024*100)/100,rssMB:Math.round(t.rss/1024/1024*100)/100}};await this.logCliMetric(r)}async logCliReloadStart(){let t={type:"cli_reload_start",timestamp:new Date().toISOString()};await this.logCliMetric(t)}async logCliReloadFinish(t,r){let n={type:"cli_reload_finish",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliDocsGeneration(t,r){let n={type:"cli_docs_generation",timestamp:new Date().toISOString(),durationMs:t,metadata:r};await this.logCliMetric(n)}async logCliValidation(t,r){let n={type:"cli_validation",timestamp:new Date().toISOString(),durationMs:t,metadata:{success:r}};await this.logCliMetric(n)}async enforceLogSizeLimit(t){try{let n=(await(0,CG.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=Yss.default.join(t,c);try{let l=await(0,CG.stat)(u);i.push({name:c,fullPath:u,size:l.size,mtimeMs:l.mtimeMs})}catch{}}let o=i.reduce((c,u)=>c+u.size,0),s=Math.round(o/1024/1024*100)/100,a=Jss/1024/1024;if(o<=Jss){this.consoleLogger?.debug(`Log directory size ${s} MB does not exceed ${a} MB cap`);return}this.consoleLogger?.info(`Rotating logs: total size ${s} MB exceeds ${a} MB cap`),i.sort((c,u)=>c.mtimeMs-u.mtimeMs);for(let c of i){if(o<=Jss)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,CG.unlink)(c.fullPath),o-=c.size}catch{}}}catch{}}getEventType(t,r){return r?"aggregate_summary":"type"in t&&typeof t.type=="string"?t.type:"unknown"}static isMetricsMessage(t){if(typeof t!="object"||t===null)return!1;let r=t;return r.type==="metrics"&&typeof r.timestamp=="string"&&typeof r.source=="string"}};var Pai={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function wCl(e){let t=uFh();if(t==null)return;let{port:r,debugLogger:n,getDocsLoadResponse:i,extractLocaleFromPath:o}=e,s=new Map;function a(u){let l=JSON.stringify(u),p=[];for(let[d]of s)try{d.send(l)}catch{p.push(d)}for(let d of p){let f=s.get(d);f&&(clearInterval(f.pingInterval),s.delete(d))}}let c=t.serve({port:r,async fetch(u,l){if(u.method==="OPTIONS")return new Response(null,{status:204,headers:Pai});let p=new URL(u.url);if(u.headers.get("upgrade")?.toLowerCase()==="websocket"){l.upgrade(u,{data:{connectionId:`${Date.now()}`}});return}if(u.method==="POST"&&p.pathname==="/v2/registry/docs/load-with-url")try{let f=await u.json(),m=o?.(f?.url);return new Response(JSON.stringify(i(m)),{headers:{"Content-Type":"application/json",...Pai}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...Pai}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:Pai}):new Response("Not Found",{status:404})},websocket:{open(u){let{connectionId:l}=u.data,p=setInterval(()=>{let d=s.get(u);if(!d)return;let f=Date.now();if(f-d.lastPong>9e4){u.close();return}try{u.send(JSON.stringify({type:"ping",timestamp:f}))}catch{u.close()}},3e4);s.set(u,{pingInterval:p,lastPong:Date.now()});try{u.send(JSON.stringify({type:"connected",connectionId:l}))}catch{}},message(u,l){try{let p=JSON.parse(l.toString());if(p.type==="pong"){let d=s.get(u);d&&(d.lastPong=Date.now())}else UUe.isMetricsMessage(p)&&n.logFrontendMetrics(p)}catch{}},close(u){let l=s.get(u);l&&(clearInterval(l.pingInterval),s.delete(u))}}});return{sendData:a,stop:u=>c.stop(u)}}function uFh(){return globalThis.Bun}Ft();var GCl=require("events"),Fai=be(require("fs"),1),GUe=be(require("path"),1);var SCl=be(require("os"),1),TCl=300,WDe=20,QWt=1e7,OCl=SCl.default.platform();var lFh=OCl==="darwin",Xss=OCl==="win32",HDe=lFh||Xss,PCl=3e3,BCl=2e4,Zss=1250;var koe;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(koe||(koe={}));var _Ue;(function(e){e.CHANGE="change",e.RENAME="rename"})(_Ue||(_Ue={}));var zWt;(function(e){e.CHANGE="change",e.ERROR="error"})(zWt||(zWt={}));var kc;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(kc||(kc={}));var zN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(zN||(zN={}));var pFh=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let v=Date.now(),C=v-c,O=v-u,D=C>=t||O>=o;return[v,D]},p=v=>{if(u=v,!s)return;let C=s;s=void 0,e.apply(void 0,C)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=v=>{if(u=v,n)return p(v)},g=v=>{if(i&&s)return p(v);s=void 0},A=()=>{a=void 0;let[v,C]=l();return C?g(v):y(v)},y=v=>{let C=v-c,O=v-u,D=t-C,R=o-O,P=Math.min(D,R);return E(P)},E=v=>{a&&clearTimeout(a),!(v<=0)&&(a=setTimeout(A,v))},x=(...v)=>{let[C,O]=l(),D=!!a;if(s=v,c=C,(O||!a)&&E(t),O)return D?p(C):m(C)};return x.cancel=d,x.flush=f,x},Bai=pFh;var ras=be(require("fs"),1),Rai=be(require("path"),1);var Xd=be(require("fs"),1),yB=require("util");var lhe=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Foe=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var $ss=be(require("process"),1),DCl=$ss.default.getuid?!$ss.default.getuid():!1,RCl=1e4,WM=()=>{};var MWt={isChangeErrorOk:e=>{if(!MWt.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!DCl&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!MWt.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!MWt.isNodeError(e))throw e;if(!MWt.isChangeErrorOk(e))throw e}},Sx=MWt;var eas=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=RCl,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(n),n=()=>t(r);this.add(n)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},kCl=new eas;var phe=(e,t)=>function(n){return function i(...o){return kCl.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},fhe=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var fFh={attempt:{chmod:lhe((0,yB.promisify)(Xd.default.chmod),Sx.onChangeError),chown:lhe((0,yB.promisify)(Xd.default.chown),Sx.onChangeError),close:lhe((0,yB.promisify)(Xd.default.close),WM),fsync:lhe((0,yB.promisify)(Xd.default.fsync),WM),mkdir:lhe((0,yB.promisify)(Xd.default.mkdir),WM),realpath:lhe((0,yB.promisify)(Xd.default.realpath),WM),stat:lhe((0,yB.promisify)(Xd.default.stat),WM),unlink:lhe((0,yB.promisify)(Xd.default.unlink),WM),chmodSync:Foe(Xd.default.chmodSync,Sx.onChangeError),chownSync:Foe(Xd.default.chownSync,Sx.onChangeError),closeSync:Foe(Xd.default.closeSync,WM),existsSync:Foe(Xd.default.existsSync,WM),fsyncSync:Foe(Xd.default.fsync,WM),mkdirSync:Foe(Xd.default.mkdirSync,WM),realpathSync:Foe(Xd.default.realpathSync,WM),statSync:Foe(Xd.default.statSync,WM),unlinkSync:Foe(Xd.default.unlinkSync,WM)},retry:{close:phe((0,yB.promisify)(Xd.default.close),Sx.isRetriableError),fsync:phe((0,yB.promisify)(Xd.default.fsync),Sx.isRetriableError),open:phe((0,yB.promisify)(Xd.default.open),Sx.isRetriableError),readFile:phe((0,yB.promisify)(Xd.default.readFile),Sx.isRetriableError),rename:phe((0,yB.promisify)(Xd.default.rename),Sx.isRetriableError),stat:phe((0,yB.promisify)(Xd.default.stat),Sx.isRetriableError),write:phe((0,yB.promisify)(Xd.default.write),Sx.isRetriableError),writeFile:phe((0,yB.promisify)(Xd.default.writeFile),Sx.isRetriableError),closeSync:fhe(Xd.default.closeSync,Sx.isRetriableError),fsyncSync:fhe(Xd.default.fsyncSync,Sx.isRetriableError),openSync:fhe(Xd.default.openSync,Sx.isRetriableError),readFileSync:fhe(Xd.default.readFileSync,Sx.isRetriableError),renameSync:fhe(Xd.default.renameSync,Sx.isRetriableError),statSync:fhe(Xd.default.statSync,Sx.isRetriableError),writeSync:fhe(Xd.default.writeSync,Sx.isRetriableError),writeFileSync:fhe(Xd.default.writeFileSync,Sx.isRetriableError)}},FCl=fFh;var Dai=be(require("fs"),1),LWt=be(require("path"),1);var tas=()=>{};var dFh=()=>{let e=tas,t=tas,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},NCl=dFh;var mFh=()=>{let{promise:e,resolve:t,isPending:r}=NCl(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},jCl=mFh;var QCl={then:e=>{e()}};var zCl=e=>Array.isArray(e)?e:[e],MCl=e=>typeof e=="function";var hFh=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=zCl(o).map(se=>MCl(se)?se:ae=>se.test(ae)),a=se=>s.some(ae=>ae(se)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,g={},A=[],y=new Set,E={},x={},v=new Set,C={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},O={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:g,symlinks:A,symlinksNames:y,symlinksNamesToPaths:E,map:x},{promise:D,increment:R,decrement:P}=jCl(),M=0,J=(se,ae,Oe,Ie)=>{v.has(ae)||M>=i||(M+=1,se.directories.push(ae),se.directoriesNames.add(Oe),l.push(ae),p.add(Oe),d.propertyIsEnumerable(Oe)||(d[Oe]=[]),d[Oe].push(ae),v.add(ae),!(Ie>=n)&&(M>=i||de(ae,Ie+1)))},X=(se,ae,Oe)=>{v.has(ae)||M>=i||(M+=1,se.files.push(ae),se.filesNames.add(Oe),f.push(ae),m.add(Oe),g.propertyIsEnumerable(Oe)||(g[Oe]=[]),g[Oe].push(ae),v.add(ae))},$=(se,ae,Oe,Ie)=>{v.has(ae)||M>=i||(M+=1,se.symlinks.push(ae),se.symlinksNames.add(Oe),A.push(ae),y.add(Oe),E.propertyIsEnumerable(Oe)||(E[Oe]=[]),E[Oe].push(ae),v.add(ae),r&&(Ie>=n||M>=i||we(ae,Ie+1)))},ie=(se,ae,Oe,Ie,Fe)=>{c.aborted||a(ae)||(Ie.isDirectory()?J(se,ae,Oe,Fe):Ie.isFile()?X(se,ae,Oe):Ie.isSymbolicLink()&&$(se,ae,Oe,Fe))},ue=(se,ae,Oe,Ie)=>{if(c.aborted)return;let Fe=ae===LWt.default.sep?"":LWt.default.sep,Ke=Oe.name,ot=`${ae}${Fe}${Ke}`;a(ot)||(Oe.isDirectory()?J(se,ot,Ke,Ie):Oe.isFile()?X(se,ot,Ke):Oe.isSymbolicLink()&&$(se,ot,Ke,Ie))},oe=(se,ae,Oe,Ie)=>{for(let Fe=0,Ke=Oe.length;Fe<Ke;Fe++)ue(se,ae,Oe[Fe],Ie)},de=(se,ae)=>{c.aborted||ae>n||M>=i||(R(),Dai.default.readdir(se,{withFileTypes:!0},(Oe,Ie)=>{if(Oe||c.aborted||!Ie.length)return P();(u(Ie)||QCl).then(()=>{let Ke=x[se]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};oe(Ke,se,Ie,ae),P()})}))},we=(se,ae)=>{R(),Dai.default.realpath(se,(Oe,Ie)=>{if(Oe||c.aborted)return P();Dai.default.stat(Ie,(Fe,Ke)=>{if(Fe||c.aborted)return P();let ot=LWt.default.basename(Ie),bt=x[se]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ie(bt,Ie,ot,Ke,ae),P()})})};return(async(se,ae=1)=>(se=LWt.default.normalize(se),v.add(se),de(se,ae),await D,c.aborted?C:O))(e)},LCl=hFh;var Noe={lang:{debounce:Bai,attempt:e=>{try{return e()}catch(t){return Noe.lang.castError(t)}},castArray:e=>Noe.lang.isArray(e)?e:[e],castError:e=>Noe.lang.isError(e)?e:Noe.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(Noe.lang.isNaN(e))return Noe.lang.isNaN(t);if(Noe.lang.isPrimitive(e)||Noe.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(Rai.default.sep).length-1),getRealPath:(e,t)=>{try{return t?ras.default.realpathSync.native(e):ras.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===Rai.default.sep&&t.length-e.length>Rai.default.sep.length,poll:(e,t=BCl)=>FCl.retry.stat(t)(e,{bigint:!0}).catch(Noe.lang.noop),readdir:async(e,t,r=1/0,n=1/0,i,o)=>{if(o&&r===1&&e in o){let s=o[e];return[s.directories,s.files]}else{let s=await LCl(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},sp=Noe;var kai=be(require("path"),1);var nas=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||sp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=TCl){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=sp.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===kc.CHANGE&&a===kc.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===kc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===kc.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??WDe:Math.min(1,this.options.depth??WDe),s=this.options.limit??QWt,[a,c]=await sp.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())sp.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(kc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!HDe&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(kc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(kc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(kai.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(kc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(kai.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(kc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===kc.ADD?this.onTargetAdd(n):r===kc.ADD_DIR?this.onTargetAddDir(n):r===kc.CHANGE?this.onTargetChange(n):r===kc.UNLINK?this.onTargetUnlink(n):r===kc.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=_Ue.CHANGE,r){if(this.watcher.isClosed())return;let n=kai.default.resolve(this.folderPath,r||"");this.filePath&&n!==this.folderPath&&n!==this.filePath||this.watcher.isIgnored(n,this.options.ignore)||this.onWatcherEvent(t,n)}onWatcherError(t){Xss&&t.code==="EPERM"?this.onWatcherChange(_Ue.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(zWt.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(zWt.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(_Ue.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&HDe&&this.options.native!==!1?this.options.depth??WDe:Math.min(1,this.options.depth??WDe),n=this.options.limit??QWt,[i,o]=await sp.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(_Ue.CHANGE,a,t)}))}}},VCl=nas;var MN={interval:100,intervalId:void 0,fns:new Map,init:()=>{MN.intervalId||(MN.intervalId=setInterval(MN.resolve,MN.interval))},reset:()=>{MN.intervalId&&(clearInterval(MN.intervalId),delete MN.intervalId)},add:(e,t)=>{MN.fns.set(e,Date.now()+t),MN.init()},remove:e=>{MN.fns.delete(e)},resolve:()=>{if(!MN.fns.size)return MN.reset();let e=Date.now();for(let[t,r]of MN.fns)r>=e||(MN.remove(t),t())}},VWt=MN;var UWt=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=Zss){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(sp.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let c=()=>{s.add.delete(n),VWt.remove(u)},u=()=>{c(),a()};VWt.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=Zss){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),VWt.remove(u)},u=()=>{c(),a()};VWt.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,kc.ADD,koe.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,kc.ADD_DIR,koe.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,kc.UNLINK,koe.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,kc.UNLINK_DIR,koe.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};UWt.DIR_EVENTS={add:kc.ADD_DIR,rename:kc.RENAME_DIR,unlink:kc.UNLINK_DIR};UWt.FILE_EVENTS={add:kc.ADD,change:kc.CHANGE,rename:kc.RENAME,unlink:kc.UNLINK};var UCl=UWt;var ias=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(sp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(sp.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(sp.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(sp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return sp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);sp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},oas=ias;var sas=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},_Cl=sas;var aas=class{constructor(){this.inos={},this.paths=new oas,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await sp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new _Cl(n)}reset(){this.inos={},this.paths=new oas,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,kc.ADD,i),[kc.ADD];if(i.isDirectory())return this.updateIno(t,kc.ADD_DIR,i),[kc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,kc.UNLINK,n),[kc.UNLINK];if(n.isDirectory())return this.updateIno(t,kc.UNLINK_DIR,n),[kc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,kc.CHANGE,i),[kc.CHANGE]);if(i.isDirectory())return this.updateIno(t,kc.UNLINK,n),this.updateIno(t,kc.ADD_DIR,i),[kc.UNLINK,kc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,kc.UNLINK_DIR,n),this.updateIno(t,kc.ADD,i),[kc.UNLINK_DIR,kc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,kc.UNLINK_DIR,n),this.updateIno(t,kc.ADD_DIR,i),[kc.UNLINK_DIR,kc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?koe.FILE:koe.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},cas=aas;var uas=class e extends GCl.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(zN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(zN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(zN.READY,i)),this._locker=new UCl(this),this._roots=new Set,this._poller=new cas,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(sp.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(zN.CLOSE))}error(t){if(this.isClosed())return!1;let r=sp.lang.castError(t);return this.emit(zN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(zN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(zN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&sp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&sp.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)sp.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new VCl(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=sp.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=GUe.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??WDe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&HDe&&l.options.native!==!1)))return!0;if(!HDe)break;let u=GUe.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=sp.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let c=!r.recursive||HDe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:Fai.default.watch(a,c),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=GUe.default.dirname(a),g=a;await this.watchDirectories([m],f,n,g,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||HDe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??WDe,a=r.limit??QWt,[c]=await sp.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=sp.fs.getDepth(t);for(let p of c){let d=sp.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(zN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(zN.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=GUe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new cas,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return sp.lang.noop;if(this.pollerExists(t,r))return sp.lang.noop;let i={...r,interval:r.pollingInterval??PCl},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(zN.CLOSE,a),Fai.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(zN.CLOSE,a),Fai.default.unwatchFile(t,n)};return sp.lang.attempt(s),()=>sp.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=sp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!sp.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=GUe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await sp.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=GUe.default.dirname(t);return(await sp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=sp.lang.noop){if(sp.lang.isFunction(t))return this.watch([],{},t);if(sp.lang.isUndefined(t))return this.watch([],r,n);if(sp.lang.isFunction(r))return this.watch(t,{},r);if(sp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=sp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==sp.lang.noop&&this.on(zN.ALL,n),r.readdirMap=void 0,this.ready())}},qCl=uas;function gFh(e){return"code"in e&&typeof e.code=="string"}function WCl(e){return e instanceof Error?e:new Error(String(e))}function HCl(e){return gFh(e)&&e.code==="ENOSPC"?"Unable to watch Fern docs files for changes because the system limit for file watchers was reached. Close other file-watching processes or increase the file watcher limit, then restart `fern docs dev`.":`Unable to watch Fern docs files for changes: ${e.message}`}async function Nai({absoluteFilePathToFern:e,additionalFilepaths:t,context:r}){let n=new qCl([e,...t],{recursive:!0,ignoreInitial:!0,debounce:100,renameDetection:!0}),i=await new Promise(o=>{let s=()=>{n.off("error",a),o(void 0)},a=c=>{n.off("ready",s),o(WCl(c))};n.once("ready",s),n.once("error",a)});return i!=null&&(n.close(),r.failAndThrow(HCl(i),i,{code:S.Code.EnvironmentError})),n.on("error",o=>{let s=WCl(o);r.failWithoutThrowing(HCl(s),s,{code:S.Code.EnvironmentError}),n.close()}),n}Yt();Q0();Ft();In();var JPl=require("child_process"),Kci=be(yas(),1),YPl=be(Dcs(),1),hI=require("fs"),xB=require("fs/promises"),XPl=require("os"),VN=be(require("path"),1),ZPl=be(kE(),1),$Pl=be(KPl(),1),$Ue=process.platform==="win32",Hci=fe.cyan("[docs]:"),WQh="etag",HQh=23,Ucs=e=>e.padEnd(HQh," "),KQh="preview",JQh="app-preview",YQh="bundle",XQh=".next",ZQh="standalone",$Qh=".fern",ezh="packages/fern-docs/bundle/.next/server/instrumentation.js",tzh='Cannot find matching keyid: {"signatures":',rzh="ERR_PNPM_IGNORED_BUILDS";function nzh(e){try{let r=(0,JPl.execSync)('reg query "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v LongPathsEnabled',{encoding:"utf-8",timeout:5e3}).match(/LongPathsEnabled\s+REG_DWORD\s+0x(\d+)/i);if(r!=null&&r[1]==="1")return}catch(t){e.debug(`Registry query for LongPathsEnabled failed: ${t}`)}throw new S({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
3969
3969
 
@@ -4294,11 +4294,11 @@ ${n}
4294
4294
  Add a 'libraries' section to configure library documentation.`,code:S.Code.ConfigError});let o=await t.getTokenOrPrompt();await t.verifyOrgAccess({organization:n.org,token:o});let s=n.docs.absoluteFilePath??n.absoluteFilePath??t.cwd,a=Mt.of(sn(s)),c=new vd({context:t,logLevel:Hn.Info});await bJt({libraries:i,library:r.library,docsDirectoryPath:a,orgId:n.org,tokenValue:o.value,context:c,wrapStep:bO})}};function rys(e){let t=new tys;si(e,"generate","[Beta] Generate MDX documentation from library source code. Requires 'libraries' config in docs.yml.",(r,n)=>t.handle(r,n),r=>r.option("library",{type:"string",description:"Name of a specific library defined in docs.yml to generate docs for"}))}function nys(e){hA({cli:e,name:"md",subcommands:[rys,xAs]})}Ft();function Ehi(e,t,r,n,i,o){e.command(t,r,s=>{for(let a of o)a(s);return s.command("$0",!1,a=>{let c=a.version(!1);return i!=null?i(c):c},vYr(n)),s.version(!1).usage(r)})}wt();lv();Ft();In();wt();var nVl=require("fs/promises");function u5e(e){return e.outputMode._visit({downloadFiles:()=>{},github:t=>`https://github.com/${t.owner}/${t.repo}`,githubV2:t=>t._visit({commitAndRelease:r=>`https://github.com/${r.owner}/${r.repo}`,pullRequest:r=>`https://github.com/${r.owner}/${r.repo}`,push:r=>`https://github.com/${r.owner}/${r.repo}`,_other:()=>{}}),publish:()=>{},publishV2:()=>{},_other:()=>{}})}async function l5e(e,t,r){let n;try{n=await(0,nVl.readFile)(e,"utf8")}catch{return}let i=new Set([t]),o="fernapi/";t.startsWith(o)&&i.add(t.slice(o.length));let s=n.split(`
4295
4295
  `),a=0,c=/^\s*-\s+name:\s*["']?([A-Za-z0-9/_.\-@]+)["']?\s*(#.*)?$/;for(let u=0;u<s.length;u++){let l=s[u];if(l==null)continue;let p=l.match(c);if(!(p==null||p[1]==null)&&i.has(p[1])){if(a===r)return u+1;a++}}}var c5e=class{#e=new WeakMap;#t=new Map;recordOccurrences(t){for(let r of t){let n=this.#t.get(r.name)??0;this.#e.set(r,n),this.#t.set(r.name,n+1)}}lookup(t){return this.#e.get(t)??0}};Pc();Yt();var $Gl=be(rge(),1);Ft();J_();var hke=require("crypto"),eql=be(wnt(),1),tql=require("zlib");function ays(e,t,r){if(r!=null&&e.registry!==r)throw new Error(`Direct publication credential registry ${e.registry} does not match requested registry ${r}`);switch(t!=null&&dVl(t),e.registry){case"npm":case"crates":return ike(e.registry,"token",e.token),{registry:e.registry,token:e.token};case"pypi":return ike("pypi","username",e.username),ike("pypi","password",e.password),{registry:"pypi",username:e.username,password:e.password};case"maven":{ike("maven","username",e.username),ike("maven","password",e.password);let n=s$h(e.signature);return{registry:"maven",username:e.username,password:e.password,...n==null?{}:{signature:n}}}case"nuget":case"rubygems":case"go":case"composer":case"postman":throw new Error(`sdk-gen-api does not support direct ${e.registry} registry publication`)}}function fVl(e){dVl(e)}function Thi(e){let t=e.flatMap(n=>{if(!n.publicationRequested)return[];if(n.publishCredential==null){if(n.credentialsRequired)throw new Error("SDK Config direct publication is missing its credential configuration");return[]}return[ays(n.publishCredential,n.publishUrl,n.publishRegistry)]});if(t.length>64)throw new Error("sdk-gen-api supports at most 64 direct publish credential targets");let r=Buffer.from(JSON.stringify({schemaVersion:"fern-publish-credentials/v1",credentialSetId:"00000000-0000-8000-8000-000000000000",targets:t.map(n=>({targetId:"0".repeat(20),...n}))}));if(r.length>65536)throw new Error(`sdk-gen-api publish credentials file is ${a$h(r.length)}, exceeding the 64 KiB limit`)}function s$h(e){if(e!=null)return ike("maven","signature.keyId",e.keyId),ike("maven","signature.password",e.password),ike("maven","signature.secretKey",e.secretKey),{keyId:e.keyId,password:e.password,secretKey:e.secretKey}}function ike(e,t,r){if(r==null||r.trim().length===0)throw new Error(`Direct ${e} publication through sdk-gen-api requires ${t}`);if(r.trim()==="OIDC"||r.trim()==="<USE_OIDC>")throw new Error(`Direct ${e} publication through sdk-gen-api does not support OIDC credentials`);if(Buffer.byteLength(r,"utf8")>16384)throw new Error(`Direct ${e} publication through sdk-gen-api ${t} exceeds the 16 KiB field limit`)}function dVl(e){try{let t=new URL(e);if(t.protocol==="https:"&&t.username.length===0&&t.password.length===0)return}catch{}throw new Error("Direct registry URL must use HTTPS and must not contain user information")}function a$h(e){return`${(e/1024).toFixed(2)} KiB`}var mVl=be(require("path"),1);function hVl(e,t){let r=mVl.default.basename(e);return t==null?r:`${r}-${t}`}aa();wt();Yt();var NGl=be(Fgi(),1);jb();Q0();Ft();J_();In();var qJt=require("fs"),nj=require("fs/promises"),dke=be(require("path"),1),Qgi=require("stream/promises");$4r();var Ngi=be(kGl(),1);function oge(e,t,{target:r="stdout",...n}={}){return Ngi.default[r]?dH.link(e,t):n.fallback===!1?e:typeof n.fallback=="function"?n.fallback(e,t):`${e} (\u200B${t}\u200B)`}oge.isSupported=Ngi.default.stdout;oge.stderr=(e,t,r={})=>oge(e,t,{target:"stderr",...r});oge.stderr.isSupported=Ngi.default.stderr;var zgi=be(kE(),1),jGl=be(Pci(),1);function FGl(e){let t=e[0];if(t!=null)return t.coordinate._visit({npm:r=>({registry:"npm",label:"npm",version:r.version,url:`https://www.npmjs.com/package/${r.name}/v/${r.version}`}),maven:r=>({registry:"maven",label:"Maven Central",version:r.version,url:`https://central.sonatype.com/artifact/${r.group}/${r.artifact}/${r.version}`}),pypi:r=>({registry:"pypi",label:"PyPI",version:r.version,url:`https://pypi.org/project/${r.name}/${r.version}/`}),ruby:r=>({registry:"rubygems",label:"RubyGems",version:r.version,url:`https://rubygems.org/gems/${r.name}/versions/${r.version}`}),nuget:r=>({registry:"nuget",label:"NuGet",version:r.version,url:`https://www.nuget.org/packages/${r.name}/${r.version}`}),crates:r=>({registry:"crates",label:"crates.io",version:r.version,url:`https://crates.io/crates/${r.name}/${r.version}`}),_other:()=>{}})}var Hsg=/^Pipeline: raw result \(\d+ bytes\): (\{.*\})$/,jgi=class{context;generatorInvocation;absolutePathToPreview;telemetryContext;lengthOfLastLogs=0;cachedReplayResult;replayEventEmitted=!1;taskStartedAtMs=Date.now();constructor({interactiveTaskContext:t,generatorInvocation:r,absolutePathToPreview:n,telemetryContext:i}){this.context=t,this.generatorInvocation=r,this.absolutePathToPreview=n,this.telemetryContext=i}async processUpdate(t){t==null&&this.context.failAndThrow("Task is missing on job status",void 0,{code:S.Code.InternalError});let r=t.packages.map(i=>i.coordinate._visit({npm:o=>`${o.name}@${o.version}`,maven:o=>`${o.group}:${o.artifact}:${o.version}`,pypi:o=>`${o.name} ${o.version}`,ruby:o=>`${o.name}:${o.version}`,nuget:o=>`${o.name} ${o.version}`,crates:o=>`${o.name} ${o.version}`,_other:()=>"<unknown package>"}));t.packages.length>0&&this.#n==null&&(this.#n=t.packages[0]?.coordinate._visit({npm:i=>i.version,maven:i=>i.version,pypi:i=>i.version,ruby:i=>i.version,nuget:i=>i.version,crates:i=>i.version,_other:()=>{}})),this.#i==null&&(this.#i=FGl(t.packages)),this.absolutePathToPreview==null&&this.context.setSubtitle(r.length>0?r.map(i=>`\u25E6 ${i}`).join(`
4296
4296
  `):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(eag(i.level),i.message),this.#n==null&&(this.#n=Jsg(i.message)??this.#n),this.cachedReplayResult==null&&(this.cachedReplayResult=Ysg(i.message));this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${oge("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:At,running:At,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:S.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await Mgi({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion),this.emitReplayTelemetryIfReady()},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?ze(this.absolutePathToPreview,ve.of(dke.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}emitReplayTelemetryIfReady(){if(!this.replayEventEmitted&&this.cachedReplayResult!=null&&!this.telemetryContext.disableTelemetry)try{let t={success:!0,steps:{replay:this.cachedReplayResult},warnings:[]},n={...(0,NGl.buildReplayTelemetryProps)({pipelineResult:t,generatorName:this.generatorInvocation.name,generatorVersion:this.generatorInvocation.version,cliVersion:this.telemetryContext.cliVersion,repoUri:Xsg(this.generatorInvocation),automationMode:this.telemetryContext.automationMode,autoMerge:this.telemetryContext.autoMerge,skipIfNoDiff:this.telemetryContext.skipIfNoDiff,hasBreakingChanges:!1,versionArg:this.telemetryContext.versionArg,versionBump:this.telemetryContext.versionBump,replayConfigEnabled:this.telemetryContext.replayConfigEnabled,noReplayFlag:this.telemetryContext.noReplayFlag,githubMode:Zsg(this.generatorInvocation),previewMode:this.absolutePathToPreview!=null,durationMs:Date.now()-this.taskStartedAtMs}),surface:"fiddle",org_id:this.telemetryContext.orgId};this.context.instrumentPostHogEvent({command:"replay",properties:n}),this.context.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(n)}`),this.replayEventEmitted=!0}catch(t){this.context.logger.debug(`[telemetry] failed to send replay event: ${String(t)}`)}}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},Ksg=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function Jsg(e){let t=e.match(Ksg);if(t?.[1]!=null)return t[1].replace(/^v/,"")}function Ysg(e){let t=e.match(Hsg);if(t?.[1]!=null)try{return JSON.parse(t[1])?.steps?.replay}catch{return}}function Xsg(e){let t=e.raw?.github;return t==null?"":"uri"in t&&typeof t.uri=="string"?t.uri:"repository"in t&&typeof t.repository=="string"?t.repository:""}function Zsg(e){let t=e.raw?.github;if(t!=null&&"mode"in t){if(t.mode==="pull-request")return"pull-request";if(t.mode==="commit-and-release")return"commit-and-release"}return"push"}async function Mgi({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r,skipFernignore:n=!1}){try{let i=await tag(t),o=await rag(t);!n&&i&&o?await nag({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):!n&&i&&!o?await iag({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await $sg({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(fe.green(`Downloaded to ${t}`))}catch(i){r.failAndThrow("Failed to download files",i,{code:S.Code.NetworkError})}}async function QGl({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await tg.get(e,{responseType:"stream",timeout:6e4,signal:AbortSignal.timeout(T0s)});await(0,nj.mkdir)(dke.default.dirname(t),{recursive:!0}),await(0,Qgi.pipeline)(n.data,(0,qJt.createWriteStream)(t)),r.logger.info(fe.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download archive",n,{code:S.Code.NetworkError})}}var T0s=300*1e3;async function $sg({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await tg.get(e,{responseType:"stream",timeout:6e4,signal:AbortSignal.timeout(T0s)}),n=await zgi.default.dir({prefix:"fern",unsafeCleanup:!0}),i=dke.default.join(n.path,"output.zip");await(0,Qgi.pipeline)(r.data,(0,qJt.createWriteStream)(i)),await S0s(t),await(0,nj.mkdir)(t,{recursive:!0}),await LGl(i,t)}async function S0s(e){await Jt(e)&&(await zGl(e),await(0,nj.rm)(e,{recursive:!0,force:!0}))}async function zGl(e){try{let t=await(0,nj.readdir)(e,{withFileTypes:!0});for(let r of t){let n=Mt.of(dke.default.join(e,r.name));r.isDirectory()&&await zGl(n);try{await(0,nj.chmod)(n,493)}catch{}}await(0,nj.chmod)(e,493)}catch{}}function eag(e){switch(e){case"DEBUG":return Hn.Debug;case"INFO":return Hn.Info;case"WARN":return Hn.Warn;case"ERROR":return Hn.Error;default:return Hn.Info}}async function tag(e){let t=ze(e,ve.of(f1));return await Jt(t)}async function rag(e){let t=ze(e,ve.of(".git"));return await Jt(t)}async function bJ(e,t,r){return(await Ca(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function nag({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=ze(t,ve.of(f1)),i=await GX({absolutePathToFernignore:n});await bJ(["rm","-rf","."],t,r),await MGl({s3PreSignedReadUrl:e,outputPath:t}),await bJ(["add","."],t,r),await bJ(["reset","--",...i],t,r),await bJ(["restore","."],t,r)}async function iag({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Mt.of((await zgi.default.dir({})).path),i=ze(t,ve.of(f1)),o=await GX({absolutePathToFernignore:i});await(0,nj.cp)(t,n,{recursive:!0}),await bJ(["init"],n,r),await bJ(["add","."],n,r),await bJ(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await bJ(["rm","-rf","."],n,r),await MGl({s3PreSignedReadUrl:e,outputPath:n}),await bJ(["add","."],n,r),await bJ(["reset","--",...o],n,r),await bJ(["restore","."],n,r),await S0s(ze(n,ve.of(".git"))),await S0s(t),await(0,nj.cp)(n,t,{recursive:!0})}async function MGl({s3PreSignedReadUrl:e,outputPath:t}){let r=await tg.get(e,{responseType:"stream",timeout:6e4,signal:AbortSignal.timeout(T0s)}),n=await zgi.default.dir({prefix:"fern",unsafeCleanup:!0}),i=dke.default.join(n.path,"output.zip");await(0,Qgi.pipeline)(r.data,(0,qJt.createWriteStream)(i)),await LGl(i,t)}async function LGl(e,t){return new Promise((r,n)=>{jGl.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=dke.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,nj.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,nj.mkdir)(dke.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,qJt.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}function O0s(e){return[...new Set(e.filter(t=>t.length>0))].sort((t,r)=>r.length-t.length)}function v5e(e,t){return O0s(t).reduce((r,n)=>r.replaceAll(n,"[REDACTED]"),e)}function P0s(e,t){return v5e(e,t)}var oag=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;function Lgi(e){let t=oag.exec(e);return t===null||t[1]===void 0||t[2]===void 0||t[3]===void 0?null:{core:[t[1],t[2],t[3]],prerelease:t[4]?.split(".")??null}}function VGl(e,t){for(let r=0;r<e.core.length;r+=1){let n=UGl(e.core[r]??"",t.core[r]??"");if(n!==0)return n}return sag(e.prerelease,t.prerelease)}function sag(e,t){if(e===null||t===null)return e===t?0:e===null?1:-1;let r=Math.max(e.length,t.length);for(let n=0;n<r;n+=1){let i=e[n],o=t[n];if(i===void 0||o===void 0)return i===o?0:i===void 0?-1:1;let s=aag(i,o);if(s!==0)return s}return 0}function aag(e,t){let r=/^\d+$/.test(e),n=/^\d+$/.test(t);return r&&n?UGl(e,t):r!==n?r?-1:1:e===t?0:e<t?-1:1}function UGl(e,t){return e.length!==t.length?e.length<t.length?-1:1:e===t?0:e<t?-1:1}var B0s=class extends Error{name="GeneratorConfigPolicyInvariantError";code="INVALID_GENERATOR_CUTOVER_POLICY";generatorId;language;cutoverVersion;retryable=!1;recommendedAction="FIX_GENERATOR_CUTOVER_POLICY";constructor(t,r){super(`Generator ${t} has an invalid cutover version: ${r.cutoverVersion}`),this.generatorId=t,this.language=r.language,this.cutoverVersion=r.cutoverVersion}};function cag(e){return new Map(e.map(([t,r])=>{let n=Lgi(r.cutoverVersion);if(n===null)throw new B0s(t,r);return[t,{...r,parsedCutoverVersion:n}]}))}var uag=cag([["fernapi/fern-typescript",{language:"typescript",cutoverVersion:"4.0.0"}],["fernapi/fern-typescript-sdk",{language:"typescript",cutoverVersion:"4.0.0"}],["fernapi/fern-typescript-node-sdk",{language:"typescript",cutoverVersion:"4.0.0"}],["fernapi/fern-typescript-browser-sdk",{language:"typescript",cutoverVersion:"4.0.0"}],["fernapi/fern-python-sdk",{language:"python",cutoverVersion:"6.0.0"}],["fernapi/fern-java-sdk",{language:"java",cutoverVersion:"5.0.0"}],["fernapi/fern-kotlin-sdk",{language:"kotlin",cutoverVersion:"5.0.0"}],["fernapi/fern-go-sdk",{language:"go",cutoverVersion:"2.0.0"}],["fernapi/fern-csharp-sdk",{language:"csharp",cutoverVersion:"3.0.0"}],["fernapi/fern-php-sdk",{language:"php",cutoverVersion:"3.0.0"}],["fernapi/fern-ruby-sdk",{language:"ruby",cutoverVersion:"2.0.0"}],["fernapi/fern-ruby-sdk-v2",{language:"ruby",cutoverVersion:"2.0.0"}],["fernapi/fern-rust-sdk",{language:"rust",cutoverVersion:"1.0.0"}],["fernapi/fern-swift-sdk",{language:"swift",cutoverVersion:"1.0.0"}],["fernapi/fern-cli",{language:"cli",cutoverVersion:"1.0.0"}],["fernapi/fern-cli-generator",{language:"cli",cutoverVersion:"1.0.0"}],["fernapi/fern-mcp-server",{language:"mcp",cutoverVersion:"0.1.0"}]]);function WJt(e){return uag.get(e)}var mke=class extends Error{name="GeneratorConfigCompatibilityError";code;generatorId;language;requestedVersion;cutoverVersion;receivedConfigKind;expectedConfigKind;expectedLanguage;retryable=!1;recommendedAction;constructor(t){super(t.message),this.code=t.code,this.generatorId=t.generatorId,this.language=t.language,this.requestedVersion=t.requestedVersion,this.cutoverVersion=t.cutoverVersion,this.receivedConfigKind=t.receivedConfigKind,this.expectedConfigKind=t.expectedConfigKind,this.expectedLanguage=t.expectedLanguage,this.recommendedAction=t.recommendedAction}};function D0s(e){return WJt(e)?.language}function HJt(e){let t=Vgi(e),r=e.configKind;if(!pag(r))throw x5e(e,{code:"INVALID_CONFIG_KIND",message:"Configuration kind must be legacy-fern or sdk-config-v1",cutoverVersion:t.cutoverVersion,expectedLanguage:t.language,expectedConfigKind:t.configKind,recommendedAction:"USE_SUPPORTED_CONFIG_KIND"},r);if(r!==t.configKind){let n=WJt(e.generatorId);throw n===void 0?new Error(`Missing validated generator policy for ${e.generatorId}`):lag(e,n,t.configKind,r)}return t}function Vgi(e){let t=WJt(e.generatorId);if(t===void 0)throw x5e(e,{code:"UNKNOWN_GENERATOR",message:`Unknown first-party generator: ${e.generatorId}`,cutoverVersion:null,expectedLanguage:null,expectedConfigKind:null,recommendedAction:"USE_KNOWN_GENERATOR_ID"});if(t.language!==e.language)throw x5e(e,{code:"GENERATOR_LANGUAGE_MISMATCH",message:`Generator ${e.generatorId} targets ${t.language}, not ${e.language}`,cutoverVersion:t.cutoverVersion,expectedLanguage:t.language,expectedConfigKind:null,recommendedAction:"USE_GENERATOR_LANGUAGE"});let r=Lgi(e.requestedVersion);if(r===null)throw x5e(e,{code:"INVALID_GENERATOR_VERSION",message:`Generator version must be an exact semantic version: ${e.requestedVersion}`,cutoverVersion:t.cutoverVersion,expectedLanguage:t.language,expectedConfigKind:null,recommendedAction:"USE_EXACT_GENERATOR_VERSION"});let n=VGl(r,t.parsedCutoverVersion)<0,i=n?"legacy-fern":"sdk-config-v1";return{generatorId:e.generatorId,language:t.language,requestedVersion:e.requestedVersion,cutoverVersion:t.cutoverVersion,configKind:i,payloadKind:n?"fern-runtime-bundle":"sdk-config-v1"}}function C5e({generatorId:e,language:t,configKind:r,versionSource:n}){let i=WJt(e);if(i===void 0)throw x5e({generatorId:e,language:t,requestedVersion:"unpinned"},{code:"UNKNOWN_GENERATOR",message:`Unknown first-party generator: ${e}`,cutoverVersion:null,expectedLanguage:null,expectedConfigKind:null,recommendedAction:"USE_KNOWN_GENERATOR_ID"});if(i.language!==t)throw x5e({generatorId:e,language:t,requestedVersion:"unpinned"},{code:"GENERATOR_LANGUAGE_MISMATCH",message:`Generator ${e} targets ${i.language}, not ${t}`,cutoverVersion:i.cutoverVersion,expectedLanguage:i.language,expectedConfigKind:null,recommendedAction:"USE_GENERATOR_LANGUAGE"});let o={generatorId:e,language:t,cutoverVersion:i.cutoverVersion};if(r==="legacy-fern"){if(n!=="fern-latest")throw new Error("Legacy Fern unpinned routes must use fern-latest as their version source");return{...o,versionSource:n,configKind:r,payloadKind:"fern-runtime-bundle"}}return{...o,versionSource:n,configKind:r,payloadKind:"sdk-config-v1"}}function R0s(e){return C5e({...e,configKind:"sdk-config-v1",versionSource:"sdk-config-omitted"})}function x5e(e,t,r=e.configKind){return new mke({generatorId:e.generatorId,language:e.language,requestedVersion:e.requestedVersion,receivedConfigKind:r,...t})}function lag(e,t,r,n){let i=r==="legacy-fern";return x5e(e,{code:i?"LEGACY_FERN_CONFIG_REQUIRED":"SDK_CONFIG_V1_REQUIRED",message:i?`Generator ${e.generatorId} ${e.requestedVersion} requires legacy Fern configuration`:`Generator ${e.generatorId} ${e.requestedVersion} requires SDK Config v1`,cutoverVersion:t.cutoverVersion,expectedLanguage:t.language,expectedConfigKind:r,recommendedAction:i?"USE_LEGACY_FERN_CONFIG":"USE_SDK_CONFIG_V1"},n)}function pag(e){return e==="legacy-fern"||e==="sdk-config-v1"}var w5e="latest",k0s="__fern_sdk_config_unpinned__";function KJt(e){return e===k0s}function F0s(e){return e??k0s}function Ugi(e,t){return e.requestedVersion!=null?!1:e.versionSource==="fern-latest"?t===w5e:KJt(t)}var dag=2e3,_Gl=900*1e3,GGl=6e4,uwt=64,mag=25*1024*1024,hag=25*1024*1024,qGl=5*1024*1024,WGl=25*1024*1024,gag=25*1024*1024,rql=100*1024*1024,Aag=rql,nql=50*1024*1024,yag=1024*1024,iql=60*1024*1024,bag="unpinned",Eag=new Set(["localhost","127.0.0.1","[::1]","::1"]),Iag=new Intl.Collator("en",{numeric:!0});function oql(e,t){return t?{type:"download"}:e}var Ggi=class extends Error{status;code;constructor(t,r,n){super(t),this.name="FernSdkGenApiSubmissionError",this.status=r,this.code=n}};function EJ(){return(process.env.FERN_USE_SDK_GEN_API??"false"??"false").trim().toLowerCase()==="true"}var vag=new Set(["fernapi/fern-mcp-server"]);function lwt(e){return vag.has(e)}function pwt(e){return lwt(e)}function Hgi(){let e=process.env.FERN_SDK_GEN_API_ORIGIN??"https://sdk-gen.postman.co";if(e==null)return;let t;try{t=new URL(e)}catch{throw new Error("FERN_SDK_GEN_API_ORIGIN must be a valid URL")}if(t.username.length>0||t.password.length>0)throw new Error("FERN_SDK_GEN_API_ORIGIN must not contain credentials");let r=t.protocol==="http:"&&Eag.has(t.hostname);if(t.protocol!=="https:"&&!r)throw new Error("FERN_SDK_GEN_API_ORIGIN must use HTTPS unless it targets localhost");return t.toString().replace(/\/$/,"")}function Vk(e){return D0s(e)}function sql(e,t="legacy-fern"){let r=Vk(e.name);if(r!=null)return e.version===w5e&&t==="legacy-fern"?C5e({generatorId:e.name,language:e.language??r,configKind:t,versionSource:"fern-latest"}):HJt({generatorId:e.name,language:e.language??r,requestedVersion:e.version,configKind:t})}function aql(e){let t=e.outputMode;switch(t.type){case"downloadFiles":return{requestedOutput:{type:"download"}};case"github":return HGl({owner:t.owner,repo:t.repo,branch:t.branch,mode:t.makePr===!0?"pull-request":"release",publishInfo:t.publishInfo});case"githubV2":{let r=t.githubV2;return HGl({owner:r.owner,repo:r.repo,host:r.host,branch:r.branch,mode:r.type==="pullRequest"?"pull-request":r.type==="push"?"push":"release",reviewers:r.type==="pullRequest"?xag(r.reviewers):void 0,publishInfo:r.publishInfo})}case"publishV2":{let r=Cag(t.publishV2);return{...r.package!=null?{package:r.package}:{},requestedOutput:{type:"publish",publish:r.publish}}}case"publish":{let r=Tag(e,t.registryOverrides);return{...r.package!=null?{package:r.package}:{},requestedOutput:{type:"publish",publish:r.publish}}}}}function HGl({owner:e,repo:t,host:r,branch:n,mode:i,reviewers:o,publishInfo:s}){let a=s!=null?wag(s):void 0;return{...a?.package!=null?{package:a.package}:{},requestedOutput:{type:"github",repository:`${e}/${t}`,...r!=null?{host:r}:{},...n!=null?{branch:n}:{},mode:i,...o!=null?{reviewers:o}:{},...a!=null?{publish:a.publish}:{}}}}function xag(e){if(e==null)return;let t=e.filter(n=>n.type==="team").map(n=>n.name),r=e.filter(n=>n.type==="user").map(n=>n.name);if(!(t.length===0&&r.length===0))return{...t.length>0?{teams:t}:{},...r.length>0?{users:r}:{}}}function Cag(e){switch(e.type){case"npmOverride":return j0s(e.npmOverride);case"mavenOverride":return Q0s(e.mavenOverride);case"pypiOverride":return cql(e.pypiOverride);case"rubyGemsOverride":return cwt("rubygems",e.rubyGemsOverride);case"nugetOverride":return cwt("nuget",e.nugetOverride);case"cratesOverride":return cwt("crates",e.cratesOverride);case"postman":throw new Error("sdk-gen-api does not support Postman collection publication as an SDK output")}}function wag(e){switch(e.type){case"npm":return j0s(e);case"maven":return Q0s(e);case"pypi":return cql(e);case"rubygems":return cwt("rubygems",e);case"nuget":return cwt("nuget",e);case"crates":return cwt("crates",e);case"postman":throw new Error("sdk-gen-api does not support Postman collection publication as an SDK output")}}function j0s(e){return{...e?.packageName?{package:{packageName:e.packageName}}:{},publish:{registry:"npm",...e?.registryUrl?{url:e.registryUrl}:{}}}}function cql(e){let t=e!=null&&"coordinate"in e?e.coordinate:e?.packageName;return{...t?{package:{packageName:t}}:{},publish:{registry:"pypi",...e?.registryUrl?{url:e.registryUrl}:{}}}}function Q0s(e){let t=e?.coordinate!=null?Sag(e.coordinate):void 0;return{...t!=null?{package:t}:{},publish:{registry:"maven",...e?.registryUrl?{url:e.registryUrl}:{}}}}function cwt(e,t){return{...t?.packageName?{package:{packageName:t.packageName}}:{},publish:{registry:e,...t?.registryUrl?{url:t.registryUrl}:{}}}}function Sag(e){let[t,r]=e.split(":");if(!t||!r)throw new Error(`Invalid Maven coordinate for sdk-gen-api: ${e}`);return{groupId:t,artifactId:r}}function Tag(e,t){let r=Vk(e.name);if((r==="typescript"||r==="mcp")&&t.npm!=null)return j0s(t.npm);if((r==="java"||r==="kotlin")&&t.maven!=null)return Q0s(t.maven);let n=uql(r);if(n==null)throw new Error(`sdk-gen-api cannot infer a registry for ${r??e.name}`);return{publish:{registry:n}}}function uql(e){switch(e){case"typescript":return"npm";case"python":return"pypi";case"java":case"kotlin":return"maven";case"go":return"go";case"csharp":return"nuget";case"php":return"composer";case"ruby":return"rubygems";case"rust":return"crates";case"mcp":return"npm";case"swift":case"cli":case void 0:return}}function lql(e,t){let r=t.outputMode;if(r.type!=="publish"&&r.type!=="publishV2")return;let n=aql(t).requestedOutput;if(n.type==="publish"&&n.publish.url!=null&&fVl(n.publish.url),r.type==="publish"){let o=Vk(t.name);if((o==="typescript"||o==="mcp")&&r.registryOverrides.npm!=null)return KGl(e,r.registryOverrides.npm.token);if((o==="java"||o==="kotlin")&&r.registryOverrides.maven!=null)return JGl(e,r.registryOverrides.maven);let s=uql(o);throw s==null||!Pag(s)?new Error(`sdk-gen-api does not support direct ${s??"unknown"} registry publication`):new Error(`Direct ${s} publication through sdk-gen-api requires publish credentials`)}let i=r.publishV2;switch(i.type){case"npmOverride":{let o=_gi("npm",i.npmOverride);return KGl(e,o.token)}case"mavenOverride":{let o=_gi("maven",i.mavenOverride);return JGl(e,o)}case"pypiOverride":{let o=_gi("pypi",i.pypiOverride);return Oag(e,o.username,o.password)}case"cratesOverride":{let o=_gi("crates",i.cratesOverride);return pql(e,"crates",o.token)}case"rubyGemsOverride":throw new Error("sdk-gen-api does not support direct rubygems registry publication");case"nugetOverride":throw new Error("sdk-gen-api does not support direct nuget registry publication");case"postman":throw new Error("sdk-gen-api does not support Postman collection publication as an SDK output")}}function Kgi(e,t,r,n){return{targetId:e,...ays(t,r,n)}}function _gi(e,t){if(t==null)throw new Error(`Direct ${e} publication through sdk-gen-api is missing its registry configuration`);return t}function KGl(e,t){return pql(e,"npm",t)}function pql(e,t,r){return Kgi(e,{registry:t,token:r})}function Oag(e,t,r){return Kgi(e,{registry:"pypi",username:t,password:r})}function JGl(e,t){return Kgi(e,{registry:"maven",username:t.username,password:t.password,...t.signature==null?{}:{signature:t.signature}})}function Pag(e){return e==="npm"||e==="maven"||e==="pypi"||e==="crates"}function Bag(e,t,r){let n=e.targets.flatMap((i,o)=>{let s=t[o];if(s==null)throw new Error(`Cannot pair sdk-gen-api target ${i.targetId} with publish credentials`);let a=r?.[o],{publishUrl:c,publishRegistry:u}=dql(i.requestedOutput),l=a!=null?Kgi(i.targetId,a,c,u):lql(i.targetId,s);return l!=null?[l]:[]});if(n.length!==0){if(n.length>uwt)throw new Error(`sdk-gen-api supports at most ${uwt} direct publish credential targets`);if(e.credentialSetId==null)throw new Error("sdk-gen-api direct registry targets require a credentialSetId");return{schemaVersion:"fern-publish-credentials/v1",credentialSetId:e.credentialSetId,targets:n}}}function fql(e){lql("preflight",e)}function Jgi(e){Thi(e.map(t=>({publicationRequested:t.requestedOutput?.type==="publish"||t.requestedOutput?.type==="github"&&t.requestedOutput.publish!=null,credentialsRequired:t.requestedOutput?.type==="publish",...dql(t.requestedOutput),...t.publishCredential==null?{}:{publishCredential:t.publishCredential}})))}function dql(e){let t=e?.type==="publish"||e?.type==="github"?e.publish:void 0;return t==null?{}:{publishRegistry:t.registry,...t.url==null?{}:{publishUrl:t.url}}}function mql(e){let{generatorInvocation:t,sdkVersion:r,specsTarGzBuffer:n,whitelabel:i}=e,o=Vk(t.name),s=r!=null&&r.trim().length>0&&!(0,$Gl.isAutoVersion)(r);return o!=null&&s&&n!=null&&i==null}var qgi=class{expectedTargets;participants=[];removedTargetIds=new Set;terminalError;dispatched=!1;constructor(t){if(t<1)throw new Error("A Fern sdk-gen-api batch must expect at least one target");this.expectedTargets=t}run(t){return this.terminalError!=null?Promise.reject(this.terminalError):t.targetIdSeed!=null&&this.removedTargetIds.has(t.targetIdSeed)?Promise.reject(new Error(`Fern sdk-gen-api target ${t.targetIdSeed} was removed`)):this.dispatched?Promise.reject(new Error("The Fern sdk-gen-api batch was already dispatched")):new Promise((r,n)=>{this.participants.push({...t,resolve:r,reject:n}),this.dispatchIfReady()})}skip(){this.dispatched||this.terminalError!=null||(this.expectedTargets-=1,this.dispatchIfReady())}remove(t,r){if(this.dispatched||this.terminalError!=null||this.removedTargetIds.has(t))return!1;this.removedTargetIds.add(t);let n=this.participants.findIndex(o=>o.targetIdSeed===t),[i]=n>=0?this.participants.splice(n,1):[];return i?.reject(r),this.expectedTargets-=1,this.dispatchIfReady(),!0}cancel(t){if(!(this.dispatched||this.terminalError!=null)){this.terminalError=t;for(let r of this.participants)r.reject(t)}}dispatchIfReady(){this.dispatched||this.terminalError!=null||this.expectedTargets===0||this.participants.length!==this.expectedTargets||(this.dispatched=!0,this.dispatch())}async dispatch(){let t=[...this.participants].sort(Nag);try{(await yql(t)).forEach((n,i)=>{let o=t[i];n.status==="fulfilled"?o?.resolve(n.value):o?.reject(n.reason)})}catch(r){this.terminalError=r;for(let n of this.participants)n.reject(r)}}},Wgi=class{expectedTargetIds;settledTargetIds=new Set;waiters=[];preflightParticipants=[];terminalError;didRunPreflight=!1;constructor(t){if(this.expectedTargetIds=new Set(t),this.expectedTargetIds.size!==t.length)throw new Error("Fern sdk-gen-api preparation target IDs must be unique")}ready(t,r){if(this.assertExpected(t),this.settledTargetIds.has(t))throw new Error(`Fern sdk-gen-api target ${t} prepared more than once`);return this.settledTargetIds.add(t),r!=null&&this.preflightParticipants.push(r),new Promise((n,i)=>{this.waiters.push({resolve:n,reject:i}),this.finishIfSettled()})}fail(t,r,n){return this.assertExpected(t),this.settledTargetIds.has(t)?!1:(this.settledTargetIds.add(t),n||(this.terminalError=r),this.finishIfSettled(),!0)}assertExpected(t){if(!this.expectedTargetIds.has(t))throw new Error(`Unexpected Fern sdk-gen-api preparation target ${t}`)}finishIfSettled(){if(this.settledTargetIds.size===this.expectedTargetIds.size){if(!this.didRunPreflight&&this.terminalError==null&&this.preflightParticipants.length>0){this.didRunPreflight=!0;try{Aql(this.preflightParticipants)}catch(t){this.terminalError=t}}for(let t of this.waiters)this.terminalError!=null?t.reject(this.terminalError):t.resolve()}}};async function hql(e){let[t]=await yql([e]);if(t?.status==="fulfilled")return t.value;throw t?.reason??new Error("sdk-gen-api did not return the requested target")}function gql(e){if(e>uwt)throw new Error(`sdk-gen-api supports at most ${uwt} target payloads per build; received ${e}`)}function Aql(e){let t=e[0];if(t==null)throw new Error("Cannot submit an empty Fern sdk-gen-api build");kag(e);let r;try{r=Hgi()}catch(p){return t.context.failAndThrow(p instanceof Error?p.message:"Invalid sdk-gen-api origin",p,{code:S.Code.ConfigError})}if(!r)return t.context.failAndThrow("FERN_SDK_GEN_API_ORIGIN is required when FERN_USE_SDK_GEN_API=true",void 0,{code:S.Code.ConfigError});Gag(e),jag(e,t);let n=qag({apiName:t.apiName,organization:t.organization,cliVersion:t.cliVersion,specsTarGzBuffer:t.specsTarGzBuffer,targets:e.map(p=>({generatorInvocation:p.generatorInvocation,sdkGenApiRoute:p.sdkGenApiRoute,sdkName:p.sdkName,sdkVersion:p.sdkVersion,apiVersion:p.apiVersion,targetIdSeed:p.targetIdSeed,sourceSpecIndexes:p.sourceSpecIndexes,audiences:p.audiences,payload:p.payload,requestedOutput:p.requestedOutput,publishCredential:p.publishCredential}))}),i=Bag(n,e.map(p=>p.generatorInvocation),e.map(p=>p.publishCredential)),o=i!=null?Buffer.from(JSON.stringify(i)):void 0;if(o!=null&&o.length>65536)return t.context.failAndThrow(`sdk-gen-api publish credentials file is ${zag(o.length)}, exceeding the 64 KiB limit`,void 0,{code:S.Code.ConfigError});let s=t.specsTarGzBuffer.length+e.reduce((p,d)=>p+d.payload.body.length,0)+(o?.length??0);if(s>nql)return t.context.failAndThrow(`sdk-gen-api source archive, target payloads, and publish credentials total ${JG(s)}, exceeding the 50 MiB in-memory upload limit`,void 0,{code:S.Code.ConfigError});let a=JSON.stringify(n),c=Buffer.byteLength(a,"utf8");if(c>yag)return t.context.failAndThrow(`sdk-gen-api serialized request field is ${JG(c)}, exceeding the 1 MiB UTF-8 field limit; reduce generator customConfig, readme, settings, or API override metadata`,void 0,{code:S.Code.ConfigError});let u=new eql.default;u.append("request",a),u.append("sources",t.specsTarGzBuffer,{filename:"specs.tar.gz",contentType:"application/gzip"}),e.forEach((p,d)=>{let f=n.targets[d];if(f==null)throw new Error(`Cannot pair sdk-gen-api payload at index ${d} with a target`);let m=p.payload.payloadKind==="fern-runtime-bundle";u.append("payloads",p.payload.body,{filename:`${f.targetId}.json${m?".gz":""}`,contentType:m?"application/gzip":"application/json"})}),o!=null&&u.append("credentials",o,{filename:"publish-credentials.v1.json",contentType:"application/json"});let l=u.getLengthSync();return l>iql?t.context.failAndThrow(`sdk-gen-api multipart request is ${JG(l)}, exceeding the 60 MiB limit; reduce source or target payload size`,void 0,{code:S.Code.ConfigError}):{first:t,origin:r,request:n,form:u,sensitiveValues:O0s([t.token.value,...Dag(i)])}}async function yql(e){let{first:t,origin:r,request:n,form:i,sensitiveValues:o}=Aql(e),s;try{s=(await tg.post(`${r}/v1/fern/build`,i,{headers:{...i.getHeaders(),Authorization:`Bearer ${t.token.value}`,"X-Fern-Organization-Id":t.organization},maxBodyLength:iql,timeout:GGl})).data.buildId}catch(u){let l=YGl(u,o);return t.context.failAndThrow(`Failed to submit sdk-gen-api build: ${l.message}`,l,{code:S.Code.NetworkError})}for(let u of e)u.context.logger.debug(`sdk-gen-api build ID: ${s}`);let a=new Map,c=Date.now()+_Gl;for(;;){let u;try{let d=await tg.get(`${r}/v1/fern/build/${s}`,{headers:{Authorization:`Bearer ${t.token.value}`,"X-Fern-Organization-Id":t.organization},timeout:GGl});u=Rag(d.data,o)}catch(d){let f=YGl(d,o);return t.context.failAndThrow("Failed to poll sdk-gen-api build",f,{code:S.Code.NetworkError})}let l=n.targets.find(d=>!u.targets.some(f=>f.targetId===d.targetId));if(l!=null)return t.context.failAndThrow(`sdk-gen-api response did not contain target ${l.targetId}`,void 0,{code:S.Code.InternalError});for(let[d,f]of n.targets.entries()){let m=u.targets.find(y=>y.targetId===f.targetId),g=e[d]?.context;if(m==null||g==null)continue;let A=a.get(m.targetId)??0;for(let y of m.logs.slice(A))g.logger.info(y.message);a.set(m.targetId,m.logs.length)}if(n.targets.every(d=>Mag(u,d.targetId))||u.status==="failed"||u.status==="succeeded")return Promise.allSettled(e.map((d,f)=>Lag(d,n.targets[f]?.targetId,u)));if(Date.now()>=c)return t.context.failAndThrow(`Timed out waiting for sdk-gen-api build ${s} after ${_Gl/6e4} minutes`,void 0,{code:S.Code.NetworkError});await new Promise(d=>setTimeout(d,dag))}}function YGl(e,t){if(!(e instanceof TUr))return new Ggi(v5e(e instanceof Error?e.message:"Unknown submission error",t),void 0,void 0);let r=typeof e.response?.data=="object"&&e.response.data!=null&&"message"in e.response.data&&typeof e.response.data.message=="string"?e.response.data.message:void 0;return new Ggi(v5e(r??e.message,t),e.response?.status??e.status,e.code)}function Dag(e){return(e?.targets??[]).flatMap(t=>t.registry==="npm"||t.registry==="crates"?[t.token]:t.registry==="pypi"?[t.username,t.password]:[t.username,t.password,...t.signature!=null?[t.signature.keyId,t.signature.password,t.signature.secretKey]:[]])}function Rag(e,t){return{...e,targets:e.targets.map(r=>({...r,logs:r.logs.map(n=>({...n,message:v5e(n.message,t)})),...r.error==null?{}:{error:{message:v5e(r.error.message,t)}},...r.publication==null?{}:r.publication.status==="success"?{publication:{...r.publication,publishTarget:{...r.publication.publishTarget,identifier:P0s(r.publication.publishTarget.identifier,t)}}}:{publication:{...r.publication,publishTarget:{...r.publication.publishTarget,identifier:P0s(r.publication.publishTarget.identifier,t)},error:{...r.publication.error,message:v5e(r.publication.error.message,t)}}}}))}}function kag(e){for(let t of e){let{generatorInvocation:r}=t,n=r.language??Vk(r.name);n==null&&t.context.failAndThrow(`Cannot submit SDK generation to sdk-gen-api: generator language is unknown for ${r.name}`,void 0,{code:S.Code.ConfigError});let i;try{i=Fag(t,n)}catch(o){if(!(o instanceof mke))throw o;t.context.failAndThrow(z0s(o),void 0,{code:S.Code.ConfigError})}i.payloadKind!==t.payload.payloadKind&&t.context.failAndThrow(`Cannot submit SDK generation to sdk-gen-api: selected route payload ${i.payloadKind} does not match participant payload ${t.payload.payloadKind}`,void 0,{code:S.Code.ConfigError})}}function Fag(e,t){let{generatorInvocation:r,sdkGenApiRoute:n}=e;if(n?.requestedVersion==null){if(n!=null){if(!Ugi(n,r.version))throw Eql(n,r.version);return C5e({generatorId:r.name,language:t,configKind:n.configKind,versionSource:n.versionSource})}return HJt({generatorId:r.name,language:t,requestedVersion:r.version,configKind:e.payload.payloadKind==="fern-runtime-bundle"?"legacy-fern":"sdk-config-v1"})}return HJt({generatorId:r.name,language:t,requestedVersion:n.requestedVersion,configKind:n.configKind})}function z0s(e){let t=[e.code,`generator=${e.generatorId}`,`language=${e.language}`,`requestedVersion=${e.requestedVersion}`,`cutoverVersion=${e.cutoverVersion??"n/a"}`,`receivedConfigKind=${String(e.receivedConfigKind)}`,`expectedConfigKind=${e.expectedConfigKind??"n/a"}`,`expectedLanguage=${e.expectedLanguage??"n/a"}`,`retryable=${e.retryable}`,`recommendedAction=${e.recommendedAction}`].join("; "),r=e.recommendedAction==="USE_SDK_CONFIG_V1"?" Run `fern sdk migrate`, then pass the generated document with `fern generate --sdk-config <path>` before using this generator version.":"";return`Cannot submit SDK generation to sdk-gen-api: ${e.message} [${t}].${r}`}function bql(e,t){if(e==null)return t.version;if(e.requestedVersion!=null)return e.requestedVersion;if(!Ugi(e,t.version))throw Eql(e,t.version)}function Eql(e,t){return new Error(`An unpinned sdk-gen-api route does not match its generator version representation: invocationVersion=${JSON.stringify(t)}; configKind=${e.configKind}; versionSource=${e.requestedVersion==null?e.versionSource:"pinned"}`)}function N0s(e,t){return bql(e,t)??bag}function Nag(e,t){let r=Iag.compare(e.targetIdSeed??"",t.targetIdSeed??"");if(r!==0)return r;let n=e.generatorInvocation.name.localeCompare(t.generatorInvocation.name);if(n!==0)return n;let i=N0s(e.sdkGenApiRoute,e.generatorInvocation).localeCompare(N0s(t.sdkGenApiRoute,t.generatorInvocation));return i!==0?i:e.sdkVersion.localeCompare(t.sdkVersion)}function jag(e,t){e.length>uwt&&t.context.failAndThrow(`sdk-gen-api supports at most ${uwt} target payloads per build; received ${e.length}`,void 0,{code:S.Code.ConfigError}),t.specsTarGzBuffer.length>mag&&t.context.failAndThrow(`sdk-gen-api source archive is ${JG(t.specsTarGzBuffer.length)}, exceeding the 25 MiB compressed limit`,void 0,{code:S.Code.ConfigError});let r=e.findIndex(s=>s.payload.body.length>(s.payload.payloadKind==="fern-runtime-bundle"?qGl:WGl));if(r>=0){let s=e[r],a=s?.payload.payloadKind==="fern-runtime-bundle"?qGl:WGl;t.context.failAndThrow(`sdk-gen-api ${XGl(s,r)} is ${JG(s?.payload.body.length??0)}, exceeding the ${JG(a)} upload limit`,void 0,{code:S.Code.ConfigError})}let n=e.reduce((s,a)=>s+a.payload.body.length,t.specsTarGzBuffer.length);n>nql&&t.context.failAndThrow(`sdk-gen-api source archive and target payloads total ${JG(n)}, exceeding the 50 MiB in-memory upload limit; reduce the source archive size, target payload size, or number of targets`,void 0,{code:S.Code.ConfigError});let i=e.reduce((s,a)=>a.payload.payloadKind==="fern-runtime-bundle"?s+a.payload.body.length:s,0);i>gag&&t.context.failAndThrow(`sdk-gen-api runtime bundles total ${JG(i)}, exceeding the 25 MiB compressed limit; reduce the number or size of targets`,void 0,{code:S.Code.ConfigError}),ZGl({buffer:t.specsTarGzBuffer,maxBytes:hag,label:"source archive",context:t.context});let o=0;for(let[s,a]of e.entries())o+=a.payload.payloadKind==="fern-runtime-bundle"?ZGl({buffer:a.payload.body,maxBytes:Aag,label:XGl(a,s),context:t.context}):a.payload.body.length,o>rql&&t.context.failAndThrow(`sdk-gen-api target payloads total ${JG(o)}, exceeding the 100 MiB decoded limit; reduce the number or size of targets`,void 0,{code:S.Code.ConfigError})}function XGl(e,t){return`${e?.payload.payloadKind??"target payload"} ${e?.targetIdSeed??t.toString()}`}function ZGl({buffer:e,maxBytes:t,label:r,context:n}){let i;try{i=(0,tql.gunzipSync)(e,{maxOutputLength:t+1})}catch(o){return Qag(o)?n.failAndThrow(`sdk-gen-api ${r} exceeds the ${JG(t)} decompressed limit`,void 0,{code:S.Code.ConfigError}):n.failAndThrow(`sdk-gen-api ${r} is malformed gzip; regenerate it and retry`,o,{code:S.Code.ConfigError})}return i.length>t?n.failAndThrow(`sdk-gen-api ${r} is ${JG(i.length)} decompressed, exceeding the ${JG(t)} decompressed limit`,void 0,{code:S.Code.ConfigError}):i.length}function Qag(e){return e instanceof Error&&"code"in e&&e.code==="ERR_BUFFER_TOO_LARGE"}function JG(e){return`${(e/(1024*1024)).toFixed(2)} MiB`}function zag(e){return`${(e/1024).toFixed(2)} KiB`}function Mag(e,t){let r=e.targets.find(n=>n.targetId===t);return r?.status==="failed"||r?.status==="succeeded"}async function Lag(e,t,r){let n=r.targets.find(o=>o.targetId===t);if(n==null)return e.context.failAndThrow("sdk-gen-api response did not contain the requested target",void 0,{code:S.Code.InternalError});if(n.status==="failed")return n.publication?.status==="failure"?e.context.failAndThrow(`sdk-gen-api publication failed (${n.publication.error.code}): ${n.publication.error.message}`,void 0,{code:S.Code.ContainerError}):e.context.failAndThrow(n.error?.message??"sdk-gen-api generation failed",void 0,{code:S.Code.ContainerError});if(n.status!=="succeeded")return e.context.failAndThrow(`sdk-gen-api build ended with status ${r.status} while target ${n.targetId} remained ${n.status}`,void 0,{code:S.Code.InternalError});if(n.result?.artifactUrl==null)return e.context.failAndThrow("sdk-gen-api target completed without an artifact URL",void 0,{code:S.Code.InternalError});e.absolutePathToPreview!=null?await Mgi({s3PreSignedReadUrl:n.result.artifactUrl,absolutePathToLocalOutput:ze(e.absolutePathToPreview,ve.of(hVl(e.generatorInvocation.name,Vag(e.generatorInvocation)))),context:e.context,skipFernignore:e.skipFernignore}):e.absolutePathToLocalOutputArchive!=null?await QGl({s3PreSignedReadUrl:n.result.artifactUrl,absolutePathToLocalOutput:e.absolutePathToLocalOutputArchive,context:e.context}):e.generatorInvocation.absolutePathToLocalOutput!=null&&await Mgi({s3PreSignedReadUrl:n.result.artifactUrl,absolutePathToLocalOutput:e.generatorInvocation.absolutePathToLocalOutput,context:e.context,skipFernignore:e.skipFernignore});let i=n.result.actualVersion??e.sdkVersion;return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:i,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:Uag(n,i)}}function Vag(e){return e.sdkConfigTargetIndex}function Uag(e,t){if(e.publication?.status!=="success")return;let r=e.publication.publishTarget.type,n=e.publication.publishTarget.identifier,i=_ag(n);switch(r){case"npm":return{registry:r,label:"npm",version:t,identifier:n,...i!=null?{url:i}:{}};case"pypi":return{registry:r,label:"PyPI",version:t,identifier:n,...i!=null?{url:i}:{}};case"crates":return{registry:r,label:"crates.io",version:t,identifier:n,...i!=null?{url:i}:{}};case"maven":return{registry:r,label:"Maven Central",version:t,identifier:n,...i!=null?{url:i}:{}};case"github":case"unsupported":return}}function _ag(e){try{let t=new URL(e);return t.protocol==="https:"&&t.username.length===0&&t.password.length===0?e:void 0}catch{return}}function Gag(e){let t=e[0];if(t==null)return;let r=(0,hke.createHash)("sha256").update(t.specsTarGzBuffer).digest("hex");for(let n of e.slice(1)){let i=(0,hke.createHash)("sha256").update(n.specsTarGzBuffer).digest("hex");if(n.apiName!==t.apiName||n.organization!==t.organization||n.token.value!==t.token.value||i!==r)throw new Error("Fern sdk-gen-api batch targets must share API, organization, token, and sources")}}function qag({apiName:e,organization:t,cliVersion:r,specsTarGzBuffer:n,targets:i}){if(i.length===0)throw new Error("Cannot create an empty Fern sdk-gen-api request");let o=[],s=i.map(({targetIdSeed:d,sourceSpecIndexes:f},m)=>{if(f==null)return o.some(A=>A.id==="default")||o.push({id:"default",specIndexes:"all"}),"default";let g=`target-${d??m.toString()}`;return o.push({id:g,specIndexes:f}),g}),a=i.map(({generatorInvocation:d,sdkGenApiRoute:f,sdkName:m,sdkVersion:g,apiVersion:A,targetIdSeed:y,audiences:E,payload:x,requestedOutput:v},C)=>{let O=Vk(d.name);if(O==null)throw new Error(`Unsupported Fern SDK generator: ${d.name}`);let D=aql(d),R=x.payloadKind==="fern-runtime-bundle"?D.package:x.package,P=bql(f,d),M=N0s(f,d);return{targetId:(0,hke.createHash)("sha256").update(`${e}:${d.name}:${M}:${y??C.toString()}`).digest("hex").slice(0,20),apiInputId:s[C]??"default",language:O,sdk:{name:m??e,version:g,...A!=null?{apiVersion:A}:{}},fernGenerator:{id:d.name,...P!=null?{version:P}:{}},payloadKind:x.payloadKind,...R!=null?{package:R}:{},invocation:{customConfig:HX(d.config)??{},keywords:d.keywords??[],smartCasing:d.smartCasing,smartCasingDigitWordBoundary:d.smartCasingDigitWordBoundary,disableExamples:d.disableExamples,...E!=null?{audiences:E}:{},...d.readme!=null?{readme:d.readme}:{},...d.settings!=null?{settings:d.settings}:{},...d.apiOverride!=null?{apiOverride:d.apiOverride}:{}},requestedOutput:v??D.requestedOutput}}),c=i.map(d=>(0,hke.createHash)("sha256").update(d.payload.body).digest("hex")),u=JSON.stringify({protocolVersion:2,organization:t,apiName:e,apiInputs:o,targets:a,payloadHashes:c,sourceHash:(0,hke.createHash)("sha256").update(n).digest("hex")}),l=a.some((d,f)=>d.requestedOutput.type==="publish"||d.requestedOutput.type==="github"&&d.requestedOutput.publish!=null&&i[f]?.publishCredential!=null)?Wag(u):void 0,p=(0,hke.createHash)("sha256").update(n).update(JSON.stringify({protocolVersion:2,organization:t,apiName:e,credentialSetId:l,apiInputs:o,targets:a,payloadHashes:c})).digest("hex");return{protocolVersion:2,apiName:e,...r?{cliVersion:r}:{},idempotencyKey:p,...l!=null?{credentialSetId:l}:{},apiInputs:o,targets:a}}function Wag(e){let t=(0,hke.createHash)("sha256").update(e).digest().subarray(0,16);t[6]=(t[6]??0)&15|128,t[8]=(t[8]??0)&63|128;let r=t.toString("hex");return`${r.slice(0,8)}-${r.slice(8,12)}-${r.slice(12,16)}-${r.slice(16,20)}-${r.slice(20)}`}Pc();aa();wt();_n();function S5e({apiName:e,organization:t,generatorInvocation:r}){let n=Hag(r);return{apiName:e,organization:t,customConfig:HX(r.config),outputConfig:n??er.GeneratorOutputConfig.local()}}function Hag(e){let t=e.outputMode;switch(t.type){case"downloadFiles":return er.GeneratorOutputConfig.local();case"publishV2":return Kag({publish:t.publishV2,version:e.version});case"githubV2":return Jag({github:t.githubV2,language:e.language,version:e.version});case"publish":case"github":return;default:Ee(t)}}function Kag({publish:e,version:t}){switch(e.type){case"npmOverride":{let r=e.npmOverride;return r==null?void 0:er.GeneratorOutputConfig.publish(er.PublishInfo.npm({version:t,packageName:r.packageName,repoUrl:void 0}))}case"mavenOverride":{let r=e.mavenOverride;return r==null?void 0:er.GeneratorOutputConfig.publish(er.PublishInfo.maven({version:t,coordinate:r.coordinate,repoUrl:void 0}))}case"pypiOverride":{let r=e.pypiOverride;return r==null?void 0:er.GeneratorOutputConfig.publish(er.PublishInfo.pypi({version:t,packageName:r.coordinate,repoUrl:void 0}))}case"rubyGemsOverride":{let r=e.rubyGemsOverride;return r==null?void 0:er.GeneratorOutputConfig.publish(er.PublishInfo.rubygems({version:t,packageName:r.packageName,repoUrl:void 0}))}case"nugetOverride":{let r=e.nugetOverride;return r==null?void 0:er.GeneratorOutputConfig.publish(er.PublishInfo.nuget({version:t,packageName:r.packageName,repoUrl:void 0}))}case"cratesOverride":{let r=e.cratesOverride;return r==null?void 0:er.GeneratorOutputConfig.publish(er.PublishInfo.crates({version:t,packageName:r.packageName,repoUrl:void 0}))}case"postman":return;default:Ee(e)}}function Jag({github:e,version:t,language:r}){let n=Yag({owner:e.owner,repo:e.repo});if(r===wn.GenerationLanguage.GO)return er.GeneratorOutputConfig.publish(er.PublishInfo.go({version:t,repoUrl:n}));if(r===wn.GenerationLanguage.SWIFT)return er.GeneratorOutputConfig.publish(er.PublishInfo.swift({version:t,repoUrl:n}));let i=e.publishInfo;if(i!=null)switch(i.type){case"maven":return er.GeneratorOutputConfig.publish(er.PublishInfo.maven({version:t,coordinate:i.coordinate,repoUrl:n}));case"npm":return er.GeneratorOutputConfig.publish(er.PublishInfo.npm({version:t,packageName:i.packageName,repoUrl:n}));case"pypi":return er.GeneratorOutputConfig.publish(er.PublishInfo.pypi({version:t,packageName:i.packageName,repoUrl:n}));case"rubygems":return er.GeneratorOutputConfig.publish(er.PublishInfo.rubygems({version:t,packageName:i.packageName,repoUrl:n}));case"nuget":return er.GeneratorOutputConfig.publish(er.PublishInfo.nuget({version:t,packageName:i.packageName,repoUrl:n}));case"crates":return er.GeneratorOutputConfig.publish(er.PublishInfo.crates({version:t,packageName:i.packageName,repoUrl:n}));case"postman":return;default:Ee(i)}}function Yag({owner:e,repo:t}){return`https://github.com/${e}/${t}`}ro();MU();Ft();k_();var py=be(KYl(),1),BL=be(oA(),1),XYl=be(require("path"),1),xgg="0.0.1";function AYt(e){if(e.raw?.github!=null&&typeof e.raw.github=="object"&&"license"in e.raw.github){let t=e.raw.github;if(t.license!=null){if(typeof t.license=="string")return{type:"basic",value:t.license};if(typeof t.license=="object"&&"custom"in t.license)return{type:"custom",value:t.license.custom}}}if(e.raw?.metadata?.license!=null){let t=e.raw.metadata.license;if(typeof t=="string")return{type:"basic",value:t};if(typeof t=="object"&&"custom"in t)return{type:"custom",value:t.custom}}}function Cgg(e,t){let r=AYt(e);if(r!=null){if(r.type==="basic"){if(r.value==="MIT"||r.value==="Apache-2.0")return py.FernGeneratorExec.LicenseConfig.basic({id:r.value==="MIT"?py.FernGeneratorExec.LicenseId.Mit:py.FernGeneratorExec.LicenseId.Apache2})}else if(r.type==="custom")return py.FernGeneratorExec.LicenseConfig.custom({filename:XYl.basename(r.value)})}}function gyi(e,t={}){let r=t.omitPublishCredentials??!1;return e!=null?Hr.GithubPublishInfo._visit(e,{npm:n=>{let i=(n.token??"").trim(),o=aIs(i),s=i!=="";return py.FernGeneratorExec.GithubPublishInfo.npm({registryUrl:n.registryUrl,packageName:n.packageName,tokenEnvironmentVariable:(0,BL.EnvironmentVariable)(r?o!=null?"<USE_OIDC>":"":o!=null?"<USE_OIDC>":i.startsWith("${")&&i.endsWith("}")?i.slice(2,-1).trim():""),shouldGeneratePublishWorkflow:o!=null||s})},maven:n=>py.FernGeneratorExec.GithubPublishInfo.maven({registryUrl:n.registryUrl,coordinate:n.coordinate,usernameEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":n.credentials?.username??""),passwordEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":n.credentials?.password??""),signature:n.signature!=null&&!r?{keyIdEnvironmentVariable:(0,BL.EnvironmentVariable)(n.signature.keyId??""),passwordEnvironmentVariable:(0,BL.EnvironmentVariable)(n.signature.password??""),secretKeyEnvironmentVariable:(0,BL.EnvironmentVariable)(n.signature.secretKey??"")}:void 0}),pypi:n=>{let i=(n.credentials?.password??"").trim(),o=aIs(i),s=n.credentials!=null;return py.FernGeneratorExec.GithubPublishInfo.pypi({registryUrl:n.registryUrl,packageName:n.packageName,usernameEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":"PYPI_USERNAME"),passwordEnvironmentVariable:(0,BL.EnvironmentVariable)(r?o!=null?"OIDC":"":o!=null?"OIDC":"PYPI_PASSWORD"),shouldGeneratePublishWorkflow:o!=null||s,pypiMetadata:n.pypiMetadata})},rubygems:n=>py.FernGeneratorExec.GithubPublishInfo.rubygems({registryUrl:n.registryUrl,packageName:n.packageName,apiKeyEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":n.apiKey??"")}),postman:n=>py.FernGeneratorExec.GithubPublishInfo.postman({apiKeyEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":n.apiKey??""),workspaceIdEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":n.workspaceId??"")}),nuget:n=>{let i=(n.apiKey??"").trim(),o=aIs(i);return py.FernGeneratorExec.GithubPublishInfo.nuget({registryUrl:n.registryUrl,packageName:n.packageName,apiKeyEnvironmentVariable:(0,BL.EnvironmentVariable)(r?o!=null?"<USE_OIDC>":"":o!=null?"<USE_OIDC>":i.startsWith("${")&&i.endsWith("}")?i.slice(2,-1).trim():""),shouldGeneratePublishWorkflow:o!=null?!0:void 0})},crates:n=>py.FernGeneratorExec.GithubPublishInfo.crates({registryUrl:n.registryUrl,packageName:n.packageName,tokenEnvironmentVariable:(0,BL.EnvironmentVariable)(r?"":n.token??"")}),_other:()=>{}}):void 0}function aIs(e){if(e==="OIDC"||e==="<USE_OIDC>")return e}function zwt({generatorInvocation:e,customConfig:t,workspaceName:r,organization:n,outputVersion:i=xgg,absolutePathToSnippet:o,absolutePathToSnippetTemplates:s,absolutePathToFernConfig:a,writeUnitTests:c,generateOauthClients:u,generatePaginatedClients:l,whiteLabel:p,publishToRegistry:d,omitPublishCredentials:f,paths:m}){let g=Cgg(e,a),{snippetPath:A,snippetTemplatePath:y,irPath:E,outputDirectory:x}=m,v=e.outputMode._visit({publish:O=>{if(d===!0){let D=Sgg(O,f===!0);return{...YYl(i,D,m),snippetFilepath:A,publishingMetadata:e.publishMetadata}}return{...JYl(i,O,e,m),snippetFilepath:A,publishingMetadata:e.publishMetadata}},publishV2:O=>{if(d===!0){let D=Tgg(O,f===!0);return{...YYl(i,D,m),snippetFilepath:A,publishingMetadata:e.publishMetadata}}return{...JYl(i,O,e,m),snippetFilepath:A,publishingMetadata:e.publishMetadata}},downloadFiles:()=>({mode:py.FernGeneratorExec.OutputMode.downloadFiles(),path:x,snippetFilepath:A,publishingMetadata:e.publishMetadata}),github:O=>{let D={mode:py.FernGeneratorExec.OutputMode.github({repoUrl:`https://github.com/${O.owner}/${O.repo}`,version:i,publishInfo:gyi(O.publishInfo,{omitPublishCredentials:f}),installationToken:void 0}),path:x,publishingMetadata:e.publishMetadata};return o!==void 0&&(D.snippetFilepath=A),s!==void 0&&(D.snippetTemplateFilepath=y),D},githubV2:O=>{let D=O._visit({commitAndRelease:P=>`https://github.com/${P.owner}/${P.repo}`,push:P=>`https://github.com/${P.owner}/${P.repo}`,pullRequest:P=>`https://github.com/${P.owner}/${P.repo}`,_other:()=>{throw new S({message:"Encountered unknown github mode",code:S.Code.InternalError})}}),R={mode:py.FernGeneratorExec.OutputMode.github({repoUrl:D,version:i,publishInfo:gyi(O.publishInfo,{omitPublishCredentials:f})}),path:x,publishingMetadata:e.publishMetadata};return o!==void 0&&(R.snippetFilepath=A),s!==void 0&&(R.snippetTemplateFilepath=y),R},_other:()=>{throw new S({message:"Output type did not match any of the types supported by Fern",code:S.Code.InternalError})}}),C=Ogg(e,i);return{irFilepath:E,output:v,publish:C,customConfig:t,workspaceName:r,organization:n,environment:py.FernGeneratorExec.GeneratorEnvironment.local(),dryRun:!1,whitelabel:p??!1,writeUnitTests:c,generateOauthClients:u,generatePaginatedClients:l,license:g}}function JYl(e,t,r,n){let{outputDirectory:i}=n,o;"registryOverrides"in t?o=t.registryOverrides.maven??t.registryOverrides.npm:o!=null&&(o=t._visit({mavenOverride:a=>a,npmOverride:a=>a,pypiOverride:a=>a,rubyGemsOverride:a=>a,postman:a=>a,nugetOverride:a=>a,cratesOverride:a=>a,_other:()=>{}}));let s="";return r.raw?.github!=null&&(cve(r.raw.github)?s=dC(r.raw.github.uri).repoUrl:s=r.raw?.github.repository),{mode:py.FernGeneratorExec.OutputMode.github({repoUrl:s,version:e}),path:i}}function YYl(e,t,r){let{outputDirectory:n}=r,{registries:i,registriesV2:o}=wgg(t);return{mode:py.FernGeneratorExec.OutputMode.publish({registries:i,registriesV2:o,publishTarget:t,version:e}),path:n}}function wgg(e){let t=structuredClone(ZYl),r=structuredClone($Yl);if(e==null)return{registries:t,registriesV2:r};switch(e.type){case"npm":t.npm={registryUrl:e.registryUrl,token:e.token,scope:""},r.npm={registryUrl:e.registryUrl,token:e.token,packageName:e.packageName};break;case"maven":t.maven={registryUrl:e.registryUrl,username:e.username,password:e.password,group:"",signature:e.signature},r.maven={registryUrl:e.registryUrl,username:e.username,password:e.password,coordinate:e.coordinate,signature:e.signature};break;case"pypi":r.pypi={registryUrl:e.registryUrl,username:e.username,password:e.password,packageName:e.packageName,pypiMetadata:e.pypiMetadata};break;case"rubygems":r.rubygems={registryUrl:e.registryUrl,apiKey:e.apiKey,packageName:e.packageName};break;case"nuget":r.nuget={registryUrl:e.registryUrl,apiKey:e.apiKey,packageName:e.packageName};break;case"crates":r.crates={registryUrl:e.registryUrl,token:e.token,packageName:e.packageName};break;default:break}return{registries:t,registriesV2:r}}function Sgg(e,t){if("registryOverrides"in e){let r=e.registryOverrides;if(r.npm!=null)return py.FernGeneratorExec.GeneratorPublishTarget.npm({registryUrl:r.npm.registryUrl,token:t?"":r.npm.token,packageName:r.npm.packageName});if(r.maven!=null)return py.FernGeneratorExec.GeneratorPublishTarget.maven({registryUrl:r.maven.registryUrl,username:t?"":r.maven.username??"",password:t?"":r.maven.password??"",coordinate:r.maven.coordinate??"",signature:void 0})}}function Tgg(e,t){return e._visit({npmOverride:r=>r!=null?py.FernGeneratorExec.GeneratorPublishTarget.npm({registryUrl:r.registryUrl,token:t?"":r.token,packageName:r.packageName}):void 0,mavenOverride:r=>r!=null?py.FernGeneratorExec.GeneratorPublishTarget.maven({registryUrl:r.registryUrl,username:t?"":r.username,password:t?"":r.password,coordinate:r.coordinate,signature:t?void 0:r.signature??void 0}):void 0,pypiOverride:r=>r!=null?py.FernGeneratorExec.GeneratorPublishTarget.pypi({registryUrl:r.registryUrl,username:t?"":r.username,password:t?"":r.password,packageName:r.coordinate,pypiMetadata:r.pypiMetadata??void 0}):void 0,rubyGemsOverride:r=>r!=null?py.FernGeneratorExec.GeneratorPublishTarget.rubygems({registryUrl:r.registryUrl,apiKey:t?"":r.apiKey,packageName:r.packageName}):void 0,nugetOverride:r=>r!=null?py.FernGeneratorExec.GeneratorPublishTarget.nuget({registryUrl:r.registryUrl,apiKey:t?"":r.apiKey,packageName:r.packageName}):void 0,cratesOverride:r=>r!=null?py.FernGeneratorExec.GeneratorPublishTarget.crates({registryUrl:r.registryUrl,token:t?"":r.token,packageName:r.packageName}):void 0,postman:r=>py.FernGeneratorExec.GeneratorPublishTarget.postman({apiKey:t?"":r.apiKey,workspaceId:t?"":r.workspaceId}),_other:()=>{}})}function Ogg(e,t){let r=e.outputMode._visit({publish:()=>{},publishV2:()=>{},downloadFiles:()=>{},github:o=>o.publishInfo,githubV2:o=>o._visit({push:s=>s.publishInfo,commitAndRelease:s=>s.publishInfo,pullRequest:s=>s.publishInfo,_other:()=>{}}),_other:()=>{}});if(r==null||r.type!=="pypi")return;let n=(r.credentials?.password??"").trim();if(n!=="OIDC"&&n!=="<USE_OIDC>")return;let i=structuredClone($Yl);return i.pypi={registryUrl:r.registryUrl,username:"__token__",password:"OIDC",packageName:r.packageName,pypiMetadata:r.pypiMetadata},{registries:structuredClone(ZYl),registriesV2:i,publishTarget:void 0,version:t}}var ZYl={maven:{registryUrl:"",username:"",password:"",group:"",signature:void 0},npm:{registryUrl:"",token:"",scope:""}},$Yl={maven:{registryUrl:"",username:"",password:"",coordinate:"",signature:void 0},npm:{registryUrl:"",token:"",packageName:""},pypi:{registryUrl:"",username:"",password:"",packageName:"",pypiMetadata:void 0},rubygems:{registryUrl:"",apiKey:"",packageName:""},nuget:{registryUrl:"",apiKey:"",packageName:""},crates:{registryUrl:"",token:"",packageName:""}};wt();function yYt(e,t){if(e.startsWith("https://")||e.startsWith("http://"))return e;switch(t){case"github":return`https://github.com/${e}`;case"gitlab":return`https://gitlab.com/${e}`;case"bitbucket":return`https://bitbucket.org/${e}`;default:Ee(t)}}cs();var uXl=be(DE(),1),Pr=T.string().min(1),Y5e=Pr.refine(e=>!/^(?:[\\/]|[A-Za-z]:)/.test(e)&&!e.split(/[\\/]/).some(t=>t===".."),{message:"must be a relative path without parent directory segments"}),lXl=T.string().refine(e=>e.trim()!==e||!/^\d/.test(e)?!1:uXl.default.parse(e,{loose:!1})?.raw===e,{message:"must be an exact semantic version"}),fIs=T.lazy(()=>T.union([T.null(),T.boolean(),T.number(),T.string(),T.array(fIs),T.record(T.string(),fIs)]));T.record(T.string(),fIs);var Eyi=T.strictObject({name:Pr.optional(),environmentVariable:Pr.optional(),description:T.string().optional(),omit:T.boolean().optional()}),Pgg=T.strictObject({id:Pr,type:T.literal("api-key"),location:T.enum(["header","query","cookie"]),name:Pr,prefix:Pr.optional(),environmentVariable:Pr.optional(),description:T.string().optional()}),Bgg=T.strictObject({id:Pr,type:T.literal("bearer"),header:Pr.optional(),prefix:Pr.optional(),environmentVariable:Pr.optional(),description:T.string().optional()}),Dgg=T.strictObject({id:Pr,type:T.literal("basic"),username:Eyi.optional(),password:Eyi.optional(),description:T.string().optional()}),Ayi=T.strictObject({name:Pr,description:T.string().optional()}),Rgg=T.discriminatedUnion("type",[T.strictObject({type:T.literal("authorization-code"),authorizationUrl:Pr,tokenUrl:Pr,refreshUrl:Pr.optional(),scopes:T.array(Ayi).optional()}),T.strictObject({type:T.literal("client-credentials"),tokenUrl:Pr,refreshUrl:Pr.optional(),scopes:T.array(Ayi).optional()}),T.strictObject({type:T.literal("implicit"),authorizationUrl:Pr,refreshUrl:Pr.optional(),scopes:T.array(Ayi).optional()}),T.strictObject({type:T.literal("password"),tokenUrl:Pr,refreshUrl:Pr.optional(),scopes:T.array(Ayi).optional()})]),kgg=T.strictObject({id:Pr,type:T.literal("oauth2"),flows:T.array(Rgg).min(1),clientId:Eyi.optional(),clientSecret:Eyi.optional(),tokenHeader:Pr.optional(),tokenPrefix:Pr.optional(),refreshBufferSeconds:T.number().nonnegative().optional(),description:T.string().optional()}),Fgg=T.strictObject({location:T.enum(["header","query","cookie"]),name:Pr,prefix:Pr.optional(),environmentVariable:Pr.optional()}),Ngg=T.strictObject({id:Pr,type:T.literal("custom"),parameters:T.array(Fgg).min(1),description:T.string().optional()}),jgg=T.discriminatedUnion("type",[Pgg,Bgg,Dgg,kgg,Ngg]),Qgg=T.strictObject({schemes:T.array(Pr).min(1)}),zgg=T.strictObject({schemes:T.array(jgg).min(1),requirements:T.array(Qgg).optional(),endpointSecurity:T.boolean().optional()}).superRefine(({requirements:e,schemes:t},r)=>{let n=new Set;t.forEach(({id:i},o)=>{n.has(i)&&r.addIssue({code:"custom",message:`auth scheme id "${i}" must be unique`,path:["schemes",o,"id"]}),n.add(i)}),e?.forEach((i,o)=>{i.schemes.forEach((s,a)=>{n.has(s)||r.addIssue({code:"custom",message:`auth requirement references unknown scheme "${s}"`,path:["requirements",o,"schemes",a]})})})}),Mgg=T.strictObject({name:Pr,url:Pr,serverName:Pr.optional()}),Lgg=T.strictObject({name:Pr,urls:T.array(Mgg).min(1),description:T.string().optional()}),Vgg=T.strictObject({name:Pr,value:T.string().optional(),description:T.string().optional(),environmentVariable:Pr.optional()}),Ugg=T.strictObject({name:Pr,description:T.string().optional(),defaultValue:T.string().optional()}),_gg=T.strictObject({baseUrl:T.string().default(""),environments:T.array(Lgg).default([]),environmentVariables:T.array(Ugg).default([]),defaultEnvironment:Pr.optional(),auth:zgg.optional(),headers:T.array(Vgg).optional(),audiences:T.array(Pr).optional()});var Ggg=_gg,pXl={enabled:T.boolean().optional(),maxAttempts:T.number().int().min(1).optional(),retryDelayMs:T.number().nonnegative().optional(),maxDelayMs:T.number().nonnegative().optional(),jitterMs:T.number().nonnegative().optional(),backoffFactor:T.number().positive().optional(),statusCodes:T.array(T.number().int().min(100).max(599)).optional(),methods:T.array(Pr).optional(),statusCodeProfile:T.enum(["legacy","recommended"]).optional(),maxRetryAfterDelayMs:T.number().nonnegative().optional()};function fXl({maxDelayMs:e,retryDelayMs:t},r){e!==void 0&&t!==void 0&&e<t&&r.addIssue({code:"custom",message:"maxDelayMs must be greater than or equal to retryDelayMs",path:["maxDelayMs"]})}var qgg=T.strictObject(pXl).superRefine(fXl),Wgg=T.strictObject({...pXl,enabled:T.boolean().default(!0),maxAttempts:T.number().int().min(1).default(3),retryDelayMs:T.number().nonnegative().default(150),maxDelayMs:T.number().nonnegative().default(5e3),jitterMs:T.number().nonnegative().default(50),backoffFactor:T.number().positive().default(2),methods:T.array(Pr).default(["GET","POST","PUT","DELETE","PATCH","HEAD","OPTIONS"]),maxRetryAfterDelayMs:T.number().nonnegative().default(6e4)}).superRefine(fXl),dXl=T.strictObject({name:Pr,example:T.string().optional(),description:T.string().optional(),required:T.boolean().optional()}),cIs=T.enum(["wrapped","inline","language-default"]),Hgg=T.strictObject({enabled:T.boolean(),endpoint:Pr.optional(),accessTokenField:Pr.optional(),refreshTokenField:Pr.optional()}).superRefine(({enabled:e,endpoint:t},r)=>{e&&t===void 0&&r.addIssue({code:"custom",message:"endpoint is required when tokenRefresh is enabled",path:["endpoint"]})}),mXl={retry:qgg.optional(),responseHeaders:T.boolean().optional(),responseValidation:T.boolean().optional(),multiTenant:T.boolean().optional(),additionalConstructorParameters:T.array(dXl).optional(),timeoutMs:T.union([T.number().nonnegative(),T.literal("infinity")]).optional(),requestParameterStyle:cIs.optional(),pathParameterStyle:cIs.optional(),filePropertyStyle:cIs.optional(),useDefaultRequestParameterValues:T.boolean().optional(),respectOptionalRequestBody:T.boolean().optional(),tokenRefresh:Hgg.optional()},Kgg=T.strictObject(mXl),Jgg=T.strictObject({...mXl,retry:Wgg.prefault({}),responseHeaders:T.boolean().default(!1),multiTenant:T.boolean().default(!1),additionalConstructorParameters:T.array(dXl).default([])}),Ygg=Jgg,Xgg=Kgg,gIs=Y5e.regex(/^(?!.*(?:^|\/)\.{1,2}(?:\/|$))[A-Za-z0-9._~-]+(?:\/[A-Za-z0-9._~-]+)*$/,"Go module path must use letters, numbers, dots, dashes, underscores or tildes, in slash-delimited segments"),Zgg=Pr.regex(/^[a-z0-9]([_.-]?[a-z0-9]+)*\/[a-z0-9](([_.]?|-{0,2})[a-z0-9]+)*$/,'Composer package name must be a lowercase "vendor/package" name'),$gg=T.strictObject({name:Pr,email:T.email().optional(),url:Pr.optional()}),eAg=T.strictObject({name:Pr,email:T.email().optional(),organization:Pr.optional(),organizationUrl:Pr.optional()}),tAg=T.strictObject({type:Pr,name:Pr.optional(),url:Pr.optional(),path:Pr.optional()}),rAg=T.discriminatedUnion("type",[T.strictObject({type:T.literal("registry"),registry:Pr.optional()}),T.strictObject({type:T.literal("git"),url:Pr,ref:Pr.optional(),subdirectory:Pr.optional()}),T.strictObject({type:T.literal("path"),path:Pr})]),uIs=T.strictObject({name:Pr,version:Pr.optional(),source:rAg.optional(),packageName:Pr.optional(),features:T.array(Pr).optional(),extras:T.array(Pr).optional(),optional:T.boolean().optional(),defaultFeatures:T.boolean().optional(),environmentMarker:Pr.optional()}).refine(({source:e,version:t})=>e!==void 0||t!==void 0,{message:"dependency must define a version or a source"}),nAg=T.strictObject({label:Pr,url:Pr}),iAg=T.strictObject({packageName:Pr.optional(),moduleName:Pr.optional(),modulePath:gIs.optional(),namespace:Pr.optional(),groupId:Pr.optional(),artifactId:Pr.optional(),description:T.string().optional(),repository:Pr.optional(),homepage:Pr.optional(),documentationUrl:Pr.optional(),authors:T.array($gg).optional(),developers:T.array(eAg).optional(),license:tAg.optional(),keywords:T.array(Pr).optional(),classifiers:T.array(Pr).optional(),projectUrls:T.array(nAg).optional(),extraDependencies:T.array(uIs).optional(),extraDevDependencies:T.array(uIs).optional(),extraPeerDependencies:T.array(uIs).optional()}),oAg=T.enum(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","TRACE","CONNECT"]),eXl=T.strictObject({method:oAg,path:Pr,stream:T.boolean().optional()}),sAg=T.strictObject({title:Pr,content:T.string()}),aAg=T.strictObject({apiName:Pr.optional(),introduction:T.string().optional(),apiReferenceLink:Pr.optional(),bannerLink:Pr.optional(),disabledSections:T.array(Pr).optional(),customSections:T.array(sAg).optional(),defaultEndpoint:eXl.optional(),features:T.record(T.string(),T.array(eXl)).optional()}),cAg=T.strictObject({enabled:T.boolean(),format:T.enum(["md","json"]).optional(),outputPath:Pr.optional()}),uAg=T.strictObject({readme:aAg.optional(),snippets:cAg.optional(),referenceBaseUrl:Pr.optional(),includeApiReference:T.boolean().optional()});var hXl=uAg,xyi=class extends Error{constructor(e){super(e.map(({path:t,reason:r})=>`${t.join(".")}: ${r}`).join(`
4297
- `)),this.issues=e,this.name="FernConfigMappingError"}issues};function P4(e,t,r,n,i){throw new xyi([{code:e,severity:"error",path:t,reason:r,suggestedAction:n,...cf("sdkConfigPath",i)}])}function lAg(e,t,r){let n=oj(e,["defaultTimeout","defaultTimeoutInMilliseconds"],r);if(n&&(n.value==="infinity"||mIs(n.value)))return Xl(t,n.path),n.value;let i=oj(e,["defaultTimeoutInSeconds","timeoutInSeconds","timeout"],r);if(i&&(i.value==="infinity"||mIs(i.value)))return Xl(t,i.path),i.value==="infinity"?"infinity":i.value*1e3}function oj(e,t,r){for(let[n,i]of Object.entries(e))if(t.some(o=>tXl(o)===tXl(n)))return{value:i,path:[...r,n]}}function dae(e,t,r,n){let i=oj(e,t,n);return i&&Jp(i.value)?{value:i.value,path:i.path}:void 0}function Ma(e,t,r,n){let i=oj(e,t,n);if(!(!i||typeof i.value!="string"||i.value.length===0))return Xl(r,i.path),i.value}function pAg(e,t,r,n){let i=oj(e,t,n);if(!(!i||!gIs.safeParse(i.value).success))return Xl(r,i.path),i.value}function ap(e,t,r,n){let i=oj(e,t,n);if(!(!i||typeof i.value!="boolean"))return Xl(r,i.path),i.value}function dIs(e,t,r,n,i=0){let o=oj(e,t,n);if(!(!o||!mIs(o.value)||!Number.isInteger(o.value)||o.value<i))return Xl(r,o.path),o.value}function dge(e,t,r,n,i){let o=oj(e,t,i);if(!(!o||typeof o.value!="string"||!r.includes(o.value)))return Xl(n,o.path),o.value}function fAg(e,t,r,n,i){let o=oj(e,t,i);if(!(!o||!Array.isArray(o.value)||o.value.some(s=>typeof s!="string"||!r.includes(s))))return Xl(n,o.path),o.value}function Lwt(e,t,r,n){let i=oj(e,t,n),o=i?Rke(i.value):void 0;if(!(!i||!o))return Xl(r,i.path),o}function gXl(e,t,r,n){let i=oj(e,t,n);if(!i||!Jp(i.value))return;let o=Object.entries(i.value);if(!o.some(([,s])=>!Rke(s)))return Xl(r,i.path),Object.fromEntries(o)}function byi(e,t,r){return Iyi(e,t).filter(n=>{let i=AXl(n);return![...r.consumedPaths].some(o=>i===o||i.startsWith(`${o}.`))}).map(n=>({code:"FERN_CONFIG_FIELD_UNSUPPORTED",severity:"warning",path:n,reason:"Fern configuration field is not represented by SDK Config v1",suggestedAction:"Review this value and set the closest SDK Config field manually, or preserve the setting outside SDK Config if no equivalent exists."}))}function Iyi(e,t){return Array.isArray(e)?e.flatMap((r,n)=>Iyi(r,[...t,n])):Jp(e)?Object.entries(e).flatMap(([r,n])=>Iyi(n,[...t,r])):e===void 0?[]:[t]}function Xl(e,t){e.consumedPaths.add(AXl(t))}function AXl(e){return e.join(".")}function tXl(e){return e.replace(/[-_]/g,"").toLowerCase()}function sA(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function cf(e,t){return t===void 0?{}:{[e]:t}}function bYt(e,t){return Object.keys(t).length===0?{}:{[e]:t}}function Jp(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mIs(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Dg(e){return typeof e=="string"&&e.length>0?e:void 0}function Rke(e){return Array.isArray(e)&&e.every(t=>typeof t=="string"&&t.length>0)?e:void 0}function rXl(e){return JSON.stringify(hIs(e))}function hIs(e){return Array.isArray(e)?e.map(hIs):Jp(e)?Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,hIs(r)])):e}function dAg(e,t,r){let n=Jp(e.raw)?e.raw:void 0,i=n&&Jp(n.output)?n.output:void 0,o=["group","generators",r,"outputMode"],s={consumedPaths:new Set,credentialDiagnostics:[]};if(e.output)return{output:mAg(e.output,i,s,r),unsupportedFields:s.credentialDiagnostics??[]};if(i?.location==="local-file-system")return Jp(e.outputMode)&&Xl(s,[...o,"type"]),Mwt({output:{delivery:"files",...typeof i.path=="string"&&i.path?{path:i.path}:{}}},e.outputMode,o,s,r);(!Jp(e.outputMode)||typeof e.outputMode.type!="string")&&P4("FERN_OUTPUT_REQUIRED",["group","generators",r,"outputMode"],`Cannot map output for Fern generator ${e.name}`,"Set generator.output to a public SDK Config output, or provide the resolved Fern outputMode.",["targets",r,"output"]);let a=e.outputMode;switch(Xl(s,[...o,"type"]),a.type){case"downloadFiles":return Mwt({output:{delivery:"zip"}},a,o,s,r);case"github":return Mwt(nXl(a,a.publishInfo,i,t,o,s,r),a,o,s,r);case"githubV2":{Jp(a.githubV2)||P4("FERN_GITHUB_OUTPUT_INVALID",["group","generators",r,"outputMode","githubV2"],"Fern githubV2 output is missing its configuration",'Set target.output manually with delivery "github" and the intended repository.',["targets",r,"output"]);let c=[...o,"githubV2"];return Mwt(nXl(a.githubV2,a.githubV2.publishInfo,i,t,c,s,r),a,o,s,r)}case"publishV2":{let c=AIs(a.publishV2,i,t,[...o,"publishV2"],s,r);return Mwt({output:{delivery:"zip",publish:c.publish},...cf("package",c.package)},a,o,s,r)}case"publish":{let c=yAg(a.registryOverrides,i,t,[...o,"registryOverrides"],s,r);return Mwt({output:{delivery:"zip",publish:c.publish},...cf("package",c.package)},a,o,s,r)}default:P4("FERN_OUTPUT_UNSUPPORTED",["group","generators",r,"outputMode","type"],`Unsupported Fern output mode "${a.type}"`,"Choose the equivalent files, zip, or github SDK Config output manually.",["targets",r,"output"])}}function mAg(e,t,r,n){let i=e.publish?yXl(e.publish,e.publish,t,r,n):void 0,o=i?{publish:i}:{};if(e.delivery!=="github")return{...e,...o};let{credentials:s,...a}=e.github;return s&&X5e(r,["group","generators",n,"output","github","credentials"],["targets",n,"output","github","credentials"],"Normalized GitHub credentials have no raw environment-expression provenance"),{...e,github:a,...o}}function nXl(e,t,r,n,i,o,s){let a=Dg(e.owner),c=Dg(e.repo);(!a||!c)&&P4("FERN_GITHUB_REPOSITORY_REQUIRED",i,"Fern GitHub output requires owner and repo",'Set target.output.github.repository manually as "owner/repository".',["targets",s,"output","github","repository"]),Xl(o,[...i,"owner"]),Xl(o,[...i,"repo"]);let u=t?AIs(t,r,n,[...i,"publishInfo"],o,s):void 0,l=Dg(e.type),p=AAg(e.reviewers,[...i,"reviewers"],o);return l&&Xl(o,[...i,"type"]),typeof e.makePr=="boolean"&&Xl(o,[...i,"makePr"]),Dg(e.host)&&Xl(o,[...i,"host"]),Dg(e.branch)&&Xl(o,[...i,"branch"]),hAg(e.credentials,[...i,"credentials"],o),Jp(e.credentials)&&X5e(o,[...i,"credentials"],["targets",s,"output","github","credentials"],"GitHub credentials cannot be traced safely to raw environment expressions"),{output:{delivery:"github",github:{repository:`${a}/${c}`,...cf("host",Dg(e.host)),...cf("branch",Dg(e.branch)),mode:e.makePr===!0||l==="pullRequest"?"pull-request":l==="push"?"push":"release",...cf("reviewers",p)},...u?{publish:u.publish}:{}},...cf("package",u?.package)}}function hAg(e,t,r){if(Jp(e))for(let n of["username","password","token","apiKey"])Dg(e[n])&&Xl(r,[...t,n])}function gAg(e,t,r){for(let n of["username","password","token","apiKey"])Dg(e[n])&&Xl(r,[...t,n]);if(Jp(e.credentials))for(let n of["username","password","token","apiKey"])Dg(e.credentials[n])&&Xl(r,[...t,"credentials",n]);Jp(e.signature)&&Xl(r,[...t,"signature"])}function AAg(e,t,r){if(Array.isArray(e)){let o=yyi(e,"team",t,r),s=yyi(e,"user",t,r);return o||s?{...cf("teams",o),...cf("users",s)}:void 0}if(!Jp(e))return;let n=yyi(e.teams,"team",[...t,"teams"],r),i=yyi(e.users,"user",[...t,"users"],r);return n||i?{...cf("teams",n),...cf("users",i)}:void 0}function yyi(e,t,r,n){if(!Array.isArray(e))return;let i=e.flatMap((o,s)=>typeof o=="string"?(Xl(n,[...r,s]),[o]):!Jp(o)||o.type!==t||typeof o.name!="string"?[]:(Xl(n,[...r,s,"type"]),Xl(n,[...r,s,"name"]),[o.name]));return i.length?i:void 0}function AIs(e,t,r,n,i,o){Jp(e)||P4("FERN_PUBLICATION_INVALID",n,"Fern publication output is invalid","Set target.output.publish and target.package manually.",["targets",o,"output","publish"]);let s=Dg(e.type);s&&Xl(i,[...n,"type"]);let a=s&&Jp(e[s])?e[s]:e,c=a===e?n:[...n,s],u=xAg(s,r,[...n,"type"],o),l=Dg(a.registryUrl);l&&Xl(i,[...c,"registryUrl"]),gAg(a,c,i);let p=yXl(sA({registry:u,url:l}),a,t,i,o);if(u==="maven"){let g=Dg(a.coordinate);return g&&Xl(i,[...c,"coordinate"]),{publish:p,...g?{package:CAg(g,[...c,"coordinate"],o)}:{}}}let d=Dg(a.packageName)?"packageName":"coordinate",f=Dg(a[d]);f&&Xl(i,[...c,d]);let m=u==="pypi"?wAg(a.pypiMetadata,c,i):{};return{publish:p,...f||Object.keys(m).length?{package:{...cf("packageName",f),...m}}:{}}}function yXl(e,t,r,n,i){let o=r?.location===e.registry?r:void 0,s=["group","generators",i,"output"];if(e.registry==="npm"||e.registry==="crates"){let a=EYt(o,t,"token",s,n,i);return lIs(o,t,["token"],s,n,i),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish,token:a})}if(e.registry==="pypi"){let{username:a,password:c}=bAg(o,t,s,n,i);return lIs(o,t,["username","password","token"],s,n,i),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish,username:a,password:c})}if(e.registry==="maven"){let a=EYt(o,t,"username",s,n,i),c=EYt(o,t,"password",s,n,i),u=EAg(o?.signature,t.signature,[...s,"signature"],n,i);return lIs(o,t,["username","password"],s,n,i,!0),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish,username:a,password:c,signature:u})}return IAg(o,t,s,n,i),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish})}function yAg(e,t,r,n,i,o){let s=EXl(r,n,o),a=Jp(e)?e:{},c=Jp(a[s])?a[s]:{};return AIs(c,t,r,[...n,s],i,o)}function EYt(e,t,r,n,i,o){let s=e?.[r];if(vyi(s))return s;(s!==void 0||yIs(t,r))&&X5e(i,[...n,r],["targets",o,"output","publish",r],`Fern publishing ${r} is not an exact environment expression`)}function bAg(e,t,r,n,i){let o=e?.token;if(vyi(o))return{username:"__token__",password:o};let s=bXl(t,"username")==="__token__";return o!==void 0||s?(X5e(n,[...r,"token"],["targets",i,"output","publish","password"],"Fern PyPI token is not an exact raw environment expression"),{}):{...cf("username",EYt(e,t,"username",r,n,i)),...cf("password",EYt(e,t,"password",r,n,i))}}function EAg(e,t,r,n,i){if(Jp(e)){let o=[e["key-id"],e.password,e["secret-key"]],s=[e.keyId,e.password,e.secretKey],a=o.every(vyi)?o:s.every(vyi)?s:void 0;if(a){let[c,u,l]=a;return{keyId:c,password:u,secretKey:l}}}(e!==void 0||Jp(t))&&X5e(n,r,["targets",i,"output","publish","signature"],"Maven signing credentials are incomplete or not exact environment expressions")}function IAg(e,t,r,n,i){(["username","password","token","apiKey"].some(s=>e?.[s]!==void 0)||e?.signature!==void 0||vAg(t))&&X5e(n,r,["targets",i,"output","publish"],"This registry does not support credentials in public SDK Config v1")}function lIs(e,t,r,n,i,o,s=!1){let c=["username","password","token","apiKey"].filter(l=>!r.includes(l)&&(e?.[l]!==void 0||yIs(t,l))),u=!s&&(e?.signature!==void 0||t.signature!==void 0);(c.length>0||u)&&X5e(i,n,["targets",o,"output","publish"],"Fern publishing credentials or signing material include fields unsupported by this registry")}function yIs(e,t){return bXl(e,t)!==void 0}function bXl(e,t){return Dg(e[t])??(Jp(e.credentials)?Dg(e.credentials[t]):void 0)}function vAg(e){return["username","password","token","apiKey"].some(t=>yIs(e,t))||e.signature!==void 0}function vyi(e){return typeof e=="string"&&/^\$\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(e)}function X5e(e,t,r,n){e.credentialDiagnostics?.push({code:"FERN_OUTPUT_CREDENTIAL_OMITTED",severity:"warning",path:t,reason:n,sdkConfigPath:r,suggestedAction:`Configure ${r.join(".")} with an environment expression such as \${CREDENTIAL_ENV_VAR}.`})}function xAg(e,t,r,n){e==="postman"&&P4("FERN_POSTMAN_PUBLICATION_UNSUPPORTED",r,"Postman collection publication is not an SDK output","Remove this non-SDK target or convert it separately from the SDK Config document.");let i=e?.replace(/Override$/,"").toLowerCase();return i==="rubygems"?"rubygems":i&&["npm","pypi","maven","nuget","crates"].includes(i)?i:(i!==void 0&&P4("FERN_PUBLICATION_UNSUPPORTED",r,`Unsupported Fern publication type "${e}"`,"Set target.output.publish and target.package manually if SDK Config supports the registry.",["targets",n,"output","publish"]),EXl(t,r,n))}function EXl(e,t,r){let i={typescript:"npm",mcp:"npm",python:"pypi",java:"maven",kotlin:"maven",csharp:"nuget",ruby:"rubygems",rust:"crates",go:"go",php:"composer"}[e];return i||P4("FERN_PUBLICATION_REGISTRY_REQUIRED",t,`No publication registry can be inferred for ${e}`,"Set target.output.publish.registry manually.",["targets",r,"output","publish","registry"]),i}function CAg(e,t,r){let n=e.split(":"),[i,o]=n;return(n.length!==2||!i||!o)&&P4("FERN_MAVEN_COORDINATE_INVALID",t,`Invalid Maven coordinate ${e}`,"Set target.package.groupId and target.package.artifactId manually.",["targets",r,"package"]),{groupId:i,artifactId:o}}function wAg(e,t,r){if(!Jp(e))return{};let n=[...t,"pypiMetadata"],i=Dg(e.description),o=Rke(e.keywords),s=Dg(e.documentationLink),a=Dg(e.homepageLink),c=SAg(e.authors,[...n,"authors"],r);return i&&Xl(r,[...n,"description"]),o&&Xl(r,[...n,"keywords"]),s&&Xl(r,[...n,"documentationLink"]),a&&Xl(r,[...n,"homepageLink"]),sA({description:i,authors:c,keywords:o,documentationUrl:s,homepage:a})}function SAg(e,t,r){if(!Array.isArray(e))return;let n=e.flatMap(i=>{if(!Jp(i))return[];let o=Dg(i.name),s=Dg(i.email),a=Dg(i.url);return o?[{name:o,...cf("email",s),...cf("url",a)}]:[]});if(n.length===e.length)return e.forEach((i,o)=>{Xl(r,[...t,o,"name"]),Jp(i)&&Dg(i.email)&&Xl(r,[...t,o,"email"]),Jp(i)&&Dg(i.url)&&Xl(r,[...t,o,"url"])}),n}function Mwt(e,t,r,n,i){for(let a of Iyi(t,r))a[a.length-1]==="_visit"&&Xl(n,a);let o=byi(t,r,n),s=o.some(a=>iXl(a.path));return{...e,unsupportedFields:[...n.credentialDiagnostics??[],...s?[{code:"FERN_OUTPUT_CREDENTIAL_UNSUPPORTED",severity:"warning",path:r,reason:"Some Fern output credentials and signatures are intentionally excluded from SDK Config v1 when they cannot be represented in the public schema",suggestedAction:"Provide publishing credentials through the build request or external secret resolution."}]:[],...o.filter(a=>!iXl(a.path)).map(a=>TAg(a.path,i))]}}function iXl(e){let t=e.filter(n=>typeof n=="string"),r=t[t.length-1];return t.some(n=>n==="credentials"||n==="signature")||["apiKey","keyId","password","secretKey","token","username"].includes(r??"")}function TAg(e,t){let r=e.filter(a=>typeof a=="string"),n=r[r.length-1],i={directory:{suggestedAction:"Preserve the GitHub output subdirectory outside SDK Config; public v1 has no repository subdirectory field."},license:{sdkConfigPath:["targets",t,"package","license"],suggestedAction:"Set target.package.license manually using portable license metadata."},id:{sdkConfigPath:["targets",t,"package","license"],suggestedAction:"Set target.package.license manually using portable license metadata."},contents:{sdkConfigPath:["targets",t,"package","license"],suggestedAction:"Set target.package.license manually without embedding license contents."},downloadSnippets:{sdkConfigPath:["docs","snippets","enabled"],suggestedAction:"Set docs.snippets.enabled manually and choose a portable output path if needed."},version:{sdkConfigPath:["targets",t,"sdkVersion"],suggestedAction:"Set target.sdkVersion manually if this output version identifies the SDK artifact."},description:{sdkConfigPath:["targets",t,"package","description"],suggestedAction:"Set target.package.description manually to a valid value."},authors:{sdkConfigPath:["targets",t,"package","authors"],suggestedAction:"Set target.package.authors manually using valid author metadata."},keywords:{sdkConfigPath:["targets",t,"package","keywords"],suggestedAction:"Set target.package.keywords manually using non-empty strings."},documentationLink:{sdkConfigPath:["targets",t,"package","documentationUrl"],suggestedAction:"Set target.package.documentationUrl manually to a valid URL."},homepageLink:{sdkConfigPath:["targets",t,"package","homepage"],suggestedAction:"Set target.package.homepage manually to a valid URL."}},o=n?i[n]:void 0,s=r.includes("license")?i.license:o;return{code:"FERN_OUTPUT_FIELD_UNSUPPORTED",severity:"warning",path:e,reason:"Fern output field is not represented by SDK Config v1",...cf("sdkConfigPath",s?.sdkConfigPath),suggestedAction:s?.suggestedAction??"Review this output setting and preserve it outside SDK Config when no equivalent exists."}}var OAg=T.strictObject({clientName:Pr.optional(),exportedClientName:Pr.optional(),environmentTypeName:Pr.optional(),apiErrorName:Pr.optional(),baseErrorName:Pr.optional(),pagerName:Pr.optional(),smartCasing:T.boolean().optional(),smartCasingDigitWordBoundary:T.boolean().optional()}),IXl=T.discriminatedUnion("type",[T.strictObject({type:T.literal("path"),location:Y5e}),T.strictObject({type:T.literal("url"),location:Pr})]),PAg=T.strictObject({name:Pr,version:Pr,groupId:Pr.optional()}),BAg=T.strictObject({enabled:T.boolean(),source:IXl.optional(),dependencies:T.array(PAg).optional()}),DAg=T.strictObject({enabled:T.boolean(),source:IXl.optional(),conflictStrategy:T.enum(["mark","ours","theirs"]).optional(),trackChanges:T.boolean().optional(),protectedFiles:T.array(Pr).optional()}),RAg=T.strictObject({path:Y5e,outputName:Pr.optional()}),kAg=T.union([T.strictObject({name:Pr,value:T.string()}),T.strictObject({name:Pr,valueRef:Pr})]),FAg=T.strictObject({enabled:T.boolean(),endpoint:Pr.optional(),exporter:T.enum(["otlp-http","console"]).optional(),headers:T.array(kAg).optional(),batchSize:T.number().int().positive().optional(),scheduledDelayMs:T.number().nonnegative().optional(),exportTimeoutMs:T.number().nonnegative().optional()}).superRefine(({enabled:e,endpoint:t},r)=>{e&&t===void 0&&r.addIssue({code:"custom",message:"endpoint is required when analytics is enabled",path:["endpoint"]})}),NAg=T.strictObject({enabled:T.boolean(),exclusions:T.array(Pr).optional(),fallbackToGeneratedErrorExamples:T.boolean().optional(),fixtureSource:T.enum(["synthetic","recorded","auto"]).optional()}),jAg=T.strictObject({enabled:T.boolean(),mode:T.enum(["core-runtime","schema-driven","both"]).optional(),exclusions:T.array(Pr).optional()}),QAg=T.strictObject({enabled:T.boolean(),responseType:T.enum(["wrapper","native","web"]).optional(),fileResponseType:T.enum(["stream","binary-response"]).optional(),defaultChunkSizeBytes:T.number().int().positive().optional()}),zAg=T.strictObject({outputDirectory:T.enum(["project-root","source-root"]).optional(),packagePath:Pr.optional()}),MAg=T.strictObject({enumRepresentation:T.enum(["enum","union","literal","forward-compatible-enum","language-default"]).optional(),additionalProperties:T.enum(["allow","forbid","ignore","language-default"]).optional(),inlineTypes:T.boolean().optional(),omitUndefined:T.boolean().optional()}),bIs={includeWatermark:T.boolean().optional(),ai:T.boolean().optional(),includeOptionalSnippetParameters:T.boolean().optional(),buildAllModels:T.boolean().optional(),inferServiceNames:T.boolean().optional(),includeDeprecatedOperations:T.boolean().optional(),multipleResponses:T.boolean().optional(),devContainer:T.boolean().optional(),allowMockClient:T.boolean().optional(),ignoreFiles:T.array(Pr).optional(),reservedKeywords:T.array(Pr).optional(),hooks:BAg.optional(),customCode:DAg.optional(),workflows:T.array(RAg).optional(),customQueryPaths:T.array(Y5e).optional(),analytics:FAg.optional(),wireTests:NAg.optional(),unitTests:jAg.optional(),webSockets:T.boolean().optional(),streams:QAg.optional(),naming:OAg.optional(),layout:zAg.optional(),serialization:MAg.optional()},T4=T.strictObject(bIs),LAg=T.strictObject({...bIs,includeWatermark:T.boolean().default(!1),ai:T.boolean().default(!1),buildAllModels:T.boolean().default(!1),inferServiceNames:T.boolean().default(!1),includeDeprecatedOperations:T.boolean().default(!0),multipleResponses:T.boolean().default(!1),devContainer:T.boolean().default(!1),allowMockClient:T.boolean().default(!1)}),VAg=new Set(Object.keys(bIs));function vXl(e){let t={},r={};for(let[n,i]of Object.entries(e??{}))(VAg.has(n)?t:r)[n]=i;return{common:t,language:r}}var AjT=T.enum(["npm","pypi","maven","nuget","rubygems","crates","go","composer"]),UAg=T.strictObject({keyId:Pr,password:Pr,secretKey:Pr}),Dke={url:Pr.optional(),releaseBranch:Pr.optional(),tolerateRepublish:T.boolean().optional()},EIs=T.discriminatedUnion("registry",[T.strictObject({registry:T.literal("npm"),token:Pr.optional(),...Dke}),T.strictObject({registry:T.literal("pypi"),username:Pr.optional(),password:Pr.optional(),...Dke}),T.strictObject({registry:T.literal("maven"),username:Pr.optional(),password:Pr.optional(),signature:UAg.optional(),...Dke}),T.strictObject({registry:T.literal("nuget"),...Dke}),T.strictObject({registry:T.literal("rubygems"),...Dke}),T.strictObject({registry:T.literal("crates"),token:Pr.optional(),...Dke}),T.strictObject({registry:T.literal("go"),...Dke}),T.strictObject({registry:T.literal("composer"),...Dke})]),_Ag=T.strictObject({teams:T.array(Pr).optional(),users:T.array(Pr).optional()}),GAg=T.strictObject({username:Pr.optional(),password:Pr.optional(),token:Pr.optional(),apiKey:Pr.optional()}),qAg=T.strictObject({repository:Pr,host:Pr.optional(),branch:Pr.optional(),mode:T.enum(["release","pull-request","push","commit","commit-and-release"]).optional(),reviewers:_Ag.optional(),credentials:GAg.optional(),privateRepository:T.boolean().optional()}),WAg=T.strictObject({delivery:T.literal("files"),path:Pr.optional(),publish:EIs.optional()}),HAg=T.strictObject({delivery:T.literal("zip"),fileName:Pr.optional(),publish:EIs.optional()}),KAg=T.strictObject({delivery:T.literal("github"),github:qAg,publish:EIs.optional()}),xXl=T.discriminatedUnion("delivery",[WAg,HAg,KAg],{error:'output.delivery must be one of "files", "zip", or "github"'});var CXl=iAg,JAg=T.strictObject({enabled:T.boolean()}),wXl=T.strictObject({respectNullableSchemas:T.boolean().optional(),titleAsSchemaName:T.boolean().optional(),coerceEnumsToLiterals:T.boolean().optional(),idiomaticRequestNames:T.boolean().optional(),wrapReferencesToNullableInOptional:T.boolean().optional(),coerceOptionalSchemasToNullable:T.boolean().optional(),pathParameterOrder:T.enum(["url-order","spec-order"]).optional(),onlyIncludeReferencedSchemas:T.boolean().optional(),objectQueryParameters:T.boolean().optional(),typeDatesAsStrings:T.boolean().optional(),groupMultiApiEnvironments:T.boolean().optional(),ignoreTags:T.boolean().optional(),disambiguateRequestNames:T.boolean().optional(),respectReadonlySchemas:T.boolean().optional(),discriminatedUnionV2:T.boolean().optional(),undiscriminatedUnionsWithLiterals:T.boolean().optional(),inlineAllOfSchemas:T.boolean().optional(),resolveSchemaCollisions:T.boolean().optional(),asyncApiMessageNaming:T.enum(["v1","v2"]).optional(),defaultIntegerFormat:T.enum(["int32","int64","uint32","uint64"]).optional()}),YAg=T.enum(["openapi","swagger","postman","asyncapi","graphql"]),oXl={id:Pr,type:YAg,name:Pr.optional(),namespace:Pr.optional(),apiImportSettings:wXl.optional(),overlays:T.array(Y5e).optional(),overrides:T.array(Y5e).optional()},XAg=T.union([T.strictObject({...oXl,path:Y5e}),T.strictObject({...oXl,url:T.url({protocol:/^https?$/})})],{error:"source spec must contain exactly one locator: path or HTTP(S) url"}),ZAg=T.strictObject({specs:T.array(XAg).min(1,"source.specs must contain at least one source spec"),apiImportSettings:wXl.optional()}).superRefine(({specs:e},t)=>{let r=new Set;e.forEach(({id:n},i)=>{r.has(n)&&t.addIssue({code:"custom",message:`source spec id "${n}" must be unique`,path:["specs",i,"id"]}),r.add(n)})}),$Ag=T.strictObject({paginationParameters:T.array(Pr).optional(),skills:T.boolean().optional()}),eyg=T.strictObject({useOptionalWrapper:T.boolean().optional(),simplifyObjectDictionaries:T.boolean().optional(),explicitNamespaces:T.boolean().optional(),rootNamespaceForCoreClasses:T.boolean().optional(),includeExceptionHandler:T.boolean().optional(),experimentalExplicitNullableOptional:T.boolean().optional()}),tyg=T.strictObject({legacyComplexModels:T.boolean().optional(),smartCasing:T.boolean().optional(),clientConstructorName:Pr.optional(),unionVersion:T.enum(["v0","v1"]).optional(),includeLegacyClientOptions:T.boolean().optional()}),SXl=T.strictObject({packageLayout:T.enum(["flat","nested"]).optional(),useLocalDateForDates:T.boolean().optional(),collapseOptionalNullable:T.boolean().optional(),gradleDistributionUrl:T.string().min(1).optional(),gradlePluginManagement:T.string().optional(),gradleCentralDependencyManagement:T.boolean().optional(),asyncStyle:T.enum(["dedicated-client","twin-methods"]).optional()}),ryg=SXl.extend({includeKotlinSnippets:T.boolean().optional()}),nyg=SXl,iyg=T.strictObject({target:Pr.optional(),module:Pr.optional(),lib:T.array(Pr).optional()}),oyg=T.strictObject({name:Pr,command:Pr}),syg=T.strictObject({name:T.enum(["axios","fetch"])}),TXl=T.strictObject({typescriptVersion:Pr.optional(),zodVersion:Pr.optional(),compilerOptions:iyg.optional(),httpClient:syg.optional(),packageManager:T.enum(["pnpm","yarn"]).optional(),testFramework:T.enum(["jest","vitest"]).optional(),namingStrategy:T.enum(["base","originalPropertyNames"]).optional(),bundle:T.boolean().optional(),exportClassDefault:T.boolean().optional(),namespaceExportName:Pr.optional(),allowCustomFetcher:T.boolean().optional(),useBrandedStringAliases:T.boolean().optional(),useLegacyExports:T.boolean().optional(),useBigInt:T.boolean().optional(),serdeLayer:T.boolean().optional(),scripts:T.array(oyg).optional()}),ayg=["IN_DEVELOPMENT","PRE_RELEASE","GENERAL_AVAILABILITY","DEPRECATED","ALPHA","BETA","PREVIEW","LEGACY"],sXl=T.strictObject({include:T.array(Pr).optional(),exclude:T.array(Pr).optional()}),cyg=Pr.refine(e=>e!=="default"&&/^[a-z0-9-]+$/.test(e),'toolset names must match [a-z0-9-]+ and cannot be "default"'),uyg=TXl.extend({serverName:Pr.optional(),serverDescription:Pr.optional(),excludeAvailability:T.array(T.enum(ayg)).optional(),tools:sXl.optional(),toolsets:T.record(cyg,sXl).optional()}),lyg=T.strictObject({propertyAccess:T.enum(["public","private"]).optional(),generateClientInterfaces:T.boolean().optional()}),pyg=T.strictObject({fileName:Pr.optional(),exportedFileName:Pr.optional()}),fyg=T.strictObject({versionCompatibility:T.enum(["v1","v2","both","v1-on-v2"]).optional(),frozen:T.boolean().optional(),requireOptionalFields:T.boolean().optional(),unionNaming:T.enum(["v0","v1"]).optional(),useFieldAliases:T.boolean().optional()}),dyg=T.strictObject({from:Pr,imports:T.array(Pr).min(1)}),myg=T.strictObject({pythonVersion:Pr.optional(),pydanticVersion:Pr.optional(),pydantic:fyg.optional(),client:pyg.optional(),followRedirectsByDefault:T.boolean().optional(),defaultBytesStreamChunkSize:T.number().int().positive().optional(),recursionLimit:T.number().int().gt(1e3).optional(),extras:T.record(Pr,T.array(Pr)).optional(),alwaysInitializeOptionals:T.boolean().optional(),useTypedDictRequests:T.boolean().optional(),additionalInitExports:T.array(dyg).optional()}),hyg=T.strictObject({requirePaths:T.array(Pr).optional()}),gyg=T.strictObject({dateTimeType:T.enum(["offset","utc"]).optional(),capitalizeInitialisms:T.boolean().optional(),features:T.record(T.string(),T.array(Pr)).optional(),defaultFeatures:T.array(Pr).optional()}),Ayg=T.strictObject({moduleName:Pr.optional(),nullableAsOptional:T.boolean().optional()}),aXl=T.discriminatedUnion("enabled",[T.strictObject({enabled:T.literal(!0),sourceDir:Pr}),T.strictObject({enabled:T.literal(!1)})]),yyg=T.strictObject({resources:aXl,attributes:aXl}),byg=T.strictObject({addressKey:Pr,authTokenKey:Pr}),Eyg=T.strictObject({providerName:Pr.optional(),providerVersion:Pr.optional(),providerModulePath:gIs.optional(),mockAcceptance:T.boolean().optional(),hideComputedDiff:T.boolean().optional(),providerSchema:byg.optional(),planModifiers:yyg.optional()}),O4={generatorVersion:lXl.optional(),sdkName:Pr.optional(),sdkVersion:Pr.optional(),client:Xgg.optional(),docs:hXl.optional(),package:CXl.optional(),output:xXl.optional()},Iyg=T.discriminatedUnion("language",[T.strictObject({language:T.literal("typescript"),generation:T4.extend(TXl.shape).optional(),...O4}),T.strictObject({language:T.literal("python"),generation:T4.extend(myg.shape).optional(),...O4}),T.strictObject({language:T.literal("java"),generation:T4.extend(ryg.shape).optional(),...O4}),T.strictObject({language:T.literal("kotlin"),generation:T4.extend(nyg.shape).optional(),...O4}),T.strictObject({language:T.literal("go"),generation:T4.extend(tyg.shape).optional(),...O4}),T.strictObject({language:T.literal("csharp"),generation:T4.extend(eyg.shape).optional(),...O4}),T.strictObject({language:T.literal("php"),generation:T4.extend(lyg.shape).optional(),...O4}),T.strictObject({language:T.literal("ruby"),generation:T4.extend(hyg.shape).optional(),...O4}),T.strictObject({language:T.literal("rust"),generation:T4.extend(gyg.shape).optional(),...O4}),T.strictObject({language:T.literal("swift"),generation:T4.extend(Ayg.shape).optional(),...O4}),T.strictObject({language:T.literal("cli"),generation:T4.extend($Ag.shape).optional(),...O4}),T.strictObject({language:T.literal("mcp"),generation:T4.extend(uyg.shape).optional(),...O4}),T.strictObject({language:T.literal("terraform"),generation:T4.extend(Eyg.shape).optional(),...O4})]),vyg="sdk-config/v1",xyg={npm:["typescript","mcp"],pypi:["python"],maven:["java","kotlin"],nuget:["csharp"],rubygems:["ruby"],crates:["rust"],go:["go"],composer:["php"]},Cyg=new Set(["npm","pypi","nuget","rubygems","crates","composer"]);function wyg(e,t,r,n){let i=["targets",r,"package"];if(Cyg.has(t)&&!e.packageName&&n.addIssue({code:"custom",message:`packageName is required when publishing to "${t}"`,path:[...i,"packageName"]}),t==="composer"&&e.packageName){let o=Zgg.safeParse(e.packageName);o.success||n.addIssue({code:"custom",message:o.error.issues[0]?.message??"Invalid Composer package name",path:[...i,"packageName"]})}t==="go"&&!e.modulePath&&n.addIssue({code:"custom",message:"modulePath is required when publishing a Go module",path:[...i,"modulePath"]}),t==="maven"&&["groupId","artifactId"].forEach(o=>{e[o]||n.addIssue({code:"custom",message:`${o} is required when publishing to Maven`,path:[...i,o]})})}function Syg(e,t,r,n,i){let o=e.output??n;if(!o){i.addIssue({code:"custom",message:"output is required on the target when no global output is configured",path:["targets",t,"output"]});return}if(!o.publish)return;let s=o.publish.registry;if(!xyg[s].some(a=>a===e.language)){i.addIssue({code:"custom",message:`registry "${s}" is not supported for target language "${e.language}"`,path:["targets",t,e.output?"output":"language"]});return}wyg({...r,...e.package},s,t,i)}var IIs=T.strictObject({schemaVersion:T.literal(vyg),sdkName:Pr,sdkVersion:Pr.default("1.0.0"),apiVersion:Pr.optional(),source:ZAg,api:Ggg.prefault({}),client:Ygg.prefault({}),package:CXl.prefault({}),output:xXl.optional(),replay:JAg.optional(),docs:hXl.prefault({}),generation:LAg.prefault({}),targets:T.array(Iyg).min(1)}).superRefine(({output:e,package:t,targets:r},n)=>{let i=new Set;r.forEach((o,s)=>{i.has(o.language)&&n.addIssue({code:"custom",message:`target language "${o.language}" must be unique`,path:["targets",s,"language"]}),i.add(o.language),Syg(o,s,t,e,n)})});function Vwt(e){return IIs.parse(e),e}function kke(e){return IIs.parse(e)}var Tyg={"fernapi/fern-typescript":"typescript","fernapi/fern-typescript-sdk":"typescript","fernapi/fern-typescript-node-sdk":"typescript","fernapi/fern-typescript-browser-sdk":"typescript","fernapi/fern-python-sdk":"python","fernapi/fern-java-sdk":"java","fernapi/fern-kotlin-sdk":"kotlin","fernapi/fern-go-sdk":"go","fernapi/fern-csharp-sdk":"csharp","fernapi/fern-php-sdk":"php","fernapi/fern-ruby-sdk":"ruby","fernapi/fern-ruby-sdk-v2":"ruby","fernapi/fern-rust-sdk":"rust","fernapi/fern-swift-sdk":"swift","fernapi/fern-cli":"cli","fernapi/fern-cli-generator":"cli","fernapi/fern-mcp-server":"mcp"};function OXl(e){e.group.generators.length===0&&P4("FERN_GENERATORS_REQUIRED",["group","generators"],"Fern generator group must contain at least one generator","Select a Fern generator group containing at least one SDK generator.");let t=e.group.generators.map((d,f)=>Oyg(d,f));Pyg(t);let r=new Set(t),n=e.group.generators.map((d,f)=>{let m=t[f],g=Byg(d,m,r,f),A=dAg(d,m,f);return{generator:d,language:m,invocation:g,...A}}),i=pIs(n.map(({invocation:d})=>d.client)),o=pIs(n.map(({invocation:d})=>d.docs)),s=pIs(n.map(({invocation:d})=>d.generation)),a={...e.api??{}};delete a.audiences,e.group.audiences.type==="select"&&(a.audiences=[...e.group.audiences.audiences]);let c=n.map(({generator:d,invocation:f,language:m,output:g,package:A},y)=>{let E={language:m,output:g,...cf("sdkName",d.sdkName),...cf("sdkVersion",d.sdkVersion),...cf("client",i.targetOverrides[y]),...cf("docs",o.targetOverrides[y])};(Object.keys(f.package).length>0||A||d.package)&&(E.package={...f.package,...A,...d.package});let x={...s.targetOverrides[y],...f.targetGeneration};return Object.keys(x).length>0&&(E.generation=x),d.version&&(lXl.safeParse(d.version).success?E.generatorVersion=d.version:f.unsupportedFields.push({code:"FERN_GENERATOR_VERSION_NOT_EXACT",severity:"warning",path:["group","generators",y,"version"],reason:"SDK Config requires an exact generator semantic version",sdkConfigPath:["targets",y,"generatorVersion"],suggestedAction:"Resolve the Fern generator tag to an exact semantic version and set target.generatorVersion manually, or leave it omitted."})),E}),u={schemaVersion:"sdk-config/v1",sdkName:e.apiName,source:e.source,...cf("sdkVersion",e.sdkVersion),...cf("apiVersion",e.apiVersion),...cf("replay",e.replay),...bYt("api",a),...bYt("client",i.shared),...bYt("docs",o.shared),...bYt("generation",s.shared),targets:c},l=IIs.safeParse(u);if(!l.success)throw new xyi(l.error.issues.map(d=>{let f=d.path.map(m=>typeof m=="symbol"?m.description??m.toString():m);return{code:"SDK_CONFIG_VALIDATION_FAILED",severity:"error",path:["mappedSdkConfig",...f],reason:d.message,sdkConfigPath:f,suggestedAction:`Set ${f.join(".")} manually to a valid SDK Config v1 value.`}}));return{sdkConfig:u,unsupportedFields:n.flatMap(({invocation:d,unsupportedFields:f})=>[...d.unsupportedFields,...f])}}function Oyg(e,t){let r=e.sdkLanguage??Tyg[e.name];return(!r||!PXl(r))&&P4("FERN_SDK_LANGUAGE_REQUIRED",["group","generators",t,"name"],`Cannot determine an SDK language for Fern generator ${e.name}`,"Set sdkLanguage explicitly if this custom generator produces one of the SDK Config v1 target languages.",["targets",t,"language"]),r}function PXl(e){return["typescript","python","java","kotlin","go","csharp","php","ruby","rust","swift","cli","mcp","terraform"].includes(e)}function Pyg(e){let t=new Set;for(let r of e)t.has(r)&&P4("FERN_DUPLICATE_TARGET_LANGUAGE",["group","generators"],`SDK Config v1 cannot represent multiple Fern generators for language "${r}"`,"Create a separate SDK Config document for each generator that targets the same language.",["targets"]),t.add(r)}function pIs(e){let t=BXl(e);return{shared:t.shared,targetOverrides:t.overrides.map(r=>Object.keys(r).length>0?r:void 0)}}function BXl(e){let t={},r=e.map(()=>({})),n=new Set(e.flatMap(i=>Object.keys(i)));for(let i of n){let o=e.map(c=>c[i]);if(!o.every(c=>c!==void 0)){o.forEach((c,u)=>{c!==void 0&&(r[u][i]=c)});continue}if(o.every(Jp)){let c=BXl(o);Object.keys(c.shared).length>0&&(t[i]=c.shared),c.overrides.forEach((u,l)=>{Object.keys(u).length>0&&(r[l][i]=u)});continue}let a=o[0];o.every(c=>rXl(c)===rXl(a))?t[i]=a:o.forEach((c,u)=>{r[u][i]=c})}return{shared:t,overrides:r}}function Byg(e,t,r,n){let i=["group","generators",n],o={consumedPaths:new Set},s=Jp(e.config)?e.config:{},a={},c={},u={};Fyg(t,s,o,a,c,u,[...i,"config"]);let l=Jp(e.raw)?e.raw:void 0,p=typeof l?.["smart-casing"]=="boolean"?l["smart-casing"]:e.smartCasing===!1?!1:void 0,d=typeof l?.["smart-casing-digit-word-boundary"]=="boolean"?l["smart-casing-digit-word-boundary"]:e.smartCasingDigitWordBoundary===!0?!0:void 0;(p!==void 0||d!==void 0)&&(c.naming={...c.naming,...cf("smartCasing",p),...cf("smartCasingDigitWordBoundary",d)});let f=Nyg(t,s,o,u,[...i,"config"]);Hyg(e.publishMetadata,u),e.keywords?.length&&(c.reservedKeywords=[...e.keywords]);let m=Jp(e.settings)?e.settings:void 0;if(m){let y=ap(m,["inlinePathParameters"],o,[...i,"settings"]);y!==void 0&&a.pathParameterStyle===void 0&&(a.pathParameterStyle=y?"inline":"wrapped")}let g=Wyg(e.readme,t,r,o,[...i,"readme"]),A=[...byi(s,[...i,"config"],o),...m?byi(m,[...i,"settings"],o):[],...Jp(e.readme)?byi(e.readme,[...i,"readme"],o):[],...Dyg(e,n)];return{client:a,docs:g,generation:c,package:u,targetGeneration:f,unsupportedFields:A}}function Dyg(e,t){return[["automation",kyg(e.automation)?void 0:e.automation],["containerImage",e.containerImage],["irVersionOverride",e.irVersionOverride],["idempotencyKeyGenerationConfig",e.idempotencyKeyGenerationConfig],["absolutePathToLocalSnippets",e.absolutePathToLocalSnippets],["disableExamples",e.disableExamples===!1?void 0:e.disableExamples],["apiOverride",e.apiOverride]].flatMap(([n,i])=>{if(i===void 0)return[];let o=Ryg(n);return[{code:"FERN_RESOLVED_FIELD_UNSUPPORTED",severity:"warning",path:["group","generators",t,n],reason:"Resolved Fern field is not represented by SDK Config v1",...cf("sdkConfigPath",o.sdkConfigPath),suggestedAction:o.suggestedAction}]})}function Ryg(e){return e==="absolutePathToLocalSnippets"?{sdkConfigPath:["docs","snippets","outputPath"],suggestedAction:"Choose a portable relative snippet path and set docs.snippets.outputPath manually."}:e==="idempotencyKeyGenerationConfig"?{suggestedAction:"Preserve this orchestration setting outside SDK Config; public v1 has no idempotency-generation field."}:{suggestedAction:"Review this Fern setting and preserve it outside SDK Config, or set an equivalent SDK Config field manually if one is introduced."}}function kyg(e){return Jp(e)&&e.generate===!0&&e.upgrade===!0&&e.preview===!0&&e.verify===!0}function Fyg(e,t,r,n,i,o,s){let a=ap(t,["inlinePathParameters"],r,s),c=ap(t,["inlineFileProperties"],r,s),u=ap(t,["inlineRequestParams"],r,s);a!==void 0&&(n.pathParameterStyle=a?"inline":"wrapped"),c!==void 0&&(n.filePropertyStyle=c?"inline":"wrapped"),u!==void 0&&(n.requestParameterStyle=u?"inline":"wrapped");let l=lAg(t,r,s);l!==void 0&&(n.timeoutMs=l);let p=ap(t,["skipResponseValidation","skipValidation"],r,s),d=e==="python"?dae(t,["pydanticConfig"],r,s):void 0,f=d?ap(d.value,["skipValidation"],r,d.path):void 0,m=p??f;m!==void 0&&(n.responseValidation=!m);let g=ap(t,["useDefaultRequestParameterValues"],r,s);g!==void 0&&(n.useDefaultRequestParameterValues=g);let A=ap(t,["respectOptionalRequestBody"],r,s);A!==void 0&&(n.respectOptionalRequestBody=A);let y=dIs(t,["maxRetries"],r,s),E=dge(t,["retryStatusCodes"],["legacy","recommended"],r,s);(y!==void 0||E!==void 0)&&(n.retry={...y===void 0?{}:{maxAttempts:y+1},...cf("statusCodeProfile",E)});let x=e==="python"?dae(t,["client"],r,s):void 0,v=Ma(t,["clientName","clientClassName"],r,s),C=x?Ma(x.value,["className"],r,x.path):void 0,O=Ma(t,["exportedClientName","exportedClientClassName"],r,s),D=x?Ma(x.value,["exportedClassName"],r,x.path):void 0,R=sA({pagerName:Ma(t,["customPagerName","customPagerClassname","customPagerClassName"],r,s),clientName:v??C,exportedClientName:O??D,environmentTypeName:Ma(t,["environmentClassName","environmentEnumName"],r,s),apiErrorName:Ma(t,["baseApiExceptionClassName"],r,s),baseErrorName:Ma(t,["baseExceptionClassName"],r,s)});Object.keys(R).length&&(i.naming=R);let P=ap(t,["enableWireTests","generateWireTests"],r,s);P!==void 0&&(i.wireTests={enabled:P});let M=ap(t,["generateWebSocketClients","shouldGenerateWebsocketClients","enableWebsockets"],r,s);M!==void 0&&(i.webSockets=M);let J=ap(t,["enableInlineTypes"],r,s),X=ap(t,["omitUndefined"],r,s),$=ap(t,["enableForwardCompatibleEnums"],r,s),ie=sA({inlineTypes:J,omitUndefined:X,enumRepresentation:$===void 0?void 0:$?"forward-compatible-enum":"language-default"});Object.keys(ie).length&&(i.serialization=ie);let ue=Ma(t,["namespace","packagePrefix"],r,s);ue!==void 0&&(o.namespace=ue);let oe=Ma(t,["packagePath"],r,s);oe!==void 0&&(i.layout={packagePath:oe}),Kyg(t,r,o,s)}function Nyg(e,t,r,n,i){switch(e){case"typescript":return cXl(t,r,n,i);case"mcp":return{...cXl(t,r,n,i),...qyg(t,r,i)};case"python":return jyg(t,r,n,i);case"java":case"kotlin":return Qyg(e,t,r,n,i);case"go":return zyg(t,r,n,i);case"csharp":return Myg(t,r,n,i);case"php":return Lyg(t,r,n,i);case"ruby":return Vyg(t,r,n,i);case"rust":return Uyg(t,r,n,i);case"swift":return sA({moduleName:Ma(t,["moduleName"],r,i)});case"cli":return _yg(t,r,n,i);case"terraform":return Gyg(t,r,n,i)}}function cXl(e,t,r,n){DXl(e,["packageJson"],t,r,n);let i=ap(e,["serdeLayer"],t,n),o=ap(e,["noSerdeLayer"],t,n),s=dge(e,["fetchSupport"],["native"],t,n);return sA({typescriptVersion:Ma(e,["typescriptVersion"],t,n),zodVersion:Ma(e,["zodVersion"],t,n),packageManager:dge(e,["packageManager"],["pnpm","yarn"],t,n),testFramework:dge(e,["testFramework"],["jest","vitest"],t,n),httpClient:s==="native"?{name:"fetch"}:void 0,bundle:ap(e,["bundle"],t,n),exportClassDefault:ap(e,["exportClassDefault"],t,n),namespaceExportName:Ma(e,["namespaceExportName","namespaceExport"],t,n),allowCustomFetcher:ap(e,["allowCustomFetcher"],t,n),useBrandedStringAliases:ap(e,["useBrandedStringAliases"],t,n),useLegacyExports:ap(e,["useLegacyExports"],t,n),useBigInt:ap(e,["useBigInt"],t,n),serdeLayer:i??(o===void 0?void 0:!o)})}function jyg(e,t,r,n){let i=Ma(e,["packageName"],t,n),o=Ma(e,["pypiPackageName"],t,n);i!==void 0&&(r.moduleName=i),o!==void 0&&(r.packageName=o);let s=dae(e,["client"],t,n),a=Ma(e,["clientFilename"],t,n),c=s?Ma(s.value,["filename"],t,s.path):void 0,u=s?Ma(s.value,["exportedFilename"],t,s.path):void 0;return sA({pythonVersion:Ma(e,["pythonVersion","pyprojectPythonVersion"],t,n),pydanticVersion:Ma(e,["pydanticVersion"],t,n),...bYt("client",sA({fileName:a??c,exportedFileName:u})),followRedirectsByDefault:ap(e,["followRedirectsByDefault"],t,n),defaultBytesStreamChunkSize:dIs(e,["defaultBytesStreamChunkSize"],t,n,1),recursionLimit:dIs(e,["recursionLimit"],t,n,1001),extras:gXl(e,["extras"],t,n),alwaysInitializeOptionals:ap(e,["alwaysInitializeOptionals"],t,n),useTypedDictRequests:ap(e,["useTypedDictRequests"],t,n),additionalInitExports:Xyg(e,t,n)})}function Qyg(e,t,r,n,i){let o=Ma(t,["packageName","packagePrefix"],r,i),s=Ma(t,["group","groupId"],r,i),a=Ma(t,["artifact","artifactId"],r,i);return o!==void 0&&(n.namespace=o),s!==void 0&&(n.groupId=s),a!==void 0&&(n.artifactId=a),sA({packageLayout:dge(t,["packageLayout"],["flat","nested"],r,i),useLocalDateForDates:ap(t,["useLocalDateForDates"],r,i),collapseOptionalNullable:ap(t,["collapseOptionalNullable"],r,i),gradleDistributionUrl:Ma(t,["gradleDistributionUrl"],r,i),gradlePluginManagement:Ma(t,["gradlePluginManagement"],r,i),gradleCentralDependencyManagement:ap(t,["gradleCentralDependencyManagement"],r,i),asyncStyle:dge(t,["asyncStyle"],["dedicated-client","twin-methods"],r,i),...e==="java"?{includeKotlinSnippets:ap(t,["includeKotlinSnippets"],r,i)}:{}})}function zyg(e,t,r,n){let i=dae(e,["module"],t,n),o=i?pAg(i.value,["path"],t,i.path):void 0,s=Ma(e,["packageName"],t,n);return o!==void 0&&(r.modulePath=o),s!==void 0&&(r.packageName=s),sA({legacyComplexModels:ap(e,["legacyComplexModels"],t,n),unionVersion:dge(e,["union"],["v0","v1"],t,n),includeLegacyClientOptions:ap(e,["includeLegacyClientOptions"],t,n),clientConstructorName:Ma(e,["clientConstructorName"],t,n)})}function Myg(e,t,r,n){let i=Ma(e,["packageId"],t,n);return i!==void 0&&(r.packageName=i),sA({useOptionalWrapper:ap(e,["useOptionalWrapper"],t,n),simplifyObjectDictionaries:ap(e,["simplifyObjectDictionaries"],t,n),explicitNamespaces:ap(e,["explicitNamespaces"],t,n),rootNamespaceForCoreClasses:ap(e,["rootNamespaceForCoreClasses"],t,n),includeExceptionHandler:ap(e,["includeExceptionHandler"],t,n),experimentalExplicitNullableOptional:ap(e,["experimentalExplicitNullableOptional"],t,n)})}function Lyg(e,t,r,n){DXl(e,["composerJson"],t,r,n);let i=Ma(e,["packageName"],t,n);return i!==void 0&&(r.packageName=i),sA({propertyAccess:dge(e,["propertyAccess"],["public","private"],t,n),generateClientInterfaces:ap(e,["generateClientInterfaces"],t,n)})}function Vyg(e,t,r,n){let i=Ma(e,["moduleName"],t,n);return i!==void 0&&(r.moduleName=i),sA({requirePaths:Lwt(e,["requirePaths"],t,n)})}function Uyg(e,t,r,n){let i=Ma(e,["crateName"],t,n),o=Ma(e,["packageRepository"],t,n),s=Ma(e,["packageDescription"],t,n),a=Ma(e,["packageDocumentation"],t,n);return Object.assign(r,sA({packageName:i,repository:o,description:s,documentationUrl:a})),sA({dateTimeType:dge(e,["dateTimeType"],["offset","utc"],t,n),capitalizeInitialisms:ap(e,["capitalizeInitialisms"],t,n),features:gXl(e,["features"],t,n),defaultFeatures:Lwt(e,["defaultFeatures"],t,n)})}function _yg(e,t,r,n){let i=dae(e,["packageIdentity"],t,n);return i&&Object.assign(r,sA({packageName:Ma(i.value,["name"],t,i.path),repository:Ma(i.value,["repository"],t,i.path),description:Ma(i.value,["description"],t,i.path)})),sA({paginationParameters:Lwt(e,["paginationParameters"],t,n),skills:ap(e,["skills"],t,n)})}function Gyg(e,t,r,n){let i=Ma(e,["providerModulePath","providerGoModuleName"],t,n);return i!==void 0&&(r.modulePath=i),sA({providerName:Ma(e,["providerName"],t,n),providerVersion:Ma(e,["providerVersion"],t,n),providerModulePath:i,mockAcceptance:ap(e,["mockAcceptance"],t,n),hideComputedDiff:ap(e,["hideComputedDiff"],t,n)})}function qyg(e,t,r){return sA({serverName:Ma(e,["serverName"],t,r),serverDescription:Ma(e,["serverDescription"],t,r),excludeAvailability:fAg(e,["excludeAvailability"],["IN_DEVELOPMENT","PRE_RELEASE","GENERAL_AVAILABILITY","DEPRECATED","ALPHA","BETA","PREVIEW","LEGACY"],t,r),tools:ebg(e,["tools"],t,r),toolsets:tbg(e,["toolsets"],t,r)})}function Wyg(e,t,r,n,i){if(!Jp(e))return{};let o=sA({apiName:Ma(e,["apiName"],n,i),introduction:Ma(e,["introduction"],n,i),apiReferenceLink:Ma(e,["apiReferenceLink"],n,i),bannerLink:Ma(e,["bannerLink"],n,i),disabledSections:Lwt(e,["disabledSections"],n,i),customSections:Yyg(e,t,r,n,i),defaultEndpoint:Zyg(e,["defaultEndpoint"],n,i),features:$yg(e,n,i)});return Object.keys(o).length?{readme:o}:{}}function Hyg(e,t){if(!Jp(e))return;let r=Dg(e.publisherName),n=Dg(e.publisherEmail);Object.assign(t,sA({description:Dg(e.packageDescription),documentationUrl:Dg(e.referenceUrl),authors:r?[{name:r,...cf("email",n)}]:void 0}))}function Kyg(e,t,r,n){for(let i of["extraDependencies","extraDevDependencies","extraPeerDependencies"]){let o=dae(e,[i],t,n);if(!o)continue;let s=Object.entries(o.value).flatMap(([a,c])=>Jyg(a,c,t,[...o.path,a]));s.length&&(r[i]=s)}}function Jyg(e,t,r,n){if(typeof t=="string"&&t)return Xl(r,n),[{name:e,version:t}];if(!Jp(t))return[];let i=Ma(t,["version"],r,n),o=Ma(t,["git"],r,n),s=Ma(t,["path"],r,n),a=o?{type:"git",url:o,...cf("ref",Ma(t,["ref"],r,n))}:s?{type:"path",path:s}:void 0;return!i&&!a?[]:[{name:e,...cf("version",i),...cf("source",a),...cf("packageName",Ma(t,["package"],r,n)),...cf("features",Lwt(t,["features"],r,n)),...cf("extras",Lwt(t,["extras"],r,n)),...cf("optional",ap(t,["optional"],r,n)),...cf("defaultFeatures",ap(t,["defaultFeatures"],r,n)),...cf("environmentMarker",Ma(t,["python"],r,n))}]}function Yyg(e,t,r,n,i){let o=oj(e,["customSections"],i);if(!o||!Array.isArray(o.value))return;let s=o.value.flatMap((a,c)=>{if(!Jp(a)||typeof a.title!="string"||a.title.length===0||typeof a.content!="string")return[];let u=a.language;return u!==void 0&&(typeof u!="string"||!PXl(u)||!r.has(u))?[]:(Xl(n,[...o.path,c]),u===void 0||u===t?[{title:a.title,content:a.content}]:[])});return s.length>0?s:void 0}function DXl(e,t,r,n,i){let o=dae(e,t,r,i);if(!o)return;let s=Ma(o.value,["name"],r,o.path),a=Ma(o.value,["description"],r,o.path),c=Ma(o.value,["license"],r,o.path),u=dae(o.value,["author"],r,o.path),l=u?Ma(u.value,["name"],r,u.path):void 0,p=l&&u?[sA({name:l,email:Ma(u.value,["email"],r,u.path),url:Ma(u.value,["url"],r,u.path)})]:void 0;Object.assign(n,sA({packageName:s,description:a,authors:p,license:c?{type:c}:void 0}))}function Xyg(e,t,r){let n=oj(e,["additionalInitExports"],r);if(!n||!Array.isArray(n.value))return;let i=n.value.flatMap(o=>{if(!Jp(o))return[];let s=Dg(o.from),a=Rke(o.imports);return s&&a?.length?[{from:s,imports:a}]:[]});if(i.length===n.value.length)return Xl(t,n.path),i}function Zyg(e,t,r,n){let i=oj(e,t,n);if(!i)return;let o=RXl(i.value);return o&&Xl(r,i.path),o}function $yg(e,t,r){let n=oj(e,["features"],r);if(!n||!Jp(n.value))return;let i={};for(let[o,s]of Object.entries(n.value)){if(!Array.isArray(s))return;let a=s.map(RXl);if(a.some(c=>!c))return;i[o]=a}return Xl(t,n.path),i}function RXl(e){if(typeof e=="string"){let r=/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE|CONNECT)\s+(\/\S*)$/.exec(e.trim());return r?{method:r[1],path:r[2]}:void 0}if(!Jp(e)||typeof e.method!="string"||typeof e.path!="string")return;let t=e.method.toUpperCase();if(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","TRACE","CONNECT"].includes(t))return{method:t,path:e.path,...cf("stream",typeof e.stream=="boolean"?e.stream:void 0)}}function ebg(e,t,r,n){let i=dae(e,t,r,n);if(!i)return;let o=sA({include:Rke(i.value.include),exclude:Rke(i.value.exclude)});if(!(Object.keys(o).length===0&&Object.keys(i.value).length>0))return Xl(r,i.path),o}function tbg(e,t,r,n){let i=dae(e,t,r,n);if(!i)return;let o=Object.entries(i.value).map(([s,a])=>{if((s==="default"||!/^[a-z0-9-]+$/.test(s))&&P4("FERN_MCP_TOOLSET_NAME_INVALID",[...i.path,s],`MCP toolset name "${s}" is not valid in SDK Config v1`,'Rename the toolset to lowercase letters, numbers, or hyphens; "default" is reserved.',["targets",n[2],"generation","toolsets",s]),!!Jp(a))return[s,sA({include:Rke(a.include),exclude:Rke(a.exclude)})]});if(!o.some(s=>!s))return Xl(r,i.path),Object.fromEntries(o.filter(s=>s!==void 0))}function vIs(e){let t=e.sdkConfigPath==null?"":`; SDK Config: ${e.sdkConfigPath.join(".")}`;return`[${e.severity}] [${e.code}] ${e.path.join(".")}: ${e.reason}${t}; ${e.suggestedAction}`}function kXl({workspace:e,generatorInvocation:t,audiences:r,sourceArchive:n,mapFernGroupToSdkConfig:i}){let o=i({fernWorkspace:e,group:{groupName:"sdk-gen-api",audiences:r,generators:[t],reviewers:void 0},source:rbg(n)}),s=kke(o.sdkConfig);return{payloadKind:"sdk-config-v1",body:Buffer.from(JSON.stringify(s),"utf8"),diagnostics:o.diagnostics}}function rbg(e){return{specs:e.specIndexes.map((r,n)=>{let i=e.manifest.specs[r];if(i==null)throw new Error(`Fern source manifest does not contain selected index ${r}`);if(!nbg(i))throw new Error(`SDK Config generation does not support Fern source type ${i.type} (${i.specPath})`);return{id:`source-${n}`,type:i.type,path:i.specPath.replace(/^\/+/,""),...i.namespace==null?{}:{namespace:i.namespace},...i.apiImportSettings==null?{}:{apiImportSettings:i.apiImportSettings},...i.overridePaths==null||i.overridePaths.length===0?{}:{overrides:i.overridePaths}}})}}function nbg(e){return e.type==="openapi"||e.type==="asyncapi"||e.type==="graphql"}kfe();wt();jb();In();Vi();function Z5e({context:e,violations:t,logWarnings:r,logSummary:n=!0,logBreadcrumbs:i=!0,elapsedMillis:o=0}){let s=[],a={};for(let l of t){let p=JSON.stringify(l.nodePath),d=a[p]??[];d.some(m=>m.message===l.message&&m.nodePath.length===l.nodePath.length&&m.nodePath.every((g,A)=>x6(g,l.nodePath[A]))&&m.relativeFilepath===l.relativeFilepath&&m.severity===l.severity)||(s.push(l),a[p]=[...d,l])}t=s;let c=lbg(t),u=ibg(t);for(let l of Array.from(u.keys()).sort()){let p=u.get(l);if(p){let d=p.violations[0]?.relativeFilepath??"";obg({logWarnings:r,logBreadcrumbs:i,configRelativeFilepath:d,nodePath:p.nodePath,violations:p.violations,context:e})}}return n&&ubg({context:e,stats:c,logWarnings:r,elapsedMillis:o}),{hasErrors:c.numFatal>0}}function ibg(e){let t={};for(let r of e){let i=r.nodePath.length===0?`file:${r.relativeFilepath}`:`node:${JSON.stringify(r.nodePath)}`;t[i]||(t[i]={nodePath:r.nodePath,violations:[]}),t[i].violations.push(r)}return new Map(Object.entries(t))}function obg({logWarnings:e,logBreadcrumbs:t,configRelativeFilepath:r,nodePath:n,violations:i,context:o}){let s=sbg(i);if(s==="warning"&&!e)return;let a="",c=i.map(u=>u.severity==="warning"&&!e?null:(a===""&&(a=u.relativeFilepath),`${cbg(u.severity)} ${u.message}`)).filter(u=>u!=null).join(`
4297
+ `)),this.issues=e,this.name="FernConfigMappingError"}issues};function P4(e,t,r,n,i){throw new xyi([{code:e,severity:"error",path:t,reason:r,suggestedAction:n,...cf("sdkConfigPath",i)}])}function lAg(e,t,r){let n=oj(e,["defaultTimeout","defaultTimeoutInMilliseconds"],r);if(n&&(n.value==="infinity"||mIs(n.value)))return Xl(t,n.path),n.value;let i=oj(e,["defaultTimeoutInSeconds","timeoutInSeconds","timeout"],r);if(i&&(i.value==="infinity"||mIs(i.value)))return Xl(t,i.path),i.value==="infinity"?"infinity":i.value*1e3}function oj(e,t,r){for(let[n,i]of Object.entries(e))if(t.some(o=>tXl(o)===tXl(n)))return{value:i,path:[...r,n]}}function dae(e,t,r,n){let i=oj(e,t,n);return i&&Jp(i.value)?{value:i.value,path:i.path}:void 0}function Ma(e,t,r,n){let i=oj(e,t,n);if(!(!i||typeof i.value!="string"||i.value.length===0))return Xl(r,i.path),i.value}function pAg(e,t,r,n){let i=oj(e,t,n);if(!(!i||!gIs.safeParse(i.value).success))return Xl(r,i.path),i.value}function ap(e,t,r,n){let i=oj(e,t,n);if(!(!i||typeof i.value!="boolean"))return Xl(r,i.path),i.value}function dIs(e,t,r,n,i=0){let o=oj(e,t,n);if(!(!o||!mIs(o.value)||!Number.isInteger(o.value)||o.value<i))return Xl(r,o.path),o.value}function dge(e,t,r,n,i){let o=oj(e,t,i);if(!(!o||typeof o.value!="string"||!r.includes(o.value)))return Xl(n,o.path),o.value}function fAg(e,t,r,n,i){let o=oj(e,t,i);if(!(!o||!Array.isArray(o.value)||o.value.some(s=>typeof s!="string"||!r.includes(s))))return Xl(n,o.path),o.value}function Lwt(e,t,r,n){let i=oj(e,t,n),o=i?Rke(i.value):void 0;if(!(!i||!o))return Xl(r,i.path),o}function gXl(e,t,r,n){let i=oj(e,t,n);if(!i||!Jp(i.value))return;let o=Object.entries(i.value);if(!o.some(([,s])=>!Rke(s)))return Xl(r,i.path),Object.fromEntries(o)}function byi(e,t,r){return Iyi(e,t).filter(n=>{let i=AXl(n);return![...r.consumedPaths].some(o=>i===o||i.startsWith(`${o}.`))}).map(n=>({code:"FERN_CONFIG_FIELD_UNSUPPORTED",severity:"warning",path:n,reason:"Fern configuration field is not represented by SDK Config v1",suggestedAction:"Review this value and set the closest SDK Config field manually, or preserve the setting outside SDK Config if no equivalent exists."}))}function Iyi(e,t){return Array.isArray(e)?e.flatMap((r,n)=>Iyi(r,[...t,n])):Jp(e)?Object.entries(e).flatMap(([r,n])=>Iyi(n,[...t,r])):e===void 0?[]:[t]}function Xl(e,t){e.consumedPaths.add(AXl(t))}function AXl(e){return e.join(".")}function tXl(e){return e.replace(/[-_]/g,"").toLowerCase()}function sA(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0))}function cf(e,t){return t===void 0?{}:{[e]:t}}function bYt(e,t){return Object.keys(t).length===0?{}:{[e]:t}}function Jp(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function mIs(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Dg(e){return typeof e=="string"&&e.length>0?e:void 0}function Rke(e){return Array.isArray(e)&&e.every(t=>typeof t=="string"&&t.length>0)?e:void 0}function rXl(e){return JSON.stringify(hIs(e))}function hIs(e){return Array.isArray(e)?e.map(hIs):Jp(e)?Object.fromEntries(Object.entries(e).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,hIs(r)])):e}function dAg(e,t,r){let n=Jp(e.raw)?e.raw:void 0,i=n&&Jp(n.output)?n.output:void 0,o=["group","generators",r,"outputMode"],s={consumedPaths:new Set,credentialDiagnostics:[]};if(e.output)return{output:mAg(e.output,i,s,r),unsupportedFields:s.credentialDiagnostics??[]};if(i?.location==="local-file-system")return Jp(e.outputMode)&&Xl(s,[...o,"type"]),Mwt({output:{delivery:"files",...typeof i.path=="string"&&i.path?{path:i.path}:{}}},e.outputMode,o,s,r);(!Jp(e.outputMode)||typeof e.outputMode.type!="string")&&P4("FERN_OUTPUT_REQUIRED",["group","generators",r,"outputMode"],`Cannot map output for Fern generator ${e.name}`,"Set generator.output to a public SDK Config output, or provide the resolved Fern outputMode.",["targets",r,"output"]);let a=e.outputMode;switch(Xl(s,[...o,"type"]),a.type){case"downloadFiles":return Mwt({output:{delivery:"zip"}},a,o,s,r);case"github":return Mwt(nXl(a,a.publishInfo,i,t,o,s,r),a,o,s,r);case"githubV2":{Jp(a.githubV2)||P4("FERN_GITHUB_OUTPUT_INVALID",["group","generators",r,"outputMode","githubV2"],"Fern githubV2 output is missing its configuration",'Set target.output manually with delivery "github" and the intended repository.',["targets",r,"output"]);let c=[...o,"githubV2"];return Mwt(nXl(a.githubV2,a.githubV2.publishInfo,i,t,c,s,r),a,o,s,r)}case"publishV2":{let c=AIs(a.publishV2,i,t,[...o,"publishV2"],s,r);return Mwt({output:{delivery:"zip",publish:c.publish},...cf("package",c.package)},a,o,s,r)}case"publish":{let c=yAg(a.registryOverrides,i,t,[...o,"registryOverrides"],s,r);return Mwt({output:{delivery:"zip",publish:c.publish},...cf("package",c.package)},a,o,s,r)}default:P4("FERN_OUTPUT_UNSUPPORTED",["group","generators",r,"outputMode","type"],`Unsupported Fern output mode "${a.type}"`,"Choose the equivalent files, zip, or github SDK Config output manually.",["targets",r,"output"])}}function mAg(e,t,r,n){let i=e.publish?yXl(e.publish,e.publish,t,r,n):void 0,o=i?{publish:i}:{};if(e.delivery!=="github")return{...e,...o};let{credentials:s,...a}=e.github;return s&&X5e(r,["group","generators",n,"output","github","credentials"],["targets",n,"output","github","credentials"],"Normalized GitHub credentials have no raw environment-expression provenance"),{...e,github:a,...o}}function nXl(e,t,r,n,i,o,s){let a=Dg(e.owner),c=Dg(e.repo);(!a||!c)&&P4("FERN_GITHUB_REPOSITORY_REQUIRED",i,"Fern GitHub output requires owner and repo",'Set target.output.github.repository manually as "owner/repository".',["targets",s,"output","github","repository"]),Xl(o,[...i,"owner"]),Xl(o,[...i,"repo"]);let u=t?AIs(t,r,n,[...i,"publishInfo"],o,s):void 0,l=Dg(e.type),p=AAg(e.reviewers,[...i,"reviewers"],o);return l&&Xl(o,[...i,"type"]),typeof e.makePr=="boolean"&&Xl(o,[...i,"makePr"]),Dg(e.host)&&Xl(o,[...i,"host"]),Dg(e.branch)&&Xl(o,[...i,"branch"]),hAg(e.credentials,[...i,"credentials"],o),Jp(e.credentials)&&X5e(o,[...i,"credentials"],["targets",s,"output","github","credentials"],"GitHub credentials cannot be traced safely to raw environment expressions"),{output:{delivery:"github",github:{repository:`${a}/${c}`,...cf("host",Dg(e.host)),...cf("branch",Dg(e.branch)),mode:e.makePr===!0||l==="pullRequest"?"pull-request":l==="push"?"push":"release",...cf("reviewers",p)},...u?{publish:u.publish}:{}},...cf("package",u?.package)}}function hAg(e,t,r){if(Jp(e))for(let n of["username","password","token","apiKey"])Dg(e[n])&&Xl(r,[...t,n])}function gAg(e,t,r){for(let n of["username","password","token","apiKey"])Dg(e[n])&&Xl(r,[...t,n]);if(Jp(e.credentials))for(let n of["username","password","token","apiKey"])Dg(e.credentials[n])&&Xl(r,[...t,"credentials",n]);Jp(e.signature)&&Xl(r,[...t,"signature"])}function AAg(e,t,r){if(Array.isArray(e)){let o=yyi(e,"team",t,r),s=yyi(e,"user",t,r);return o||s?{...cf("teams",o),...cf("users",s)}:void 0}if(!Jp(e))return;let n=yyi(e.teams,"team",[...t,"teams"],r),i=yyi(e.users,"user",[...t,"users"],r);return n||i?{...cf("teams",n),...cf("users",i)}:void 0}function yyi(e,t,r,n){if(!Array.isArray(e))return;let i=e.flatMap((o,s)=>typeof o=="string"?(Xl(n,[...r,s]),[o]):!Jp(o)||o.type!==t||typeof o.name!="string"?[]:(Xl(n,[...r,s,"type"]),Xl(n,[...r,s,"name"]),[o.name]));return i.length?i:void 0}function AIs(e,t,r,n,i,o){Jp(e)||P4("FERN_PUBLICATION_INVALID",n,"Fern publication output is invalid","Set target.output.publish and target.package manually.",["targets",o,"output","publish"]);let s=Dg(e.type);s&&Xl(i,[...n,"type"]);let a=s&&Jp(e[s])?e[s]:e,c=a===e?n:[...n,s],u=xAg(s,r,[...n,"type"],o),l=Dg(a.registryUrl);l&&Xl(i,[...c,"registryUrl"]),gAg(a,c,i);let p=yXl(sA({registry:u,url:l}),a,t,i,o);if(u==="maven"){let g=Dg(a.coordinate);return g&&Xl(i,[...c,"coordinate"]),{publish:p,...g?{package:CAg(g,[...c,"coordinate"],o)}:{}}}let d=Dg(a.packageName)?"packageName":"coordinate",f=Dg(a[d]);f&&Xl(i,[...c,d]);let m=u==="pypi"?wAg(a.pypiMetadata,c,i):{};return{publish:p,...f||Object.keys(m).length?{package:{...cf("packageName",f),...m}}:{}}}function yXl(e,t,r,n,i){let o=r?.location===e.registry?r:void 0,s=["group","generators",i,"output"];if(e.registry==="npm"||e.registry==="crates"){let a=EYt(o,t,"token",s,n,i);return lIs(o,t,["token"],s,n,i),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish,token:a})}if(e.registry==="pypi"){let{username:a,password:c}=bAg(o,t,s,n,i);return lIs(o,t,["username","password","token"],s,n,i),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish,username:a,password:c})}if(e.registry==="maven"){let a=EYt(o,t,"username",s,n,i),c=EYt(o,t,"password",s,n,i),u=EAg(o?.signature,t.signature,[...s,"signature"],n,i);return lIs(o,t,["username","password"],s,n,i,!0),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish,username:a,password:c,signature:u})}return IAg(o,t,s,n,i),sA({registry:e.registry,url:e.url,releaseBranch:e.releaseBranch,tolerateRepublish:e.tolerateRepublish})}function yAg(e,t,r,n,i,o){let s=EXl(r,n,o),a=Jp(e)?e:{},c=Jp(a[s])?a[s]:{};return AIs(c,t,r,[...n,s],i,o)}function EYt(e,t,r,n,i,o){let s=e?.[r];if(vyi(s))return s;(s!==void 0||yIs(t,r))&&X5e(i,[...n,r],["targets",o,"output","publish",r],`Fern publishing ${r} is not an exact environment expression`)}function bAg(e,t,r,n,i){let o=e?.token;if(vyi(o))return{username:"__token__",password:o};let s=bXl(t,"username")==="__token__";return o!==void 0||s?(X5e(n,[...r,"token"],["targets",i,"output","publish","password"],"Fern PyPI token is not an exact raw environment expression"),{}):{...cf("username",EYt(e,t,"username",r,n,i)),...cf("password",EYt(e,t,"password",r,n,i))}}function EAg(e,t,r,n,i){if(Jp(e)){let o=[e["key-id"],e.password,e["secret-key"]],s=[e.keyId,e.password,e.secretKey],a=o.every(vyi)?o:s.every(vyi)?s:void 0;if(a){let[c,u,l]=a;return{keyId:c,password:u,secretKey:l}}}(e!==void 0||Jp(t))&&X5e(n,r,["targets",i,"output","publish","signature"],"Maven signing credentials are incomplete or not exact environment expressions")}function IAg(e,t,r,n,i){(["username","password","token","apiKey"].some(s=>e?.[s]!==void 0)||e?.signature!==void 0||vAg(t))&&X5e(n,r,["targets",i,"output","publish"],"This registry does not support credentials in public SDK Config v1")}function lIs(e,t,r,n,i,o,s=!1){let c=["username","password","token","apiKey"].filter(l=>!r.includes(l)&&(e?.[l]!==void 0||yIs(t,l))),u=!s&&(e?.signature!==void 0||t.signature!==void 0);(c.length>0||u)&&X5e(i,n,["targets",o,"output","publish"],"Fern publishing credentials or signing material include fields unsupported by this registry")}function yIs(e,t){return bXl(e,t)!==void 0}function bXl(e,t){return Dg(e[t])??(Jp(e.credentials)?Dg(e.credentials[t]):void 0)}function vAg(e){return["username","password","token","apiKey"].some(t=>yIs(e,t))||e.signature!==void 0}function vyi(e){return typeof e=="string"&&/^\$\{[A-Za-z_][A-Za-z0-9_]*\}$/.test(e)}function X5e(e,t,r,n){e.credentialDiagnostics?.push({code:"FERN_OUTPUT_CREDENTIAL_OMITTED",severity:"warning",path:t,reason:n,sdkConfigPath:r,suggestedAction:`Configure ${r.join(".")} with an environment expression such as \${CREDENTIAL_ENV_VAR}.`})}function xAg(e,t,r,n){e==="postman"&&P4("FERN_POSTMAN_PUBLICATION_UNSUPPORTED",r,"Postman collection publication is not an SDK output","Remove this non-SDK target or convert it separately from the SDK Config document.");let i=e?.replace(/Override$/,"").toLowerCase();return i==="rubygems"?"rubygems":i&&["npm","pypi","maven","nuget","crates"].includes(i)?i:(i!==void 0&&P4("FERN_PUBLICATION_UNSUPPORTED",r,`Unsupported Fern publication type "${e}"`,"Set target.output.publish and target.package manually if SDK Config supports the registry.",["targets",n,"output","publish"]),EXl(t,r,n))}function EXl(e,t,r){let i={typescript:"npm",mcp:"npm",python:"pypi",java:"maven",kotlin:"maven",csharp:"nuget",ruby:"rubygems",rust:"crates",go:"go",php:"composer"}[e];return i||P4("FERN_PUBLICATION_REGISTRY_REQUIRED",t,`No publication registry can be inferred for ${e}`,"Set target.output.publish.registry manually.",["targets",r,"output","publish","registry"]),i}function CAg(e,t,r){let n=e.split(":"),[i,o]=n;return(n.length!==2||!i||!o)&&P4("FERN_MAVEN_COORDINATE_INVALID",t,`Invalid Maven coordinate ${e}`,"Set target.package.groupId and target.package.artifactId manually.",["targets",r,"package"]),{groupId:i,artifactId:o}}function wAg(e,t,r){if(!Jp(e))return{};let n=[...t,"pypiMetadata"],i=Dg(e.description),o=Rke(e.keywords),s=Dg(e.documentationLink),a=Dg(e.homepageLink),c=SAg(e.authors,[...n,"authors"],r);return i&&Xl(r,[...n,"description"]),o&&Xl(r,[...n,"keywords"]),s&&Xl(r,[...n,"documentationLink"]),a&&Xl(r,[...n,"homepageLink"]),sA({description:i,authors:c,keywords:o,documentationUrl:s,homepage:a})}function SAg(e,t,r){if(!Array.isArray(e))return;let n=e.flatMap(i=>{if(!Jp(i))return[];let o=Dg(i.name),s=Dg(i.email),a=Dg(i.url);return o?[{name:o,...cf("email",s),...cf("url",a)}]:[]});if(n.length===e.length)return e.forEach((i,o)=>{Xl(r,[...t,o,"name"]),Jp(i)&&Dg(i.email)&&Xl(r,[...t,o,"email"]),Jp(i)&&Dg(i.url)&&Xl(r,[...t,o,"url"])}),n}function Mwt(e,t,r,n,i){for(let a of Iyi(t,r))a[a.length-1]==="_visit"&&Xl(n,a);let o=byi(t,r,n),s=o.some(a=>iXl(a.path));return{...e,unsupportedFields:[...n.credentialDiagnostics??[],...s?[{code:"FERN_OUTPUT_CREDENTIAL_UNSUPPORTED",severity:"warning",path:r,reason:"Some Fern output credentials and signatures are intentionally excluded from SDK Config v1 when they cannot be represented in the public schema",suggestedAction:"Provide publishing credentials through the build request or external secret resolution."}]:[],...o.filter(a=>!iXl(a.path)).map(a=>TAg(a.path,i))]}}function iXl(e){let t=e.filter(n=>typeof n=="string"),r=t[t.length-1];return t.some(n=>n==="credentials"||n==="signature")||["apiKey","keyId","password","secretKey","token","username"].includes(r??"")}function TAg(e,t){let r=e.filter(a=>typeof a=="string"),n=r[r.length-1],i={directory:{suggestedAction:"Preserve the GitHub output subdirectory outside SDK Config; public v1 has no repository subdirectory field."},license:{sdkConfigPath:["targets",t,"package","license"],suggestedAction:"Set target.package.license manually using portable license metadata."},id:{sdkConfigPath:["targets",t,"package","license"],suggestedAction:"Set target.package.license manually using portable license metadata."},contents:{sdkConfigPath:["targets",t,"package","license"],suggestedAction:"Set target.package.license manually without embedding license contents."},downloadSnippets:{sdkConfigPath:["docs","snippets","enabled"],suggestedAction:"Set docs.snippets.enabled manually and choose a portable output path if needed."},version:{sdkConfigPath:["targets",t,"sdkVersion"],suggestedAction:"Set target.sdkVersion manually if this output version identifies the SDK artifact."},description:{sdkConfigPath:["targets",t,"package","description"],suggestedAction:"Set target.package.description manually to a valid value."},authors:{sdkConfigPath:["targets",t,"package","authors"],suggestedAction:"Set target.package.authors manually using valid author metadata."},keywords:{sdkConfigPath:["targets",t,"package","keywords"],suggestedAction:"Set target.package.keywords manually using non-empty strings."},documentationLink:{sdkConfigPath:["targets",t,"package","documentationUrl"],suggestedAction:"Set target.package.documentationUrl manually to a valid URL."},homepageLink:{sdkConfigPath:["targets",t,"package","homepage"],suggestedAction:"Set target.package.homepage manually to a valid URL."}},o=n?i[n]:void 0,s=r.includes("license")?i.license:o;return{code:"FERN_OUTPUT_FIELD_UNSUPPORTED",severity:"warning",path:e,reason:"Fern output field is not represented by SDK Config v1",...cf("sdkConfigPath",s?.sdkConfigPath),suggestedAction:s?.suggestedAction??"Review this output setting and preserve it outside SDK Config when no equivalent exists."}}var OAg=T.strictObject({clientName:Pr.optional(),exportedClientName:Pr.optional(),environmentTypeName:Pr.optional(),apiErrorName:Pr.optional(),baseErrorName:Pr.optional(),pagerName:Pr.optional(),smartCasing:T.boolean().optional(),smartCasingDigitWordBoundary:T.boolean().optional()}),IXl=T.discriminatedUnion("type",[T.strictObject({type:T.literal("path"),location:Y5e}),T.strictObject({type:T.literal("url"),location:Pr})]),PAg=T.strictObject({name:Pr,version:Pr,groupId:Pr.optional()}),BAg=T.strictObject({enabled:T.boolean(),source:IXl.optional(),dependencies:T.array(PAg).optional()}),DAg=T.strictObject({enabled:T.boolean(),source:IXl.optional(),conflictStrategy:T.enum(["mark","ours","theirs"]).optional(),trackChanges:T.boolean().optional(),protectedFiles:T.array(Pr).optional()}),RAg=T.strictObject({path:Y5e,outputName:Pr.optional()}),kAg=T.union([T.strictObject({name:Pr,value:T.string()}),T.strictObject({name:Pr,valueRef:Pr})]),FAg=T.strictObject({enabled:T.boolean(),endpoint:Pr.optional(),exporter:T.enum(["otlp-http","console"]).optional(),headers:T.array(kAg).optional(),batchSize:T.number().int().positive().optional(),scheduledDelayMs:T.number().nonnegative().optional(),exportTimeoutMs:T.number().nonnegative().optional()}).superRefine(({enabled:e,endpoint:t},r)=>{e&&t===void 0&&r.addIssue({code:"custom",message:"endpoint is required when analytics is enabled",path:["endpoint"]})}),NAg=T.strictObject({enabled:T.boolean(),exclusions:T.array(Pr).optional(),fallbackToGeneratedErrorExamples:T.boolean().optional(),fixtureSource:T.enum(["synthetic","recorded","auto"]).optional()}),jAg=T.strictObject({enabled:T.boolean(),mode:T.enum(["core-runtime","schema-driven","both"]).optional(),exclusions:T.array(Pr).optional()}),QAg=T.strictObject({enabled:T.boolean(),responseType:T.enum(["wrapper","native","web"]).optional(),fileResponseType:T.enum(["stream","binary-response"]).optional(),defaultChunkSizeBytes:T.number().int().positive().optional()}),zAg=T.strictObject({outputDirectory:T.enum(["project-root","source-root"]).optional(),packagePath:Pr.optional()}),MAg=T.strictObject({enumRepresentation:T.enum(["enum","union","literal","forward-compatible-enum","language-default"]).optional(),additionalProperties:T.enum(["allow","forbid","ignore","language-default"]).optional(),inlineTypes:T.boolean().optional(),omitUndefined:T.boolean().optional()}),bIs={includeWatermark:T.boolean().optional(),ai:T.boolean().optional(),includeOptionalSnippetParameters:T.boolean().optional(),buildAllModels:T.boolean().optional(),inferServiceNames:T.boolean().optional(),includeDeprecatedOperations:T.boolean().optional(),multipleResponses:T.boolean().optional(),devContainer:T.boolean().optional(),allowMockClient:T.boolean().optional(),ignoreFiles:T.array(Pr).optional(),reservedKeywords:T.array(Pr).optional(),hooks:BAg.optional(),customCode:DAg.optional(),workflows:T.array(RAg).optional(),customQueryPaths:T.array(Y5e).optional(),analytics:FAg.optional(),wireTests:NAg.optional(),unitTests:jAg.optional(),webSockets:T.boolean().optional(),streams:QAg.optional(),naming:OAg.optional(),layout:zAg.optional(),serialization:MAg.optional()},T4=T.strictObject(bIs),LAg=T.strictObject({...bIs,includeWatermark:T.boolean().default(!1),ai:T.boolean().default(!1),buildAllModels:T.boolean().default(!1),inferServiceNames:T.boolean().default(!1),includeDeprecatedOperations:T.boolean().default(!0),multipleResponses:T.boolean().default(!1),devContainer:T.boolean().default(!1),allowMockClient:T.boolean().default(!1)}),VAg=new Set(Object.keys(bIs));function vXl(e){let t={},r={};for(let[n,i]of Object.entries(e??{}))(VAg.has(n)?t:r)[n]=i;return{common:t,language:r}}var AjT=T.enum(["npm","pypi","maven","nuget","rubygems","crates","go","composer"]),UAg=T.strictObject({keyId:Pr,password:Pr,secretKey:Pr}),Dke={url:Pr.optional(),releaseBranch:Pr.optional(),tolerateRepublish:T.boolean().optional()},EIs=T.discriminatedUnion("registry",[T.strictObject({registry:T.literal("npm"),token:Pr.optional(),...Dke}),T.strictObject({registry:T.literal("pypi"),username:Pr.optional(),password:Pr.optional(),...Dke}),T.strictObject({registry:T.literal("maven"),username:Pr.optional(),password:Pr.optional(),signature:UAg.optional(),...Dke}),T.strictObject({registry:T.literal("nuget"),...Dke}),T.strictObject({registry:T.literal("rubygems"),...Dke}),T.strictObject({registry:T.literal("crates"),token:Pr.optional(),...Dke}),T.strictObject({registry:T.literal("go"),...Dke}),T.strictObject({registry:T.literal("composer"),...Dke})]),_Ag=T.strictObject({teams:T.array(Pr).optional(),users:T.array(Pr).optional()}),GAg=T.strictObject({username:Pr.optional(),password:Pr.optional(),token:Pr.optional(),apiKey:Pr.optional()}),qAg=T.strictObject({repository:Pr,host:Pr.optional(),branch:Pr.optional(),mode:T.enum(["release","pull-request","push","commit","commit-and-release"]).optional(),reviewers:_Ag.optional(),credentials:GAg.optional(),privateRepository:T.boolean().optional()}),WAg=T.strictObject({delivery:T.literal("files"),path:Pr.optional(),publish:EIs.optional()}),HAg=T.strictObject({delivery:T.literal("zip"),fileName:Pr.optional(),publish:EIs.optional()}),KAg=T.strictObject({delivery:T.literal("github"),github:qAg,publish:EIs.optional()}),xXl=T.discriminatedUnion("delivery",[WAg,HAg,KAg],{error:'output.delivery must be one of "files", "zip", or "github"'});var CXl=iAg,JAg=T.strictObject({enabled:T.boolean()}),wXl=T.strictObject({respectNullableSchemas:T.boolean().optional(),titleAsSchemaName:T.boolean().optional(),coerceEnumsToLiterals:T.boolean().optional(),idiomaticRequestNames:T.boolean().optional(),wrapReferencesToNullableInOptional:T.boolean().optional(),coerceOptionalSchemasToNullable:T.boolean().optional(),pathParameterOrder:T.enum(["url-order","spec-order"]).optional(),onlyIncludeReferencedSchemas:T.boolean().optional(),objectQueryParameters:T.boolean().optional(),typeDatesAsStrings:T.boolean().optional(),groupMultiApiEnvironments:T.boolean().optional(),ignoreTags:T.boolean().optional(),disambiguateRequestNames:T.boolean().optional(),respectReadonlySchemas:T.boolean().optional(),discriminatedUnionV2:T.boolean().optional(),undiscriminatedUnionsWithLiterals:T.boolean().optional(),inlineAllOfSchemas:T.boolean().optional(),resolveSchemaCollisions:T.boolean().optional(),asyncApiMessageNaming:T.enum(["v1","v2"]).optional(),defaultIntegerFormat:T.enum(["int32","int64","uint32","uint64"]).optional()}),YAg=T.enum(["openapi","swagger","postman","asyncapi","graphql"]),oXl={id:Pr,type:YAg,name:Pr.optional(),namespace:Pr.optional(),apiImportSettings:wXl.optional(),overlays:T.array(Y5e).optional(),overrides:T.array(Y5e).optional()},XAg=T.union([T.strictObject({...oXl,path:Y5e}),T.strictObject({...oXl,url:T.url({protocol:/^https?$/})})],{error:"source spec must contain exactly one locator: path or HTTP(S) url"}),ZAg=T.strictObject({specs:T.array(XAg).min(1,"source.specs must contain at least one source spec"),apiImportSettings:wXl.optional()}).superRefine(({specs:e},t)=>{let r=new Set;e.forEach(({id:n},i)=>{r.has(n)&&t.addIssue({code:"custom",message:`source spec id "${n}" must be unique`,path:["specs",i,"id"]}),r.add(n)})}),$Ag=T.strictObject({paginationParameters:T.array(Pr).optional(),skills:T.boolean().optional()}),eyg=T.strictObject({useOptionalWrapper:T.boolean().optional(),simplifyObjectDictionaries:T.boolean().optional(),explicitNamespaces:T.boolean().optional(),rootNamespaceForCoreClasses:T.boolean().optional(),includeExceptionHandler:T.boolean().optional(),experimentalExplicitNullableOptional:T.boolean().optional()}),tyg=T.strictObject({legacyComplexModels:T.boolean().optional(),smartCasing:T.boolean().optional(),clientConstructorName:Pr.optional(),unionVersion:T.enum(["v0","v1"]).optional(),includeLegacyClientOptions:T.boolean().optional()}),SXl=T.strictObject({packageLayout:T.enum(["flat","nested"]).optional(),useLocalDateForDates:T.boolean().optional(),collapseOptionalNullable:T.boolean().optional(),gradleDistributionUrl:T.string().min(1).optional(),gradlePluginManagement:T.string().optional(),gradleCentralDependencyManagement:T.boolean().optional(),asyncStyle:T.enum(["dedicated-client","twin-methods"]).optional()}),ryg=SXl.extend({includeKotlinSnippets:T.boolean().optional()}),nyg=SXl,iyg=T.strictObject({target:Pr.optional(),module:Pr.optional(),lib:T.array(Pr).optional()}),oyg=T.strictObject({name:Pr,command:Pr}),syg=T.strictObject({name:T.enum(["axios","fetch"])}),TXl=T.strictObject({typescriptVersion:Pr.optional(),zodVersion:Pr.optional(),compilerOptions:iyg.optional(),httpClient:syg.optional(),packageManager:T.enum(["pnpm","yarn"]).optional(),testFramework:T.enum(["jest","vitest"]).optional(),namingStrategy:T.enum(["base","originalPropertyNames"]).optional(),bundle:T.boolean().optional(),exportClassDefault:T.boolean().optional(),namespaceExportName:Pr.optional(),allowCustomFetcher:T.boolean().optional(),useBrandedStringAliases:T.boolean().optional(),useLegacyExports:T.boolean().optional(),useBigInt:T.boolean().optional(),serdeLayer:T.boolean().optional(),scripts:T.array(oyg).optional()}),ayg=["IN_DEVELOPMENT","PRE_RELEASE","GENERAL_AVAILABILITY","DEPRECATED","ALPHA","BETA","PREVIEW","LEGACY"],sXl=T.strictObject({include:T.array(Pr).optional(),exclude:T.array(Pr).optional()}),cyg=Pr.refine(e=>e!=="default"&&/^[a-z0-9-]+$/.test(e),'toolset names must match [a-z0-9-]+ and cannot be "default"'),uyg=TXl.extend({serverName:Pr.optional(),serverDescription:Pr.optional(),excludeAvailability:T.array(T.enum(ayg)).optional(),tools:sXl.optional(),toolsets:T.record(cyg,sXl).optional()}),lyg=T.strictObject({propertyAccess:T.enum(["public","private"]).optional(),generateClientInterfaces:T.boolean().optional()}),pyg=T.strictObject({fileName:Pr.optional(),exportedFileName:Pr.optional()}),fyg=T.strictObject({versionCompatibility:T.enum(["v1","v2","both","v1-on-v2"]).optional(),frozen:T.boolean().optional(),requireOptionalFields:T.boolean().optional(),unionNaming:T.enum(["v0","v1"]).optional(),useFieldAliases:T.boolean().optional()}),dyg=T.strictObject({from:Pr,imports:T.array(Pr).min(1)}),myg=T.strictObject({pythonVersion:Pr.optional(),pydanticVersion:Pr.optional(),pydantic:fyg.optional(),client:pyg.optional(),followRedirectsByDefault:T.boolean().optional(),defaultBytesStreamChunkSize:T.number().int().positive().optional(),recursionLimit:T.number().int().gt(1e3).optional(),extras:T.record(Pr,T.array(Pr)).optional(),alwaysInitializeOptionals:T.boolean().optional(),useTypedDictRequests:T.boolean().optional(),additionalInitExports:T.array(dyg).optional()}),hyg=T.strictObject({requirePaths:T.array(Pr).optional()}),gyg=T.strictObject({dateTimeType:T.enum(["offset","utc"]).optional(),capitalizeInitialisms:T.boolean().optional(),features:T.record(T.string(),T.array(Pr)).optional(),defaultFeatures:T.array(Pr).optional()}),Ayg=T.strictObject({moduleName:Pr.optional(),nullableAsOptional:T.boolean().optional()}),aXl=T.discriminatedUnion("enabled",[T.strictObject({enabled:T.literal(!0),sourceDir:Pr}),T.strictObject({enabled:T.literal(!1)})]),yyg=T.strictObject({resources:aXl,attributes:aXl}),byg=T.strictObject({addressKey:Pr,authTokenKey:Pr}),Eyg=T.strictObject({providerName:Pr.optional(),providerVersion:Pr.optional(),providerModulePath:gIs.optional(),mockAcceptance:T.boolean().optional(),hideComputedDiff:T.boolean().optional(),providerSchema:byg.optional(),planModifiers:yyg.optional()}),O4={generatorVersion:lXl.optional(),sdkName:Pr.optional(),sdkVersion:Pr.optional(),client:Xgg.optional(),docs:hXl.optional(),package:CXl.optional(),output:xXl.optional()},Iyg=T.discriminatedUnion("language",[T.strictObject({language:T.literal("typescript"),generation:T4.extend(TXl.shape).optional(),...O4}),T.strictObject({language:T.literal("python"),generation:T4.extend(myg.shape).optional(),...O4}),T.strictObject({language:T.literal("java"),generation:T4.extend(ryg.shape).optional(),...O4}),T.strictObject({language:T.literal("kotlin"),generation:T4.extend(nyg.shape).optional(),...O4}),T.strictObject({language:T.literal("go"),generation:T4.extend(tyg.shape).optional(),...O4}),T.strictObject({language:T.literal("csharp"),generation:T4.extend(eyg.shape).optional(),...O4}),T.strictObject({language:T.literal("php"),generation:T4.extend(lyg.shape).optional(),...O4}),T.strictObject({language:T.literal("ruby"),generation:T4.extend(hyg.shape).optional(),...O4}),T.strictObject({language:T.literal("rust"),generation:T4.extend(gyg.shape).optional(),...O4}),T.strictObject({language:T.literal("swift"),generation:T4.extend(Ayg.shape).optional(),...O4}),T.strictObject({language:T.literal("cli"),generation:T4.extend($Ag.shape).optional(),...O4}),T.strictObject({language:T.literal("mcp"),generation:T4.extend(uyg.shape).optional(),...O4}),T.strictObject({language:T.literal("terraform"),generation:T4.extend(Eyg.shape).optional(),...O4})]),vyg="sdk-config/v1",xyg={npm:["typescript","mcp"],pypi:["python"],maven:["java","kotlin"],nuget:["csharp"],rubygems:["ruby"],crates:["rust"],go:["go"],composer:["php"]},Cyg=new Set(["npm","pypi","nuget","rubygems","crates","composer"]);function wyg(e,t,r,n){let i=["targets",r,"package"];if(Cyg.has(t)&&!e.packageName&&n.addIssue({code:"custom",message:`packageName is required when publishing to "${t}"`,path:[...i,"packageName"]}),t==="composer"&&e.packageName){let o=Zgg.safeParse(e.packageName);o.success||n.addIssue({code:"custom",message:o.error.issues[0]?.message??"Invalid Composer package name",path:[...i,"packageName"]})}t==="go"&&!e.modulePath&&n.addIssue({code:"custom",message:"modulePath is required when publishing a Go module",path:[...i,"modulePath"]}),t==="maven"&&["groupId","artifactId"].forEach(o=>{e[o]||n.addIssue({code:"custom",message:`${o} is required when publishing to Maven`,path:[...i,o]})})}function Syg(e,t,r,n,i){let o=e.output??n;if(!o){i.addIssue({code:"custom",message:"output is required on the target when no global output is configured",path:["targets",t,"output"]});return}if(!o.publish)return;let s=o.publish.registry;if(!xyg[s].some(a=>a===e.language)){i.addIssue({code:"custom",message:`registry "${s}" is not supported for target language "${e.language}"`,path:["targets",t,e.output?"output":"language"]});return}wyg({...r,...e.package},s,t,i)}var IIs=T.strictObject({schemaVersion:T.literal(vyg),sdkName:Pr,sdkVersion:Pr.default("1.0.0"),apiVersion:Pr.optional(),source:ZAg,api:Ggg.prefault({}),client:Ygg.prefault({}),package:CXl.prefault({}),output:xXl.optional(),replay:JAg.optional(),docs:hXl.prefault({}),generation:LAg.prefault({}),targets:T.array(Iyg).min(1)}).superRefine(({output:e,package:t,targets:r},n)=>{let i=new Set;r.forEach((o,s)=>{i.has(o.language)&&n.addIssue({code:"custom",message:`target language "${o.language}" must be unique`,path:["targets",s,"language"]}),i.add(o.language),Syg(o,s,t,e,n)})});function Vwt(e){return IIs.parse(e),e}function kke(e){return IIs.parse(e)}var Tyg={"fernapi/fern-typescript":"typescript","fernapi/fern-typescript-sdk":"typescript","fernapi/fern-typescript-node-sdk":"typescript","fernapi/fern-typescript-browser-sdk":"typescript","fernapi/fern-python-sdk":"python","fernapi/fern-java-sdk":"java","fernapi/fern-kotlin-sdk":"kotlin","fernapi/fern-go-sdk":"go","fernapi/fern-csharp-sdk":"csharp","fernapi/fern-php-sdk":"php","fernapi/fern-ruby-sdk":"ruby","fernapi/fern-ruby-sdk-v2":"ruby","fernapi/fern-rust-sdk":"rust","fernapi/fern-swift-sdk":"swift","fernapi/fern-cli":"cli","fernapi/fern-cli-generator":"cli","fernapi/fern-mcp-server":"mcp"};function OXl(e){e.group.generators.length===0&&P4("FERN_GENERATORS_REQUIRED",["group","generators"],"Fern generator group must contain at least one generator","Select a Fern generator group containing at least one SDK generator.");let t=e.group.generators.map((d,f)=>Oyg(d,f));Pyg(t);let r=new Set(t),n=e.group.generators.map((d,f)=>{let m=t[f],g=Byg(d,m,r,f),A=dAg(d,m,f);return{generator:d,language:m,invocation:g,...A}}),i=pIs(n.map(({invocation:d})=>d.client)),o=pIs(n.map(({invocation:d})=>d.docs)),s=pIs(n.map(({invocation:d})=>d.generation)),a={...e.api??{}};delete a.audiences,e.group.audiences.type==="select"&&(a.audiences=[...e.group.audiences.audiences]);let c=n.map(({generator:d,invocation:f,language:m,output:g,package:A},y)=>{let E={language:m,output:g,...cf("sdkName",d.sdkName),...cf("sdkVersion",d.sdkVersion),...cf("client",i.targetOverrides[y]),...cf("docs",o.targetOverrides[y])};(Object.keys(f.package).length>0||A||d.package)&&(E.package={...f.package,...A,...d.package});let x={...s.targetOverrides[y],...f.targetGeneration};return Object.keys(x).length>0&&(E.generation=x),d.version&&(lXl.safeParse(d.version).success?E.generatorVersion=d.version:f.unsupportedFields.push({code:"FERN_GENERATOR_VERSION_NOT_EXACT",severity:"warning",path:["group","generators",y,"version"],reason:"SDK Config requires an exact generator semantic version",sdkConfigPath:["targets",y,"generatorVersion"],suggestedAction:"Resolve the Fern generator tag to an exact semantic version and set target.generatorVersion manually, or leave it omitted."})),E}),u={schemaVersion:"sdk-config/v1",sdkName:e.apiName,source:e.source,...cf("sdkVersion",e.sdkVersion),...cf("apiVersion",e.apiVersion),...cf("replay",e.replay),...bYt("api",a),...bYt("client",i.shared),...bYt("docs",o.shared),...bYt("generation",s.shared),targets:c},l=IIs.safeParse(u);if(!l.success)throw new xyi(l.error.issues.map(d=>{let f=d.path.map(m=>typeof m=="symbol"?m.description??m.toString():m);return{code:"SDK_CONFIG_VALIDATION_FAILED",severity:"error",path:["mappedSdkConfig",...f],reason:d.message,sdkConfigPath:f,suggestedAction:`Set ${f.join(".")} manually to a valid SDK Config v1 value.`}}));return{sdkConfig:u,unsupportedFields:n.flatMap(({invocation:d,unsupportedFields:f})=>[...d.unsupportedFields,...f])}}function Oyg(e,t){let r=e.sdkLanguage??Tyg[e.name];return(!r||!PXl(r))&&P4("FERN_SDK_LANGUAGE_REQUIRED",["group","generators",t,"name"],`Cannot determine an SDK language for Fern generator ${e.name}`,"Set sdkLanguage explicitly if this custom generator produces one of the SDK Config v1 target languages.",["targets",t,"language"]),r}function PXl(e){return["typescript","python","java","kotlin","go","csharp","php","ruby","rust","swift","cli","mcp","terraform"].includes(e)}function Pyg(e){let t=new Set;for(let r of e)t.has(r)&&P4("FERN_DUPLICATE_TARGET_LANGUAGE",["group","generators"],`SDK Config v1 cannot represent multiple Fern generators for language "${r}"`,"Create a separate SDK Config document for each generator that targets the same language.",["targets"]),t.add(r)}function pIs(e){let t=BXl(e);return{shared:t.shared,targetOverrides:t.overrides.map(r=>Object.keys(r).length>0?r:void 0)}}function BXl(e){let t={},r=e.map(()=>({})),n=new Set(e.flatMap(i=>Object.keys(i)));for(let i of n){let o=e.map(c=>c[i]);if(!o.every(c=>c!==void 0)){o.forEach((c,u)=>{c!==void 0&&(r[u][i]=c)});continue}if(o.every(Jp)){let c=BXl(o);Object.keys(c.shared).length>0&&(t[i]=c.shared),c.overrides.forEach((u,l)=>{Object.keys(u).length>0&&(r[l][i]=u)});continue}let a=o[0];o.every(c=>rXl(c)===rXl(a))?t[i]=a:o.forEach((c,u)=>{r[u][i]=c})}return{shared:t,overrides:r}}function Byg(e,t,r,n){let i=["group","generators",n],o={consumedPaths:new Set},s=Jp(e.config)?e.config:{},a={},c={},u={};Fyg(t,s,o,a,c,u,[...i,"config"]);let l=Jp(e.raw)?e.raw:void 0,p=typeof l?.["smart-casing"]=="boolean"?l["smart-casing"]:e.smartCasing===!1?!1:void 0,d=typeof l?.["smart-casing-digit-word-boundary"]=="boolean"?l["smart-casing-digit-word-boundary"]:e.smartCasingDigitWordBoundary===!0?!0:void 0;(p!==void 0||d!==void 0)&&(c.naming={...c.naming,...cf("smartCasing",p),...cf("smartCasingDigitWordBoundary",d)});let f=Nyg(t,s,o,u,[...i,"config"]);Hyg(e.publishMetadata,u),e.keywords?.length&&(c.reservedKeywords=[...e.keywords]);let m=Jp(e.settings)?e.settings:void 0;if(m){let y=ap(m,["inlinePathParameters"],o,[...i,"settings"]);y!==void 0&&a.pathParameterStyle===void 0&&(a.pathParameterStyle=y?"inline":"wrapped")}let g=Wyg(e.readme,t,r,o,[...i,"readme"]),A=[...byi(s,[...i,"config"],o),...m?byi(m,[...i,"settings"],o):[],...Jp(e.readme)?byi(e.readme,[...i,"readme"],o):[],...Dyg(e,n)];return{client:a,docs:g,generation:c,package:u,targetGeneration:f,unsupportedFields:A}}function Dyg(e,t){return[["automation",kyg(e.automation)?void 0:e.automation],["containerImage",e.containerImage],["irVersionOverride",e.irVersionOverride],["idempotencyKeyGenerationConfig",e.idempotencyKeyGenerationConfig],["absolutePathToLocalSnippets",e.absolutePathToLocalSnippets],["disableExamples",e.disableExamples===!1?void 0:e.disableExamples],["apiOverride",e.apiOverride]].flatMap(([n,i])=>{if(i===void 0)return[];let o=Ryg(n);return[{code:"FERN_RESOLVED_FIELD_UNSUPPORTED",severity:"warning",path:["group","generators",t,n],reason:"Resolved Fern field is not represented by SDK Config v1",...cf("sdkConfigPath",o.sdkConfigPath),suggestedAction:o.suggestedAction}]})}function Ryg(e){return e==="absolutePathToLocalSnippets"?{sdkConfigPath:["docs","snippets","outputPath"],suggestedAction:"Choose a portable relative snippet path and set docs.snippets.outputPath manually."}:e==="idempotencyKeyGenerationConfig"?{suggestedAction:"Preserve this orchestration setting outside SDK Config; public v1 has no idempotency-generation field."}:{suggestedAction:"Review this Fern setting and preserve it outside SDK Config, or set an equivalent SDK Config field manually if one is introduced."}}function kyg(e){return Jp(e)&&e.generate===!0&&e.upgrade===!0&&e.preview===!0&&e.verify===!0}function Fyg(e,t,r,n,i,o,s){let a=ap(t,["inlinePathParameters"],r,s),c=ap(t,["inlineFileProperties"],r,s),u=ap(t,["inlineRequestParams"],r,s);a!==void 0&&(n.pathParameterStyle=a?"inline":"wrapped"),c!==void 0&&(n.filePropertyStyle=c?"inline":"wrapped"),u!==void 0&&(n.requestParameterStyle=u?"inline":"wrapped");let l=lAg(t,r,s);l!==void 0&&(n.timeoutMs=l);let p=ap(t,["skipResponseValidation","skipValidation"],r,s),d=e==="python"?dae(t,["pydanticConfig"],r,s):void 0,f=d?ap(d.value,["skipValidation"],r,d.path):void 0,m=p??f;m!==void 0&&(n.responseValidation=!m);let g=ap(t,["useDefaultRequestParameterValues"],r,s);g!==void 0&&(n.useDefaultRequestParameterValues=g);let A=ap(t,["respectOptionalRequestBody"],r,s);A!==void 0&&(n.respectOptionalRequestBody=A);let y=dIs(t,["maxRetries"],r,s),E=dge(t,["retryStatusCodes"],["legacy","recommended"],r,s);(y!==void 0||E!==void 0)&&(n.retry={...y===void 0?{}:{maxAttempts:y+1},...cf("statusCodeProfile",E)});let x=e==="python"?dae(t,["client"],r,s):void 0,v=Ma(t,["clientName","clientClassName"],r,s),C=x?Ma(x.value,["className"],r,x.path):void 0,O=Ma(t,["exportedClientName","exportedClientClassName"],r,s),D=x?Ma(x.value,["exportedClassName"],r,x.path):void 0,R=sA({pagerName:Ma(t,["customPagerName","customPagerClassname","customPagerClassName"],r,s),clientName:v??C,exportedClientName:O??D,environmentTypeName:Ma(t,["environmentClassName","environmentEnumName"],r,s),apiErrorName:Ma(t,["baseApiExceptionClassName"],r,s),baseErrorName:Ma(t,["baseExceptionClassName"],r,s)});Object.keys(R).length&&(i.naming=R);let P=ap(t,["enableWireTests","generateWireTests"],r,s);P!==void 0&&(i.wireTests={enabled:P});let M=ap(t,["generateWebSocketClients","shouldGenerateWebsocketClients","enableWebsockets"],r,s);M!==void 0&&(i.webSockets=M);let J=ap(t,["enableInlineTypes"],r,s),X=ap(t,["omitUndefined"],r,s),$=ap(t,["enableForwardCompatibleEnums"],r,s),ie=sA({inlineTypes:J,omitUndefined:X,enumRepresentation:$===void 0?void 0:$?"forward-compatible-enum":"language-default"});Object.keys(ie).length&&(i.serialization=ie);let ue=Ma(t,["namespace","packagePrefix"],r,s);ue!==void 0&&(o.namespace=ue);let oe=Ma(t,["packagePath"],r,s);oe!==void 0&&(i.layout={packagePath:oe}),Kyg(t,r,o,s)}function Nyg(e,t,r,n,i){switch(e){case"typescript":return cXl(t,r,n,i);case"mcp":return{...cXl(t,r,n,i),...qyg(t,r,i)};case"python":return jyg(t,r,n,i);case"java":case"kotlin":return Qyg(e,t,r,n,i);case"go":return zyg(t,r,n,i);case"csharp":return Myg(t,r,n,i);case"php":return Lyg(t,r,n,i);case"ruby":return Vyg(t,r,n,i);case"rust":return Uyg(t,r,n,i);case"swift":return sA({moduleName:Ma(t,["moduleName"],r,i)});case"cli":return _yg(t,r,n,i);case"terraform":return Gyg(t,r,n,i)}}function cXl(e,t,r,n){DXl(e,["packageJson"],t,r,n);let i=ap(e,["serdeLayer"],t,n),o=ap(e,["noSerdeLayer"],t,n),s=dge(e,["fetchSupport"],["native"],t,n);return sA({typescriptVersion:Ma(e,["typescriptVersion"],t,n),zodVersion:Ma(e,["zodVersion"],t,n),packageManager:dge(e,["packageManager"],["pnpm","yarn"],t,n),testFramework:dge(e,["testFramework"],["jest","vitest"],t,n),httpClient:s==="native"?{name:"fetch"}:void 0,bundle:ap(e,["bundle"],t,n),exportClassDefault:ap(e,["exportClassDefault"],t,n),namespaceExportName:Ma(e,["namespaceExportName","namespaceExport"],t,n),allowCustomFetcher:ap(e,["allowCustomFetcher"],t,n),useBrandedStringAliases:ap(e,["useBrandedStringAliases"],t,n),useLegacyExports:ap(e,["useLegacyExports"],t,n),useBigInt:ap(e,["useBigInt"],t,n),serdeLayer:i??(o===void 0?void 0:!o)})}function jyg(e,t,r,n){let i=Ma(e,["packageName"],t,n),o=Ma(e,["pypiPackageName"],t,n);i!==void 0&&(r.moduleName=i),o!==void 0&&(r.packageName=o);let s=dae(e,["client"],t,n),a=Ma(e,["clientFilename"],t,n),c=s?Ma(s.value,["filename"],t,s.path):void 0,u=s?Ma(s.value,["exportedFilename"],t,s.path):void 0;return sA({pythonVersion:Ma(e,["pythonVersion","pyprojectPythonVersion"],t,n),pydanticVersion:Ma(e,["pydanticVersion"],t,n),...bYt("client",sA({fileName:a??c,exportedFileName:u})),followRedirectsByDefault:ap(e,["followRedirectsByDefault"],t,n),defaultBytesStreamChunkSize:dIs(e,["defaultBytesStreamChunkSize"],t,n,1),recursionLimit:dIs(e,["recursionLimit"],t,n,1001),extras:gXl(e,["extras"],t,n),alwaysInitializeOptionals:ap(e,["alwaysInitializeOptionals"],t,n),useTypedDictRequests:ap(e,["useTypedDictRequests"],t,n),additionalInitExports:Xyg(e,t,n)})}function Qyg(e,t,r,n,i){let o=Ma(t,["packageName","packagePrefix"],r,i),s=Ma(t,["group","groupId"],r,i),a=Ma(t,["artifact","artifactId"],r,i);return o!==void 0&&(n.namespace=o),s!==void 0&&(n.groupId=s),a!==void 0&&(n.artifactId=a),sA({packageLayout:dge(t,["packageLayout"],["flat","nested"],r,i),useLocalDateForDates:ap(t,["useLocalDateForDates"],r,i),collapseOptionalNullable:ap(t,["collapseOptionalNullable"],r,i),gradleDistributionUrl:Ma(t,["gradleDistributionUrl"],r,i),gradlePluginManagement:Ma(t,["gradlePluginManagement"],r,i),gradleCentralDependencyManagement:ap(t,["gradleCentralDependencyManagement"],r,i),asyncStyle:dge(t,["asyncStyle"],["dedicated-client","twin-methods"],r,i),...e==="java"?{includeKotlinSnippets:ap(t,["includeKotlinSnippets"],r,i)}:{}})}function zyg(e,t,r,n){let i=dae(e,["module"],t,n),o=i?pAg(i.value,["path"],t,i.path):void 0,s=Ma(e,["packageName"],t,n);return o!==void 0&&(r.modulePath=o),s!==void 0&&(r.packageName=s),sA({legacyComplexModels:ap(e,["legacyComplexModels"],t,n),unionVersion:dge(e,["union"],["v0","v1"],t,n),includeLegacyClientOptions:ap(e,["includeLegacyClientOptions"],t,n),clientConstructorName:Ma(e,["clientConstructorName"],t,n)})}function Myg(e,t,r,n){let i=Ma(e,["packageId"],t,n);return i!==void 0&&(r.packageName=i),sA({useOptionalWrapper:ap(e,["useOptionalWrapper"],t,n),simplifyObjectDictionaries:ap(e,["simplifyObjectDictionaries"],t,n),explicitNamespaces:ap(e,["explicitNamespaces"],t,n),rootNamespaceForCoreClasses:ap(e,["rootNamespaceForCoreClasses"],t,n),includeExceptionHandler:ap(e,["includeExceptionHandler"],t,n),experimentalExplicitNullableOptional:ap(e,["experimentalExplicitNullableOptional"],t,n)})}function Lyg(e,t,r,n){DXl(e,["composerJson"],t,r,n);let i=Ma(e,["packageName"],t,n);return i!==void 0&&(r.packageName=i),sA({propertyAccess:dge(e,["propertyAccess"],["public","private"],t,n),generateClientInterfaces:ap(e,["generateClientInterfaces"],t,n)})}function Vyg(e,t,r,n){let i=Ma(e,["moduleName"],t,n);return i!==void 0&&(r.moduleName=i),sA({requirePaths:Lwt(e,["requirePaths"],t,n)})}function Uyg(e,t,r,n){let i=Ma(e,["crateName"],t,n),o=Ma(e,["packageRepository"],t,n),s=Ma(e,["packageDescription"],t,n),a=Ma(e,["packageDocumentation"],t,n);return Object.assign(r,sA({packageName:i,repository:o,description:s,documentationUrl:a})),sA({dateTimeType:dge(e,["dateTimeType"],["offset","utc"],t,n),capitalizeInitialisms:ap(e,["capitalizeInitialisms"],t,n),features:gXl(e,["features"],t,n),defaultFeatures:Lwt(e,["defaultFeatures"],t,n)})}function _yg(e,t,r,n){let i=dae(e,["packageIdentity"],t,n);return i&&Object.assign(r,sA({packageName:Ma(i.value,["name"],t,i.path),repository:Ma(i.value,["repository"],t,i.path),description:Ma(i.value,["description"],t,i.path)})),sA({paginationParameters:Lwt(e,["paginationParameters"],t,n),skills:ap(e,["skills"],t,n)})}function Gyg(e,t,r,n){let i=Ma(e,["providerModulePath","providerGoModuleName"],t,n);return i!==void 0&&(r.modulePath=i),sA({providerName:Ma(e,["providerName"],t,n),providerVersion:Ma(e,["providerVersion"],t,n),providerModulePath:i,mockAcceptance:ap(e,["mockAcceptance"],t,n),hideComputedDiff:ap(e,["hideComputedDiff"],t,n)})}function qyg(e,t,r){return sA({serverName:Ma(e,["serverName"],t,r),serverDescription:Ma(e,["serverDescription"],t,r),excludeAvailability:fAg(e,["excludeAvailability"],["IN_DEVELOPMENT","PRE_RELEASE","GENERAL_AVAILABILITY","DEPRECATED","ALPHA","BETA","PREVIEW","LEGACY"],t,r),tools:ebg(e,["tools"],t,r),toolsets:tbg(e,["toolsets"],t,r)})}function Wyg(e,t,r,n,i){if(!Jp(e))return{};let o=sA({apiName:Ma(e,["apiName"],n,i),introduction:Ma(e,["introduction"],n,i),apiReferenceLink:Ma(e,["apiReferenceLink"],n,i),bannerLink:Ma(e,["bannerLink"],n,i),disabledSections:Lwt(e,["disabledSections"],n,i),customSections:Yyg(e,t,r,n,i),defaultEndpoint:Zyg(e,["defaultEndpoint"],n,i),features:$yg(e,n,i)});return Object.keys(o).length?{readme:o}:{}}function Hyg(e,t){if(!Jp(e))return;let r=Dg(e.publisherName),n=Dg(e.publisherEmail);Object.assign(t,sA({description:Dg(e.packageDescription),documentationUrl:Dg(e.referenceUrl),authors:r?[{name:r,...cf("email",n)}]:void 0}))}function Kyg(e,t,r,n){for(let i of["extraDependencies","extraDevDependencies","extraPeerDependencies"]){let o=dae(e,[i],t,n);if(!o)continue;let s=Object.entries(o.value).flatMap(([a,c])=>Jyg(a,c,t,[...o.path,a]));s.length&&(r[i]=s)}}function Jyg(e,t,r,n){if(typeof t=="string"&&t)return Xl(r,n),[{name:e,version:t}];if(!Jp(t))return[];let i=Ma(t,["version"],r,n),o=Ma(t,["git"],r,n),s=Ma(t,["path"],r,n),a=o?{type:"git",url:o,...cf("ref",Ma(t,["ref"],r,n))}:s?{type:"path",path:s}:void 0;return!i&&!a?[]:[{name:e,...cf("version",i),...cf("source",a),...cf("packageName",Ma(t,["package"],r,n)),...cf("features",Lwt(t,["features"],r,n)),...cf("extras",Lwt(t,["extras"],r,n)),...cf("optional",ap(t,["optional"],r,n)),...cf("defaultFeatures",ap(t,["defaultFeatures"],r,n)),...cf("environmentMarker",Ma(t,["python"],r,n))}]}function Yyg(e,t,r,n,i){let o=oj(e,["customSections"],i);if(!o||!Array.isArray(o.value))return;let s=o.value.flatMap((a,c)=>{if(!Jp(a)||typeof a.title!="string"||a.title.length===0||typeof a.content!="string")return[];let u=a.language;return u!==void 0&&(typeof u!="string"||!PXl(u)||!r.has(u))?[]:(Xl(n,[...o.path,c]),u===void 0||u===t?[{title:a.title,content:a.content}]:[])});return s.length>0?s:void 0}function DXl(e,t,r,n,i){let o=dae(e,t,r,i);if(!o)return;let s=Ma(o.value,["name"],r,o.path),a=Ma(o.value,["description"],r,o.path),c=Ma(o.value,["license"],r,o.path),u=dae(o.value,["author"],r,o.path),l=u?Ma(u.value,["name"],r,u.path):void 0,p=l&&u?[sA({name:l,email:Ma(u.value,["email"],r,u.path),url:Ma(u.value,["url"],r,u.path)})]:void 0;Object.assign(n,sA({packageName:s,description:a,authors:p,license:c?{type:c}:void 0}))}function Xyg(e,t,r){let n=oj(e,["additionalInitExports"],r);if(!n||!Array.isArray(n.value))return;let i=n.value.flatMap(o=>{if(!Jp(o))return[];let s=Dg(o.from),a=Rke(o.imports);return s&&a?.length?[{from:s,imports:a}]:[]});if(i.length===n.value.length)return Xl(t,n.path),i}function Zyg(e,t,r,n){let i=oj(e,t,n);if(!i)return;let o=RXl(i.value);return o&&Xl(r,i.path),o}function $yg(e,t,r){let n=oj(e,["features"],r);if(!n||!Jp(n.value))return;let i={};for(let[o,s]of Object.entries(n.value)){if(!Array.isArray(s))return;let a=s.map(RXl);if(a.some(c=>!c))return;i[o]=a}return Xl(t,n.path),i}function RXl(e){if(typeof e=="string"){let r=/^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE|CONNECT)\s+(\/\S*)$/.exec(e.trim());return r?{method:r[1],path:r[2]}:void 0}if(!Jp(e)||typeof e.method!="string"||typeof e.path!="string")return;let t=e.method.toUpperCase();if(["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","TRACE","CONNECT"].includes(t))return{method:t,path:e.path,...cf("stream",typeof e.stream=="boolean"?e.stream:void 0)}}function ebg(e,t,r,n){let i=dae(e,t,r,n);if(!i)return;let o=sA({include:Rke(i.value.include),exclude:Rke(i.value.exclude)});if(!(Object.keys(o).length===0&&Object.keys(i.value).length>0))return Xl(r,i.path),o}function tbg(e,t,r,n){let i=dae(e,t,r,n);if(!i)return;let o=Object.entries(i.value).map(([s,a])=>{if((s==="default"||!/^[a-z0-9-]+$/.test(s))&&P4("FERN_MCP_TOOLSET_NAME_INVALID",[...i.path,s],`MCP toolset name "${s}" is not valid in SDK Config v1`,'Rename the toolset to lowercase letters, numbers, or hyphens; "default" is reserved.',["targets",n[2],"generation","toolsets",s]),!!Jp(a))return[s,sA({include:Rke(a.include),exclude:Rke(a.exclude)})]});if(!o.some(s=>!s))return Xl(r,i.path),Object.fromEntries(o.filter(s=>s!==void 0))}function vIs(e){let t=e.sdkConfigPath==null?"":`; SDK Config: ${e.sdkConfigPath.join(".")}`;return`[${e.severity}] [${e.code}] ${e.path.join(".")}: ${e.reason}${t}; ${e.suggestedAction}`}function kXl({workspace:e,generatorInvocation:t,audiences:r,replay:n,sourceArchive:i,mapFernGroupToSdkConfig:o}){let s=o({fernWorkspace:e,replay:n,group:{groupName:"sdk-gen-api",audiences:r,generators:[t],reviewers:void 0},source:rbg(i)}),a=kke(s.sdkConfig);return{payloadKind:"sdk-config-v1",body:Buffer.from(JSON.stringify(a),"utf8"),diagnostics:s.diagnostics}}function rbg(e){return{specs:e.specIndexes.map((r,n)=>{let i=e.manifest.specs[r];if(i==null)throw new Error(`Fern source manifest does not contain selected index ${r}`);if(!nbg(i))throw new Error(`SDK Config generation does not support Fern source type ${i.type} (${i.specPath})`);return{id:`source-${n}`,type:i.type,path:i.specPath.replace(/^\/+/,""),...i.namespace==null?{}:{namespace:i.namespace},...i.apiImportSettings==null?{}:{apiImportSettings:i.apiImportSettings},...i.overridePaths==null||i.overridePaths.length===0?{}:{overrides:i.overridePaths}}})}}function nbg(e){return e.type==="openapi"||e.type==="asyncapi"||e.type==="graphql"}kfe();wt();jb();In();Vi();function Z5e({context:e,violations:t,logWarnings:r,logSummary:n=!0,logBreadcrumbs:i=!0,elapsedMillis:o=0}){let s=[],a={};for(let l of t){let p=JSON.stringify(l.nodePath),d=a[p]??[];d.some(m=>m.message===l.message&&m.nodePath.length===l.nodePath.length&&m.nodePath.every((g,A)=>x6(g,l.nodePath[A]))&&m.relativeFilepath===l.relativeFilepath&&m.severity===l.severity)||(s.push(l),a[p]=[...d,l])}t=s;let c=lbg(t),u=ibg(t);for(let l of Array.from(u.keys()).sort()){let p=u.get(l);if(p){let d=p.violations[0]?.relativeFilepath??"";obg({logWarnings:r,logBreadcrumbs:i,configRelativeFilepath:d,nodePath:p.nodePath,violations:p.violations,context:e})}}return n&&ubg({context:e,stats:c,logWarnings:r,elapsedMillis:o}),{hasErrors:c.numFatal>0}}function ibg(e){let t={};for(let r of e){let i=r.nodePath.length===0?`file:${r.relativeFilepath}`:`node:${JSON.stringify(r.nodePath)}`;t[i]||(t[i]={nodePath:r.nodePath,violations:[]}),t[i].violations.push(r)}return new Map(Object.entries(t))}function obg({logWarnings:e,logBreadcrumbs:t,configRelativeFilepath:r,nodePath:n,violations:i,context:o}){let s=sbg(i);if(s==="warning"&&!e)return;let a="",c=i.map(u=>u.severity==="warning"&&!e?null:(a===""&&(a=u.relativeFilepath),`${cbg(u.severity)} ${u.message}`)).filter(u=>u!=null).join(`
4298
4298
  `);o.logger.log(abg(s),M_({breadcrumbs:t?[r,...n.map(u=>{let l=typeof u=="string"?u:u.key;return typeof u!="string"&&u.arrayIndex!=null&&(l+=`[${u.arrayIndex}]`),l})]:[],title:a,subtitle:c})+`
4299
4299
  `)}function sbg(e){return e.some(t=>t.severity==="fatal")?"fatal":e.some(t=>t.severity==="error")?"error":"warning"}function abg(e){switch(e){case"fatal":return Hn.Error;case"error":return Hn.Error;case"warning":return Hn.Warn;default:Ee(e)}}function cbg(e){switch(e){case"fatal":return fe.red("[error]");case"error":return fe.red("[error]");case"warning":return fe.yellow("[warning]");default:Ee(e)}}function ubg({stats:e,context:t,logWarnings:r,elapsedMillis:n=0}){let{numFatal:i,numErrors:o,numWarnings:s}=e,a=n>0?` in ${(n/1e3).toFixed(3)} seconds.`:".",c=`Found ${i+o} errors and ${s} warnings`+a;!r&&s>0&&(c+=" Run fern check --warnings to print out the warnings not shown."),i+o>0?t.logger.error(c):s>0?t.logger.warn(c):t.logger.info(fe.green("\u2713 All checks passed"))}function lbg(e){let t=0,r=0,n=0;for(let i of e)switch(i.severity){case"fatal":t+=1;continue;case"error":r+=1;continue;case"warning":n+=1;continue;default:Ee(i.severity)}return{numFatal:t,numErrors:r,numWarnings:n}}ro();Yt();wt();async function FXl({groups:e,visitor:t,nodePath:r,cliVersion:n}){if(e!=null)for(let[i,o]of Object.entries(e))await pbg({group:o,visitor:t,nodePath:[...r,i],cliVersion:n})}async function pbg({group:e,visitor:t,nodePath:r,cliVersion:n}){await Promise.all(e.generators.map(async(i,o)=>await t.generatorInvocation?.({invocation:i,cliVersion:n},[...r,"generators",o.toString(),"image"in i?i.image.name:i.name])))}async function NXl(e,t,r){await r.file?.(e,[]),await WV(e,{"auth-schemes":At,api:At,whitelabel:At,metadata:At,readme:At,"default-group":At,aliases:At,reviewers:At,openapi:At,"openapi-overrides":At,"spec-origin":At,"async-api":At,"api-settings":At,ai:At,autorelease:At,replay:At,automation:At,groups:async n=>{await FXl({groups:n,visitor:r,nodePath:["groups"],cliVersion:t})}})}function jXl({relativeFilepath:e,contents:t,allRuleVisitors:r,addViolations:n}){function i(o){let s=async(a,c)=>{for(let{name:u,visitors:l}of r){let p=l.generatorsYml?.[o];if(p!=null){let d=await p(a,{relativeFilepath:e,contents:t});n(d.map(f=>({name:u,severity:f.severity,relativeFilepath:e,nodePath:c,message:f.message})))}}};return{[o]:s}}return{...i("file"),...i("generatorInvocation")}}ro();bd();Ufe();Ft();function fbg(e,t,r){let n;try{n=rS(r,t)}catch(i){throw new S({message:`Failed to compare versions: ${i instanceof Error?i.message:String(i)}`,code:S.Code.VersionError})}if(!n)return[{severity:"fatal",message:`The generator ${e} requires CLI version ${t} or later (current version: ${r}). Please run \`fern upgrade\` to upgrade your CLI version and use this generator.`}]}function dbg(e){return Number(e.replace("v",""))}var xIs={name:"compatible-ir-version",create:async()=>({generatorsYml:{generatorInvocation:async({invocation:e,cliVersion:t})=>{if(t==null||t==="0.0.0")return[];let r=wVr({token:void 0}),n=await r.generators.cli.getCliRelease(t);if(!n.ok)return[];let i=n.body.irVersion,o="image"in e?e.image.name:e.name,s;if(e["ir-version"]!=null)s=dbg(e["ir-version"]);else{let c={...e,name:qg(o)},u=await w6e(c);if(u==null)return[];s=u}if(s<=i)return[];let a=await r.generators.cli.getMinCliForIr(s);return a.ok?fbg(o,a.body.version,t)??[]:[]}}})};var CIs={name:"valid-alias-group-references",create:async()=>({generatorsYml:{file:async e=>{let t=[],r=e.aliases,n=e.groups??{};if(r==null)return t;let i=new Set(Object.keys(n));for(let[o,s]of Object.entries(r))if(Array.isArray(s))for(let a of s)i.has(a)||t.push({severity:"error",message:`Alias "${o}" references unknown group "${a}". Available groups: ${[...i].join(", ")||"none"}`});return t}}})};function QXl(){return[xIs,CIs]}async function Cyi(e,t){return mbg({workspace:e,rules:QXl(),logger:t})}async function mbg({workspace:e,rules:t,logger:r}){let n=[],i=await Promise.all(t.map(async o=>({name:o.name,visitors:await o.create({workspace:e,logger:r})})));if(e.generatorsConfiguration?.rawConfiguration){let o=await hbg({contents:e.generatorsConfiguration.rawConfiguration,allRuleVisitors:i,cliVersion:e.cliVersion});n.push(...o)}return n}async function hbg({contents:e,allRuleVisitors:t,cliVersion:r}){let n=[],i=jXl({relativeFilepath:ve.of(lp),contents:e,allRuleVisitors:t,addViolations:o=>{n.push(...o)}});return await NXl(e,r,i),n}Ft();var wIs=be(MXl(),1);async function SIs({workspace:e,context:t,ossWorkspace:r}){(0,wIs.default)(e.definition.rootApiFile.contents.name).validForNewPackages||t.failAndThrow("API name is not valid.",void 0,{code:S.Code.ValidationError});let n=performance.now(),i=m6e(e,t.logger),o=await Cyi(e,t.logger),s=[...i,...o];r&&s.push(...await yxe(r,t));let a=performance.now()-n,c=s.some(u=>u.severity==="fatal"||u.severity==="error");return{apiName:e.definition.rootApiFile.contents.name,violations:s,elapsedMillis:a,hasErrors:c}}async function LXl({workspace:e,context:t,logWarnings:r,logSummary:n=!0,ossWorkspace:i}){let o=performance.now(),s=m6e(e,t.logger),a=await Cyi(e,t.logger),c=[...s,...a];i&&c.push(...await yxe(i,t));let u=performance.now()-o,{hasErrors:l}=Z5e({violations:c,context:t,logWarnings:r,logSummary:n,elapsedMillis:u});return{hasErrors:l}}async function xJ({workspace:e,context:t,logWarnings:r,ossWorkspace:n}){(0,wIs.default)(e.definition.rootApiFile.contents.name).validForNewPackages||t.failAndThrow("API name is not valid.",void 0,{code:S.Code.ValidationError});let{hasErrors:i}=await LXl({workspace:e,context:t,logWarnings:r,ossWorkspace:n});i&&t.failAndThrow(void 0,void 0,{code:S.Code.ValidationError})}kfe();wt();qd();Ft();iUe();k_();var pZl=require("fs/promises");Yt();J_();In();var VXl=require("fs"),wyi=require("fs/promises"),UXl=require("stream/promises");async function _Xl({snippetsS3PreSignedReadUrl:e,absolutePathToLocalSnippetJSON:t,context:r}){try{await Ebg({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(fe.green(`Downloaded to ${t}`))}catch{r.logger.debug(fe.yellow("Failed to download snippet.json from output."))}}async function Ebg({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await tg.get(e,{responseType:"stream"});await Jt(t)&&await(0,wyi.rm)(t,{recursive:!0}),await(0,wyi.mkdir)(sn(t),{recursive:!0}),await(0,UXl.pipeline)(r.data,(0,VXl.createWriteStream)(t))}function GXl(e,t){if(e.payloadKind!=="sdk-config-v1"||e.configKind!=="sdk-config-v1")return;if(t.specIndexes.length===0)throw new Error("SDK Config v1 requires at least one effective Fern source spec");let r=new Set;for(let n of t.specIndexes){if(r.has(n))throw new Error(`Fern target source selection contains duplicate manifest index ${n}`);r.add(n);let i=t.manifest.specs[n];if(i==null)throw new Error(`Fern source manifest does not contain selected index ${n}`);if(!Ibg(i.type))throw new Error(`Generator ${e.generatorId} ${e.requestedVersion??"(unpinned)"} requires SDK Config v1, but selected source ${n} cannot be represented downstream: SDK Config generation does not support Fern source type ${i.type} (${i.specPath}). Use an OpenAPI, AsyncAPI, or GraphQL source for this generator version.`)}}function Ibg(e){return e==="openapi"||e==="asyncapi"||e==="graphql"}aa();Yt();async function qXl({generatorInvocation:e,context:t}){if(e.absolutePathToLocalOutput==null)return;let r=ze(e.absolutePathToLocalOutput,ve.of(f1));if(await Jt(r))return t.logger.debug(`Auto-discovered ${f1} at ${r}`),r}Pc();R2();aa();bd();wt();nh();var Fq=be(rge(),1);ip();_n();tc();qd();ehe();Ft();Pc();bd();Yt();Ft();k_();J_();var KXl=be(wnt(),1),Tyi=require("fs/promises");Wo();var JXl=be(eh(),1),YXl=require("util"),XXl=require("zlib");bd();async function Syi({intermediateRepresentation:e,generatorInvocation:t,context:r,irVersionOverride:n}){let i=await w6e(t),o=n??(i==null?void 0:`v${i}`),s={name:t.name,version:t.version};return o==null?Eqt({intermediateRepresentation:e,context:r,targetGenerator:s}):MXo({intermediateRepresentation:e,context:r,irVersion:o,targetGenerator:s})}Ft();var vbg=2e3,WXl=12e4,TIs=5,xbg=.5,$5e=class e extends Error{retryAfterSeconds;constructor(t){super("Received 429 Too Many Requests"),Object.setPrototypeOf(this,e.prototype),this.retryAfterSeconds=t}};async function HXl({fn:e,retryRateLimited:t,logger:r,onRateLimitedWithoutRetry:n,delayFn:i=o=>new Promise(s=>setTimeout(s,o))}){if(!t)try{return await e()}catch(o){if(o instanceof $5e)return n();throw o}for(let o=0;o<=TIs;o++)try{return await e()}catch(s){if(s instanceof $5e&&o<TIs){let a=Math.min(vbg*2**o,WXl),c=s.retryAfterSeconds!=null?s.retryAfterSeconds*1e3:void 0,u=c!=null?Math.max(a,c):a,l=1+(Math.random()-.5)*xbg,p=Math.round(Math.min(Math.max(u*l,c??0),WXl));r.warn(`Received 429 Too Many Requests. Retrying in ${(p/1e3).toFixed(1)}s (attempt ${o+1}/${TIs})...`),await i(p)}else throw s}throw new S({message:"Exceeded maximum retries for 429 Too Many Requests.",code:S.Code.NetworkError})}var Cbg=(0,YXl.promisify)(XXl.gzip);async function ZXl({projectConfig:e,workspace:t,organization:r,intermediateRepresentation:n,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignorePath:g,skipFernignore:A,retryRateLimited:y,automationMode:E,autoMerge:x,skipIfNoDiff:v,verify:C,loginCommand:O="fern login",specsTarGzBuffer:D}){let R;if(A)R="";else if(g!=null)try{R=await(0,Tyi.readFile)(g,"utf-8")}catch(M){s.failAndThrow(`Failed to read fernignore file at ${g}: ${M}`,void 0,{code:S.Code.ConfigError})}let P=await HXl({fn:()=>wbg({projectConfig:e,workspace:t,organization:r,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignoreContents:R,automationMode:E,autoMerge:x,skipIfNoDiff:v,verify:C,loginCommand:O}),retryRateLimited:y,logger:s.logger,onRateLimitedWithoutRetry:()=>s.failAndThrow("Received 429 Too Many Requests. Re-run with --retry-rate-limited to automatically retry.",void 0,{code:S.Code.NetworkError})});return await Sbg({intermediateRepresentation:n,job:P,context:s,generatorInvocation:i,irVersionOverride:p,specsTarGzBuffer:D}),P}async function wbg({projectConfig:e,workspace:t,organization:r,generatorInvocation:n,version:i,context:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,fiddlePreview:p,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m,verify:g,loginCommand:A}){let y=Lfe({token:a.value}),E={id:n.name,version:n.version,outputMode:n.outputMode,customConfig:HX(n.config),publishMetadata:n.publishMetadata},x={apiName:t.definition.rootApiFile.contents.name,version:i,organizationName:r,generators:[E],uploadToS3:Dbg({outputMode:n.outputMode,generatorInvocation:n,absolutePathToPreview:l,shouldLogS3Url:s}),whitelabel:c,replay:u!=null?{enabled:u.enabled}:void 0,preview:p??l!=null,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m,verify:g},v=await y.remoteGen.createJobV3(x);if(!v.ok){let C=v.error;if(C?.content?.reason==="status-code"&&C.content.statusCode===429){let D=Pbg(C);throw new $5e(D)}let O=Obg(C);return O!=null?o.failAndThrow(O,void 0,{code:S.Code.ConfigError}):Bbg(C)._visit({illegalApiNameError:()=>o.failAndThrow("API name is invalid: "+t.definition.rootApiFile.contents.name,void 0,{code:S.Code.ConfigError}),illegalApiVersionError:()=>o.failAndThrow("API version is invalid: "+i,void 0,{code:S.Code.ConfigError}),cannotPublishToNpmScope:({validScope:D,invalidScope:R})=>o.failAndThrow(`You do not have permission to publish to ${R} (expected ${D})`,void 0,{code:S.Code.AuthError}),cannotPublishToMavenGroup:({validGroup:D,invalidGroup:R})=>o.failAndThrow(`You do not have permission to publish to ${R} (expected ${D})`,void 0,{code:S.Code.AuthError}),cannotPublishPypiPackage:({validPrefix:D,invalidPackageName:R})=>o.failAndThrow(`You do not have permission to publish to ${R} (expected ${D})`,void 0,{code:S.Code.AuthError}),generatorsDoNotExistError:D=>o.failAndThrow("Generators do not exist: "+D.nonExistentGenerators.map(R=>`${R.id}@${R.version}`).join(", "),void 0,{code:S.Code.ConfigError}),insufficientPermissions:()=>o.failAndThrow(`You do not have permission to run this generator for organization '${r}'. Please run '${A}' to ensure you are logged in with the correct account.
4300
4300
 
4301
- Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:S.Code.AuthError}),orgNotConfiguredForWhitelabel:()=>o.failAndThrow("Your org is not configured for white-labeling. Please reach out to support@buildwithfern.com.",void 0,{code:S.Code.AuthError}),branchDoesNotExist:D=>o.failAndThrow(`Branch ${D.branch} does not exist in repository ${D.repositoryOwner}/${D.repositoryName}`,void 0,{code:S.Code.ConfigError}),rateLimitExceeded:()=>{throw new $5e},_other:D=>{o.logger.debug(`Failed to create job: ${JSON.stringify(D)}`);let R=Tbg(D);return R!=null?o.failAndThrow(R,void 0,{code:S.Code.NetworkError}):o.failAndThrow("Failed to create job. Please try again or contact support@buildwithfern.com for assistance.",void 0,{code:S.Code.NetworkError})}})}return v.body}async function Sbg({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i,specsTarGzBuffer:o}){let s=await Syi({intermediateRepresentation:e,generatorInvocation:t,context:n,irVersionOverride:i}),a=new KXl.default,c=await klr(s,{onWrite:d=>{n.logger.debug("Wrote IR to disk: "+d)}}),u=new TextEncoder().encode(c),l=await Cbg(u);n.logger.debug(`Compressed IR from ${u.byteLength} bytes to ${l.length} bytes (${((1-l.length/u.byteLength)*100).toFixed(1)}% reduction)`),a.append("ir",l,{filename:"ir.json",contentType:"application/octet-stream"}),o!=null&&(a.append("specs",o,{filename:"specs.tar.gz",contentType:"application/gzip"}),n.logger.debug(`Appended specs tar.gz (${o.length} bytes)`));let p=(0,JXl.default)(S6e(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await tg.post(p,a,{headers:a.getHeaders(),maxBodyLength:1/0})}catch(d){let f=d instanceof TUr?d.response?.data:d;n.logger.debug(`POST ${p} failed with ${JSON.stringify(d)}`),n.failAndThrow("Failed to start job",f,{code:S.Code.NetworkError})}}function Tbg(e){let t;if(e?.reason==="status-code"?t=e.body:e?.content?.reason==="status-code"&&(t=e.content.body),typeof t?.content?.message=="string")return t.content.message;if(typeof t?.message=="string")return t.message}function Obg(e){let t=e?.content?.reason==="status-code"?e.content.body:void 0;return t?.error!=="GithubAppNotInstalled"?void 0:typeof t?.content?.message=="string"?t.content.message:`The Fern GitHub App is not installed on ${typeof t?.content?.repositoryName=="string"?t.content.repositoryName:"the target repository"}. Please install it (https://github.com/apps/fern-api) and try again.`}function Pbg(e){let t=e?.content?.body?.content?.retryAfter;return typeof t=="number"&&t>0?t:void 0}function Bbg(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Hr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Hr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Hr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Hr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Hr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Hr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Hr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Hr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Hr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function Dbg({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}Ft();bd();var $Xl=Lfe();var Rbg=3;function eZl({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await $Xl.remoteGen.getJobStatus(e.jobId);if(s.ok)return s.body[t];n.logger.debug("Failed to get job status.",JSON.stringify(s.error.content))};return new Promise((s,a)=>{c();async function c(){try{let u=await o();if(u==null)i++,i===Rbg&&n.failAndThrow(`Failed to get job status after ${i} attempts.`,void 0,{code:S.Code.NetworkError}),setTimeout(c,2e3+1e3*i);else{i=0;let l=await r.processUpdate(u);r.isFinished?s(l):setTimeout(c,2e3)}}catch(u){a(u)}}})}Pc();Yt();var tZl=be(ei(),1),rZl=require("util"),nZl=require("zlib");var kbg=(0,rZl.promisify)(nZl.gzip),Fbg=Mt.of("/tmp/fern-runtime/ir.json"),Nbg=Mt.of("/fern/output");async function iZl({apiName:e,organization:t,generatorInvocation:r,sdkVersion:n,intermediateRepresentation:i,irVersionOverride:o,writeUnitTests:s=!1,generateOauthClients:a=!1,generatePaginatedClients:c=!1,context:u}){let l=await Syi({intermediateRepresentation:i,generatorInvocation:r,context:u,irVersionOverride:o}),p=zwt({workspaceName:e,organization:t,outputVersion:n,customConfig:HX(r.config),generatorInvocation:r,absolutePathToSnippet:void 0,absolutePathToSnippetTemplates:void 0,absolutePathToFernConfig:void 0,writeUnitTests:s,generateOauthClients:a,generatePaginatedClients:c,publishToRegistry:!1,omitPublishCredentials:!0,paths:{snippetPath:void 0,snippetTemplatePath:void 0,irPath:Fbg,outputDirectory:Nbg}}),d=await tZl.GeneratorConfig.jsonOrThrow(p);return kbg(Buffer.from(JSON.stringify({config:d,ir:l})))}Yt();_n();Q0();Ft();var Oyi=require("fs/promises"),oZl=be(kE(),1),jbg="proto.zip",vYt=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,Oyi.readFile)(n.absoluteFilePath),o;try{o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}})}catch(s){await n.cleanup(),this.context.failAndThrow(`Network error uploading source file: ${t.absoluteFilePath}`,s,{code:S.Code.NetworkError});return}await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:S.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,Oyi.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await oZl.default.dir(),n=ze(Mt.of(r.path),ve.of(jbg));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Ca(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(eQ.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(eQ.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:S.Code.InternalError}),r}};function sZl(e,t){if(e==null||t==null)return;let r=Number(t);return Number.isInteger(r)&&r>=0?e.targets[r]:void 0}function aZl(e){return{payloadKind:"sdk-config-v1",body:e.body,...e.package==null?{}:{package:e.package}}}async function uZl({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,readme:A,fernignorePath:y,skipFernignore:E,dynamicIrOnly:x,retryRateLimited:v,requireEnvVars:C,automationMode:O,autoMerge:D,skipIfNoDiff:R,verify:P,noReplay:M,disableTelemetry:J,loginCommand:X,specsTarGzBuffer:$,sdkGenApiSourceArchive:ie,sdkGenApiRoute:ue,sdkConfigV1:oe,sdkGenApiPreparationBatch:de,sdkGenApiBatch:we,sdkGenApiTargetIdSeed:De,generateFullProject:se,mapFernGroupToSdkConfig:ae}){let Oe=ue?.payloadKind!=="sdk-config-v1",Ie=d2({token:c.value}),Fe=await Qbg({requiresFdrRegistration:Oe,fdrOrigin:"https://registry.buildwithfern.com",logger:n.logger}),Ke=wn.getPackageName({generatorInvocation:i})??(i.outputMode.type==="downloadFiles"?m0e(i):void 0),ot=f??d!=null,bt=u==null?void 0:Km(u,{onError:zn=>{!ot&&C&&n.failAndThrow(void 0,zn,{code:S.Code.EnvironmentError})}},{substituteAsEmpty:ot}),pt=S5e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:i}),Vt=ue?.payloadKind==="sdk-config-v1"?sZl(oe,De):void 0,or=Vt?.sdkVersion??oe?.sdkVersion,Ae=o??or??await tOr({packageName:Ke,generatorInvocation:i});o!=null&&(ot?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await z1r({version:o,packageName:Ke,generatorInvocation:i,context:n}));let he=Ae!=null&&(0,Fq.isAutoVersion)(Ae)?Fq.MAGIC_VERSION:Ae,nt=h0e(i),it=g0e(i),xe=Kg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:Ke,userAgentTemplate:nt,idempotencyKeyGeneration:it,webhookSignature:A0e(i,n),organization:t,version:he,context:n,sourceResolver:new Mh(n,r),dynamicGeneratorConfig:pt,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:XX(),originGitCommitIsDirty:ZX(),invokedBy:JX(),requestedVersion:o,ciProvider:YX()}}),Se,mt,st=Vk(i.name);if(ue!=null){if(l?.enabled===!0)return n.failAndThrow("sdk-gen-api does not yet support replay",void 0,{code:S.Code.ConfigError});if(se===!0)return n.failAndThrow("sdk-gen-api does not yet support full-project generation",void 0,{code:S.Code.ConfigError});let zn={generatorInvocation:i,sdkVersion:Ae,specsTarGzBuffer:$,whitelabel:u};if(!mql(zn)){let qt=Ae==null?"the SDK version could not be resolved":(0,Fq.isAutoVersion)(Ae)?"automatic SDK versioning has not yet moved from Fiddle to the shared pipeline":u!=null?"whitelabel generation has not yet moved from Fiddle to the shared pipeline":$==null?"the source archive is unavailable":`generator language ${i.language??"unknown"} does not match ${st}`;return n.failAndThrow(`Cannot submit SDK generation to sdk-gen-api: ${qt}`,void 0,{code:S.Code.ConfigError})}if(Se=zn,ue.payloadKind==="sdk-config-v1")if(oe!=null&&Vt!=null)mt={apiName:zr(xe.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:zn.generatorInvocation,sdkGenApiRoute:ue,sdkName:Vt.sdkName??oe.sdkName,sdkVersion:zn.sdkVersion,apiVersion:oe.apiVersion,token:c,specsTarGzBuffer:zn.specsTarGzBuffer,payload:aZl(Vt),requestedOutput:oql(Vt.requestedOutput,ot),...!ot&&Vt.publishCredential!=null?{publishCredential:Vt.publishCredential}:{},absolutePathToLocalOutputArchive:Vt.absolutePathToLocalOutputArchive,absolutePathToPreview:d,context:n,targetIdSeed:De,sourceSpecIndexes:ie?.specIndexes,skipFernignore:E};else if(pwt(zn.generatorInvocation.name)){if(ie==null)return n.failAndThrow(`Cannot submit ${zn.generatorInvocation.name} ${ue.requestedVersion??"(unpinned)"} to sdk-gen-api: the source archive is unavailable`,void 0,{code:S.Code.ConfigError});if(ae==null)return n.failAndThrow(`Cannot submit ${zn.generatorInvocation.name} ${ue.requestedVersion??"(unpinned)"} to sdk-gen-api: no SDK Config mapper was provided`,void 0,{code:S.Code.ConfigError});let qt=kXl({workspace:r,generatorInvocation:zn.generatorInvocation,audiences:s,sourceArchive:ie,mapFernGroupToSdkConfig:ae}),cr=[];for(let qe of qt.diagnostics)switch(qe.severity){case"error":cr.push(qe);break;case"warning":n.logger.warn(`SDK Config mapping: ${vIs(qe)}`);break;default:Ee(qe.severity)}if(cr.length>0)return n.failAndThrow(`SDK Config mapping failed:
4301
+ Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:S.Code.AuthError}),orgNotConfiguredForWhitelabel:()=>o.failAndThrow("Your org is not configured for white-labeling. Please reach out to support@buildwithfern.com.",void 0,{code:S.Code.AuthError}),branchDoesNotExist:D=>o.failAndThrow(`Branch ${D.branch} does not exist in repository ${D.repositoryOwner}/${D.repositoryName}`,void 0,{code:S.Code.ConfigError}),rateLimitExceeded:()=>{throw new $5e},_other:D=>{o.logger.debug(`Failed to create job: ${JSON.stringify(D)}`);let R=Tbg(D);return R!=null?o.failAndThrow(R,void 0,{code:S.Code.NetworkError}):o.failAndThrow("Failed to create job. Please try again or contact support@buildwithfern.com for assistance.",void 0,{code:S.Code.NetworkError})}})}return v.body}async function Sbg({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i,specsTarGzBuffer:o}){let s=await Syi({intermediateRepresentation:e,generatorInvocation:t,context:n,irVersionOverride:i}),a=new KXl.default,c=await klr(s,{onWrite:d=>{n.logger.debug("Wrote IR to disk: "+d)}}),u=new TextEncoder().encode(c),l=await Cbg(u);n.logger.debug(`Compressed IR from ${u.byteLength} bytes to ${l.length} bytes (${((1-l.length/u.byteLength)*100).toFixed(1)}% reduction)`),a.append("ir",l,{filename:"ir.json",contentType:"application/octet-stream"}),o!=null&&(a.append("specs",o,{filename:"specs.tar.gz",contentType:"application/gzip"}),n.logger.debug(`Appended specs tar.gz (${o.length} bytes)`));let p=(0,JXl.default)(S6e(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await tg.post(p,a,{headers:a.getHeaders(),maxBodyLength:1/0})}catch(d){let f=d instanceof TUr?d.response?.data:d;n.logger.debug(`POST ${p} failed with ${JSON.stringify(d)}`),n.failAndThrow("Failed to start job",f,{code:S.Code.NetworkError})}}function Tbg(e){let t;if(e?.reason==="status-code"?t=e.body:e?.content?.reason==="status-code"&&(t=e.content.body),typeof t?.content?.message=="string")return t.content.message;if(typeof t?.message=="string")return t.message}function Obg(e){let t=e?.content?.reason==="status-code"?e.content.body:void 0;return t?.error!=="GithubAppNotInstalled"?void 0:typeof t?.content?.message=="string"?t.content.message:`The Fern GitHub App is not installed on ${typeof t?.content?.repositoryName=="string"?t.content.repositoryName:"the target repository"}. Please install it (https://github.com/apps/fern-api) and try again.`}function Pbg(e){let t=e?.content?.body?.content?.retryAfter;return typeof t=="number"&&t>0?t:void 0}function Bbg(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Hr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Hr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Hr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Hr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Hr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Hr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Hr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Hr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Hr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function Dbg({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}Ft();bd();var $Xl=Lfe();var Rbg=3;function eZl({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await $Xl.remoteGen.getJobStatus(e.jobId);if(s.ok)return s.body[t];n.logger.debug("Failed to get job status.",JSON.stringify(s.error.content))};return new Promise((s,a)=>{c();async function c(){try{let u=await o();if(u==null)i++,i===Rbg&&n.failAndThrow(`Failed to get job status after ${i} attempts.`,void 0,{code:S.Code.NetworkError}),setTimeout(c,2e3+1e3*i);else{i=0;let l=await r.processUpdate(u);r.isFinished?s(l):setTimeout(c,2e3)}}catch(u){a(u)}}})}Pc();Yt();var tZl=be(ei(),1),rZl=require("util"),nZl=require("zlib");var kbg=(0,rZl.promisify)(nZl.gzip),Fbg=Mt.of("/tmp/fern-runtime/ir.json"),Nbg=Mt.of("/fern/output");async function iZl({apiName:e,organization:t,generatorInvocation:r,sdkVersion:n,intermediateRepresentation:i,irVersionOverride:o,writeUnitTests:s=!1,generateOauthClients:a=!1,generatePaginatedClients:c=!1,context:u}){let l=await Syi({intermediateRepresentation:i,generatorInvocation:r,context:u,irVersionOverride:o}),p=zwt({workspaceName:e,organization:t,outputVersion:n,customConfig:HX(r.config),generatorInvocation:r,absolutePathToSnippet:void 0,absolutePathToSnippetTemplates:void 0,absolutePathToFernConfig:void 0,writeUnitTests:s,generateOauthClients:a,generatePaginatedClients:c,publishToRegistry:!1,omitPublishCredentials:!0,paths:{snippetPath:void 0,snippetTemplatePath:void 0,irPath:Fbg,outputDirectory:Nbg}}),d=await tZl.GeneratorConfig.jsonOrThrow(p);return kbg(Buffer.from(JSON.stringify({config:d,ir:l})))}Yt();_n();Q0();Ft();var Oyi=require("fs/promises"),oZl=be(kE(),1),jbg="proto.zip",vYt=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,Oyi.readFile)(n.absoluteFilePath),o;try{o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}})}catch(s){await n.cleanup(),this.context.failAndThrow(`Network error uploading source file: ${t.absoluteFilePath}`,s,{code:S.Code.NetworkError});return}await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:S.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,Oyi.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await oZl.default.dir(),n=ze(Mt.of(r.path),ve.of(jbg));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Ca(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(eQ.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(eQ.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:S.Code.InternalError}),r}};function sZl(e,t){if(e==null||t==null)return;let r=Number(t);return Number.isInteger(r)&&r>=0?e.targets[r]:void 0}function aZl(e){return{payloadKind:"sdk-config-v1",body:e.body,...e.package==null?{}:{package:e.package}}}async function uZl({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,readme:A,fernignorePath:y,skipFernignore:E,dynamicIrOnly:x,retryRateLimited:v,requireEnvVars:C,automationMode:O,autoMerge:D,skipIfNoDiff:R,verify:P,noReplay:M,disableTelemetry:J,loginCommand:X,specsTarGzBuffer:$,sdkGenApiSourceArchive:ie,sdkGenApiRoute:ue,sdkConfigV1:oe,sdkGenApiPreparationBatch:de,sdkGenApiBatch:we,sdkGenApiTargetIdSeed:De,generateFullProject:se,mapFernGroupToSdkConfig:ae}){let Oe=ue?.payloadKind!=="sdk-config-v1",Ie=d2({token:c.value}),Fe=await Qbg({requiresFdrRegistration:Oe,fdrOrigin:"https://registry.buildwithfern.com",logger:n.logger}),Ke=wn.getPackageName({generatorInvocation:i})??(i.outputMode.type==="downloadFiles"?m0e(i):void 0),ot=f??d!=null,bt=u==null?void 0:Km(u,{onError:zn=>{!ot&&C&&n.failAndThrow(void 0,zn,{code:S.Code.EnvironmentError})}},{substituteAsEmpty:ot}),pt=S5e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:i}),Vt=ue?.payloadKind==="sdk-config-v1"?sZl(oe,De):void 0,or=Vt?.sdkVersion??oe?.sdkVersion,Ae=o??or??await tOr({packageName:Ke,generatorInvocation:i});o!=null&&(ot?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await z1r({version:o,packageName:Ke,generatorInvocation:i,context:n}));let he=Ae!=null&&(0,Fq.isAutoVersion)(Ae)?Fq.MAGIC_VERSION:Ae,nt=h0e(i),it=g0e(i),xe=Kg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:Ke,userAgentTemplate:nt,idempotencyKeyGeneration:it,webhookSignature:A0e(i,n),organization:t,version:he,context:n,sourceResolver:new Mh(n,r),dynamicGeneratorConfig:pt,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:XX(),originGitCommitIsDirty:ZX(),invokedBy:JX(),requestedVersion:o,ciProvider:YX()}}),Se,mt,st=Vk(i.name);if(ue!=null){if(se===!0)return n.failAndThrow("sdk-gen-api does not yet support full-project generation",void 0,{code:S.Code.ConfigError});let zn={generatorInvocation:i,sdkVersion:Ae,specsTarGzBuffer:$,whitelabel:u};if(!mql(zn)){let qt=Ae==null?"the SDK version could not be resolved":(0,Fq.isAutoVersion)(Ae)?"automatic SDK versioning has not yet moved from Fiddle to the shared pipeline":u!=null?"whitelabel generation has not yet moved from Fiddle to the shared pipeline":$==null?"the source archive is unavailable":`generator language ${i.language??"unknown"} does not match ${st}`;return n.failAndThrow(`Cannot submit SDK generation to sdk-gen-api: ${qt}`,void 0,{code:S.Code.ConfigError})}if(Se=zn,ue.payloadKind==="sdk-config-v1")if(oe!=null&&Vt!=null)mt={apiName:zr(xe.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:zn.generatorInvocation,sdkGenApiRoute:ue,sdkName:Vt.sdkName??oe.sdkName,sdkVersion:zn.sdkVersion,apiVersion:oe.apiVersion,token:c,specsTarGzBuffer:zn.specsTarGzBuffer,payload:aZl(Vt),requestedOutput:oql(Vt.requestedOutput,ot),...!ot&&Vt.publishCredential!=null?{publishCredential:Vt.publishCredential}:{},absolutePathToLocalOutputArchive:Vt.absolutePathToLocalOutputArchive,absolutePathToPreview:d,context:n,targetIdSeed:De,sourceSpecIndexes:ie?.specIndexes,skipFernignore:E};else if(pwt(zn.generatorInvocation.name)){if(ie==null)return n.failAndThrow(`Cannot submit ${zn.generatorInvocation.name} ${ue.requestedVersion??"(unpinned)"} to sdk-gen-api: the source archive is unavailable`,void 0,{code:S.Code.ConfigError});if(ae==null)return n.failAndThrow(`Cannot submit ${zn.generatorInvocation.name} ${ue.requestedVersion??"(unpinned)"} to sdk-gen-api: no SDK Config mapper was provided`,void 0,{code:S.Code.ConfigError});let qt=kXl({workspace:r,generatorInvocation:zn.generatorInvocation,audiences:s,replay:l,sourceArchive:ie,mapFernGroupToSdkConfig:ae}),cr=[];for(let qe of qt.diagnostics)switch(qe.severity){case"error":cr.push(qe);break;case"warning":n.logger.warn(`SDK Config mapping: ${vIs(qe)}`);break;default:Ee(qe.severity)}if(cr.length>0)return n.failAndThrow(`SDK Config mapping failed:
4302
4302
  `+cr.map(vIs).join(`
4303
4303
  `),void 0,{code:S.Code.ConfigError});mt={apiName:zr(xe.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:zn.generatorInvocation,sdkGenApiRoute:ue,sdkVersion:zn.sdkVersion,apiVersion:xe.specVersion,token:c,specsTarGzBuffer:zn.specsTarGzBuffer,payload:{payloadKind:"sdk-config-v1",body:qt.body},absolutePathToPreview:d,context:n,targetIdSeed:De,sourceSpecIndexes:ie.specIndexes,audiences:s.type==="select"?s.audiences:void 0,skipFernignore:E}}else return n.failAndThrow(`Cannot submit ${zn.generatorInvocation.name} ${ue.requestedVersion??"(unpinned)"} without an SDK Config v1 document. Run \`fern sdk migrate\`, then pass the generated document with \`fern generate --sdk-config <path>\`.`,void 0,{code:S.Code.ConfigError});if(De==null)throw new Error("sdk-gen-api target is missing its preparation ID");await de?.ready(De,mt)}let je=!0,ar=!0;if(!Fe&&Oe){let qt=await jf({token:c.value}).organization.get({orgId:e.organization});qt.ok?(qt.body.isWhitelabled&&(xe.readmeConfig==null&&(xe.readmeConfig=Lbg),xe.readmeConfig.whiteLabel=!0),xe.selfHosted=qt.body.selfHostedSdKs,je=qt.body.oauthClientEnabled??!0,ar=qt.body.paginationEnabled??!0):n.logger.warn(`Failed to load organization settings for ${e.organization}; assuming pagination and OAuth clients are enabled.`)}let _t;if(Oe){let zn=r.getSources(),qt,cr=iO({ir:xe,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let Ne=await Ie.api.register.registerApiDefinition({orgId:dn.OrgId(t),apiId:dn.ApiId(zr(xe.apiName)),definition:cr,sources:zn.length>0?Mbg(zn):void 0});_t=Ne.apiDefinitionId,qt=Ne.sources??void 0}catch(Ne){new vYt(n,zn).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(Ne)}`)}let qe=new vYt(n,zn);if(qt==null&&qe.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:S.Code.NetworkError}),qt!=null){n.logger.debug("Uploading source files ...");let Ne=await qe.uploadSources(qt);n.logger.debug("Setting IR source configuration ..."),xe.sourceConfig=Ne}}if(x){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:S.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:S.Code.ConfigError});return}if(Ke==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:S.Code.ConfigError});return}try{await cZl({fdr:Ie,organization:t,version:o,language:i.language,packageName:Ke,ir:xe,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,dynamicGeneratorConfig:pt,context:n})}catch(zn){n.failAndThrow(`Failed to upload dynamic IR: ${Fn(zn)}`,void 0,{code:S.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let br={...xe,fdrApiDefinitionId:_t,publishConfig:zbg({generatorInvocation:i,version:Ae,userProvidedVersion:o,packageName:Ke,selfHosted:xe.selfHosted??!1,generateFullProject:se,context:n})},xn;if(ue!=null){if(Se==null)throw new Error("sdk-gen-api target passed preflight without an eligible candidate");let zn=ue.payloadKind==="sdk-config-v1"?mt??n.failAndThrow("SDK Config v1 target reached submission without prepared build parameters",void 0,{code:S.Code.ConfigError}):{apiName:zr(xe.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:Se.generatorInvocation,sdkGenApiRoute:ue,sdkVersion:Se.sdkVersion,apiVersion:xe.specVersion,token:c,specsTarGzBuffer:Se.specsTarGzBuffer,payload:{payloadKind:"fern-runtime-bundle",body:await iZl({apiName:zr(xe.apiName),organization:t,generatorInvocation:Se.generatorInvocation,sdkVersion:Se.sdkVersion,intermediateRepresentation:br,irVersionOverride:p,generateOauthClients:je,generatePaginatedClients:ar,context:n})},absolutePathToPreview:d,context:n,targetIdSeed:De,sourceSpecIndexes:ie?.specIndexes,audiences:s.type==="select"?s.audiences:void 0,skipFernignore:E};xn=await(we?.run(zn)??hql(zn))}else{let zn=await ZXl({projectConfig:e,workspace:r,organization:t,generatorInvocation:i,context:n,version:Ae,intermediateRepresentation:br,shouldLogS3Url:a,token:c,whitelabel:bt,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:y,skipFernignore:E,retryRateLimited:v,automationMode:O,autoMerge:D,skipIfNoDiff:R,verify:P,loginCommand:X,specsTarGzBuffer:$});n.logger.debug(`Job ID: ${zn.jobId}`);let qt=zn.taskIds[0];if(qt==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:S.Code.NetworkError});return}n.logger.debug(`Task ID: ${qt}`);let cr=new jgi({job:zn,taskId:qt,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:O===!0,autoMerge:D===!0,skipIfNoDiff:R===!0,versionArg:o==null?"none":(0,Fq.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:M===!0,disableTelemetry:J===!0}});xn=await eZl({job:zn,taskHandler:cr,taskId:qt,context:n})}if(xn!=null&&xn.actualVersion==null){let zn=Vbg(Ae);zn!=null&&(xn={...xn,actualVersion:zn})}let Ur=xn?.actualVersion??Ae;if(xn!=null&&Ur!=null&&i.language!=null&&Ke!=null&&!ot)try{await cZl({fdr:Ie,organization:t,version:Ur,language:i.language,packageName:Ke,ir:xe,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,dynamicGeneratorConfig:pt,context:n})}catch(zn){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${Fn(zn)}`)}return xn}async function Qbg({requiresFdrRegistration:e,fdrOrigin:t,logger:r}){return e?await kUt(`${t}/health`,r):!1}function zbg({generatorInvocation:e,version:t,userProvidedVersion:r,packageName:n,selfHosted:i,generateFullProject:o,context:s}){let a=e.language??(0,Fq.extractLanguageFromGeneratorName)(e.name),c=u=>u!=null&&(0,Fq.isAutoVersion)(u)?(0,Fq.mapMagicVersionForLanguage)(Fq.MAGIC_VERSION,a):u;return e.outputMode._visit({downloadFiles:()=>Ut.PublishingConfig.filesystem({generateFullProject:i||(o??!1),publishTarget:rOr({generatorInvocation:e,version:c(t),userProvidedVersion:c(r),packageName:n,context:s})}),github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:u=>u._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:l=>{let p;return e.raw?.output?.location==="postman"&&(p=e.raw.output?.["collection-id"]),Ut.PublishingConfig.direct({target:Ut.PublishTarget.postman({apiKey:l.apiKey,workspaceId:l.workspaceId,collectionId:p})})},_other:()=>{}}),_other:()=>{}})}function Mbg(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var Lbg={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function cZl({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,smartCasingDigitWordBoundary:a,dynamicGeneratorConfig:c,context:u}){u.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let l;try{l=await e.api.register.getSdkDynamicIrUploadUrls({orgId:dn.OrgId(t),version:r,snippetConfiguration:{[n]:i}})}catch(m){u.logger.warn(`Failed to get dynamic IR upload URLs (non-fatal, dynamic snippets may be stale): ${m}`);return}let p=l.uploadUrls[n]?.uploadUrl;if(p==null){u.logger.warn(`No upload URL returned for ${n}`);return}let d=u6e({ir:o,disableExamples:!0,smartCasing:s,smartCasingDigitWordBoundary:a,generationLanguage:n,generatorConfig:c}),f=JSON.stringify(d);try{let m=await fetch(p,{method:"PUT",body:f,headers:{"Content-Type":"application/octet-stream","Content-Length":f.length.toString()}});m.ok?u.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):u.logger.warn(`Failed to upload dynamic IR for ${n}: ${m.status}`)}catch(m){u.logger.warn(`Network error uploading dynamic IR for ${n}: ${m}`)}}function Vbg(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function Fke({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:g,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:E,retryRateLimited:x,requireEnvVars:v,automationMode:C,autoMerge:O,skipIfNoDiff:D,verify:R,noReplay:P,disableTelemetry:M,automation:J,occurrenceTracker:X,loginCommand:$,getSpecsTarGzBuffer:ie,sdkConfigV1:ue,generateFullProject:oe,libraryVisibility:de,mapFernGroupToSdkConfig:we}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let De=[],se=X??new c5e;X==null&&se.recordOccurrences(i.generators);let ae=r.generatorsConfiguration?.absolutePathToConfiguration,Oe=p??l!=null,Ie=fZl({generators:i.generators,enabled:EJ(),sdkConfigV1:ue,requireEnvVars:v,isPreview:Oe,verify:R,skipIfNoDiff:D,autoMerge:O}),Fe=Ie.map(Se=>Se.route),Ke=Ie.map(Se=>Se.generatorInvocation),ot=Ie.map(Se=>Se.error);J==null&&lZl(ot,i.generators),Oe||Jgi(Ie.flatMap(({sdkConfigTargetIndex:Se})=>{let mt=Se==null?void 0:ue?.targets[Se];return mt==null?[]:[mt]}));let bt=Ke.flatMap((Se,mt)=>Ie[mt]?.error==null?[{generatorIndex:mt,sdkConfigTargetIndex:Ie[mt]?.sdkConfigTargetIndex,generatorInvocation:Se,sdkGenApiRoute:Fe[mt]}]:[]),pt={sourceArchives:new Map,errors:new Map};if(bt.length>0)try{pt=await ie?.(bt)??pt}catch(Se){pt={sourceArchives:new Map,errors:new Map(bt.map(mt=>[mt.generatorIndex,Se]))}}let Vt=qbg({generators:Ke,routes:Fe,routeErrors:ot,sourceResolution:pt}),or=Vt.sourceArchives,Ae=Ie.map((Se,mt)=>Se.error??Vt.preflightErrors[mt]);J==null&&lZl(Ae,i.generators);let he=Wbg(Fe,Ae);gql(he.size);let nt=he.size>1?new qgi(he.size):void 0,it=he.size>0?new Wgi([...he].map(Se=>(Ie[Se]?.sdkConfigTargetIndex??Se).toString())):void 0,xe=await Promise.all(i.generators.map((Se,mt)=>n.runInteractiveTask({name:Se.name},st=>Hbg({generatorInvocation:Se,resolvedGeneratorInvocation:Ke[mt]??Se,interactiveTaskContext:st,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:g,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:E,retryRateLimited:x,requireEnvVars:v,automationMode:C,autoMerge:O,skipIfNoDiff:D,verify:R,noReplay:P,disableTelemetry:M,automation:J,generatorsYmlAbsolutePath:ae,occurrenceTracker:se,loginCommand:$,specsTarGzArchive:or[mt],sdkGenApiPreflightError:Ae[mt],sdkGenApiRoute:Fe[mt],sdkConfigV1:ue,sdkGenApiPreparationBatch:he.has(mt)?it:void 0,sdkGenApiBatch:he.has(mt)?nt:void 0,sdkGenApiTargetIdSeed:(Ie[mt]?.sdkConfigTargetIndex??mt).toString(),generateFullProject:oe,libraryVisibility:de,mapFernGroupToSdkConfig:we,onSnippetsProduced:je=>De.push(je)}))));if(J==null&&xe.some(Se=>!Se))throw new Xc;return{snippetsProducedBy:De}}function Ubg({resolved:e,sdkConfigV1:t,language:r}){return t!=null?"sdk-config-v1":r!=null&&pwt(e.name)?e.version===w5e?"sdk-config-v1":Vgi({generatorId:e.name,language:e.language??r,requestedVersion:e.version}).configKind:"legacy-fern"}function fZl({generators:e,enabled:t,sdkConfigV1:r,requireEnvVars:n,isPreview:i,verify:o,skipIfNoDiff:s,autoMerge:a}){return e.map((c,u)=>{let l=c,p=_bg(c,u);try{l=Km(c,{onError:A=>{if(!i&&n)throw A}},{substituteAsEmpty:i});let d=Vk(l.name),f=d==null?void 0:r?.targets[p];if(r!=null&&d==null)throw new Error(`SDK Config v1 generation only supports Fern SDK generators routed through sdk-gen-api; the selected group contains ${l.name}`);if(r!=null&&f==null)throw new Error(`SDK Config v1 does not contain a target for ${d}`);if(f!=null&&f.language!==d)throw new Error(`SDK Config v1 target ${p} language ${f.language} does not match ${d}`);if(!i&&f!=null&&Jgi([f]),r==null&&KJt(l.version))throw new Error("The internal unpinned SDK Config generator marker cannot be used without SDK Config v1");if(f?.generatorVersion!=null&&(l={...l,version:f.generatorVersion}),!t){if(r!=null)throw new Error("SDK Config v1 generation requires the sdk-gen-api generation backend");if(lwt(l.name))throw new S({message:`${l.name} requires the environment variable FERN_USE_SDK_GEN_API=true.`,code:S.Code.ConfigError});return{generatorInvocation:l,route:void 0,error:void 0}}let m;if(f!=null&&f.generatorVersion==null){if(!KJt(l.version))throw new Error("An SDK Config target without generatorVersion must use the internal unpinned generator marker");let A=l.language??d;if(A==null)throw new Error(`SDK Config v1 generation does not recognize generator ${l.name}`);m=R0s({generatorId:l.name,language:A})}else if(r==null&&l.version===w5e&&pwt(l.name)){let A=l.language??d;if(A==null)throw new Error(`SDK Config synthesis does not recognize generator ${l.name}`);m=C5e({generatorId:l.name,language:A,configKind:"sdk-config-v1",versionSource:"fern-latest"})}else m=sql(l,Ubg({resolved:l,sdkConfigV1:r,language:d}));if(m!=null&&r==null)try{fql(l)}catch(A){if(m.configKind==="legacy-fern")return{generatorInvocation:l,route:void 0,error:void 0};throw A}let g=Gbg({generatorInvocation:l,verify:o,skipIfNoDiff:s,autoMerge:a});if(m!=null&&g!=null){if(m.configKind==="legacy-fern")return{generatorInvocation:l,route:void 0,error:void 0};throw new Error(`Cannot route ${l.name} ${m.requestedVersion??"(unpinned)"} through sdk-gen-api: ${g}. This generator version requires SDK Config v1, so Fern cannot fall back to legacy Fiddle generation.`)}return{generatorInvocation:l,route:m,error:void 0,...r==null?{}:{sdkConfigTargetIndex:p}}}catch(d){let f=d instanceof mke?new S({message:z0s(d),code:S.Code.ConfigError}):d;return{generatorInvocation:l,route:void 0,error:f,...r==null?{}:{sdkConfigTargetIndex:p}}}})}function _bg(e,t){return e.sdkConfigTargetIndex??t}function Gbg({generatorInvocation:e,verify:t,skipIfNoDiff:r,autoMerge:n}){let i=[];return e.outputMode.type!=="downloadFiles"&&e.outputMode.type!=="publish"&&e.outputMode.type!=="publishV2"&&i.push(`${e.outputMode.type} delivery requires Fern-managed GitHub or registry credentials that sdk-gen-api cannot resolve`),t===!0&&i.push("verify=true is not implemented by sdk-gen-api"),r===!0&&i.push("skipIfNoDiff=true is not implemented by sdk-gen-api"),n===!0&&i.push("autoMerge=true is not implemented by sdk-gen-api"),i.length>0?i.join("; "):void 0}function qbg({generators:e,routes:t,routeErrors:r,sourceResolution:n}){return{sourceArchives:e.map((i,o)=>n.sourceArchives.get(o)),preflightErrors:e.map((i,o)=>{if(r?.[o]!=null)return;let s=t[o];if(s==null)return;let a=n.errors.get(o);if(a!=null)return a;let c=n.sourceArchives.get(o);if(c==null)return new Error(`Resolved source archive is unavailable for ${s.generatorId}`);try{GXl(s,c);return}catch(u){return u}})}}function Wbg(e,t){return new Set(e.flatMap((r,n)=>r!=null&&t[n]==null?[n]:[]))}async function Hbg({generatorInvocation:e,resolvedGeneratorInvocation:t,interactiveTaskContext:r,projectConfig:n,organization:i,workspace:o,context:s,generatorGroup:a,version:c,shouldLogS3Url:u,token:l,whitelabel:p,replay:d,absolutePathToPreview:f,isPreview:m,fiddlePreview:g,pushPreviewBranch:A,mode:y,fernignorePath:E,skipFernignore:x,dynamicIrOnly:v,validateWorkspace:C,retryRateLimited:O,requireEnvVars:D,automationMode:R,autoMerge:P,skipIfNoDiff:M,verify:J,noReplay:X,disableTelemetry:$,automation:ie,generatorsYmlAbsolutePath:ue,occurrenceTracker:oe,loginCommand:de,specsTarGzArchive:we,sdkGenApiPreflightError:De,sdkGenApiRoute:se,sdkConfigV1:ae,sdkGenApiPreparationBatch:Oe,sdkGenApiBatch:Ie,sdkGenApiTargetIdSeed:Fe,generateFullProject:Ke,libraryVisibility:ot,mapFernGroupToSdkConfig:bt,onSnippetsProduced:pt}){let Vt=Date.now();try{if(De!=null)throw De;let or={...TEe(t),libraryVisibility:ot},Ae=await o.toFernWorkspace({context:s},or,t.apiOverride?.specs);C&&await xJ({workspace:Ae,context:s,logWarnings:!1,ossWorkspace:o instanceof Pl?o:void 0});let he=x?void 0:E??await qXl({generatorInvocation:t,context:r}),nt=await uZl({projectConfig:n,organization:i,workspace:Ae,interactiveTaskContext:r,generatorInvocation:{...t,outputMode:t.outputMode._visit({downloadFiles:()=>t.outputMode,github:it=>Hr.OutputMode.github({...it,makePr:y==="pull-request"}),githubV2:it=>y==="pull-request"?Hr.OutputMode.githubV2(Hr.GithubOutputModeV2.pullRequest(it)):t.outputMode,publish:()=>t.outputMode,publishV2:()=>t.outputMode,_other:()=>t.outputMode})},version:c,audiences:ae==null?a.audiences:ae.audiences==null?{type:"all"}:{type:"select",audiences:ae.audiences},shouldLogS3Url:u,token:l,whitelabel:p,replay:d,readme:t.readme,irVersionOverride:t.irVersionOverride,absolutePathToPreview:f,isPreview:m,fiddlePreview:g,pushPreviewBranch:A,fernignorePath:he,skipFernignore:x,dynamicIrOnly:v,retryRateLimited:O,requireEnvVars:D,automationMode:R,autoMerge:P,skipIfNoDiff:M,verify:J,noReplay:X,disableTelemetry:$,loginCommand:de,specsTarGzBuffer:we?.buffer,sdkGenApiSourceArchive:we,sdkGenApiRoute:se,sdkConfigV1:ae,sdkGenApiPreparationBatch:Oe,sdkGenApiBatch:Ie,sdkGenApiTargetIdSeed:Fe,generateFullProject:Ke,mapFernGroupToSdkConfig:bt});if(nt?.createdSnippets&&(pt(e),e.absolutePathToLocalSnippets!=null&&nt.snippetsS3PreSignedReadUrl!=null&&await _Xl({snippetsS3PreSignedReadUrl:nt.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:r})),ie!=null){let it=ue!=null?await l5e(ue,e.name,oe.lookup(e)):void 0;ie.recorder.recordSuccess({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,version:nt?.actualVersion??null,durationMs:Date.now()-Vt,pullRequestUrl:nt?.pullRequestUrl,noChangesDetected:nt?.noChangesDetected,publishTarget:nt?.publishTarget,outputRepoUrl:u5e(e),generatorsYmlAbsolutePath:ue,generatorsYmlLineNumber:it})}await Kbg({pullRequestUrl:nt?.pullRequestUrl,publishTarget:nt?.publishTarget,noChangesDetected:nt?.noChangesDetected,version:nt?.actualVersion,generatorName:e.name,groupName:a.groupName,apiName:o.workspaceName,isAutomation:ie!=null})}catch(or){if(Oe?.fail(Fe,or,ie!=null),ie!=null?Ie?.remove(Fe,or):Ie?.cancel(or),ie==null)throw or;if(or instanceof Xc){let nt=ue!=null?await l5e(ue,e.name,oe.lookup(e)):void 0;throw ie.recorder.recordFailure({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,errorMessage:r.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-Vt,outputRepoUrl:u5e(e),generatorsYmlAbsolutePath:ue,generatorsYmlLineNumber:nt}),or}let Ae=Fn(or),he=ue!=null?await l5e(ue,e.name,oe.lookup(e)):void 0;ie.recorder.recordFailure({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,errorMessage:Ae,durationMs:Date.now()-Vt,outputRepoUrl:u5e(e),generatorsYmlAbsolutePath:ue,generatorsYmlLineNumber:he}),r.failWithoutThrowing(Ae,or,{code:QNe(or)})}}function lZl(e,t){let r=e.findIndex(i=>i!=null);if(r<0)return;let n=e[r];throw n instanceof S?n:new Error(`Cannot prepare sdk-gen-api target ${t[r]?.name??r.toString()}: ${Fn(n)}`,{cause:n})}async function Kbg(e){if(!A6e())return;let t=[];if(e.pullRequestUrl!=null&&t.push({event:"PR created",body:e.pullRequestUrl,summaryLine:`\u{1F500} **${e.generatorName}** \u2192 [PR](${e.pullRequestUrl})`}),e.publishTarget!=null){let i=e.publishTarget.url??e.publishTarget.identifier;t.push({event:`Published to ${e.publishTarget.label}`,body:i!=null?`${e.publishTarget.version} \u2192 ${i}`:e.publishTarget.version,summaryLine:e.publishTarget.url!=null?`\u{1F4E6} **${e.generatorName}** \u2192 [${e.publishTarget.label} ${e.publishTarget.version}](${e.publishTarget.url})`:`\u{1F4E6} **${e.generatorName}** \u2192 ${e.publishTarget.label} ${e.publishTarget.version}${e.publishTarget.identifier!=null?` (${e.publishTarget.identifier})`:""}`})}if(e.noChangesDetected&&t.push({event:"No changes detected",body:"SDK repo is already up to date",summaryLine:`\u2705 **${e.generatorName}** \u2192 No changes detected`}),e.version!=null&&e.publishTarget==null&&e.pullRequestUrl==null&&t.push({event:`Version ${e.version}`,body:`Generated version ${e.version}`,summaryLine:`\u{1F3F7}\uFE0F **${e.generatorName}** \u2192 Version ${e.version}`}),t.length===0)return;let r=[`group=${e.groupName}`];e.apiName!=null&&e.apiName.length>0&&r.push(`api=${e.apiName}`);let n=`${e.generatorName} (${r.join(", ")})`;for(let i of t){let o=`${n} \u2192 ${i.event}`,s=y6e("notice",i.body,{title:o});s!=null&&process.stdout.write(s)}if(!e.isAutomation){let i=process.env.GITHUB_STEP_SUMMARY;if(i!=null&&i.length>0){let o=t.map(s=>`${s.summaryLine}
4304
4304
  `).join("");try{await(0,pZl.appendFile)(i,o,"utf8")}catch(s){process.stderr.write(`[warn] Failed to append to GITHUB_STEP_SUMMARY: ${s}
@@ -4316,7 +4316,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
4316
4316
  `);i.failAndThrow(s!=null?`No docs instance found matching '${s}'.
4317
4317
 
4318
4318
  Available instances:
4319
- ${C}`:"No docs instance found. Failed to register.",void 0,{code:S.Code.ConfigError});return}let x=(typeof E.customDomain=="string"?[E.customDomain]:E.customDomain??[]).map(mZl);hZl(E.url,x,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${E.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let v;return await i.runInteractiveTask({name:E.url},async()=>{let C=performance.now(),O=()=>xcp({docsWorkspace:n,customDomains:x,domain:E.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:E.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:E.audiences?Array.isArray(E.audiences)?E.audiences:[E.audiences]:void 0,docsUrl:E.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:E.multiSource??!1,docsVisibility:g});for(let R=0;;R++)try{v=await O();break}catch(P){if(!(P instanceof sSt)||R>=XYt.length){if(P instanceof sSt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:S.Code.NetworkError});throw P}let M=XYt[R]??XYt[XYt.length-1]??6e4,J=M/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${J} minute${J===1?"":"s"} (attempt ${R+1}/${XYt.length})...`),await new Promise(X=>setTimeout(X,M))}let D=performance.now()-C;i.logger.debug(`Docs publishing completed in ${D.toFixed(0)}ms`)}),v}Ft();var Ybi=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,previewId:n,skipUpload:i}){let o=new vd({context:this.context,task:this.task});try{let s=await ZYt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"5.139.2",loginCommand:"fern auth login"});return o.getResult()===df.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Fn(s)}}}};wt();In();var aSt=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
4319
+ ${C}`:"No docs instance found. Failed to register.",void 0,{code:S.Code.ConfigError});return}let x=(typeof E.customDomain=="string"?[E.customDomain]:E.customDomain??[]).map(mZl);hZl(E.url,x,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${E.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let v;return await i.runInteractiveTask({name:E.url},async()=>{let C=performance.now(),O=()=>xcp({docsWorkspace:n,customDomains:x,domain:E.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:E.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:E.audiences?Array.isArray(E.audiences)?E.audiences:[E.audiences]:void 0,docsUrl:E.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:E.multiSource??!1,docsVisibility:g});for(let R=0;;R++)try{v=await O();break}catch(P){if(!(P instanceof sSt)||R>=XYt.length){if(P instanceof sSt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:S.Code.NetworkError});throw P}let M=XYt[R]??XYt[XYt.length-1]??6e4,J=M/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${J} minute${J===1?"":"s"} (attempt ${R+1}/${XYt.length})...`),await new Promise(X=>setTimeout(X,M))}let D=performance.now()-C;i.logger.debug(`Docs publishing completed in ${D.toFixed(0)}ms`)}),v}Ft();var Ybi=class{context;task;project;docsWorkspace;ossWorkspaces;token;constructor({context:t,task:r,project:n,docsWorkspace:i,ossWorkspaces:o,token:s}){this.context=t,this.task=r,this.project=n,this.docsWorkspace=i,this.ossWorkspaces=o,this.token=s}async publish({instanceUrl:t,preview:r,previewId:n,skipUpload:i}){let o=new vd({context:this.context,task:this.task});try{let s=await ZYt({organization:this.project.config.organization,apiWorkspaces:this.project.apiWorkspaces,ossWorkspaces:this.ossWorkspaces,docsWorkspace:this.docsWorkspace,context:o,token:this.token,instanceUrl:t,preview:r,previewId:n,disableTemplates:void 0,skipUpload:i,cliVersion:"5.139.3",loginCommand:"fern auth login"});return o.getResult()===df.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Fn(s)}}}};wt();In();var aSt=class e{static MAX_DISPLAYED_LOGS_TTY=10;static URL_PATTERN=/https?:\/\/[^\s]+/;context;stream;tasks={};taskOrder=[];startTime;isRegistered=!1;constructor(t){this.context=t.context,this.stream=t.stream??process.stderr}addTask(t){let r={...t,status:t.status??"pending"};return this.tasks[t.id]=r,this.taskOrder.push(t.id),this}async start(t){return this.startTime=Date.now(),t!=null&&await this.context.ttyAwareLogger.takeOverTerminal(()=>{this.stream.write(`
4320
4320
  `),this.stream.write(`${fe.cyan("\u25C6")} ${fe.bold(t.title)}
4321
4321
  `),t.subtitle!=null&&this.stream.write(` ${fe.dim(t.subtitle)}
4322
4322
  `),this.stream.write(`
@@ -5008,7 +5008,7 @@ ${r}`}function ECi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
5008
5008
  `),g="";return c&&(g=l.style.error(c)),[`${p} ${f} ${s}`,[m,g].filter(Boolean).join(`
5009
5009
  `)]});var iAA=Hx((e,t)=>{let{validate:r=()=>!0}=e,n=PI(e.theme),[i,o]=au("idle"),[s,a]=au(),[c,u]=au(""),l=qx({status:i,theme:n});Wx(async(g,A)=>{if(i==="idle")if(Gx(g)){let y=c;o("loading");let E=await r(y);E===!0?(u(y),o("done"),t(y)):(A.write(c),a(E||"You must provide a valid value"),o("idle"))}else u(A.line),a(void 0)});let p=n.style.message(e.message,i),d="",f;e.mask?d=(typeof e.mask=="string"?e.mask:"*").repeat(c.length):i!=="done"&&(f=`${n.style.help("[input is masked]")}${ZTt}`),i==="done"&&(d=n.style.answer(d));let m="";return s&&(m=n.style.error(s)),[[l,p,e.mask?d:f].join(" "),m]});var yGe=be(sS(),1);var oAA={icon:{cursor:jC.pointer},style:{disabled:e=>yGe.default.dim(`- ${e}`),searchTerm:e=>yGe.default.cyan(e),description:e=>yGe.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${yGe.default.bold(t)} ${yGe.default.dim(r)}`).join(yGe.default.dim(" \u2022 "))},helpMode:"always"};function v4s(e){return!Pd.isSeparator(e)&&!e.disabled}function sAA(e){return e.map(t=>{if(Pd.isSeparator(t))return t;if(typeof t=="string")return{value:t,name:t,short:t,disabled:!1};let r=t.name??String(t.value),n={value:t.value,name:r,short:t.short??r,disabled:t.disabled??!1};return t.description&&(n.description=t.description),n})}var aAA=Hx((e,t)=>{let{pageSize:r=7,validate:n=()=>!0}=e,i=PI(oAA,e.theme),[o,s]=au("loading"),[a,c]=au(""),[u,l]=au([]),[p,d]=au(),f=qx({status:o,theme:i}),m=UL(()=>{let M=u.findIndex(v4s),J=u.findLastIndex(v4s);return{first:M,last:J}},[u]),[g=m.first,A]=au();K4(()=>{let M=new AbortController;return s("loading"),d(void 0),(async()=>{try{let X=await e.source(a||void 0,{signal:M.signal});M.signal.aborted||(A(void 0),d(void 0),l(sAA(X)),s("idle"))}catch(X){!M.signal.aborted&&X instanceof Error&&d(X.message)}})(),()=>{M.abort()}},[a]);let y=u[g];Wx(async(M,J)=>{if(Gx(M))if(y){s("loading");let X=await n(y.value);s("idle"),X===!0?(s("done"),t(y.value)):y.name===a?d(X||"You must provide a valid value"):(J.write(y.name),c(y.name))}else J.write(a);else if(eAe(M)&&y)J.clearLine(0),J.write(y.name),c(y.name);else if(o!=="loading"&&(QB(M)||VL(M))){if(J.clearLine(0),QB(M)&&g!==m.first||VL(M)&&g!==m.last){let X=QB(M)?-1:1,$=g;do $=($+X+u.length)%u.length;while(!v4s(u[$]));A($)}}else c(J.line)});let E=i.style.message(e.message,o),x;if(i.helpMode!=="never")if(e.instructions){let{pager:M,navigation:J}=e.instructions;x=i.style.help(u.length>r?M:J)}else x=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let v=mGe({items:u,active:g,renderItem({item:M,isActive:J}){if(Pd.isSeparator(M))return` ${M.separator}`;if(M.disabled){let ie=typeof M.disabled=="string"?M.disabled:"(disabled)";return i.style.disabled(`${M.name} ${ie}`)}let X=J?i.style.highlight:ie=>ie,$=J?i.icon.cursor:" ";return X(`${$} ${M.name}`)},pageSize:r,loop:!1}),C;p?C=i.style.error(p):u.length===0&&a!==""&&o==="idle"&&(C=i.style.error("No results found"));let O;if(o==="done"&&y)return[f,E,i.style.answer(y.short)].filter(Boolean).join(" ").trimEnd();O=i.style.searchTerm(a);let D=y?.description,R=[f,E,O].filter(Boolean).join(" ").trimEnd(),P=[C??v," ",D?i.style.description(D):"",x].filter(Boolean).join(`
5010
5010
  `).trimEnd();return[R,P]});var eOt=be(sS(),1);var cAA={icon:{cursor:jC.pointer},style:{disabled:e=>eOt.default.dim(`- ${e}`),description:e=>eOt.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${eOt.default.bold(t)} ${eOt.default.dim(r)}`).join(eOt.default.dim(" \u2022 "))},helpMode:"always",indexMode:"hidden",keybindings:[]};function $Tt(e){return!Pd.isSeparator(e)&&!e.disabled}function uAA(e){return e.map(t=>{if(Pd.isSeparator(t))return t;if(typeof t=="string")return{value:t,name:t,short:t,disabled:!1};let r=t.name??String(t.value),n={value:t.value,name:r,short:t.short??r,disabled:t.disabled??!1};return t.description&&(n.description=t.description),n})}var x4s=Hx((e,t)=>{let{loop:r=!0,pageSize:n=7}=e,i=PI(cAA,e.theme),{keybindings:o}=i,[s,a]=au("idle"),c=qx({status:s,theme:i}),u=dGe(),l=!o.includes("vim"),p=UL(()=>uAA(e.choices),[e.choices]),d=UL(()=>{let D=p.findIndex($Tt),R=p.findLastIndex($Tt);if(D===-1)throw new Fce("[select prompt] No selectable choices. All choices are disabled.");return{first:D,last:R}},[p]),f=UL(()=>"default"in e?p.findIndex(D=>$Tt(D)&&D.value===e.default):-1,[e.default,p]),[m,g]=au(f===-1?d.first:f),A=p[m];Wx((D,R)=>{if(clearTimeout(u.current),Gx(D))a("done"),t(A.value);else if(QB(D,o)||VL(D,o)){if(R.clearLine(0),r||QB(D,o)&&m!==d.first||VL(D,o)&&m!==d.last){let P=QB(D,o)?-1:1,M=m;do M=(M+P+p.length)%p.length;while(!$Tt(p[M]));g(M)}}else if(ner(D)&&!Number.isNaN(Number(R.line))){let P=Number(R.line)-1,M=-1,J=p.findIndex($=>Pd.isSeparator($)?!1:(M++,M===P)),X=p[J];X!=null&&$Tt(X)&&g(J),u.current=setTimeout(()=>{R.clearLine(0)},700)}else if(lGe(D))R.clearLine(0);else if(l){let P=R.line.toLowerCase(),M=p.findIndex(J=>Pd.isSeparator(J)||!$Tt(J)?!1:J.name.toLowerCase().startsWith(P));M!==-1&&g(M),u.current=setTimeout(()=>{R.clearLine(0)},700)}}),K4(()=>()=>{clearTimeout(u.current)},[]);let y=i.style.message(e.message,s),E;if(i.helpMode!=="never")if(e.instructions){let{pager:D,navigation:R}=e.instructions;E=i.style.help(p.length>n?D:R)}else E=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let x=0,v=mGe({items:p,active:m,renderItem({item:D,isActive:R,index:P}){if(Pd.isSeparator(D))return x++,` ${D.separator}`;let M=i.indexMode==="number"?`${P+1-x}. `:"";if(D.disabled){let $=typeof D.disabled=="string"?D.disabled:"(disabled)";return i.style.disabled(`${M}${D.name} ${$}`)}let J=R?i.style.highlight:$=>$,X=R?i.icon.cursor:" ";return J(`${X} ${M}${D.name}`)},pageSize:n,loop:r});if(s==="done")return[c,y,i.style.answer(A.short)].filter(Boolean).join(" ");let{description:C}=A;return`${[[c,y].filter(Boolean).join(" "),v," ",C?i.style.description(C):"",E].filter(Boolean).join(`
5011
- `).trimEnd()}${ZTt}`});In();Vi();var Nce={GENERATION_STARTED:"generation_started",GENERATION_COMPLETED:"generation_completed",GENERATION_FAILED:"generation_failed",VERIFICATION_FAILED:"verification_failed",SDK_PR_CREATED:"sdk_pr_created",UPGRADE_APPLIED:"upgrade_applied",MAJOR_VERSION_BUMP:"major_version_bump"},lAA={[Nce.GENERATION_STARTED]:!1,[Nce.GENERATION_COMPLETED]:!1,[Nce.GENERATION_FAILED]:!0,[Nce.VERIFICATION_FAILED]:!0,[Nce.SDK_PR_CREATED]:!1,[Nce.UPGRADE_APPLIED]:!1,[Nce.MAJOR_VERSION_BUMP]:!1};function Iwp(e){return lAA[e]}function vwp(e,t){return{automation_mode:!0,surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function xwp(e,t){function r(i,o,s){s!=null&&(i[o]=s)}let n={surface:"cli",automation_mode:"true"};return r(n,"event",e.event),r(n,"action",t.action),r(n,"run_id",t.run_id),r(n,"org",t.org),r(n,"config_repo",t.config_repo),r(n,"trigger",t.trigger),r(n,"error_code",e.errorCode??"none"),n}function Cwp(e,t){return{github_run_id:t.github_run_id,github_run_url:t.github_run_url,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,cli_version:t.cli_version,...e.attributes??{}}}function wwp(e,t){return{event:e.event,timestamp:new Date().toISOString(),surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function Swp(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?Nce.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?Nce.VERIFICATION_FAILED:Nce.GENERATION_FAILED}var pAA="",fAA="FERN_AUTOMATION_EVENTS_ORIGIN",dAA=3e3,rwi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[fAA]??pAA)),e.instance}constructor(t){this.origin=t}resolveEndpoint(){if(this.origin.length!==0)return`${this.origin.replace(/\/$/,"")}/v1/automation/events`}post(t,r){this.inflight.push(this.send(t,r))}async shutdown(){let t=this.inflight;this.inflight=[],t.length>0&&await Promise.allSettled(t)}async send(t,r){let n=this.resolveEndpoint();if(n==null)return;let i=new AbortController,o=setTimeout(()=>i.abort(),dAA);try{let s={"content-type":"application/json"},a=await bz();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(wwp(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function Twp(){let{fern_run_id:e,github_run_id:t}=fue();return{action:process.env.FERN_ACTION,run_id:e,github_run_id:t,github_run_url:process.env.FERN_GITHUB_RUN_URL,org:void 0,config_repo:process.env.FERN_CONFIG_REPO,config_commit_sha:process.env.FERN_CONFIG_COMMIT_SHA,config_branch:process.env.FERN_CONFIG_BRANCH,config_pr_number:process.env.FERN_CONFIG_PR_NUMBER,trigger:process.env.GITHUB_EVENT_NAME,cli_version:"5.139.2"}}function Owp(){return process.env.FERN_AUTOMATION==="true"}var nwi=class{constructor(t,r=rwi.getInstance()){this.reporter=t;this.automationEventApiClient=r;this.context=Twp()}reporter;automationEventApiClient;context;setOrganization(t){this.context={...this.context,org:t}}emit(t,r){let n=this.captureSentryForFailure({event:t,context:this.context,error:r?.error}),i=n==null?t:{...t,attributes:{...t.attributes??{},sentry_event_id:n}};this.capturePostHogEvent({event:i,context:this.context}),this.captureAutomationEventApiEvent(i,this.context)}async flush(){await this.automationEventApiClient.shutdown()}capturePostHogEvent({event:t,context:r}){this.reporter.instrumentPostHogAutomationEvent({distinctId:r.run_id??void 0,event:t.event,properties:vwp(t,r)})}captureSentryForFailure({event:t,context:r,error:n}){if(!(!Iwp(t.event)||t.errorCode==null))return this.reporter.captureException(n,{tags:xwp(t,r),context:{automation:Cwp(t,r)}})}captureAutomationEventApiEvent(t,r){this.automationEventApiClient.post(t,r)}};Ft();function iwi(e,t,r){if(t instanceof Xc)return;let n=QNe(t,r?.code),i=r?.argv??process.argv,o=i.join(" "),s=r?.message??(t instanceof Error?t.message:void 0)??"",a=t??new S({message:s,code:n});Owp()?hAA(i,e,n,s,a):mAA(e,o,n,a)}function mAA(e,t,r,n){e.instrumentPostHogEvent({command:t,properties:{failed:!0,errorCode:r}}),ORt(r)&&e.captureException(n,{tags:{"error.code":r}})}function hAA(e,t,r,n,i){let o=Swp(e);t.emitAutomationTelemetryEvent({event:o,errorCode:r,attributes:{error_message:n}},{error:i})}Ft();function bGe(){return process.env.FERN_DISABLE_TELEMETRY==="true"}function owi({cliName:e,packageVersion:t,isLocal:r}){return bGe()||r?!1:!(t==="0.0.0")&&(e==="fern"&&!0)}var swi=class{sentry;constructor({release:t,telemetry:r}){let n="https://84f58b5e457f06999d92f11ce4b79158@o4509504076185600.ingest.us.sentry.io/4511021546602496";if(owi(r)&&n!=null&&n.length>0){let i="production";if(i==null||i.length===0)throw new S({message:"SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured",code:S.Code.ConfigError});this.sentry=ERt({dsn:n,release:t,environment:i,defaultIntegrations:!1,integrations:[m7e(),oye(),sye(),_Ae(),iye()],tracesSampleRate:0,attachStacktrace:!0,sendClientReports:!1}),IRt()}}captureException(t,r){if(this.sentry!=null)try{let n=r?.tags,i=r?.context,o=n!=null&&Object.keys(n).length>0,s=i!=null&&Object.values(i).some(a=>a!=null);return!o&&!s?this.sentry.captureException(t):UO(a=>{if(o&&a.setTags(n),i!=null)for(let[c,u]of Object.entries(i))u!=null&&a.setContext(c,u);return this.sentry?.captureException(t,void 0,a)})}catch{return}}async flush(){this.sentry!=null&&await Promise.resolve(this.sentry.flush(2e3)).catch(()=>{})}};Ft();var awi=class{originalWrite;redirected=!1;redirect(){if(this.redirected)throw new S({message:"StdoutRedirector: already redirected \u2014 did you forget to restore()?",code:S.Code.InternalError});this.originalWrite=process.stdout.write,process.stdout.write=process.stderr.write.bind(process.stderr),this.redirected=!0}restore(){!this.redirected||this.originalWrite==null||(process.stdout.write=this.originalWrite,this.originalWrite=void 0,this.redirected=!1)}async withRedirect(t){this.redirect();try{return await t()}finally{this.restore()}}};kfe();wt();jb();Ft();In();var aer=class{result=df.Success;lastFailureMessage=void 0;logImmediately;logPrefix;title;subtasks=[];shouldBufferLogs;bufferedLogs=[];status="notStarted";onResult;instrumentPostHogEventImpl;captureExceptionImpl;emitAutomationTelemetryEventImpl;constructor({logImmediately:t,logPrefix:r,title:n,takeOverTerminal:i,onResult:o,shouldBufferLogs:s,instrumentPostHogEvent:a,captureException:c,emitAutomationTelemetryEvent:u}){this.logImmediately=t,this.logPrefix=r??"",this.title=n,this.takeOverTerminal=i,this.onResult=o,this.shouldBufferLogs=s,this.instrumentPostHogEventImpl=a,this.captureExceptionImpl=c,this.emitAutomationTelemetryEventImpl=u}start(){return this.status="running",this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.status="finished",this.flushLogs(),this.onResult?.(this.getResult()))}isFinished(){return this.status==="finished"}takeOverTerminal;failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),this.finish(),new Xc}failWithoutThrowing(t,r,n){this.result=df.Failure,!(r instanceof Xc)&&(t!=null&&(this.lastFailureMessage=t),y4t({message:t,error:r,logger:this.logger}),iwi(this,r,{...n,message:t}))}getLastFailureMessage(){return this.lastFailureMessage}captureException(t,r){return this.captureExceptionImpl?.(t,r)}emitAutomationTelemetryEvent(t,r){this.emitAutomationTelemetryEventImpl(t,r)}getResult(){return this.result}instrumentPostHogEvent(t){this.instrumentPostHogEventImpl(t)}logAtLevel(t,...r){this.logAtLevelWithOverrides(t,r)}logAtLevelWithOverrides(t,r,n={}){this.log({parts:r,level:t,time:new Date,...n})}log(t){this.bufferedLogs.push({...t,prefix:this.logPrefix}),this.shouldBufferLogs||this.flushLogs()}flushLogs(){this.logImmediately(this.bufferedLogs),this.bufferedLogs=[]}logger=jv(this.logAtLevel.bind(this));addInteractiveTask({name:t,subtitle:r}){let n=new C4s({name:t,subtitle:r,logImmediately:i=>this.logImmediately(i),logPrefix:`${this.logPrefix}${fe.blackBright(t)} `,takeOverTerminal:this.takeOverTerminal,onResult:this.onResult,shouldBufferLogs:this.shouldBufferLogs,instrumentPostHogEvent:i=>this.instrumentPostHogEventImpl(i),captureException:this.captureExceptionImpl,emitAutomationTelemetryEvent:this.emitAutomationTelemetryEventImpl});return this.subtasks.push(n),n}async runInteractiveTask(t,r){let n=this.addInteractiveTask(t).start();try{await r(n)}catch(i){n.failWithoutThrowing(void 0,i)}finally{n.finish()}return n.getResult()===df.Success}printInteractiveTasks({spinner:t}){return this.subtasks.map(r=>r.print({spinner:t})).join(`
5011
+ `).trimEnd()}${ZTt}`});In();Vi();var Nce={GENERATION_STARTED:"generation_started",GENERATION_COMPLETED:"generation_completed",GENERATION_FAILED:"generation_failed",VERIFICATION_FAILED:"verification_failed",SDK_PR_CREATED:"sdk_pr_created",UPGRADE_APPLIED:"upgrade_applied",MAJOR_VERSION_BUMP:"major_version_bump"},lAA={[Nce.GENERATION_STARTED]:!1,[Nce.GENERATION_COMPLETED]:!1,[Nce.GENERATION_FAILED]:!0,[Nce.VERIFICATION_FAILED]:!0,[Nce.SDK_PR_CREATED]:!1,[Nce.UPGRADE_APPLIED]:!1,[Nce.MAJOR_VERSION_BUMP]:!1};function Iwp(e){return lAA[e]}function vwp(e,t){return{automation_mode:!0,surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function xwp(e,t){function r(i,o,s){s!=null&&(i[o]=s)}let n={surface:"cli",automation_mode:"true"};return r(n,"event",e.event),r(n,"action",t.action),r(n,"run_id",t.run_id),r(n,"org",t.org),r(n,"config_repo",t.config_repo),r(n,"trigger",t.trigger),r(n,"error_code",e.errorCode??"none"),n}function Cwp(e,t){return{github_run_id:t.github_run_id,github_run_url:t.github_run_url,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,cli_version:t.cli_version,...e.attributes??{}}}function wwp(e,t){return{event:e.event,timestamp:new Date().toISOString(),surface:"cli",action:t.action,run_id:t.run_id,github_run_id:t.github_run_id,github_run_url:t.github_run_url,org:t.org,config_repo:t.config_repo,config_commit_sha:t.config_commit_sha,config_branch:t.config_branch,config_pr_number:t.config_pr_number,trigger:t.trigger,cli_version:t.cli_version,...e.errorCode!==void 0?{error_code:e.errorCode}:{},...e.attributes??{}}}function Swp(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?Nce.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?Nce.VERIFICATION_FAILED:Nce.GENERATION_FAILED}var pAA="",fAA="FERN_AUTOMATION_EVENTS_ORIGIN",dAA=3e3,rwi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[fAA]??pAA)),e.instance}constructor(t){this.origin=t}resolveEndpoint(){if(this.origin.length!==0)return`${this.origin.replace(/\/$/,"")}/v1/automation/events`}post(t,r){this.inflight.push(this.send(t,r))}async shutdown(){let t=this.inflight;this.inflight=[],t.length>0&&await Promise.allSettled(t)}async send(t,r){let n=this.resolveEndpoint();if(n==null)return;let i=new AbortController,o=setTimeout(()=>i.abort(),dAA);try{let s={"content-type":"application/json"},a=await bz();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(wwp(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function Twp(){let{fern_run_id:e,github_run_id:t}=fue();return{action:process.env.FERN_ACTION,run_id:e,github_run_id:t,github_run_url:process.env.FERN_GITHUB_RUN_URL,org:void 0,config_repo:process.env.FERN_CONFIG_REPO,config_commit_sha:process.env.FERN_CONFIG_COMMIT_SHA,config_branch:process.env.FERN_CONFIG_BRANCH,config_pr_number:process.env.FERN_CONFIG_PR_NUMBER,trigger:process.env.GITHUB_EVENT_NAME,cli_version:"5.139.3"}}function Owp(){return process.env.FERN_AUTOMATION==="true"}var nwi=class{constructor(t,r=rwi.getInstance()){this.reporter=t;this.automationEventApiClient=r;this.context=Twp()}reporter;automationEventApiClient;context;setOrganization(t){this.context={...this.context,org:t}}emit(t,r){let n=this.captureSentryForFailure({event:t,context:this.context,error:r?.error}),i=n==null?t:{...t,attributes:{...t.attributes??{},sentry_event_id:n}};this.capturePostHogEvent({event:i,context:this.context}),this.captureAutomationEventApiEvent(i,this.context)}async flush(){await this.automationEventApiClient.shutdown()}capturePostHogEvent({event:t,context:r}){this.reporter.instrumentPostHogAutomationEvent({distinctId:r.run_id??void 0,event:t.event,properties:vwp(t,r)})}captureSentryForFailure({event:t,context:r,error:n}){if(!(!Iwp(t.event)||t.errorCode==null))return this.reporter.captureException(n,{tags:xwp(t,r),context:{automation:Cwp(t,r)}})}captureAutomationEventApiEvent(t,r){this.automationEventApiClient.post(t,r)}};Ft();function iwi(e,t,r){if(t instanceof Xc)return;let n=QNe(t,r?.code),i=r?.argv??process.argv,o=i.join(" "),s=r?.message??(t instanceof Error?t.message:void 0)??"",a=t??new S({message:s,code:n});Owp()?hAA(i,e,n,s,a):mAA(e,o,n,a)}function mAA(e,t,r,n){e.instrumentPostHogEvent({command:t,properties:{failed:!0,errorCode:r}}),ORt(r)&&e.captureException(n,{tags:{"error.code":r}})}function hAA(e,t,r,n,i){let o=Swp(e);t.emitAutomationTelemetryEvent({event:o,errorCode:r,attributes:{error_message:n}},{error:i})}Ft();function bGe(){return process.env.FERN_DISABLE_TELEMETRY==="true"}function owi({cliName:e,packageVersion:t,isLocal:r}){return bGe()||r?!1:!(t==="0.0.0")&&(e==="fern"&&!0)}var swi=class{sentry;constructor({release:t,telemetry:r}){let n="https://84f58b5e457f06999d92f11ce4b79158@o4509504076185600.ingest.us.sentry.io/4511021546602496";if(owi(r)&&n!=null&&n.length>0){let i="production";if(i==null||i.length===0)throw new S({message:"SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured",code:S.Code.ConfigError});this.sentry=ERt({dsn:n,release:t,environment:i,defaultIntegrations:!1,integrations:[m7e(),oye(),sye(),_Ae(),iye()],tracesSampleRate:0,attachStacktrace:!0,sendClientReports:!1}),IRt()}}captureException(t,r){if(this.sentry!=null)try{let n=r?.tags,i=r?.context,o=n!=null&&Object.keys(n).length>0,s=i!=null&&Object.values(i).some(a=>a!=null);return!o&&!s?this.sentry.captureException(t):UO(a=>{if(o&&a.setTags(n),i!=null)for(let[c,u]of Object.entries(i))u!=null&&a.setContext(c,u);return this.sentry?.captureException(t,void 0,a)})}catch{return}}async flush(){this.sentry!=null&&await Promise.resolve(this.sentry.flush(2e3)).catch(()=>{})}};Ft();var awi=class{originalWrite;redirected=!1;redirect(){if(this.redirected)throw new S({message:"StdoutRedirector: already redirected \u2014 did you forget to restore()?",code:S.Code.InternalError});this.originalWrite=process.stdout.write,process.stdout.write=process.stderr.write.bind(process.stderr),this.redirected=!0}restore(){!this.redirected||this.originalWrite==null||(process.stdout.write=this.originalWrite,this.originalWrite=void 0,this.redirected=!1)}async withRedirect(t){this.redirect();try{return await t()}finally{this.restore()}}};kfe();wt();jb();Ft();In();var aer=class{result=df.Success;lastFailureMessage=void 0;logImmediately;logPrefix;title;subtasks=[];shouldBufferLogs;bufferedLogs=[];status="notStarted";onResult;instrumentPostHogEventImpl;captureExceptionImpl;emitAutomationTelemetryEventImpl;constructor({logImmediately:t,logPrefix:r,title:n,takeOverTerminal:i,onResult:o,shouldBufferLogs:s,instrumentPostHogEvent:a,captureException:c,emitAutomationTelemetryEvent:u}){this.logImmediately=t,this.logPrefix=r??"",this.title=n,this.takeOverTerminal=i,this.onResult=o,this.shouldBufferLogs=s,this.instrumentPostHogEventImpl=a,this.captureExceptionImpl=c,this.emitAutomationTelemetryEventImpl=u}start(){return this.status="running",this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.status="finished",this.flushLogs(),this.onResult?.(this.getResult()))}isFinished(){return this.status==="finished"}takeOverTerminal;failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),this.finish(),new Xc}failWithoutThrowing(t,r,n){this.result=df.Failure,!(r instanceof Xc)&&(t!=null&&(this.lastFailureMessage=t),y4t({message:t,error:r,logger:this.logger}),iwi(this,r,{...n,message:t}))}getLastFailureMessage(){return this.lastFailureMessage}captureException(t,r){return this.captureExceptionImpl?.(t,r)}emitAutomationTelemetryEvent(t,r){this.emitAutomationTelemetryEventImpl(t,r)}getResult(){return this.result}instrumentPostHogEvent(t){this.instrumentPostHogEventImpl(t)}logAtLevel(t,...r){this.logAtLevelWithOverrides(t,r)}logAtLevelWithOverrides(t,r,n={}){this.log({parts:r,level:t,time:new Date,...n})}log(t){this.bufferedLogs.push({...t,prefix:this.logPrefix}),this.shouldBufferLogs||this.flushLogs()}flushLogs(){this.logImmediately(this.bufferedLogs),this.bufferedLogs=[]}logger=jv(this.logAtLevel.bind(this));addInteractiveTask({name:t,subtitle:r}){let n=new C4s({name:t,subtitle:r,logImmediately:i=>this.logImmediately(i),logPrefix:`${this.logPrefix}${fe.blackBright(t)} `,takeOverTerminal:this.takeOverTerminal,onResult:this.onResult,shouldBufferLogs:this.shouldBufferLogs,instrumentPostHogEvent:i=>this.instrumentPostHogEventImpl(i),captureException:this.captureExceptionImpl,emitAutomationTelemetryEvent:this.emitAutomationTelemetryEventImpl});return this.subtasks.push(n),n}async runInteractiveTask(t,r){let n=this.addInteractiveTask(t).start();try{await r(n)}catch(i){n.failWithoutThrowing(void 0,i)}finally{n.finish()}return n.getResult()===df.Success}printInteractiveTasks({spinner:t}){return this.subtasks.map(r=>r.print({spinner:t})).join(`
5012
5012
  `)}},C4s=class extends aer{name;subtitle;constructor({name:t,subtitle:r,...n}){super(n),this.name=t,this.subtitle=r}start(){return super.start(),this.logAtLevelWithOverrides(Hn.Info,["Started."],{omitOnTTY:!0}),this.flushLogs(),this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.result===df.Success?this.logAtLevelWithOverrides(Hn.Info,["Finished."],{omitOnTTY:!0}):this.logAtLevelWithOverrides(Hn.Error,["Failed."],{omitOnTTY:!0}),super.finish())}setSubtitle(t){this.subtitle=t}print({spinner:t}){let r=[this.name];return this.subtitle!=null&&r.push(fe.dim(this.subtitle)),r.push(...this.subtasks.map(n=>n.print({spinner:t}))),Lj({prefix:this.getIcon({spinner:t}),content:r.join(`
5013
5013
  `)})}printInteractiveTasks({spinner:t}){return this.print({spinner:t})}getIcon({spinner:t}){let r=this.subtasks.length>0;switch(this.status){case"notStarted":return r?fe.dim("\u25B8 "):fe.dim("\u25E6 ");case"running":return r?fe.cyan("\u25BE "):t;case"finished":switch(this.getResult()){case df.Success:return r?fe.green("\u25BE "):fe.green("\u2713 ");case df.Failure:return r?fe.red("\u25BE "):fe.red("x ")}}}getResult(){if(this.result===df.Failure)return df.Failure;for(let t of this.subtasks)if(t.getResult()===df.Failure)return df.Failure;return df.Success}};Ft();var Pwp=be(NLe(),1);In();function Bwp(e){return e.filter(t=>t.isUpgradeAvailable).length>0}function gAA(e){return(e.cliUpgradeInfo?.isUpgradeAvailable??!1)||Bwp(e.generatorUpgradeInfo)}async function Dwp({cliEnvironment:e,upgradeInfo:t}){if(!gAA(t)||e.packageVersion==t.cliUpgradeInfo?.latestVersion)return;let r=`${fe.underline("Upgrades available")}
5014
5014
 
@@ -5017,7 +5017,7 @@ ${r}`}function ECi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
5017
5017
  Run ${fe.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
5018
5018
  Run ${fe.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),Xst(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function w4s({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!Bwp(e))return;let i=t??"",o=e.filter(a=>a.isUpgradeAvailable);r!=null&&(o=o.slice(0,r+1));let s=o.sort((a,c)=>a.generatorName.localeCompare(c.generatorName)||a.currentVersion.localeCompare(c.currentVersion));for(let a of s)i+=`
5019
5019
  ${await AAA(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+fe.dim(a.currentVersion)+fe.reset(" \u2192 ")+fe.green(a.latestVersion);return i+=`
5020
- `,n?Xst(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function AAA(e){let r=await new Pwp.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new S({message:`Generator ${e} not found`,code:S.Code.ConfigError});return r.body.displayName}ro();Ufe();Ft();var tOt=be(DE(),1);function rOt(e){let t;return()=>(t??=e.runTask(r=>ed(r)),t)}function cwi({generatorId:e,candidateVersion:t,currentVersion:r}){if(!Rwp(t)||!Rwp(r))throw new S({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:S.Code.VersionError});try{return t===r?0:rS(t,r)?1:rS(r,t)?-1:0}catch{let n=tOt.default.valid(t),i=tOt.default.valid(r);if(n!=null&&i!=null)return Math.sign(tOt.default.compare(n,i));throw new S({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:S.Code.VersionError})}}function Rwp(e){if(e==="latest"||tOt.default.valid(e)!=null)return!0;try{return EH(e),!0}catch{return!1}}async function uwi({generatorId:e,currentVersion:t,includeMajor:r,channel:n,organization:i,getToken:o,context:s}){if(n!=null)throw new Error(`SDK Gen API generator version discovery does not support the requested upgrade channel "${n}". Remove --channel to use executable index versions, or disable FERN_USE_SDK_GEN_API to use FDR channel metadata.`);let a=Hgi();if(a==null)throw new Error("FERN_SDK_GEN_API_ORIGIN is required when FERN_USE_SDK_GEN_API=true");let c=Vk(e);if(c==null)return s.logger.error(`SDK Gen API cannot discover versions for unsupported generator ${e}. Use a canonical first-party SDK generator name or disable FERN_USE_SDK_GEN_API.`),{};let u=await o(),l=new URL("v1/fern/generator-versions/discover",`${a.replace(/\/+$/,"")}/`),p;try{p=await fetch(l,{method:"POST",headers:{Authorization:`Bearer ${u.value}`,"X-Fern-Organization-Id":i,"content-type":"application/json"},body:JSON.stringify({targets:[{targetId:"generator",generatorId:e,language:c,currentVersion:t,includeMajor:r}]})})}catch(m){throw new Error(`SDK Gen API version discovery failed for ${e}@${t} because the API could not be reached. Verify FERN_SDK_GEN_API_ORIGIN and the selected environment.`,{cause:m})}if(!p.ok)throw new Error(`SDK Gen API version discovery failed for ${e}@${t} with HTTP ${p.status}. Verify FERN_SDK_GEN_API_ORIGIN and the selected environment.`);let d=await p.json(),f=yAA(d);return f.state==="UNAVAILABLE"?(s.logger.error(`SDK Gen API cannot resolve an executable version for ${e}@${t} (${f.reason}). Publish the coordinate to this environment or choose a supported generator version.`),{}):{compatibleVersion:f.compatibleVersion,withheldMajorVersion:f.withheldMajorVersion}}function yAA(e){if(!Fwp(e,["targets"])||!Array.isArray(e.targets)||e.targets.length!==1)throw new Error("SDK Gen API returned an invalid generator version discovery response");let t=e.targets[0];if(!Nwp(t)||t.targetId!=="generator")throw new Error("SDK Gen API returned an invalid generator version discovery target");if(t.state==="UNAVAILABLE"){if(!Fwp(t,["targetId","state","reason"])||t.reason!=="IDENTITY_UNAVAILABLE"&&t.reason!=="LANGUAGE_MISMATCH"&&t.reason!=="VERSION_UNAVAILABLE")throw new Error("SDK Gen API returned an invalid unavailable generator version result");return{targetId:"generator",state:"UNAVAILABLE",reason:t.reason}}if(t.state!=="RESOLVED")throw new Error("SDK Gen API returned an unknown generator version discovery state");if(!jwp(t,["targetId","state","compatibleVersion","withheldMajorVersion"]))throw new Error("SDK Gen API returned an invalid resolved generator version result");let r=kwp(t,"compatibleVersion"),n=kwp(t,"withheldMajorVersion");if(r==null&&n==null)throw new Error("SDK Gen API returned an empty generator version discovery result");return{targetId:"generator",state:"RESOLVED",...r==null?{}:{compatibleVersion:r},...n==null?{}:{withheldMajorVersion:n}}}function kwp(e,t){if(!Object.hasOwn(e,t))return;let r=e[t];if(typeof r!="string"||tOt.default.valid(r)!==r)throw new S({message:`SDK Gen API returned invalid ${t} ${JSON.stringify(r)}. Expected an exact semantic version such as 1.2.3.`,code:S.Code.VersionError});return r}function Nwp(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Fwp(e,t){return Nwp(e)&&Object.keys(e).length===t.length&&jwp(e,t)}function jwp(e,t){let r=new Set(t);return Object.keys(e).every(n=>r.has(n))}async function bAA({cliContext:e,project:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let{apiWorkspaces:s}=t,a=EJ()?rOt(e):void 0;if(s.length===1){let u={type:"singleApi",versions:{}};return await Qwp({cliContext:e,apiWorkspaces:s,perGeneratorAction:async(l,p,d,f)=>{u.versions[p]==null&&(u.versions[p]={});let m=wLe(d.name);if(m==null){f.logger.debug(`Skipping unknown generator: ${d.name}`);return}let g=await Mwp({generatorName:d.name,normalizedGeneratorName:m,cliVersion:e.environment.packageVersion,currentGeneratorVersion:d.version,channel:i,includeMajor:o,organization:t.config.organization,getSdkGenApiToken:a,context:f});g!=null&&(u.versions[p][d.name]={previousVersion:d.version,latestVersion:g})},generatorFilter:r,groupFilter:n}),u}let c={type:"multiApi",versions:{}};return await Qwp({cliContext:e,apiWorkspaces:s,perGeneratorAction:async(u,l,p,d)=>{if(u==null)return;c.versions[u]==null&&(c.versions[u]={}),c.versions[u][l]==null&&(c.versions[u][l]={});let f=wLe(p.name);if(f==null){d.logger.debug(`Skipping unknown generator: ${p.name}`);return}let m=await Mwp({generatorName:p.name,normalizedGeneratorName:f,cliVersion:e.environment.packageVersion,currentGeneratorVersion:p.version,channel:i,includeMajor:o,organization:t.config.organization,getSdkGenApiToken:a,context:d});m!=null&&(c.versions[u][l][p.name]={previousVersion:p.version,latestVersion:m})},generatorFilter:r,groupFilter:n}),c}async function Qwp({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await c3({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?qg(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function zwp(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c=cwi({generatorId:s,candidateVersion:a.latestVersion,currentVersion:a.previousVersion})===1;r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Mwp({generatorName:e,normalizedGeneratorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,organization:s,getSdkGenApiToken:a,context:c}){if(EJ()){if(a==null)throw new Error("SDK Gen API generator version discovery requires authentication");return(await uwi({generatorId:qg(e),currentVersion:n,includeMajor:o??!1,channel:i,organization:s,getToken:a,context:c})).compatibleVersion}return LP({generatorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,context:c})}async function lwi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await bAA({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...zwp(u,c,t.logger));else s.push(...zwp(a.versions,void 0,t.logger))}return s}Ft();$Tr();async function tAe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await PQe(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new S({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:S.Code.NetworkError})}}var Lwp=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],pwi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Hn.Info;isLocal;stdoutRedirector=new awi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await p8t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new F4t(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new swi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new nwi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.139.2"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${fe.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new Xc}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof Xc)&&(y4t({message:t,error:r,logger:this.logger}),iwi(this,r,{...n,message:t}))}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}get isTTY(){return this.ttyAwareLogger.isTTY}writeJsonToStdout(t){this.writeTextToStdout(JSON.stringify(t,null,2)+`
5020
+ `,n?Xst(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function AAA(e){let r=await new Pwp.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new S({message:`Generator ${e} not found`,code:S.Code.ConfigError});return r.body.displayName}ro();Ufe();Ft();var tOt=be(DE(),1);function rOt(e){let t;return()=>(t??=e.runTask(r=>ed(r)),t)}function cwi({generatorId:e,candidateVersion:t,currentVersion:r}){if(!Rwp(t)||!Rwp(r))throw new S({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:S.Code.VersionError});try{return t===r?0:rS(t,r)?1:rS(r,t)?-1:0}catch{let n=tOt.default.valid(t),i=tOt.default.valid(r);if(n!=null&&i!=null)return Math.sign(tOt.default.compare(n,i));throw new S({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:S.Code.VersionError})}}function Rwp(e){if(e==="latest"||tOt.default.valid(e)!=null)return!0;try{return EH(e),!0}catch{return!1}}async function uwi({generatorId:e,currentVersion:t,includeMajor:r,channel:n,organization:i,getToken:o,context:s}){if(n!=null)throw new Error(`SDK Gen API generator version discovery does not support the requested upgrade channel "${n}". Remove --channel to use executable index versions, or disable FERN_USE_SDK_GEN_API to use FDR channel metadata.`);let a=Hgi();if(a==null)throw new Error("FERN_SDK_GEN_API_ORIGIN is required when FERN_USE_SDK_GEN_API=true");let c=Vk(e);if(c==null)return s.logger.error(`SDK Gen API cannot discover versions for unsupported generator ${e}. Use a canonical first-party SDK generator name or disable FERN_USE_SDK_GEN_API.`),{};let u=await o(),l=new URL("v1/fern/generator-versions/discover",`${a.replace(/\/+$/,"")}/`),p;try{p=await fetch(l,{method:"POST",headers:{Authorization:`Bearer ${u.value}`,"X-Fern-Organization-Id":i,"content-type":"application/json"},body:JSON.stringify({targets:[{targetId:"generator",generatorId:e,language:c,currentVersion:t,includeMajor:r}]})})}catch(m){throw new Error(`SDK Gen API version discovery failed for ${e}@${t} because the API could not be reached. Verify FERN_SDK_GEN_API_ORIGIN and the selected environment.`,{cause:m})}if(!p.ok)throw new Error(`SDK Gen API version discovery failed for ${e}@${t} with HTTP ${p.status}. Verify FERN_SDK_GEN_API_ORIGIN and the selected environment.`);let d=await p.json(),f=yAA(d);return f.state==="UNAVAILABLE"?(s.logger.error(`SDK Gen API cannot resolve an executable version for ${e}@${t} (${f.reason}). Publish the coordinate to this environment or choose a supported generator version.`),{}):{compatibleVersion:f.compatibleVersion,withheldMajorVersion:f.withheldMajorVersion}}function yAA(e){if(!Fwp(e,["targets"])||!Array.isArray(e.targets)||e.targets.length!==1)throw new Error("SDK Gen API returned an invalid generator version discovery response");let t=e.targets[0];if(!Nwp(t)||t.targetId!=="generator")throw new Error("SDK Gen API returned an invalid generator version discovery target");if(t.state==="UNAVAILABLE"){if(!Fwp(t,["targetId","state","reason"])||t.reason!=="IDENTITY_UNAVAILABLE"&&t.reason!=="LANGUAGE_MISMATCH"&&t.reason!=="VERSION_UNAVAILABLE")throw new Error("SDK Gen API returned an invalid unavailable generator version result");return{targetId:"generator",state:"UNAVAILABLE",reason:t.reason}}if(t.state!=="RESOLVED")throw new Error("SDK Gen API returned an unknown generator version discovery state");if(!jwp(t,["targetId","state","compatibleVersion","withheldMajorVersion"]))throw new Error("SDK Gen API returned an invalid resolved generator version result");let r=kwp(t,"compatibleVersion"),n=kwp(t,"withheldMajorVersion");if(r==null&&n==null)throw new Error("SDK Gen API returned an empty generator version discovery result");return{targetId:"generator",state:"RESOLVED",...r==null?{}:{compatibleVersion:r},...n==null?{}:{withheldMajorVersion:n}}}function kwp(e,t){if(!Object.hasOwn(e,t))return;let r=e[t];if(typeof r!="string"||tOt.default.valid(r)!==r)throw new S({message:`SDK Gen API returned invalid ${t} ${JSON.stringify(r)}. Expected an exact semantic version such as 1.2.3.`,code:S.Code.VersionError});return r}function Nwp(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function Fwp(e,t){return Nwp(e)&&Object.keys(e).length===t.length&&jwp(e,t)}function jwp(e,t){let r=new Set(t);return Object.keys(e).every(n=>r.has(n))}async function bAA({cliContext:e,project:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let{apiWorkspaces:s}=t,a=EJ()?rOt(e):void 0;if(s.length===1){let u={type:"singleApi",versions:{}};return await Qwp({cliContext:e,apiWorkspaces:s,perGeneratorAction:async(l,p,d,f)=>{u.versions[p]==null&&(u.versions[p]={});let m=wLe(d.name);if(m==null){f.logger.debug(`Skipping unknown generator: ${d.name}`);return}let g=await Mwp({generatorName:d.name,normalizedGeneratorName:m,cliVersion:e.environment.packageVersion,currentGeneratorVersion:d.version,channel:i,includeMajor:o,organization:t.config.organization,getSdkGenApiToken:a,context:f});g!=null&&(u.versions[p][d.name]={previousVersion:d.version,latestVersion:g})},generatorFilter:r,groupFilter:n}),u}let c={type:"multiApi",versions:{}};return await Qwp({cliContext:e,apiWorkspaces:s,perGeneratorAction:async(u,l,p,d)=>{if(u==null)return;c.versions[u]==null&&(c.versions[u]={}),c.versions[u][l]==null&&(c.versions[u][l]={});let f=wLe(p.name);if(f==null){d.logger.debug(`Skipping unknown generator: ${p.name}`);return}let m=await Mwp({generatorName:p.name,normalizedGeneratorName:f,cliVersion:e.environment.packageVersion,currentGeneratorVersion:p.version,channel:i,includeMajor:o,organization:t.config.organization,getSdkGenApiToken:a,context:d});m!=null&&(c.versions[u][l][p.name]={previousVersion:p.version,latestVersion:m})},generatorFilter:r,groupFilter:n}),c}async function Qwp({cliContext:e,apiWorkspaces:t,perGeneratorAction:r,generatorFilter:n,groupFilter:i}){await Promise.all(t.map(async o=>{await e.runTaskForWorkspace(o,async s=>{let a=await c3({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?qg(n):void 0;for(let u of a.groups)if(!(i!=null&&u.groupName!==i))for(let l of u.generators)c!=null&&l.name!==c||await r(o.workspaceName,u.groupName,l,s)})}))}function zwp(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c=cwi({generatorId:s,candidateVersion:a.latestVersion,currentVersion:a.previousVersion})===1;r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function Mwp({generatorName:e,normalizedGeneratorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,organization:s,getSdkGenApiToken:a,context:c}){if(EJ()){if(a==null)throw new Error("SDK Gen API generator version discovery requires authentication");return(await uwi({generatorId:qg(e),currentVersion:n,includeMajor:o??!1,channel:i,organization:s,getToken:a,context:c})).compatibleVersion}return LP({generatorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,context:c})}async function lwi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await bAA({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...zwp(u,c,t.logger));else s.push(...zwp(a.versions,void 0,t.logger))}return s}Ft();$Tr();async function tAe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await PQe(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new S({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:S.Code.NetworkError})}}var Lwp=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],pwi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Hn.Info;isLocal;stdoutRedirector=new awi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await p8t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new F4t(t,r),this.isLocal=n??!1,this.posthogManager=i;let o=this.getPackageName(),s=this.getPackageVersion(),a=this.getCliName();(o==null||s==null||a==null)&&this.exitProgram(),this.environment={packageName:o,packageVersion:s,cliName:a},this.sentryClient=new swi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new nwi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.139.3"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${fe.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new Xc}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof Xc)&&(y4t({message:t,error:r,logger:this.logger}),iwi(this,r,{...n,message:t}))}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}get isTTY(){return this.ttyAwareLogger.isTTY}writeJsonToStdout(t){this.writeTextToStdout(JSON.stringify(t,null,2)+`
5021
5021
  `)}writeTextToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(t),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish();try{await this.posthogManager.flush()}catch{}await this.sentryClient.flush(),await this.automationTelemetryManager.flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable(),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await Dwp({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
5022
5022
  `)||(r+=`
5023
5023
  `),this.stderr.info(r))}catch{}}async exitIfFailed(){this.didSucceed||await this.exit()}exitProgram({code:t}={}){process.exit(t??(this.didSucceed?0:1))}longestWorkspaceName;registerWorkspaces(t){let r=oQi(t.map(n=>n.type==="docs"?"docs":n.workspaceName??"api"),n=>n.length);r!=null&&(this.longestWorkspaceName=r)}project;registerProject(t){this.project=t,this.automationTelemetryManager.setOrganization(t.config.organization)}runTask(t){return this.runTaskWithInit(this.constructTaskInit(),t)}addTask(){return this.addTaskWithInit(this.constructTaskInit())}async runTaskForWorkspace(t,r){await this.runTaskWithInit(this.constructTaskInitForWorkspace(t),r)}addTaskWithInit(t){let r=new aer(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw n.failWithoutThrowing(void 0,o),new Xc}finally{n.finish()}return i}instrumentPostHogEvent(t){this.isLocal||this.posthogManager.sendEvent(t)}instrumentPostHogAutomationEvent(t){this.isLocal||this.posthogManager.sendAutomationEvent(t)}captureException(t,r){return this.sentryClient.captureException(t,r)}emitAutomationTelemetryEvent(t,r){this.automationTelemetryManager.emit(t,r)}logger=jv((t,...r)=>this.log(t,...r));stderr=jv((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=Vwp(r),i=1+(this.longestWorkspaceName!=null?Vwp(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=Lwp[this.numTasks++%Lwp.length],a=fe.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:fe.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===df.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{this.instrumentPostHogEvent(t)},shouldBufferLogs:!1,captureException:(t,r)=>this.sentryClient.captureException(t,r),emitAutomationTelemetryEvent:(t,r)=>this.emitAutomationTelemetryEvent(t,r)}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>Ow.indexOf(i.level)>=Ow.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===Hn.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await tAe({cliEnvironment:this.environment,includePreReleases:t}),n=rS(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await lwi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){return this.selectPrompt({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r})}async selectPrompt({message:t,choices:r,default:n}){try{return await x4s({message:t,choices:r,default:n,theme:{prefix:fe.yellow("?"),style:{answer:i=>fe.cyan(i),message:i=>fe.bold(i),highlight:i=>fe.cyan(i)}}})}catch(i){throw i?.name==="ExitPromptError"?(this.logger.info(`
@@ -5045,7 +5045,7 @@ The generator configuration must be an object with either a 'name' property or a
5045
5045
  Please check your generators.yml file and ensure the generator is properly configured.`,code:S.Code.InternalError});let s=i,a=await Ywp({generatorName:t,logger:o});if(a==null)return;let c=TAA({migrations:a.migrations,from:r,to:n,logger:o});if(c.length!==0)return Xwp({migrations:c,config:s,logger:o})}var PAA="https://buildwithfern.com/learn/sdks/generators";function Zwp(e){let t=e.match(/^fernapi\/fern-([a-z]+)/);if(t?.[1])return`${PAA}/${t[1]}/changelog`}async function O4s({absolutePathToWorkspace:e,context:t,generatorFilter:r,groupFilter:n,includeMajor:i,skipAutoreleaseDisabled:o,channel:s,cliVersion:a,organization:c,getSdkGenApiToken:u}){let l=await Dee({absolutePathToWorkspace:e});if(l==null||!await Jt(l))return t.logger.debug("Generators configuration file was not found, no generators to upgrade."),{updatedConfiguration:void 0,skippedMajorUpgrades:[],appliedUpgrades:[],alreadyUpToDate:[],staleCandidates:[],skippedAutoreleaseDisabled:[]};let p=await(0,mwi.readFile)(l);t.logger.debug(`Found generators: ${p.toString()}`);let d=vGe.default.parseDocument(p.toString()),f=d.get("groups");if(f==null)return t.logger.debug("No groups were found within the generators configuration, no generators to upgrade."),{updatedConfiguration:void 0,skippedMajorUpgrades:[],appliedUpgrades:[],alreadyUpToDate:[],staleCandidates:[],skippedAutoreleaseDisabled:[]};if(!vGe.default.isMap(f))return t.failAndThrow(`Expected 'groups' to be a map in ${cer.default.relative(process.cwd(),l)}`,void 0,{code:S.Code.ParseError}),{updatedConfiguration:void 0,skippedMajorUpgrades:[],appliedUpgrades:[],alreadyUpToDate:[],staleCandidates:[],skippedAutoreleaseDisabled:[]};t.logger.debug(`Groups found: ${f.toString()}`);let m=[],g=[],A=[],y=[],E=[];for(let x of f.items){let v=x.key.value,C=x.value;if(!vGe.default.isMap(C)){t.failAndThrow(`Expected group ${v} to be a map in ${cer.default.relative(process.cwd(),l)}`,void 0,{code:S.Code.ConfigError});continue}if(n!=null&&n!==v){t.logger.debug(`Skipping group ${v} as it does not match the filter: ${n}`);continue}let O=C.get("generators");if(!vGe.default.isSeq(O)){t.failAndThrow(`Expected group ${v} to have a 'generators' key in ${cer.default.relative(process.cwd(),l)}`,void 0,{code:S.Code.ConfigError});continue}t.logger.debug(`Generators found: ${O.toString()}`);for(let D of O.items){if(vGe.default.isMap(D)||t.failAndThrow(`Expected generator in group ${v} to be a map in ${cer.default.relative(process.cwd(),l)}`,void 0,{code:S.Code.VersionError}),D.get("image")!=null){let De=D.get("image"),se=vGe.default.isMap(De)?De.get("name"):"unknown";t.logger.warn(`Skipping custom image generator "${se}" in group ${v}: generators using a custom image cannot be auto-upgraded.`);continue}let R=D.get("name"),P=wLe(R);if(P==null){t.logger.warn(`Skipping unrecognized generator: ${R}. The generator will not be upgraded.`);continue}let M=r!=null?qg(r):void 0;if(M!=null&&P!==M){t.logger.debug(`Skipping generator ${R} as it does not match the filter: ${r}`);continue}if(o&&D.get("autorelease")===!1){let De=D.get("version");t.logger.debug(`Skipping generator ${R} (autorelease disabled, version ${De})`),E.push({generatorName:R,groupName:v,version:De});continue}let J=D.get("version"),X=EJ();if(X&&u==null)throw new Error("SDK Gen API generator version discovery requires authentication");let $;X&&u!=null&&($=await uwi({generatorId:qg(R),currentVersion:J,includeMajor:i,channel:s,organization:c,getToken:u,context:t}));let ie=X?$?.compatibleVersion:await LP({generatorName:P,cliVersion:a,currentGeneratorVersion:J,channel:s,includeMajor:i,context:t}),ue=ie==null?void 0:cwi({generatorId:P,candidateVersion:ie,currentVersion:J}),oe=ue===1,de=ue===-1,we=oe&&ie!=null?ie:J;if(ie!=null)if(oe){t.logger.debug(fe.green(`Upgrading ${R} from ${J} to ${ie}`)),D.set("version",ie);let De=0,se=[],ae=D.toJSON(),Oe=await S4s({generatorName:P,from:J,to:ie,config:ae,logger:t.logger});if(Oe!=null){De=Oe.migrationsApplied,se=Oe.appliedVersions;let Ie=new Set(Object.keys(ae)),Fe=new Set(Object.keys(Oe.config));for(let Ke of Ie)Fe.has(Ke)||D.delete(Ke);for(let[Ke,ot]of Object.entries(Oe.config))D.set(Ke,ot);t.logger.debug(fe.dim(`Applied ${De} migration(s): ${se.join(", ")}`))}g.push({generatorName:R,groupName:v,previousVersion:J,newVersion:ie,migrationsApplied:De>0?De:void 0,migrationVersions:se.length>0?se:void 0})}else if(de){let De=X?"SDK Gen API":"FDR";y.push({generatorName:R,groupName:v,currentVersion:J,candidateVersion:ie,backend:De}),t.logger.warn(`Ignoring stale ${De} candidate ${ie} for ${R}; the configured version ${J} is newer.`)}else t.logger.debug(fe.gray(`${R} is already on the latest version: ${J}`)),A.push({generatorName:R,groupName:v,version:J});if(!i){let De=X?$?.withheldMajorVersion:await LP({generatorName:P,cliVersion:a,currentGeneratorVersion:we,channel:s,includeMajor:!0,context:t});if(De!=null){let se=T4s.default.parse(we),ae=T4s.default.parse(De);se!=null&&ae!=null&&ae.major>se.major&&m.push({generatorName:R,currentVersion:we,latestMajorVersion:De})}}}}return{updatedConfiguration:d.toString(),skippedMajorUpgrades:m,appliedUpgrades:g,alreadyUpToDate:A,staleCandidates:y,skippedAutoreleaseDisabled:E}}async function $wp({cliContext:e,generator:t,group:r,project:n,includeMajor:i,skipAutoreleaseDisabled:o,channel:s}){let{apiWorkspaces:a}=n,c=EJ()?rOt(e):void 0,u=[],l=[],p=[],d=[],f=[];if(await Promise.all(a.map(async m=>{await e.runTaskForWorkspace(m,async g=>{let A=await Qrt({absolutePathToWorkspace:m.absoluteFilePath,context:g})??{};if(A==null||A.groups==null){g.logger.debug("No groups were found within the generators configuration, no generators to upgrade.");return}m.workspaceName==null?g.logger.info("Upgrading generators."):g.logger.info(`Upgrading generators in workspace: ${m.workspaceName}.`);let y=await O4s({absolutePathToWorkspace:m.absoluteFilePath,context:g,generatorFilter:t,groupFilter:r,includeMajor:i,skipAutoreleaseDisabled:o,channel:s,cliVersion:e.environment.packageVersion,organization:n.config.organization,getSdkGenApiToken:c}),E=await Dee({absolutePathToWorkspace:m.absoluteFilePath});E!=null&&y.updatedConfiguration!=null&&await(0,mwi.writeFile)(E,y.updatedConfiguration),u.push(...y.skippedMajorUpgrades),y.appliedUpgrades.length>0&&l.push({workspace:m.workspaceName,upgrades:y.appliedUpgrades}),y.alreadyUpToDate.length>0&&p.push({workspace:m.workspaceName,upToDate:y.alreadyUpToDate}),y.staleCandidates.length>0&&d.push({workspace:m.workspaceName,stale:y.staleCandidates}),y.skippedAutoreleaseDisabled.length>0&&f.push({workspace:m.workspaceName,skipped:y.skippedAutoreleaseDisabled})})})),l.length>0){e.logger.info(""),e.logger.info(fe.green("Successfully upgraded generators:"));for(let{workspace:m,upgrades:g}of l){let A=new Map;for(let y of g){let E=A.get(y.groupName)??[];E.push(y),A.set(y.groupName,E)}for(let[y,E]of A){let x=m!=null?`[${m}] `:"";e.logger.info(fe.green(`${x}Group ${y}:`));for(let v of E){e.logger.info(fe.green(` - ${v.generatorName}: ${fe.dim(v.previousVersion)} \u2192 ${v.newVersion}`)),v.migrationsApplied!=null&&v.migrationsApplied>0&&e.logger.info(fe.dim(` Applied ${v.migrationsApplied} migration(s): ${v.migrationVersions?.join(", ")??""}`));let C=Zwp(qg(v.generatorName));C!=null&&e.logger.info(fe.dim(` Changelog: ${C}`))}}}}if(p.length>0){e.logger.info(""),e.logger.info(fe.dim("Generators already on latest version:"));for(let{workspace:m,upToDate:g}of p){let A=new Map;for(let y of g){let E=A.get(y.groupName)??[];E.push(y),A.set(y.groupName,E)}for(let[y,E]of A){let x=m!=null?`[${m}] `:"";e.logger.info(fe.dim(`${x}Group ${y}:`));for(let v of E)e.logger.info(fe.dim(` - ${v.generatorName}: ${v.version} (latest)`))}}}if(d.length>0){e.logger.info(""),e.logger.info(fe.yellow("Ignored stale generator candidates:"));for(let{workspace:m,stale:g}of d){let A=m!=null?`[${m}] `:"";for(let y of g)e.logger.info(fe.yellow(` - ${A}${y.generatorName}: ${y.candidateVersion} from ${y.backend} (configured: ${y.currentVersion})`))}}if(l.length===0&&p.length===0&&d.length===0){let m=r!=null?` for group ${r}`:t!=null?` for generator ${t}`:"";e.logger.info(""),e.logger.info(fe.gray(`No generators found${m}.`))}if(f.length>0){e.logger.info(""),e.logger.info(fe.dim("Skipped generators with autorelease disabled:"));for(let{workspace:m,skipped:g}of f){let A=new Map;for(let y of g){let E=A.get(y.groupName)??[];E.push(y),A.set(y.groupName,E)}for(let[y,E]of A){let x=m!=null?`[${m}] `:"";e.logger.info(fe.dim(`${x}Group ${y}:`));for(let v of E)e.logger.info(fe.dim(` - ${v.generatorName}: ${v.version} (autorelease disabled)`))}}}if(u.length>0){e.logger.info(""),e.logger.info(fe.yellow("Major version upgrades available:"));for(let m of u){e.logger.info(fe.yellow(` - ${m.generatorName}: ${m.currentVersion} \u2192 ${m.latestMajorVersion}`));let g=t!=null?`fern generator upgrade --generator ${m.generatorName} --include-major`:"fern generator upgrade --include-major";e.logger.info(fe.yellow(` Run: ${g}`));let A=Zwp(qg(m.generatorName));A!=null&&e.logger.info(fe.yellow(` Changelog: ${A}`))}}}function eSp(e,t){let r=Utt(e);return r!==e&&t.logger.warn(`"${e}" is not a valid generator name. Using "${r}" instead \u2014 the Docker org is "fernapi", not "${xLe}".`),r}function nSp(e,t){e.command("organization",!1,r=>r.option("output",{string:!0,alias:"o",description:"The location to output the organization name as a text file, defaults to standard out."}),async r=>{t.instrumentPostHogEvent({command:"fern organization",properties:{outputLocation:r.output}}),await Hwp({project:await La(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),context:t,outputLocation:r.output})})}function iSp(e,t){e.command("generator","Operate on the generators within your Fern configuration",r=>{r.command("list",!1,n=>n.option("output",{string:!0,alias:"o",description:"The location to output the list as a text file, defaults to standard out."}).option("generators",{string:!0,type:"array",description:"The type of generator to include in the list, ex: `fern-typescript-node-sdk`. If omitted, all generators will be listed."}).option("groups",{type:"array",string:!0,description:"The groups to include generators from, if group is not specified, the all generators of the specified type will be listed."}).option("apis",{type:"array",string:!0,description:"The APIs to list the generators for. If not specified, the generator will be upgraded for all APIs."}).option("api-fallback",{string:!0,description:"The APIs to list the generators for. If not specified, the generator will be upgraded for all APIs."}).option("include-mode",{choices:Object.values(nOt),type:"array",description:"The generator output modes to include within the outputted list."}).option("exclude-mode",{choices:Object.values(nOt),type:"array",description:"The generator output modes to exclude within the outputted list."}),async n=>{t.instrumentPostHogEvent({command:"fern generator list",properties:{outputLocation:n.output}}),await Gwp({project:await La(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),generatorFilter:n.generators?new Set(n.generators):void 0,groupFilter:n.groups?new Set(n.groups):void 0,apiFilter:n.apis?new Set(n.apis):void 0,apiKeyFallback:n.apiFallback,cliContext:t,outputLocation:n.output,includedModes:n["include-mode"]?new Set(n["include-mode"]):void 0,excludedModes:n["exclude-mode"]?new Set(n["exclude-mode"]):void 0})}).command("upgrade",`Upgrades the specified generator in ${lp} to the latest stable version.`,n=>n.option("generator",{string:!0,description:"The type of generator to upgrade, ex: `fern-typescript-node-sdk`."}).option("group",{string:!0,description:"The group in which the generator is located, if group is not specified, the all generators of the specified type will be upgraded."}).option("api",{string:!0,description:"The API to upgrade the generator for. If not specified, the generator will be upgraded for all APIs."}).option("yes",{alias:"y",boolean:!0,default:!1,description:"Automatically answer yes to any prompts that may appear during the upgrade process."}).option("include-major",{boolean:!0,default:!1,description:"Whether or not to include major versions within the upgrade. Defaults to false, meaning major versions will be skipped."}).option("channel",{demandOption:!1,choices:Object.values(tSp.FernRegistry.generators.ReleaseType)}).option("list",{demandOption:!1,boolean:!0,default:!1,description:"When specified, a list of available upgrades will be displayed, but no upgrade will be taken."}).option("skip-autorelease-disabled",{boolean:!0,default:!1,hidden:!0,description:"Skip upgrading generators that have autorelease: false set in their configuration."}),async n=>{t.instrumentPostHogEvent({command:"fern generator upgrade",properties:{generator:n.generator,version:n.version,api:n.api,group:n.group,includeMajor:n.includeMajor,rc:n.rc}});let i=n.generator!=null?eSp(n.generator,t):void 0,o=await La(t,{commandLineApiWorkspace:n.api,defaultToAllApiWorkspaces:!0});if(n.list){t.suppressUpgradeMessage();let s=await lwi({cliContext:t,project:o,generatorFilter:i,groupFilter:n.group,includeMajor:n.includeMajor,channel:n.channel}),a=await w4s({generatorUpgradeInfo:s,header:`Generator Upgrades
5046
5046
  `,includeBoxen:!0});a!=null&&t.logger.info(a)}else await $wp({cliContext:t,generator:i,group:n.group,project:await La(t,{commandLineApiWorkspace:n.api,defaultToAllApiWorkspaces:!0}),includeMajor:n.includeMajor,skipAutoreleaseDisabled:n.skipAutoreleaseDisabled,channel:n.channel})}).command("get",!1,n=>n.option("output",{string:!0,alias:"o",description:"The location to output the list as a text file, defaults to standard out."}).option("generator",{string:!0,demandOption:!0,description:"The name of the generator to get, ex: `fern-typescript-node-sdk`."}).option("group",{string:!0,demandOption:!0,description:"The group in which the generator is located."}).option("api",{string:!0,description:"The API in which the generator is located."}).option("version",{boolean:!0,default:!1,description:"Get the version of the specified generator."}).option("language",{boolean:!0,default:!1,description:"Get the language of the specified generator."}).option("repository",{boolean:!0,default:!1,description:"Get repository for the generator invocation, if one is specified."}),async n=>{let i=eSp(n.generator,t);t.instrumentPostHogEvent({command:"fern generator get",properties:{generator:i,version:n.version,api:n.api,group:n.group,includeMajor:n.includeMajor}});let o=await qwp({cliContext:t,generatorFilter:i,groupFilter:n.group,apiFilter:n.api,project:await La(t,{commandLineApiWorkspace:n.api,defaultToAllApiWorkspaces:!0})});if(o==null){let a=n.api?` for API ${n.api}`:"";t.failAndThrow(`Generator ${n.generator}, in group ${n.group}${a} was not found.`,void 0,{code:S.Code.ConfigError})}let s={};if(n.version&&(s.version=o.version,n.output==null)){process.stdout.write(o.version);return}if(n.language)if(o.language!=null){if(s.language=o.language,n.output==null){process.stdout.write(o.language);return}}else t.logger.warn(`Language information is not available for generator ${o.name} in group ${n.group}`);if(n.repository){let a=o.outputMode.type==="github"?o.outputMode.repo:o.outputMode.type==="githubV2"?o.outputMode.githubV2.repo:void 0;if(a!=null){if(s.repository=a,n.output==null){process.stdout.write(s.repository);return}}else t.logger.warn(`Repository information is not available for generator ${o.name} in group ${n.group}`)}if(n.output)try{await(0,rSp.writeFile)(n.output,JSON.stringify(s,null,2))}catch(a){t.failAndThrow(`Could not write file to the specified location: ${n.output}`,a,{code:S.Code.ConfigError})}})})}ro();In();var oSp=require("fs/promises");Wo();async function sSp({project:{apiWorkspaces:e},generatorName:t,groupName:r,cliContext:n}){await Promise.all(e.map(async i=>{await n.runTaskForWorkspace(i,async o=>{let s=await Qrt({absolutePathToWorkspace:i.absoluteFilePath,context:o})??{},a=await _xo({generatorName:t,generatorsConfiguration:s,groupName:r,context:o,cliVersion:n.environment.packageVersion}),c=i.generatorsConfiguration?.absolutePathToConfiguration??await Dee({absolutePathToWorkspace:i.absoluteFilePath});c!=null&&(await(0,oSp.writeFile)(c,`# yaml-language-server: $schema=https://schema.buildwithfern.dev/generators-yml.json
5047
5047
  `+Ir.dump(a)),o.logger.info(fe.green(`Added ${t} generator`)))})}))}kfe();Ft();function hwi(e){if(e==null)return{generatorName:void 0,generatorIndex:void 0};let t=e.length>0?Number(e):Number.NaN;return!Number.isNaN(t)&&Number.isInteger(t)&&t>=0?{generatorName:void 0,generatorIndex:t}:{generatorName:e,generatorIndex:void 0}}function gwi({generators:e,generatorIndex:t,generatorName:r,groupName:n}){if(t!=null){let i=e[t];return i==null?{ok:!1,error:`Generator index ${t} is out of bounds in group '${n}' (${e.length} generators available)`}:{ok:!0,generators:[i]}}if(r!=null){let i=e.filter(o=>o.name===r);if(i.length===0){let o=e.map(s=>s.name);return{ok:!1,error:`Generator '${r}' not found in group '${n}'. Available generators: ${o.join(", ")}`}}return{ok:!0,generators:i}}return{ok:!0,generators:e}}Yt();Ft();var uer="group";var aSp=".preview",cSp="approved-output-directories",uSp=".fern";Yt();var hSp=require("fs/promises");Yt();var pSp=require("fs/promises");Yt();var lSp=require("os");function ler(){return ze(Mt.of((0,lSp.homedir)()),ve.of(uSp),ve.of(cSp))}async function fSp(){let e=ler();if(!await Jt(e))return[];let r=await(0,pSp.readFile)(e,{encoding:"utf-8"});return JSON.parse(r)}var Awi=require("fs/promises"),dSp=be(require("path"),1);async function mSp(e){await(0,Awi.mkdir)(dSp.default.dirname(ler()),{recursive:!0}),await(0,Awi.writeFile)(ler(),JSON.stringify(e,null,2))}async function gSp(e,t,r){if(!e||alr()||r)return{shouldProceed:!0};let n=await fSp();return n?.includes(e)?{shouldProceed:!0}:await Jt(e)?(await(0,hSp.readdir)(e)).length===0?{shouldProceed:!0}:await t.confirmPrompt(`Directory ${e} contains existing files that may be overwritten. Continue?`,!1)?(await mSp([...n??[],e]),{shouldProceed:!0}):{shouldProceed:!1}:{shouldProceed:!0}}var iOt=require("fs/promises"),bSp=require("os"),xGe=be(require("path"),1);Pc();ro();Yt();qd();Ft();k_();function ywi(e){let t=new Map;for(let n of e)t.set(n.language,(t.get(n.language)??0)+1);let r=new Map;return e.map(n=>{if(t.get(n.language)===1)return;let i=r.get(n.language)??0;return r.set(n.language,i+1),i})}var BAA={typescript:"fernapi/fern-typescript-sdk",python:"fernapi/fern-python-sdk",java:"fernapi/fern-java-sdk",kotlin:"fernapi/fern-kotlin-sdk",go:"fernapi/fern-go-sdk",csharp:"fernapi/fern-csharp-sdk",php:"fernapi/fern-php-sdk",ruby:"fernapi/fern-ruby-sdk-v2",rust:"fernapi/fern-rust-sdk",swift:"fernapi/fern-swift-sdk",cli:"fernapi/fern-cli-generator",mcp:"fernapi/fern-mcp-server"};function bwi(e){return BAA[e]}var ASp="sdk-config",DAA="generated";async function ESp({sdkConfig:e,absolutePathToConfig:t,cliVersion:r,context:n}){let i=xGe.default.dirname(t),o=[],s=async()=>{await Promise.all(o.splice(0).map(a=>(0,iOt.rm)(a,{recursive:!0,force:!0})))};try{let a=[];for(let d of e.source.specs)a.push(await kAA({spec:d,sdkConfig:e,configDirectory:i,context:n,temporaryDirectories:o}));let c=ywi(e.targets),u={groupName:ASp,audiences:e.api.audiences==null?{type:"all"}:{type:"select",audiences:e.api.audiences},generators:e.targets.map((d,f)=>{let m=bwi(d.language);return m==null?n.failAndThrow(`SDK Config target language '${d.language}' is not supported by the Fern remote generation bridge`,void 0,{code:S.Code.ConfigError}):RAA({name:m,version:F0s(d.generatorVersion),language:d.language,output:d.output??e.output,configDirectory:i,sdkConfigTargetIndex:f,duplicateTargetLanguageIndex:c[f]})}),reviewers:void 0},l={api:void 0,defaultGroup:ASp,groupAliases:{},reviewers:void 0,groups:[u],whitelabel:void 0,ai:void 0,replay:void 0,rawConfiguration:{},absolutePathToConfiguration:Mt.of(t)},p=new Pl({allSpecs:a,specs:a.filter(d=>d.type==="openapi"),generatorsConfiguration:l,workspaceName:void 0,cliVersion:r,absoluteFilePath:Mt.of(i)});return await p.processGraphQLSpecs(n),{workspace:p,cleanup:s}}catch(a){throw await s(),a}}function RAA({name:e,version:t,language:r,output:n,configDirectory:i,sdkConfigTargetIndex:o,duplicateTargetLanguageIndex:s}){return{name:e,sdkConfigTargetIndex:o,version:t,config:{},outputMode:Hr.remoteGen.OutputMode.downloadFiles({}),automation:{generate:!0,preview:!0,upgrade:!0,verify:!0},containerImage:void 0,irVersionOverride:void 0,absolutePathToLocalOutput:n?.delivery==="files"?Mt.of(xGe.default.resolve(i,n.path??`${DAA}/${r}${s==null?"":`-${s}`}`)):void 0,absolutePathToLocalSnippets:void 0,keywords:void 0,smartCasing:!1,smartCasingDigitWordBoundary:!1,disableExamples:!1,language:jAA(r)?r:void 0,publishMetadata:void 0,readme:void 0,settings:void 0}}async function kAA({spec:e,sdkConfig:t,configDirectory:r,context:n,temporaryDirectories:i}){if((e.overlays?.length??0)>1)return n.failAndThrow(`SDK Config source '${e.id}' declares multiple overlays, which the Fern source loader does not yet support`,void 0,{code:S.Code.ConfigError});let o=await FAA(e,r,n,i),s=e.overrides?.map(u=>ySp(u,r));if(e.type==="graphql")return{type:"graphql",absoluteFilepath:o,absoluteFilepathToOverrides:s,absoluteFilepathToExamples:void 0,namespace:e.namespace};let c={...t.source.apiImportSettings??{},...e.apiImportSettings};return{type:"openapi",absoluteFilepath:o,absoluteFilepathToOverrides:s,absoluteFilepathToOverlays:e.overlays?.[0]==null?void 0:ySp(e.overlays[0],r),namespace:e.namespace,settings:F0({overrides:{...c,useTitlesAsName:c.titleAsSchemaName,shouldUseIdiomaticRequestNames:c.idiomaticRequestNames,shouldUseUndiscriminatedUnionsWithLiterals:c.undiscriminatedUnionsWithLiterals,asyncApiNaming:c.asyncApiMessageNaming}}),source:{type:e.type==="asyncapi"?"asyncapi":"openapi",file:o}}}async function FAA(e,t,r,n){if("path"in e)return Mt.of(xGe.default.resolve(t,e.path));if(e.type!=="openapi")return r.failAndThrow(`SDK Config ${e.type} URL source '${e.id}' is not supported by the Fern CLI yet. Download ${e.url} into your project and use a path source instead.`,void 0,{code:S.Code.ConfigError});let i;try{i=await nQo(e.url)}catch(a){return r.failAndThrow(`Could not resolve SDK Config OpenAPI source '${e.id}' from ${e.url}`,a,{code:S.Code.NetworkError})}let o=await(0,iOt.mkdtemp)(xGe.default.join((0,bSp.tmpdir)(),"fern-sdk-config-source-"));n.push(o);let s=xGe.default.join(o,`${NAA(e.id)}.json`);return await(0,iOt.writeFile)(s,`${JSON.stringify(i)}
5048
- `),Mt.of(s)}function ySp(e,t){return Mt.of(xGe.default.resolve(t,e))}function NAA(e){return e.replace(/[^a-zA-Z0-9._-]/g,"-")}function jAA(e){return Object.values(wn.GenerationLanguage).some(t=>t===e)}function ISp(e,t){if(e==null||e.length===0)return null;let r=[];for(let n of e){let i=t?.groupAliases[n];for(let o of i??[n])r.includes(o)||r.push(o)}return r}ro();Yt();Ft();k_();lo();function Iwi({fernWorkspace:e,group:t,source:r,clientPathParameterStyle:n,sourceDerivedApiFields:i}){let o=UAA(e.definition,i),s={apiName:e.definition.rootApiFile.contents.name,source:r,api:o.api,group:{name:t.groupName,audiences:t.audiences,generators:t.generators.map(HAA)}},a=OXl(s),c=n==null||a.sdkConfig.client?.pathParameterStyle!=null?a.sdkConfig:{...a.sdkConfig,client:{...a.sdkConfig.client??{},pathParameterStyle:n}},u=Vwt(c),l=t.generators.map((p,d)=>zAA(p.outputMode,d));return{diagnostics:[...o.diagnostics,...a.unsupportedFields.filter(p=>!VAA(p)),...l.flatMap(p=>p.diagnostics)],sdkConfig:{...u,targets:u.targets.map((p,d)=>{let f=l[d]?.credentials;if(p.output?.publish==null)return p;let m=QAA(p.output.publish);return{...p,output:{...p.output,publish:{...m,...f}}}})}}}function QAA(e){let{credentials:t,token:r,username:n,password:i,signature:o,...s}=e;return s}function zAA(e,t){if(!XJ(e))return{diagnostics:[]};let r=MAA(e);if(r==null)return{diagnostics:[]};let n=[],i=LAA(r.registry,r.value,n,t);return{...Object.keys(i).length===0?{}:{credentials:i},diagnostics:n}}function MAA(e){if(e.type==="publishV2"&&XJ(e.publishV2)){let t=e.publishV2;switch(t.type){case"npmOverride":return XJ(t.npmOverride)?{registry:"npm",value:t.npmOverride}:void 0;case"pypiOverride":return XJ(t.pypiOverride)?{registry:"pypi",value:t.pypiOverride}:void 0;case"mavenOverride":return XJ(t.mavenOverride)?{registry:"maven",value:t.mavenOverride}:void 0;case"cratesOverride":return XJ(t.cratesOverride)?{registry:"crates",value:t.cratesOverride}:void 0}}if(e.type==="publish"&&XJ(e.registryOverrides)){if(XJ(e.registryOverrides.npm))return{registry:"npm",value:e.registryOverrides.npm};if(XJ(e.registryOverrides.maven))return{registry:"maven",value:e.registryOverrides.maven}}}function LAA(e,t,r,n){if(e==="npm"||e==="crates"){let l=P4s(e,"token",t.token,r,n);return l==null?{}:{token:l}}let i=P4s(e,"username",t.username,r,n),o=P4s(e,"password",t.password,r,n),s={...i==null?{}:{username:i},...o==null?{}:{password:o}};if(e!=="maven"||t.signature==null)return s;if(!XJ(t.signature))return r.push(B4s(e,"signature",n)),s;let a=t.signature,c=["keyId","password","secretKey"],u=Object.fromEntries(c.flatMap(l=>{let p=xSp(a[l]);return p==null?[]:[[l,p]]}));return Object.keys(u).length!==c.length?(r.push(B4s(e,"signature",n)),s):{...s,signature:u}}function P4s(e,t,r,n,i){if(r==null||typeof r=="string"&&r.trim().length===0)return;let o=xSp(r);if(o!=null)return o;n.push(B4s(e,t,i))}function xSp(e){return typeof e=="string"&&/^\$\{\w+\}$/.test(e)?e:void 0}function B4s(e,t,r){return{code:"FERN_PUBLISH_CREDENTIAL_REQUIRES_ENVIRONMENT_VARIABLE",severity:"warning",path:["targets",r.toString(),"output","publish",t],reason:`The ${e} ${t} credential is not an exact environment-variable expression and was omitted to prevent writing a resolved secret.`,sdkConfigPath:["targets",r.toString(),"output","publish",t],suggestedAction:`Configure targets.${r}.output.publish.${t} with an environment variable such as \${REGISTRY_CREDENTIAL}.`}}function VAA(e){let t=e.path.filter(r=>typeof r=="string");return t.includes("output")&&t.includes("publish")&&t.some(r=>["token","username","password","signature","secretKey","keyId","credentials"].includes(r))}function UAA(e,t){let r=e.rootApiFile.contents,n=t?.environments?[]:Object.entries(r.environments??{}).sort(([c],[u])=>c.localeCompare(u)).map(([c,u])=>({name:c,urls:WAA(u),...typeof u=="string"||u.docs==null?{}:{description:u.docs}})),i=new Set((t?.headerNames??[]).map(c=>c.toLowerCase())),o=Object.entries(r.headers??{}).filter(([c])=>!i.has(c.toLowerCase())).map(([c,u])=>typeof u=="string"?{name:c}:{name:u.name??c,...u.env==null?{}:{environmentVariable:u.env},...u.docs==null?{}:{description:u.docs}}),s=t?.auth?{diagnostics:[]}:_AA(r),a=t?.environments?void 0:r["default-url"]??e.rootApiFile.defaultUrl;return{api:{...a==null?{}:{baseUrl:a},...t?.environments||r["default-environment"]==null?{}:{defaultEnvironment:r["default-environment"]},...n.length===0?{}:{environments:n},...o.length===0?{}:{headers:o},...s.auth==null?{}:{auth:s.auth}},diagnostics:s.diagnostics}}function _AA(e){let t=e["auth-schemes"]??{},r=e.auth==null?Object.keys(t).length===0?void 0:{references:Object.keys(t),endpointSecurity:!0,requirements:void 0}:Ile(e.auth,{single:a=>({references:[a],endpointSecurity:void 0,requirements:[{schemes:[Ewi(a)]}]}),any:({any:a})=>({references:a,endpointSecurity:void 0,requirements:a.map(c=>({schemes:[Ewi(c)]}))}),endpointSecurity:()=>({references:Object.keys(t),endpointSecurity:!0,requirements:void 0})});if(r==null)return{diagnostics:[]};let n=r.references.map(a=>({id:Ewi(a),scheme:GAA(a,t)})),i=[...new Set(n.filter(({scheme:a})=>a==null).map(({id:a})=>a))],o=n.flatMap(({scheme:a})=>a==null?[]:[a]);return i.length>0||o.length===0?{diagnostics:[qAA(i)]}:{auth:{schemes:[...new Map(o.map(a=>[a.id,a])).values()],...r.requirements==null?{}:{requirements:r.requirements},...r.endpointSecurity==null?{}:{endpointSecurity:r.endpointSecurity}},diagnostics:[]}}function GAA(e,t){let r=Ewi(e),n=typeof e=="string"?void 0:e.docs;if(r==="bearer"&&t[r]==null)return{id:r,type:"bearer",...n==null?{}:{description:n}};if(r==="basic"&&t[r]==null)return{id:r,type:"basic",...n==null?{}:{description:n}};let i=t[r];if(i==null)return;let o=n??i.docs;return vle(i,{header:s=>({id:r,type:"api-key",location:"header",name:s.header,...s.prefix==null?{}:{prefix:s.prefix},...s.env==null?{}:{environmentVariable:s.env},...o==null?{}:{description:o}}),basic:s=>({id:r,type:"basic",...s.username==null?{}:{username:vSp(s.username)},...s.password==null?{}:{password:vSp(s.password)},...o==null?{}:{description:o}}),tokenBearer:s=>({id:r,type:"bearer",...s.token?.env==null?{}:{environmentVariable:s.token.env},...o==null?{}:{description:o}}),oauth:()=>{},inferredBearer:()=>{}})}function vSp(e){return{...e.name==null?{}:{name:e.name},...e.env==null?{}:{environmentVariable:e.env},...e.omit==null?{}:{omit:e.omit}}}function Ewi(e){return typeof e=="string"?e:e.scheme}function qAA(e){let t=e.length===0?"":` Unsupported or unresolved scheme ids: ${e.join(", ")}.`;return{code:"FERN_API_AUTH_REQUIRES_REVIEW",severity:"warning",path:["api","auth"],reason:`Fern API authentication includes a scheme that cannot be represented safely by this migration command.${t}`,sdkConfigPath:["api","auth"],suggestedAction:"Review the Fern auth schemes and configure api.auth manually in SDK Config v1."}}function WAA(e){return typeof e=="string"?[{name:"default",url:e}]:"url"in e?[{name:"default",url:e.url}]:Object.entries(e.urls).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>({name:t,url:r}))}function HAA(e){return{...e,version:void 0,outputMode:D4s(e.outputMode)}}function D4s(e,t){return t==="coordinate"&&typeof e=="string"?e.split(":").map(r=>r.trim()).join(":"):Array.isArray(e)?e.map(r=>D4s(r,t)):XJ(e)?Object.fromEntries(Object.entries(e).flatMap(([r,n])=>r==="_visit"||KAA(r,n)||r==="downloadSnippets"&&n===!1?[]:[[r,D4s(n,r)]])):e}function KAA(e,t){return["apiKey","password","token","username"].includes(e)&&typeof t=="string"&&t.trim()===""}function XJ(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}qd();function per({workspace:e,context:t,group:r,sdkConfigV1:n}){return async i=>{let o=n==null?r.audiences:n.audiences==null?{type:"all"}:{type:"select",audiences:n.audiences},s=new Map,a=new Map;if(!(e instanceof Pl)){for(let p of i)CSp(p)&&a.set(p.generatorIndex,new Error(`Generator index ${p.generatorIndex} (${p.generatorInvocation.name}) requires a source archive, but workspace type ${e.type} does not expose source specs`));return{sourceArchives:s,errors:a}}let u=(await Promise.allSettled(i.map(async p=>{if(p.sdkGenApiRoute==null)return;let d=await e.getAllSpecsForGenerator(p.generatorInvocation.apiOverride?.specs);return p.sdkGenApiRoute.payloadKind==="sdk-config-v1"&&i6s(d,{clientPathParameterStyle:JAA(p,n)}),d}))).flatMap((p,d)=>{let f=i[d];if(f==null)throw new Error(`Missing source archive request at settled index ${d}`);return p.status==="rejected"?(a.set(f.generatorIndex,p.reason),[]):p.value==null?[]:[{generatorIndex:f.generatorIndex,specs:p.value}]});if(u.length>0){let p=await n6s({generatorSelections:u,context:t,audiences:o});for(let[d,f]of p.errorsByGeneratorIndex)a.set(d,f);if(p.archive!=null){let{specIndexesByGeneratorIndex:d,...f}=p.archive;for(let[m,g]of d)s.set(m,{...f,specIndexes:g})}}let l=i.filter(p=>p.sdkGenApiRoute==null&&QSt(p.generatorInvocation.name,p.generatorInvocation.version)&&!a.has(p.generatorIndex));if(l.length>0)try{let p=await o6s({specs:e.allSpecs,context:t,audiences:o}),d=p.manifest.specs.map((f,m)=>m);for(let f of l)s.set(f.generatorIndex,{...p,specIndexes:d})}catch(p){for(let d of l)a.set(d.generatorIndex,p)}for(let p of i){if(!CSp(p))continue;let d=s.has(p.generatorIndex),f=a.has(p.generatorIndex);if(d&&f)throw new Error(`Generator index ${p.generatorIndex} produced both a source archive and a source preparation error`,{cause:a.get(p.generatorIndex)});!d&&!f&&a.set(p.generatorIndex,new Error(`Generator index ${p.generatorIndex} did not produce a source archive or source preparation error`))}return{sourceArchives:s,errors:a}}}function JAA(e,t){return e.sdkConfigTargetIndex==null?t?.clientPathParameterStyle:t?.targets[e.sdkConfigTargetIndex]?.clientPathParameterStyle??t?.clientPathParameterStyle}function CSp(e){return e.sdkGenApiRoute!=null||QSt(e.generatorInvocation.name,e.generatorInvocation.version)}wt();Yt();Ft();var Cwi=require("fs/promises"),jSp=require("os"),QSp=be(require("path"),1);function vwi(){if(process.env.GITHUB_ACTIONS==="true"){let e=process.env.GITHUB_REPOSITORY,t=process.env.GITHUB_SERVER_URL??"https://github.com",r=process.env.GITHUB_RUN_ID;return{type:"github",repo:e,runId:r,runUrl:e&&r?`${t}/${e}/actions/runs/${r}`:void 0,commitSha:process.env.GITHUB_SHA,branch:process.env.GITHUB_REF_NAME,actor:process.env.GITHUB_ACTOR}}if(process.env.GITLAB_CI==="true")return{type:"gitlab",repo:process.env.CI_PROJECT_PATH,runId:process.env.CI_PIPELINE_ID,runUrl:process.env.CI_PIPELINE_URL,commitSha:process.env.CI_COMMIT_SHA,branch:process.env.CI_COMMIT_REF_NAME,actor:process.env.GITLAB_USER_LOGIN};if(process.env.BITBUCKET_BUILD_NUMBER!=null){let e=process.env.BITBUCKET_WORKSPACE,t=process.env.BITBUCKET_REPO_SLUG,r=process.env.BITBUCKET_BUILD_NUMBER;return{type:"bitbucket",repo:e&&t?`${e}/${t}`:void 0,runId:r,runUrl:e&&t&&r?`https://bitbucket.org/${e}/${t}/pipelines/results/${r}`:void 0,commitSha:process.env.BITBUCKET_COMMIT,branch:process.env.BITBUCKET_BRANCH}}}function xwi(){let e=wSp(process.env.GITHUB_ACTOR??process.env.GITLAB_USER_LOGIN??process.env.CIRCLE_USERNAME??process.env.BUILD_REQUESTEDFOR),t=wSp(process.env.GITLAB_USER_EMAIL??process.env.BUILD_REQUESTEDFOREMAIL);if(!(e==null&&t==null))return{username:e,email:t}}function wSp(e){return e!=null&&e.length>0?e:void 0}function R4s(){return!!(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.GITHUB_ACTIONS||process.env.GITLAB_CI||process.env.CIRCLECI||process.env.TRAVIS||process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.TF_BUILD||process.env.BUILDKITE||process.env.CODEBUILD_BUILD_ID||process.env.TEAMCITY_VERSION||process.env.BITBUCKET_BUILD_NUMBER||process.env.DRONE||process.env.SEMAPHORE||process.env.APPVEYOR||process.env.BUDDY_WORKSPACE_ID||process.env.WERCKER_RUN_ID)}bd();Ft();In();var BSp=require("crypto"),sOt=require("fs/promises"),zFe=be(require("path"),1);var QA=process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com";function jO(e){if(!(e instanceof Error))return String(e);let t=e.cause;return t instanceof Error?t.message:e.message}function _L(e){try{let t=JSON.parse(e),r=t.message??t.error?.message;if(typeof r=="string")return r}catch{}}var YAA=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,SSp=30,TSp=20,oOt=64,XAA=/^[a-zA-Z0-9_-]{1,64}$/,ZAA="mcp",DSp="If this server was deployed before, that deployment is still serving \u2014 nothing changed.";async function RSp({bundleDir:e,organization:t,slug:r,token:n,generatorName:i,generatorVersion:o,cliVersion:s,config:a,git:c,ciSource:u,deployerAuthor:l,context:p}){let d=await nyA(e,p),f=r??ZAA;dyA({orgId:t,slug:f,bundle:d,context:p}),p.logger.info(`Deploying MCP server "${f}" to org "${t}"...`),p.logger.debug(`Registry origin: ${QA}`);for(let A of[...d.modules,...d.inputs])await myA({file:A,orgId:t,token:n,context:p});let m=await gyA({orgId:t,slug:f,bundle:d,token:n,generatorName:i,generatorVersion:o,cliVersion:s,config:a,git:c,ciSource:u,deployerAuthor:l,context:p}),g=m.latestDeployment?.status??"unknown";if(m.activeDeploymentId==null){let A=m.latestDeployment?.error,y=A==null?`deployment status: ${g}`:hyA(A);return p.failAndThrow(`${y}
5048
+ `),Mt.of(s)}function ySp(e,t){return Mt.of(xGe.default.resolve(t,e))}function NAA(e){return e.replace(/[^a-zA-Z0-9._-]/g,"-")}function jAA(e){return Object.values(wn.GenerationLanguage).some(t=>t===e)}function ISp(e,t){if(e==null||e.length===0)return null;let r=[];for(let n of e){let i=t?.groupAliases[n];for(let o of i??[n])r.includes(o)||r.push(o)}return r}ro();Yt();Ft();k_();lo();function Iwi({fernWorkspace:e,group:t,source:r,replay:n,clientPathParameterStyle:i,sourceDerivedApiFields:o}){let s=UAA(e.definition,o),a={apiName:e.definition.rootApiFile.contents.name,source:r,...n==null?{}:{replay:n},api:s.api,group:{name:t.groupName,audiences:t.audiences,generators:t.generators.map(HAA)}},c=OXl(a),u=i==null||c.sdkConfig.client?.pathParameterStyle!=null?c.sdkConfig:{...c.sdkConfig,client:{...c.sdkConfig.client??{},pathParameterStyle:i}},l=Vwt(u),p=t.generators.map((d,f)=>zAA(d.outputMode,f));return{diagnostics:[...s.diagnostics,...c.unsupportedFields.filter(d=>!VAA(d)),...p.flatMap(d=>d.diagnostics)],sdkConfig:{...l,targets:l.targets.map((d,f)=>{let m=p[f]?.credentials;if(d.output?.publish==null)return d;let g=QAA(d.output.publish);return{...d,output:{...d.output,publish:{...g,...m}}}})}}}function QAA(e){let{credentials:t,token:r,username:n,password:i,signature:o,...s}=e;return s}function zAA(e,t){if(!XJ(e))return{diagnostics:[]};let r=MAA(e);if(r==null)return{diagnostics:[]};let n=[],i=LAA(r.registry,r.value,n,t);return{...Object.keys(i).length===0?{}:{credentials:i},diagnostics:n}}function MAA(e){if(e.type==="publishV2"&&XJ(e.publishV2)){let t=e.publishV2;switch(t.type){case"npmOverride":return XJ(t.npmOverride)?{registry:"npm",value:t.npmOverride}:void 0;case"pypiOverride":return XJ(t.pypiOverride)?{registry:"pypi",value:t.pypiOverride}:void 0;case"mavenOverride":return XJ(t.mavenOverride)?{registry:"maven",value:t.mavenOverride}:void 0;case"cratesOverride":return XJ(t.cratesOverride)?{registry:"crates",value:t.cratesOverride}:void 0}}if(e.type==="publish"&&XJ(e.registryOverrides)){if(XJ(e.registryOverrides.npm))return{registry:"npm",value:e.registryOverrides.npm};if(XJ(e.registryOverrides.maven))return{registry:"maven",value:e.registryOverrides.maven}}}function LAA(e,t,r,n){if(e==="npm"||e==="crates"){let l=P4s(e,"token",t.token,r,n);return l==null?{}:{token:l}}let i=P4s(e,"username",t.username,r,n),o=P4s(e,"password",t.password,r,n),s={...i==null?{}:{username:i},...o==null?{}:{password:o}};if(e!=="maven"||t.signature==null)return s;if(!XJ(t.signature))return r.push(B4s(e,"signature",n)),s;let a=t.signature,c=["keyId","password","secretKey"],u=Object.fromEntries(c.flatMap(l=>{let p=xSp(a[l]);return p==null?[]:[[l,p]]}));return Object.keys(u).length!==c.length?(r.push(B4s(e,"signature",n)),s):{...s,signature:u}}function P4s(e,t,r,n,i){if(r==null||typeof r=="string"&&r.trim().length===0)return;let o=xSp(r);if(o!=null)return o;n.push(B4s(e,t,i))}function xSp(e){return typeof e=="string"&&/^\$\{\w+\}$/.test(e)?e:void 0}function B4s(e,t,r){return{code:"FERN_PUBLISH_CREDENTIAL_REQUIRES_ENVIRONMENT_VARIABLE",severity:"warning",path:["targets",r.toString(),"output","publish",t],reason:`The ${e} ${t} credential is not an exact environment-variable expression and was omitted to prevent writing a resolved secret.`,sdkConfigPath:["targets",r.toString(),"output","publish",t],suggestedAction:`Configure targets.${r}.output.publish.${t} with an environment variable such as \${REGISTRY_CREDENTIAL}.`}}function VAA(e){let t=e.path.filter(r=>typeof r=="string");return t.includes("output")&&t.includes("publish")&&t.some(r=>["token","username","password","signature","secretKey","keyId","credentials"].includes(r))}function UAA(e,t){let r=e.rootApiFile.contents,n=t?.environments?[]:Object.entries(r.environments??{}).sort(([c],[u])=>c.localeCompare(u)).map(([c,u])=>({name:c,urls:WAA(u),...typeof u=="string"||u.docs==null?{}:{description:u.docs}})),i=new Set((t?.headerNames??[]).map(c=>c.toLowerCase())),o=Object.entries(r.headers??{}).filter(([c])=>!i.has(c.toLowerCase())).map(([c,u])=>typeof u=="string"?{name:c}:{name:u.name??c,...u.env==null?{}:{environmentVariable:u.env},...u.docs==null?{}:{description:u.docs}}),s=t?.auth?{diagnostics:[]}:_AA(r),a=t?.environments?void 0:r["default-url"]??e.rootApiFile.defaultUrl;return{api:{...a==null?{}:{baseUrl:a},...t?.environments||r["default-environment"]==null?{}:{defaultEnvironment:r["default-environment"]},...n.length===0?{}:{environments:n},...o.length===0?{}:{headers:o},...s.auth==null?{}:{auth:s.auth}},diagnostics:s.diagnostics}}function _AA(e){let t=e["auth-schemes"]??{},r=e.auth==null?Object.keys(t).length===0?void 0:{references:Object.keys(t),endpointSecurity:!0,requirements:void 0}:Ile(e.auth,{single:a=>({references:[a],endpointSecurity:void 0,requirements:[{schemes:[Ewi(a)]}]}),any:({any:a})=>({references:a,endpointSecurity:void 0,requirements:a.map(c=>({schemes:[Ewi(c)]}))}),endpointSecurity:()=>({references:Object.keys(t),endpointSecurity:!0,requirements:void 0})});if(r==null)return{diagnostics:[]};let n=r.references.map(a=>({id:Ewi(a),scheme:GAA(a,t)})),i=[...new Set(n.filter(({scheme:a})=>a==null).map(({id:a})=>a))],o=n.flatMap(({scheme:a})=>a==null?[]:[a]);return i.length>0||o.length===0?{diagnostics:[qAA(i)]}:{auth:{schemes:[...new Map(o.map(a=>[a.id,a])).values()],...r.requirements==null?{}:{requirements:r.requirements},...r.endpointSecurity==null?{}:{endpointSecurity:r.endpointSecurity}},diagnostics:[]}}function GAA(e,t){let r=Ewi(e),n=typeof e=="string"?void 0:e.docs;if(r==="bearer"&&t[r]==null)return{id:r,type:"bearer",...n==null?{}:{description:n}};if(r==="basic"&&t[r]==null)return{id:r,type:"basic",...n==null?{}:{description:n}};let i=t[r];if(i==null)return;let o=n??i.docs;return vle(i,{header:s=>({id:r,type:"api-key",location:"header",name:s.header,...s.prefix==null?{}:{prefix:s.prefix},...s.env==null?{}:{environmentVariable:s.env},...o==null?{}:{description:o}}),basic:s=>({id:r,type:"basic",...s.username==null?{}:{username:vSp(s.username)},...s.password==null?{}:{password:vSp(s.password)},...o==null?{}:{description:o}}),tokenBearer:s=>({id:r,type:"bearer",...s.token?.env==null?{}:{environmentVariable:s.token.env},...o==null?{}:{description:o}}),oauth:()=>{},inferredBearer:()=>{}})}function vSp(e){return{...e.name==null?{}:{name:e.name},...e.env==null?{}:{environmentVariable:e.env},...e.omit==null?{}:{omit:e.omit}}}function Ewi(e){return typeof e=="string"?e:e.scheme}function qAA(e){let t=e.length===0?"":` Unsupported or unresolved scheme ids: ${e.join(", ")}.`;return{code:"FERN_API_AUTH_REQUIRES_REVIEW",severity:"warning",path:["api","auth"],reason:`Fern API authentication includes a scheme that cannot be represented safely by this migration command.${t}`,sdkConfigPath:["api","auth"],suggestedAction:"Review the Fern auth schemes and configure api.auth manually in SDK Config v1."}}function WAA(e){return typeof e=="string"?[{name:"default",url:e}]:"url"in e?[{name:"default",url:e.url}]:Object.entries(e.urls).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>({name:t,url:r}))}function HAA(e){return{...e,version:void 0,outputMode:D4s(e.outputMode)}}function D4s(e,t){return t==="coordinate"&&typeof e=="string"?e.split(":").map(r=>r.trim()).join(":"):Array.isArray(e)?e.map(r=>D4s(r,t)):XJ(e)?Object.fromEntries(Object.entries(e).flatMap(([r,n])=>r==="_visit"||KAA(r,n)||r==="downloadSnippets"&&n===!1?[]:[[r,D4s(n,r)]])):e}function KAA(e,t){return["apiKey","password","token","username"].includes(e)&&typeof t=="string"&&t.trim()===""}function XJ(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}qd();function per({workspace:e,context:t,group:r,sdkConfigV1:n}){return async i=>{let o=n==null?r.audiences:n.audiences==null?{type:"all"}:{type:"select",audiences:n.audiences},s=new Map,a=new Map;if(!(e instanceof Pl)){for(let p of i)CSp(p)&&a.set(p.generatorIndex,new Error(`Generator index ${p.generatorIndex} (${p.generatorInvocation.name}) requires a source archive, but workspace type ${e.type} does not expose source specs`));return{sourceArchives:s,errors:a}}let u=(await Promise.allSettled(i.map(async p=>{if(p.sdkGenApiRoute==null)return;let d=await e.getAllSpecsForGenerator(p.generatorInvocation.apiOverride?.specs);return p.sdkGenApiRoute.payloadKind==="sdk-config-v1"&&i6s(d,{clientPathParameterStyle:JAA(p,n)}),d}))).flatMap((p,d)=>{let f=i[d];if(f==null)throw new Error(`Missing source archive request at settled index ${d}`);return p.status==="rejected"?(a.set(f.generatorIndex,p.reason),[]):p.value==null?[]:[{generatorIndex:f.generatorIndex,specs:p.value}]});if(u.length>0){let p=await n6s({generatorSelections:u,context:t,audiences:o});for(let[d,f]of p.errorsByGeneratorIndex)a.set(d,f);if(p.archive!=null){let{specIndexesByGeneratorIndex:d,...f}=p.archive;for(let[m,g]of d)s.set(m,{...f,specIndexes:g})}}let l=i.filter(p=>p.sdkGenApiRoute==null&&QSt(p.generatorInvocation.name,p.generatorInvocation.version)&&!a.has(p.generatorIndex));if(l.length>0)try{let p=await o6s({specs:e.allSpecs,context:t,audiences:o}),d=p.manifest.specs.map((f,m)=>m);for(let f of l)s.set(f.generatorIndex,{...p,specIndexes:d})}catch(p){for(let d of l)a.set(d.generatorIndex,p)}for(let p of i){if(!CSp(p))continue;let d=s.has(p.generatorIndex),f=a.has(p.generatorIndex);if(d&&f)throw new Error(`Generator index ${p.generatorIndex} produced both a source archive and a source preparation error`,{cause:a.get(p.generatorIndex)});!d&&!f&&a.set(p.generatorIndex,new Error(`Generator index ${p.generatorIndex} did not produce a source archive or source preparation error`))}return{sourceArchives:s,errors:a}}}function JAA(e,t){return e.sdkConfigTargetIndex==null?t?.clientPathParameterStyle:t?.targets[e.sdkConfigTargetIndex]?.clientPathParameterStyle??t?.clientPathParameterStyle}function CSp(e){return e.sdkGenApiRoute!=null||QSt(e.generatorInvocation.name,e.generatorInvocation.version)}wt();Yt();Ft();var Cwi=require("fs/promises"),jSp=require("os"),QSp=be(require("path"),1);function vwi(){if(process.env.GITHUB_ACTIONS==="true"){let e=process.env.GITHUB_REPOSITORY,t=process.env.GITHUB_SERVER_URL??"https://github.com",r=process.env.GITHUB_RUN_ID;return{type:"github",repo:e,runId:r,runUrl:e&&r?`${t}/${e}/actions/runs/${r}`:void 0,commitSha:process.env.GITHUB_SHA,branch:process.env.GITHUB_REF_NAME,actor:process.env.GITHUB_ACTOR}}if(process.env.GITLAB_CI==="true")return{type:"gitlab",repo:process.env.CI_PROJECT_PATH,runId:process.env.CI_PIPELINE_ID,runUrl:process.env.CI_PIPELINE_URL,commitSha:process.env.CI_COMMIT_SHA,branch:process.env.CI_COMMIT_REF_NAME,actor:process.env.GITLAB_USER_LOGIN};if(process.env.BITBUCKET_BUILD_NUMBER!=null){let e=process.env.BITBUCKET_WORKSPACE,t=process.env.BITBUCKET_REPO_SLUG,r=process.env.BITBUCKET_BUILD_NUMBER;return{type:"bitbucket",repo:e&&t?`${e}/${t}`:void 0,runId:r,runUrl:e&&t&&r?`https://bitbucket.org/${e}/${t}/pipelines/results/${r}`:void 0,commitSha:process.env.BITBUCKET_COMMIT,branch:process.env.BITBUCKET_BRANCH}}}function xwi(){let e=wSp(process.env.GITHUB_ACTOR??process.env.GITLAB_USER_LOGIN??process.env.CIRCLE_USERNAME??process.env.BUILD_REQUESTEDFOR),t=wSp(process.env.GITLAB_USER_EMAIL??process.env.BUILD_REQUESTEDFOREMAIL);if(!(e==null&&t==null))return{username:e,email:t}}function wSp(e){return e!=null&&e.length>0?e:void 0}function R4s(){return!!(process.env.CI||process.env.CONTINUOUS_INTEGRATION||process.env.GITHUB_ACTIONS||process.env.GITLAB_CI||process.env.CIRCLECI||process.env.TRAVIS||process.env.JENKINS_URL||process.env.JENKINS_HOME||process.env.TF_BUILD||process.env.BUILDKITE||process.env.CODEBUILD_BUILD_ID||process.env.TEAMCITY_VERSION||process.env.BITBUCKET_BUILD_NUMBER||process.env.DRONE||process.env.SEMAPHORE||process.env.APPVEYOR||process.env.BUDDY_WORKSPACE_ID||process.env.WERCKER_RUN_ID)}bd();Ft();In();var BSp=require("crypto"),sOt=require("fs/promises"),zFe=be(require("path"),1);var QA=process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com";function jO(e){if(!(e instanceof Error))return String(e);let t=e.cause;return t instanceof Error?t.message:e.message}function _L(e){try{let t=JSON.parse(e),r=t.message??t.error?.message;if(typeof r=="string")return r}catch{}}var YAA=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,SSp=30,TSp=20,oOt=64,XAA=/^[a-zA-Z0-9_-]{1,64}$/,ZAA="mcp",DSp="If this server was deployed before, that deployment is still serving \u2014 nothing changed.";async function RSp({bundleDir:e,organization:t,slug:r,token:n,generatorName:i,generatorVersion:o,cliVersion:s,config:a,git:c,ciSource:u,deployerAuthor:l,context:p}){let d=await nyA(e,p),f=r??ZAA;dyA({orgId:t,slug:f,bundle:d,context:p}),p.logger.info(`Deploying MCP server "${f}" to org "${t}"...`),p.logger.debug(`Registry origin: ${QA}`);for(let A of[...d.modules,...d.inputs])await myA({file:A,orgId:t,token:n,context:p});let m=await gyA({orgId:t,slug:f,bundle:d,token:n,generatorName:i,generatorVersion:o,cliVersion:s,config:a,git:c,ciSource:u,deployerAuthor:l,context:p}),g=m.latestDeployment?.status??"unknown";if(m.activeDeploymentId==null){let A=m.latestDeployment?.error,y=A==null?`deployment status: ${g}`:hyA(A);return p.failAndThrow(`${y}
5049
5049
  ${DSp}`,void 0,{code:S.Code.NetworkError})}return p.logger.info(fe.green(`Deployed MCP server "${m.slug}"`)),p.logger.info(""),p.logger.info(` ${fe.bold(m.url)}`),p.logger.info(""),p.logger.info(`Manage it at ${Cte()}/${t}/mcp/${m.slug}`),{slug:m.slug,url:m.url,deploymentStatus:g}}var $AA=["metadata.json","wrangler.jsonc"],eyA=new Set(["metadata.json","wrangler.jsonc","catalog.json","index.mjs"]);function tyA(e){return!eyA.has(e)&&!e.startsWith(".")&&!e.toLowerCase().endsWith(".md")}var k4s="inputs",ryA=new Map([["specs.tar.gz","application/gzip"],["sdk-config.json","application/json"],["build-request.json","application/json"]]);async function nyA(e,t){let r=zFe.default.resolve(e),n;try{n=await(0,sOt.readdir)(r,{withFileTypes:!0})}catch{return t.failAndThrow(`Could not read the server bundle at ${r}.`,void 0,{code:S.Code.ConfigError})}let i=n.filter(f=>f.isFile()).map(f=>f.name);for(let f of $AA)i.includes(f)||t.failAndThrow(`The server bundle is missing ${f} (looked in ${r}).`,void 0,{code:S.Code.ConfigError});let o=await OSp({absolutePath:zFe.default.join(r,"metadata.json"),context:t}),s=await OSp({absolutePath:zFe.default.join(r,"wrangler.jsonc"),context:t});(typeof s!="object"||s==null)&&t.failAndThrow("The server bundle's wrangler.jsonc must contain a JSON object.",void 0,{code:S.Code.ConfigError});let{main:a,compatibility_date:c,compatibility_flags:u}=s;(typeof a!="string"||typeof c!="string")&&t.failAndThrow(`The server bundle's wrangler.jsonc must set "main" and "compatibility_date".`,void 0,{code:S.Code.ConfigError});let l=await Promise.all(i.filter(tyA).map(f=>kSp({absolutePath:zFe.default.join(r,f),name:f,contentType:syA(f)}))),d=n.some(f=>f.isDirectory()&&f.name===k4s)?await iyA(zFe.default.join(r,k4s),t):[];return{metadata:oyA(o),mainModule:a,compatibilityDate:c,compatibilityFlags:Array.isArray(u)?u.map(String):[],modules:l,inputs:d}}async function iyA(e,t){let r;try{r=await(0,sOt.readdir)(e,{withFileTypes:!0})}catch{return t.failAndThrow(`Could not read the server bundle's inputs at ${e}.`,void 0,{code:S.Code.ConfigError})}let n=[];for(let i of r){let o=i.isFile()?ryA.get(i.name):void 0;if(o==null){t.logger.debug(` Ignoring unknown entry in ${k4s}/: ${i.name}`);continue}n.push(await kSp({absolutePath:zFe.default.join(e,i.name),name:i.name,contentType:o}))}return n}async function kSp({absolutePath:e,name:t,contentType:r}){let n=await(0,sOt.readFile)(e);return{name:t,content:n,contentType:r,hash:(0,BSp.createHash)("sha256").update(n).digest("hex")}}function oyA(e){return typeof e!="object"||e==null||Array.isArray(e)?e:{followRedirects:!1,maxRedirects:5,allowedRedirectHosts:[],...e}}async function OSp({absolutePath:e,context:t}){let r=await(0,sOt.readFile)(e,"utf-8");try{return JSON.parse(ayA(r))}catch{return t.failAndThrow(`Could not parse ${e} as JSON.`,void 0,{code:S.Code.ConfigError})}}function syA(e){switch(zFe.default.extname(e)){case".mjs":case".js":return"application/javascript+module";case".wasm":return"application/wasm";default:return"application/octet-stream"}}function ayA(e){return uyA(cyA(e))}function cyA(e){let t="",r=0;for(;r<e.length;){let n=e[r],i=e[r+1];if(n==='"'){let o=FSp(e,r);t+=e.slice(r,o),r=o}else if(n==="/"&&i==="/"){let o=e.indexOf(`
5050
5050
  `,r);r=o===-1?e.length:o}else if(n==="/"&&i==="*"){let o=e.indexOf("*/",r+2);r=o===-1?e.length:o+2}else t+=n,r++}return t}function uyA(e){let t="",r=0;for(;r<e.length;){let n=e[r];if(n==='"'){let i=FSp(e,r);t+=e.slice(r,i),r=i}else if(n===","){let i=r+1;for(;i<e.length&&/\s/.test(e[i]??"");)i++;e[i]==="}"||e[i]==="]"||(t+=n),r++}else t+=n,r++}return t}function FSp(e,t){for(let r=t+1;r<e.length;r++)if(e[r]==="\\")r++;else if(e[r]==='"')return r+1;return e.length}function PSp(e,t){if(e.length===0||e.length>SSp)return`${t} must be 1-${SSp} characters (got "${e}").`;if(!YAA.test(e))return`${t} must be lowercase letters, digits, and single hyphens (got "${e}").`}function fer(e){return typeof e=="object"&&e!=null&&!Array.isArray(e)}function lyA(e){return fer(e)&&typeof e.name=="string"}function pyA(e){return!fer(e)||!Array.isArray(e.tools)?[]:e.tools.flatMap(t=>{if(!lyA(t)||XAA.test(t.name))return[];let r=fyA(t.name),n=t.name.length>oOt?`Tool name "${t.name}" is ${t.name.length} characters; MCP tool names must be 1-${oOt} characters of letters, digits, "_" or "-".`:`Tool name "${t.name}" contains unsupported characters; MCP tool names must be 1-${oOt} characters of letters, digits, "_" or "-".`,i=typeof t.method=="string"&&typeof t.path=="string"?` Set x-fern-mcp-name on ${t.method} ${t.path}, e.g. in an overlay:
5051
5051
  - target: "$.paths['${t.path}'].${t.method.toLowerCase()}"
@@ -5155,7 +5155,7 @@ MCP server URL: ${i}`),r.logger.info(fe.dim("Your Fern login token is written in
5155
5155
 
5156
5156
  `);try{e.logger.debug(`Consolidating ${v.length} changelog entries via AI rollup`);let R=await A.ConsolidateChangelog(D,y,"unknown","","");C=R.consolidated_changelog?.trim()||D,O=R.version_bump_reason?.trim()||""}catch(R){e.logger.warn(`Changelog consolidation failed, using raw entries: ${Fn(R)}`),C=D}}else C=v[0]??"",O=x;return{version_bump:y,message:E||"SDK regeneration",changelog_entry:C,version_bump_reason:O}}catch(A){let y=Fn(A);throw e.failWithoutThrowing(`Failed to analyze SDK diff. Diff stats: ${c.length.toLocaleString()} chars, ${u}KB, ${l} files changed. `+(m.length>1?`The diff was split into ${m.length} chunks but analysis still failed. `:"")+`Error: ${y}`,void 0,{code:S.Code.NetworkError}),new Xc}}async function _CA({context:e,fromPath:t,toPath:r}){try{let{stdout:n}=await VCA(`git diff --no-index --no-color --no-ext-diff "${t}" "${r}"`,{maxBuffer:10485760,encoding:"utf-8"});return n}catch(n){return typeof n=="object"&&n!=null&&"code"in n&&n.code===1&&"stdout"in n&&typeof n.stdout=="string"?n.stdout:e.failAndThrow(`Failed to generate diff: ${Fn(n)}`,void 0,{code:S.Code.InternalError})}}Yt();Ft();var E2p=be(X0(),1);Pc();Ft();var i2p=require("crypto");Pc();ro();Ft();var Jx=be(require("path"),1),R1i=F0().inlinePathParameters?"inline":"wrapped",KFp=[["typeDatesAsStrings","type-dates-as-strings"],["useBytesForBinaryResponse","use-bytes-for-binary-response"],["respectParameterContent","respect-parameter-content"],["respectOperationIdWordBoundaries","respect-operation-id-word-boundaries"],["inferForwardCompatible","infer-forward-compatible"],["preserveOneOfInAllOf","preserve-one-of-in-all-of"],["anyOfSiblingPropertiesAsObject","any-of-sibling-properties-as-object"],["errorResponses","error-responses"]],GCA=new Set(KFp.map(([e])=>e)),qCA=new Set(KFp.map(([,e])=>e));function JFp({workspace:e,groups:t,definition:r}){if(e.type!=="oss")return{auth:!1,environments:!1,headerNames:[]};let n=e.generatorsConfiguration?.api,i=n?.auth!=null||n?.["auth-schemes"]!=null||t.some(c=>c.generators.some(u=>u.apiOverride?.auth!=null||u.apiOverride?.["auth-schemes"]!=null)),o=n?.environments!=null||n?.["default-environment"]!=null,s=n?.headers!=null||t.some(c=>c.generators.some(u=>u.apiOverride?.headers!=null)),a=r.sourceDerivedGlobalHeaderNames;if(!s&&a==null)throw new S({message:"Could not determine global-header provenance for the resolved API definition. Reload the workspace before running fern sdk migrate.",code:S.Code.InternalError});return{auth:!i,environments:!o,headerNames:s?[]:a??[]}}function YFp({workspace:e,fernWorkspace:t,generator:r}){if(r.apiOverride?.specs!=null)return swA(e.absoluteFilePath,r.apiOverride.specs);if(YCA(e)){let n=ZCA(e.generatorsConfiguration?.api);return e.allSpecs.map(i=>{let o=$CA(e.absoluteFilePath.toString(),i,n);if(o?.location.gitSource!=null)throw new S({message:`fern sdk migrate cannot create durable local paths for git-backed API specification '${o.location.gitSource.path}' from '${o.location.gitSource.repo}'. Move the specification into the project or migrate this configuration manually.`,code:S.Code.ConfigError});return XCA(i,o?.location.settings)})}if(t.sources.length>0)return t.sources.map(owA);throw new S({message:"SDK Config v1 requires at least one OpenAPI, AsyncAPI, or GraphQL source. This Fern API does not expose a supported source specification.",code:S.Code.ConfigError})}function XFp({specs:e,workingDirectory:t}){let r=WCA(t,e),n=new Set,i=e.map(o=>({id:dwA(o.idHint??fwA(o.absolutePath),n),type:o.type,path:DUs(r,o.absolutePath),...o.name==null?{}:{name:o.name},...o.namespace==null?{}:{namespace:o.namespace},...o.apiImportSettings==null?{}:{apiImportSettings:o.apiImportSettings},...o.absoluteOverlayPaths.length===0?{}:{overlays:o.absoluteOverlayPaths.map(a=>DUs(r,a))},...o.absoluteOverridePaths.length===0?{}:{overrides:o.absoluteOverridePaths.map(a=>DUs(r,a))}}));return JCA(i)}function ZFp(e){let t=e.filter(n=>n.type==="openapi"&&n.clientPathParameterStyleExplicit===!0);if(t.length===0)return;let r=new Set(t.map(n=>n.clientPathParameterStyle??R1i));if(r.size>1){let n=t.map(i=>`${i.idHint??i.namespace??i.name??i.absolutePath}=${i.clientPathParameterStyle??R1i}`).join(", ");throw new S({message:`SDK Config v1 cannot represent conflicting inline-path-parameters settings across API specifications: ${n}. Align these settings or migrate the configurations separately.`,code:S.Code.ConfigError})}return r.values().next().value}function WCA(e,t){return t.flatMap(r=>[r.absolutePath,...r.absoluteOverlayPaths,...r.absoluteOverridePaths]).reduce(HCA,Jx.default.resolve(e))}function HCA(e,t){let r=Jx.default.resolve(t),n=e;for(;!KCA(n,r);){let i=Jx.default.dirname(n);if(i===n)throw new S({message:"SDK Config source files must share a filesystem root with the Fern project.",code:S.Code.ConfigError});n=i}return n}function KCA(e,t){let r=Jx.default.relative(e,t);return r===""||!Jx.default.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${Jx.default.sep}`)}function JCA(e){let t=e[0]?.apiImportSettings;if(t==null)return{specs:e};let r=Object.entries(t).filter(([i,o])=>o!==void 0&&e.every(s=>s.apiImportSettings?.[i]===o));if(r.length===0)return{specs:e};let n=new Set(r.map(([i])=>i));return{specs:e.map(i=>{let{apiImportSettings:o,...s}=i,a=Object.fromEntries(Object.entries(o??{}).filter(([c])=>!n.has(c)));return Object.keys(a).length===0?s:{...s,apiImportSettings:a}}),apiImportSettings:Object.fromEntries(r)}}function YCA(e){return"allSpecs"in e&&Array.isArray(e.allSpecs)}function XCA(e,t){switch(e.type){case"openapi":if(e.source.type==="protobuf")throw TOt(e.source.type);return{absolutePath:e.absoluteFilepath,absoluteOverlayPaths:e.absoluteFilepathToOverlays==null?[]:[e.absoluteFilepathToOverlays],absoluteOverridePaths:RUs(e.absoluteFilepathToOverrides),apiImportSettings:lwA(t),docsImportSettings:awA(t,e.settings?.errorResponses),hasLegacyOnlyDocsImportSettings:$Fp(t,GCA),...e.source.type!=="openapi"?{}:{clientPathParameterStyle:t?.inlinePathParameters==null?R1i:t.inlinePathParameters?"inline":"wrapped",clientPathParameterStyleExplicit:t?.inlinePathParameters!=null},idHint:e.namespace,namespace:e.namespace,type:e.source.type};case"graphql":return{absolutePath:e.absoluteFilepath,absoluteOverlayPaths:[],absoluteOverridePaths:RUs(e.absoluteFilepathToOverrides),namespace:e.namespace,idHint:e.namespace,type:"graphql"};case"protobuf":case"openrpc":throw TOt(e.type)}}function ZCA(e){return e==null||e.type==="conjure"?[]:e.type==="singleNamespace"?e.definitions.map(t=>({location:t,namespace:void 0})):[...Object.entries(e.definitions).flatMap(([t,r])=>r.map(n=>({location:n,namespace:t}))),...(e.rootDefinitions??[]).map(t=>({location:t,namespace:void 0}))]}function $CA(e,t,r){let n=r.filter(i=>i.namespace===iwA(t)&&ewA(i.location,t)&&twA(e,i.location,t));return n.length===1?n[0]:void 0}function ewA(e,t){switch(t.type){case"openapi":return e.schema.type==="oss";case"graphql":return e.schema.type==="graphql";case"openrpc":return e.schema.type==="openrpc";case"protobuf":return e.schema.type==="protobuf"}}function twA(e,t,r){let n=nwA(r),i=rwA(t);if(t.gitSource!=null){let s=Jx.default.normalize(t.gitSource.path);return n===s||n.endsWith(`${Jx.default.sep}${s}`)}let o=Jx.default.isAbsolute(i)?Jx.default.normalize(i):Jx.default.resolve(e,i);return n===o}function rwA(e){return e.schema.type==="protobuf"?e.schema.root:e.schema.path}function nwA(e){return Jx.default.normalize(e.type==="protobuf"?e.absoluteFilepathToProtobufRoot.toString():e.absoluteFilepath.toString())}function iwA(e){return e.type==="protobuf"?void 0:e.namespace}function owA(e){if(e.type==="protobuf")throw TOt(e.type);return{absolutePath:e.absoluteFilePath,absoluteOverlayPaths:[],absoluteOverridePaths:RUs(e.absoluteFilePathToOverrides),idHint:e.id,type:e.type}}function swA(e,t){if(!Array.isArray(t))throw TOt("conjure");return t.map(r=>{if(!wn.isOpenApiSpecSchema(r)||typeof r.openapi!="string")throw TOt("generator API override");return{absolutePath:Jx.default.resolve(e,r.openapi),absoluteOverlayPaths:r.overlays==null?[]:[Jx.default.resolve(e,r.overlays)],absoluteOverridePaths:uwA(r.overrides).map(n=>Jx.default.resolve(e,n)),apiImportSettings:pwA(r.settings),docsImportSettings:cwA(r.settings,e),hasLegacyOnlyDocsImportSettings:$Fp(r.settings,qCA),clientPathParameterStyle:r.settings?.["inline-path-parameters"]==null?R1i:r.settings["inline-path-parameters"]?"inline":"wrapped",clientPathParameterStyleExplicit:r.settings?.["inline-path-parameters"]!=null,idHint:r.namespace,namespace:r.namespace,type:"openapi"}})}function RUs(e){return e==null?[]:Array.isArray(e)?e:[e]}function $Fp(e,t){return e!=null&&Object.entries(e).some(([r,n])=>n!==void 0&&!t.has(r)&&!(r==="removeDiscriminantsFromSchemas"&&n===wn.RemoveDiscriminantsFromSchemas.Always))}function awA(e,t){if(e!=null)return t2p({typeDatesAsStrings:e.typeDatesAsStrings,useBytesForBinaryResponse:e.useBytesForBinaryResponse,respectParameterContent:e.respectParameterContent,respectOperationIdWordBoundaries:e.respectOperationIdWordBoundaries,inferForwardCompatible:e.inferForwardCompatible,preserveOneOfInAllOf:e.preserveOneOfInAllOf,anyOfSiblingPropertiesAsObject:e.anyOfSiblingPropertiesAsObject,errorResponses:e2p(t??e.errorResponses)})}function cwA(e,t){if(e==null)return;let r=e["error-responses"];return t2p({typeDatesAsStrings:e["type-dates-as-strings"],useBytesForBinaryResponse:e["use-bytes-for-binary-response"],respectParameterContent:e["respect-parameter-content"],respectOperationIdWordBoundaries:e["respect-operation-id-word-boundaries"],inferForwardCompatible:e["infer-forward-compatible"],preserveOneOfInAllOf:e["preserve-one-of-in-all-of"],anyOfSiblingPropertiesAsObject:e["any-of-sibling-properties-as-object"],errorResponses:e2p(r,t)})}function e2p(e,t){if(e!=null)return{schema:t!=null&&typeof e.schema=="string"?Jx.default.resolve(t,e.schema):e.schema,...e.name==null?{}:{name:e.name},...e["apply-to"]==null?{}:{applyTo:e["apply-to"]},...e.ensure==null?{}:{ensure:e.ensure.map(r=>({statusCode:r["status-code"],...r.methods==null?{}:{methods:r.methods}}))}}}function t2p(e){let t=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0));return Object.keys(t).length===0?void 0:t}function uwA(e){if(e==null)return[];let t=Array.isArray(e)?e:[e];if(t.some(r=>typeof r!="string"))throw TOt("git override");return t}function lwA(e){if(e==null)return;let t={respectNullableSchemas:e.respectNullableSchemas,titleAsSchemaName:e.shouldUseTitleAsName,coerceEnumsToLiterals:e.coerceEnumsToLiterals,idiomaticRequestNames:e.shouldUseIdiomaticRequestNames,wrapReferencesToNullableInOptional:e.wrapReferencesToNullableInOptional,coerceOptionalSchemasToNullable:e.coerceOptionalSchemasToNullable,pathParameterOrder:e.pathParameterOrder,onlyIncludeReferencedSchemas:e.onlyIncludeReferencedSchemas,objectQueryParameters:e.objectQueryParameters,typeDatesAsStrings:e.typeDatesAsStrings,groupMultiApiEnvironments:e.groupMultiApiEnvironments,ignoreTags:e.ignoreTags,disambiguateRequestNames:e.disambiguateRequestNames,respectReadonlySchemas:e.respectReadonlySchemas,discriminatedUnionV2:e.shouldUseUndiscriminatedUnionsWithLiterals,undiscriminatedUnionsWithLiterals:e.shouldUseUndiscriminatedUnionsWithLiterals,inlineAllOfSchemas:e.inlineAllOfSchemas,resolveSchemaCollisions:e.resolveSchemaCollisions,asyncApiMessageNaming:e.asyncApiMessageNaming,defaultIntegerFormat:e.defaultIntegerFormat},r=Object.fromEntries(Object.entries(t).filter(([,n])=>n!==void 0));return Object.keys(r).length===0?void 0:r}function pwA(e){if(e!=null)return{...e["respect-nullable-schemas"]==null?{}:{respectNullableSchemas:e["respect-nullable-schemas"]},...e["title-as-schema-name"]==null?{}:{titleAsSchemaName:e["title-as-schema-name"]},...e["coerce-enums-to-literals"]==null?{}:{coerceEnumsToLiterals:e["coerce-enums-to-literals"]},...e["idiomatic-request-names"]==null?{}:{idiomaticRequestNames:e["idiomatic-request-names"]},...e["wrap-references-to-nullable-in-optional"]==null?{}:{wrapReferencesToNullableInOptional:e["wrap-references-to-nullable-in-optional"]},...e["coerce-optional-schemas-to-nullable"]==null?{}:{coerceOptionalSchemasToNullable:e["coerce-optional-schemas-to-nullable"]},...e["path-parameter-order"]==null?{}:{pathParameterOrder:e["path-parameter-order"]},...e["only-include-referenced-schemas"]==null?{}:{onlyIncludeReferencedSchemas:e["only-include-referenced-schemas"]},...e["object-query-parameters"]==null?{}:{objectQueryParameters:e["object-query-parameters"]},...e["type-dates-as-strings"]==null?{}:{typeDatesAsStrings:e["type-dates-as-strings"]},...e["group-multi-api-environments"]==null?{}:{groupMultiApiEnvironments:e["group-multi-api-environments"]},...e["ignore-tags"]==null?{}:{ignoreTags:e["ignore-tags"]},...e["disambiguate-request-names"]==null?{}:{disambiguateRequestNames:e["disambiguate-request-names"]},...e["respect-readonly-schemas"]==null?{}:{respectReadonlySchemas:e["respect-readonly-schemas"]},...e["prefer-undiscriminated-unions-with-literals"]==null?{}:{discriminatedUnionV2:e["prefer-undiscriminated-unions-with-literals"],undiscriminatedUnionsWithLiterals:e["prefer-undiscriminated-unions-with-literals"]},...e["inline-all-of-schemas"]==null?{}:{inlineAllOfSchemas:e["inline-all-of-schemas"]},...e["resolve-schema-collisions"]==null?{}:{resolveSchemaCollisions:e["resolve-schema-collisions"]},...e["default-integer-format"]==null?{}:{defaultIntegerFormat:e["default-integer-format"]}}}function fwA(e){let t=Jx.default.extname(e);return Jx.default.basename(e,t).replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"spec"}function dwA(e,t){if(!t.has(e))return t.add(e),e;let r=2;for(;t.has(`${e}-${r}`);)r+=1;let n=`${e}-${r}`;return t.add(n),n}function DUs(e,t){let r=Jx.default.relative(e,t).split(Jx.default.sep).join("/");return r.startsWith(".")?r:`./${r}`}function TOt(e){return new S({message:`fern sdk migrate does not currently support Fern source type '${e}'. Support for this source type is planned for a future release.`,code:S.Code.ConfigError})}async function o2p({workspace:e,groups:t,cliContext:r}){let n=t.find(c=>c.generators.length===0);if(n!=null)throw new S({message:`SDK group '${n.groupName}' does not contain any generators.`,code:S.Code.ConfigError});let i=await r.runTask(async c=>{let u=[],l=new Map;for(let p of t)for(let d of p.generators){let f=TEe(d),m=d.apiOverride?.specs,g=a2p({settings:f,specs:m}),A=l.get(g);A==null&&(A=e.toFernWorkspace({context:c},f,m),l.set(g,A));let y=await A,E=YFp({workspace:e,fernWorkspace:y,generator:d});u.push({fernWorkspace:y,generator:d,group:p,sourceSpecs:E})}return u}),o=i[0];if(o==null)throw new S({message:"No SDK generator groups were selected.",code:S.Code.ConfigError});let s=r2p(o),a=i.find(c=>r2p(c)!==s);if(a!=null)throw new S({message:`SDK targets '${n2p(o)}' and '${n2p(a)}' resolve to different API sources, schemas, import settings, or audiences. Migrate them into separate SDK Config files.`,code:S.Code.ConfigError});return{fernWorkspace:o.fernWorkspace,sourceSpecs:o.sourceSpecs,group:{groupName:t.map(c=>c.groupName).join("+"),audiences:o.group.audiences,generators:t.flatMap(c=>c.generators),reviewers:void 0}}}function r2p(e){return a2p({apiSchema:mwA(e.fernWorkspace.definition,e.group.audiences),sourceSpecs:e.sourceSpecs})}function mwA(e,t){return hwA({audiences:t.type==="all"?{type:"all"}:{type:"select",audiences:[...new Set(t.audiences)].sort()},definition:s2p(e,new WeakSet)})}function s2p(e,t){if(t.has(e))return{cycle:!0};t.add(e);let r=e.sourceDerivedGlobalHeaderNames,n={specVersion:e.specVersion,sourceDerivedGlobalHeaderNames:r==null?null:[...r].sort(),root:{contents:e.rootApiFile.contents,defaultUrl:e.rootApiFile.defaultUrl},definitions:kUs(e.namedDefinitionFiles).map(([i,o])=>[i,o.contents]),packageMarkers:kUs(e.packageMarkers).map(([i,o])=>[i,o.contents]),imports:kUs(e.importedDefinitions).map(([i,o])=>[i,s2p(o.definition,t)])};return t.delete(e),n}function n2p({group:e,generator:t}){return`${e.groupName}/${t.name}`}function kUs(e){return Object.entries(e).sort(([t],[r])=>t.localeCompare(r))}function a2p(e){return JSON.stringify(NUs(e))}function hwA(e){let t=(0,i2p.createHash)("sha256");return FUs(t,e),t.digest("hex")}function FUs(e,t){if(Array.isArray(t)){e.update("["),t.forEach((r,n)=>{n>0&&e.update(","),FUs(e,r===void 0?null:r)}),e.update("]");return}if(t==null||typeof t!="object"){e.update(JSON.stringify(t)??"null");return}e.update("{"),Object.entries(t).filter(([,r])=>r!==void 0).sort(([r],[n])=>r.localeCompare(n)).forEach(([r,n],i)=>{i>0&&e.update(","),e.update(JSON.stringify(r)),e.update(":"),FUs(e,n)}),e.update("}")}function NUs(e){return Array.isArray(e)?e.map(NUs):e==null||typeof e!="object"?e:Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0).sort(([t],[r])=>t.localeCompare(r)).map(([t,r])=>[t,NUs(r)]))}ro();Yt();Ft();var f2p=require("fs/promises"),N1i=be(require("path"),1),Yk=be(X0(),1);Ft();var c2p=require("crypto"),eY=require("fs/promises"),zGe=require("path");async function k1i(e,t,r){let n=e.toString();await(0,eY.mkdir)((0,zGe.dirname)(n),{recursive:!0});let i=(0,zGe.join)((0,zGe.dirname)(n),`.${(0,zGe.basename)(n)}.${(0,c2p.randomUUID)()}.tmp`);try{await(0,eY.writeFile)(i,t,{flag:"wx"}),r?await(0,eY.rename)(i,n):(await gwA(i,n),await(0,eY.unlink)(i))}catch(o){throw await AwA(i,o),o}}async function gwA(e,t){try{await(0,eY.link)(e,t)}catch(r){throw u2p(r,"EEXIST")?new S({message:`Output file '${t}' already exists. Use --force to replace it.`,code:S.Code.ConfigError}):r}}async function AwA(e,t){try{await(0,eY.unlink)(e)}catch(r){if(u2p(r,"ENOENT"))return;throw t!=null?new AggregateError([t,r],`Could not complete the output write or remove '${e}'`):r}}function u2p(e,t){return e instanceof Error&&"code"in e&&e.code===t}async function d2p({docsPath:e,workspaceName:t,isOnlyApiWorkspace:r,sourceSpecs:n}){if(e==null||!await Jt(e))return 0;let i=await l2p(e);if(xwA(i)&&n.some(a=>a.hasLegacyOnlyDocsImportSettings))throw new S({message:"Docs migration cannot safely decouple this API while experimental.openapi-parser-v3 is false because the legacy docs parser consumes additional API import settings. Enable the default parser or migrate this API reference manually.",code:S.Code.ConfigError});let o=[e,...bwA(i,sn(e).toString())],s=0;for(let[a,c]of o.entries()){let u=a===0?i:await l2p(c);s+=await ywA({document:u,configurationPath:c,workspaceName:t,isOnlyApiWorkspace:r,sourceSpecs:n})}return s}async function l2p(e){let t=Yk.default.parseDocument(await(0,f2p.readFile)(e,"utf8"));if(t.errors.length>0)throw new S({message:`Could not update ${e}: ${t.errors.map(r=>r.message).join("; ")}`,code:S.Code.ParseError});return t}async function ywA({document:e,configurationPath:t,workspaceName:r,isOnlyApiWorkspace:n,sourceSpecs:i}){let o=sn(t).toString(),s=0;if(jUs(e.contents,c=>{if(!vwA(c)||c.has("specs"))return;let u=zer(c.get("api-name",!0));(u===r||u==null&&n||u==null&&r==null)&&(c.set("specs",i.map(p=>EwA(p,o))),s++)}),s===0)return 0;let a=e.toString({lineWidth:0});return await k1i(t,a.endsWith(`
5157
5157
  `)?a:`${a}
5158
- `,!0),s}function bwA(e,t){if(!(0,Yk.isMap)(e.contents))return[];let r=new Set;p2p(e.contents.get("versions",!0),t,r);let n=e.contents.get("products",!0);if((0,Yk.isSeq)(n))for(let i of n.items)(0,Yk.isMap)(i)&&(m2p(i.get("path",!0),t,r),p2p(i.get("versions",!0),t,r));return[...r].map(Mt.of)}function p2p(e,t,r){if((0,Yk.isSeq)(e))for(let n of e.items)!(0,Yk.isMap)(n)||zer(n.get("ref",!0))!=null||m2p(n.get("path",!0),t,r)}function m2p(e,t,r){let n=zer(e);n!=null&&r.add(N1i.default.resolve(t,n))}function EwA(e,t){if(e.type!=="openapi"&&e.type!=="asyncapi"&&e.type!=="graphql")throw new S({message:`Docs migration does not support direct ${e.type} API specifications`,code:S.Code.ConfigError});let r={type:e.type,path:F1i(t,e.absolutePath),...e.namespace==null?{}:{namespace:e.namespace},...e.absoluteOverlayPaths[0]==null?{}:{overlays:F1i(t,e.absoluteOverlayPaths[0])},...e.absoluteOverridePaths.length===0?{}:{overrides:e.absoluteOverridePaths.map(n=>F1i(t,n))},...e.docsImportSettings==null?{}:{settings:IwA(e.docsImportSettings,t)}};return Ya.RawSchemas.Serializer.ApiSpecConfiguration.jsonOrThrow(r)}function IwA(e,t){let r=e.errorResponses;return{...e,...r==null?{}:{errorResponses:{...r,schema:typeof r.schema=="string"?F1i(t,r.schema):r.schema}}}}function F1i(e,t){let r=N1i.default.relative(e,t).split(N1i.default.sep).join("/");return r.startsWith(".")?r:`./${r}`}function vwA(e){return typeof zer(e.get("api",!0))=="string"}function zer(e){return(0,Yk.isScalar)(e)&&typeof e.value=="string"?e.value:void 0}function xwA(e){if(!(0,Yk.isMap)(e.contents))return!1;let t=e.contents.get("experimental",!0);if(!(0,Yk.isMap)(t))return!1;let r=t.get("openapi-parser-v3",!0);return(0,Yk.isScalar)(r)&&r.value===!1}function jUs(e,t){if((0,Yk.isMap)(e)){t(e);for(let r of e.items)zer(r.key)!=="feature-flag"&&jUs(r.value,t);return}if((0,Yk.isSeq)(e))for(let r of e.items)jUs(r,t)}Ft();In();async function g2p({project:e,cliContext:t,args:r}){let n=await CwA(e,t,r.api),i=n.generatorsConfiguration;if(i==null||i.groups.length===0)throw new S({message:"No SDK generator groups configured in generators.yml",code:S.Code.ConfigError});let o=await wwA(i,t,r.group);return PwA(o),{workspace:n,groups:o}}async function CwA(e,t,r){let n=e.apiWorkspaces;if(n.length===0)throw new S({message:"No APIs found",code:S.Code.ConfigError});if(r!=null){let a=n.find(c=>c.workspaceName===r||c.workspaceName==null&&r==="default");if(a!=null)return a;throw new S({message:`API '${r}' not found. Available APIs: ${DwA(n).join(", ")}`,code:S.Code.ConfigError})}let i=n[0];if(n.length===1&&i!=null)return i;let o=n.map(a=>({name:a.workspaceName??"default",value:a})).sort((a,c)=>a.name.localeCompare(c.name)),s=o.map(a=>a.name);return BwA({cliContext:t,message:"Multiple APIs found. Select one:",choices:o,nonInteractiveError:`Multiple APIs found: ${s.join(", ")}. Use --api to select one.`,flagHint:a=>`--api ${a.workspaceName??"default"}`})}async function wwA(e,t,r){let n=r??(t.isTTY||e.defaultGroup==null?void 0:[e.defaultGroup]);if(n==null){let o=e.groups[0];if(e.groups.length===1&&o!=null)return[o];let s=e.groups.map(c=>c.groupName),a=new Set(e.defaultGroup==null?[]:h2p(e,[e.defaultGroup]));return SwA({cliContext:t,choices:e.groups.map(c=>({checked:a.has(c.groupName),name:c.groupName,value:c})),nonInteractiveError:`Multiple SDK groups found: ${s.join(", ")}. Repeat --group for groups that resolve to the same API and use distinct target languages.`})}return[...new Set(h2p(e,n))].map(o=>{let s=e.groups.find(a=>a.groupName===o);if(s==null)throw new S({message:`SDK group '${o}' not found`,code:S.Code.ConfigError});return s})}function h2p(e,t){let r=e.groups.map(n=>n.groupName);return t.flatMap(n=>{let i=kwi({name:n,groupAliases:e.groupAliases,availableGroupNames:r});if(i.type==="alias-references-missing-group")throw new S({message:`Group alias '${i.alias}' references non-existent group '${i.missingGroupName}'. Available groups: ${i.availableGroupNames.join(", ")}`,code:S.Code.ConfigError});if(i.type==="unknown"){let o=i.availableAliasNames.length>0?`; aliases: ${i.availableAliasNames.join(", ")}`:"";throw new S({message:`SDK group '${i.name}' not found. Available groups: ${i.availableGroupNames.join(", ")}${o}`,code:S.Code.ConfigError})}return i.groupNames})}async function SwA({cliContext:e,choices:t,nonInteractiveError:r}){if(!e.isTTY)throw new S({message:r,code:S.Code.ConfigError});let n=Math.max(...t.map(i=>i.name.length));return e.checkboxPrompt({message:"Select SDK groups to migrate (same API; one target per language):",required:!0,validate:A2p,choices:t.map(i=>({checked:i.checked,name:`${i.name.padEnd(n)} ${fe.dim(`[${OwA(i.value)}]`)} ${fe.dim(`--group ${i.name}`)}`,short:i.name,value:i.value}))})}function TwA(e){return e.generators.flatMap(t=>{let r=t.language??Vk(t.name);return r==null?[]:[r]})}function OwA(e){let t=TwA(e);return t.length>0?y2p(t):e.generators.length===0?"no targets":"unknown target"}function A2p(e){let t=new Map;for(let a of e)for(let c of a.generators){let u=c.language??Vk(c.name);if(u==null)continue;let l=t.get(u)??[];l.push(a.groupName),t.set(u,l)}let r=[...t.entries()].filter(([,a])=>a.length>1);if(r.length===0)return!0;let n=r.map(([a,c])=>`${a} (${y2p(c)})`).join("; "),i=r.some(([,a])=>new Set(a).size<a.length),o=r.some(([,a])=>new Set(a).size>1),s=[...i?["Split same-language generators into separate Fern groups, then migrate each group separately."]:[],...o?["Select at most one conflicting group per language, or migrate those groups separately."]:[],"Use distinct outputs such as sdk-config.<group>.yml."].join(" ");return`One SDK Config allows one target per language. Conflicts: ${n}. ${s}`}function y2p(e){let t=new Map;for(let r of e)t.set(r,(t.get(r)??0)+1);return[...t.entries()].map(([r,n])=>n===1?r:`${r} \xD7${n}`).join(", ")}function PwA(e){let t=A2p(e);if(t!==!0)throw new S({message:t,code:S.Code.ConfigError})}async function BwA({cliContext:e,message:t,choices:r,nonInteractiveError:n,flagHint:i}){if(!e.isTTY)throw new S({message:n,code:S.Code.ConfigError});let o=Math.max(...r.map(s=>s.name.length));return e.selectPrompt({message:t,choices:r.map(s=>({name:`${s.name.padEnd(o)} ${fe.dim(i(s.value))}`,value:s.value}))})}function DwA(e){return e.map(t=>t.workspaceName??"default").sort()}var RwA=ve.of("sdk-config.yml");async function I2p({project:e,cliContext:t,args:r}){let{workspace:n,groups:i}=await g2p({project:e,cliContext:t,args:r}),{fernWorkspace:o,group:s,sourceSpecs:a}=await o2p({workspace:n,groups:i,cliContext:t}),c=kwA(r.output,n.absoluteFilePath),u=c==null?mc().toString():sn(c).toString(),l;try{l=Iwi({fernWorkspace:o,group:s,source:XFp({specs:a,workingDirectory:u}),clientPathParameterStyle:ZFp(a),sourceDerivedApiFields:JFp({workspace:n,groups:i,definition:o.definition})})}catch(m){throw m instanceof xyi?(b2p(t,m.issues),new S({message:`Could not create SDK Config v1: ${m.message}`,code:S.Code.ValidationError})):m}if(b2p(t,l.diagnostics),r.strict&&l.diagnostics.length>0)throw new S({message:"SDK Config migration produced diagnostics in strict mode",code:S.Code.ValidationError});let p=E2p.default.stringify(l.sdkConfig,{lineWidth:0}),d=p.endsWith(`
5158
+ `,!0),s}function bwA(e,t){if(!(0,Yk.isMap)(e.contents))return[];let r=new Set;p2p(e.contents.get("versions",!0),t,r);let n=e.contents.get("products",!0);if((0,Yk.isSeq)(n))for(let i of n.items)(0,Yk.isMap)(i)&&(m2p(i.get("path",!0),t,r),p2p(i.get("versions",!0),t,r));return[...r].map(Mt.of)}function p2p(e,t,r){if((0,Yk.isSeq)(e))for(let n of e.items)!(0,Yk.isMap)(n)||zer(n.get("ref",!0))!=null||m2p(n.get("path",!0),t,r)}function m2p(e,t,r){let n=zer(e);n!=null&&r.add(N1i.default.resolve(t,n))}function EwA(e,t){if(e.type!=="openapi"&&e.type!=="asyncapi"&&e.type!=="graphql")throw new S({message:`Docs migration does not support direct ${e.type} API specifications`,code:S.Code.ConfigError});let r={type:e.type,path:F1i(t,e.absolutePath),...e.namespace==null?{}:{namespace:e.namespace},...e.absoluteOverlayPaths[0]==null?{}:{overlays:F1i(t,e.absoluteOverlayPaths[0])},...e.absoluteOverridePaths.length===0?{}:{overrides:e.absoluteOverridePaths.map(n=>F1i(t,n))},...e.docsImportSettings==null?{}:{settings:IwA(e.docsImportSettings,t)}};return Ya.RawSchemas.Serializer.ApiSpecConfiguration.jsonOrThrow(r)}function IwA(e,t){let r=e.errorResponses;return{...e,...r==null?{}:{errorResponses:{...r,schema:typeof r.schema=="string"?F1i(t,r.schema):r.schema}}}}function F1i(e,t){let r=N1i.default.relative(e,t).split(N1i.default.sep).join("/");return r.startsWith(".")?r:`./${r}`}function vwA(e){return typeof zer(e.get("api",!0))=="string"}function zer(e){return(0,Yk.isScalar)(e)&&typeof e.value=="string"?e.value:void 0}function xwA(e){if(!(0,Yk.isMap)(e.contents))return!1;let t=e.contents.get("experimental",!0);if(!(0,Yk.isMap)(t))return!1;let r=t.get("openapi-parser-v3",!0);return(0,Yk.isScalar)(r)&&r.value===!1}function jUs(e,t){if((0,Yk.isMap)(e)){t(e);for(let r of e.items)zer(r.key)!=="feature-flag"&&jUs(r.value,t);return}if((0,Yk.isSeq)(e))for(let r of e.items)jUs(r,t)}Ft();In();async function g2p({project:e,cliContext:t,args:r}){let n=await CwA(e,t,r.api),i=n.generatorsConfiguration;if(i==null||i.groups.length===0)throw new S({message:"No SDK generator groups configured in generators.yml",code:S.Code.ConfigError});let o=await wwA(i,t,r.group);return PwA(o),{workspace:n,groups:o}}async function CwA(e,t,r){let n=e.apiWorkspaces;if(n.length===0)throw new S({message:"No APIs found",code:S.Code.ConfigError});if(r!=null){let a=n.find(c=>c.workspaceName===r||c.workspaceName==null&&r==="default");if(a!=null)return a;throw new S({message:`API '${r}' not found. Available APIs: ${DwA(n).join(", ")}`,code:S.Code.ConfigError})}let i=n[0];if(n.length===1&&i!=null)return i;let o=n.map(a=>({name:a.workspaceName??"default",value:a})).sort((a,c)=>a.name.localeCompare(c.name)),s=o.map(a=>a.name);return BwA({cliContext:t,message:"Multiple APIs found. Select one:",choices:o,nonInteractiveError:`Multiple APIs found: ${s.join(", ")}. Use --api to select one.`,flagHint:a=>`--api ${a.workspaceName??"default"}`})}async function wwA(e,t,r){let n=r??(t.isTTY||e.defaultGroup==null?void 0:[e.defaultGroup]);if(n==null){let o=e.groups[0];if(e.groups.length===1&&o!=null)return[o];let s=e.groups.map(c=>c.groupName),a=new Set(e.defaultGroup==null?[]:h2p(e,[e.defaultGroup]));return SwA({cliContext:t,choices:e.groups.map(c=>({checked:a.has(c.groupName),name:c.groupName,value:c})),nonInteractiveError:`Multiple SDK groups found: ${s.join(", ")}. Repeat --group for groups that resolve to the same API and use distinct target languages.`})}return[...new Set(h2p(e,n))].map(o=>{let s=e.groups.find(a=>a.groupName===o);if(s==null)throw new S({message:`SDK group '${o}' not found`,code:S.Code.ConfigError});return s})}function h2p(e,t){let r=e.groups.map(n=>n.groupName);return t.flatMap(n=>{let i=kwi({name:n,groupAliases:e.groupAliases,availableGroupNames:r});if(i.type==="alias-references-missing-group")throw new S({message:`Group alias '${i.alias}' references non-existent group '${i.missingGroupName}'. Available groups: ${i.availableGroupNames.join(", ")}`,code:S.Code.ConfigError});if(i.type==="unknown"){let o=i.availableAliasNames.length>0?`; aliases: ${i.availableAliasNames.join(", ")}`:"";throw new S({message:`SDK group '${i.name}' not found. Available groups: ${i.availableGroupNames.join(", ")}${o}`,code:S.Code.ConfigError})}return i.groupNames})}async function SwA({cliContext:e,choices:t,nonInteractiveError:r}){if(!e.isTTY)throw new S({message:r,code:S.Code.ConfigError});let n=Math.max(...t.map(i=>i.name.length));return e.checkboxPrompt({message:"Select SDK groups to migrate (same API; one target per language):",required:!0,validate:A2p,choices:t.map(i=>({checked:i.checked,name:`${i.name.padEnd(n)} ${fe.dim(`[${OwA(i.value)}]`)} ${fe.dim(`--group ${i.name}`)}`,short:i.name,value:i.value}))})}function TwA(e){return e.generators.flatMap(t=>{let r=t.language??Vk(t.name);return r==null?[]:[r]})}function OwA(e){let t=TwA(e);return t.length>0?y2p(t):e.generators.length===0?"no targets":"unknown target"}function A2p(e){let t=new Map;for(let a of e)for(let c of a.generators){let u=c.language??Vk(c.name);if(u==null)continue;let l=t.get(u)??[];l.push(a.groupName),t.set(u,l)}let r=[...t.entries()].filter(([,a])=>a.length>1);if(r.length===0)return!0;let n=r.map(([a,c])=>`${a} (${y2p(c)})`).join("; "),i=r.some(([,a])=>new Set(a).size<a.length),o=r.some(([,a])=>new Set(a).size>1),s=[...i?["Split same-language generators into separate Fern groups, then migrate each group separately."]:[],...o?["Select at most one conflicting group per language, or migrate those groups separately."]:[],"Use distinct outputs such as sdk-config.<group>.yml."].join(" ");return`One SDK Config allows one target per language. Conflicts: ${n}. ${s}`}function y2p(e){let t=new Map;for(let r of e)t.set(r,(t.get(r)??0)+1);return[...t.entries()].map(([r,n])=>n===1?r:`${r} \xD7${n}`).join(", ")}function PwA(e){let t=A2p(e);if(t!==!0)throw new S({message:t,code:S.Code.ConfigError})}async function BwA({cliContext:e,message:t,choices:r,nonInteractiveError:n,flagHint:i}){if(!e.isTTY)throw new S({message:n,code:S.Code.ConfigError});let o=Math.max(...r.map(s=>s.name.length));return e.selectPrompt({message:t,choices:r.map(s=>({name:`${s.name.padEnd(o)} ${fe.dim(i(s.value))}`,value:s.value}))})}function DwA(e){return e.map(t=>t.workspaceName??"default").sort()}var RwA=ve.of("sdk-config.yml");async function I2p({project:e,cliContext:t,args:r}){let{workspace:n,groups:i}=await g2p({project:e,cliContext:t,args:r}),{fernWorkspace:o,group:s,sourceSpecs:a}=await o2p({workspace:n,groups:i,cliContext:t}),c=kwA(r.output,n.absoluteFilePath),u=c==null?mc().toString():sn(c).toString(),l;try{l=Iwi({fernWorkspace:o,group:s,source:XFp({specs:a,workingDirectory:u}),replay:n.generatorsConfiguration?.replay,clientPathParameterStyle:ZFp(a),sourceDerivedApiFields:JFp({workspace:n,groups:i,definition:o.definition})})}catch(m){throw m instanceof xyi?(b2p(t,m.issues),new S({message:`Could not create SDK Config v1: ${m.message}`,code:S.Code.ValidationError})):m}if(b2p(t,l.diagnostics),r.strict&&l.diagnostics.length>0)throw new S({message:"SDK Config migration produced diagnostics in strict mode",code:S.Code.ValidationError});let p=E2p.default.stringify(l.sdkConfig,{lineWidth:0}),d=p.endsWith(`
5159
5159
  `)?p:`${p}
5160
5160
  `;c==null?t.writeTextToStdout(d):(await k1i(c,d,r.force),t.stderr.info(`Created SDK Config v1 at ${c}`));let f=await d2p({docsPath:e.docsWorkspaces?.absoluteFilepathToDocsConfig,workspaceName:n.workspaceName,isOnlyApiWorkspace:e.apiWorkspaces.length===1,sourceSpecs:a});f>0&&t.stderr.info(`Updated ${f} API reference section${f===1?"":"s"} across the docs configuration rooted at ${e.docsWorkspaces?.absoluteFilepathToDocsConfig}`),c!=null&&t.stderr.info("Next: review the migrated file, then pass its path to fern generate --sdk-config.")}function kwA(e,t){if(e!=="-")return e==null?ze(t,RwA):Yn(mc(),e)}function b2p(e,t){for(let r of t){let n=r.sdkConfigPath==null?"":`; SDK Config: ${r.sdkConfigPath.join(".")}`;e.stderr.warn(`[${r.severity}] [${r.code}] ${r.path.join(".")}: ${r.reason}${n}; ${r.suggestedAction}`)}}Pc();ro();Yt();Ft();var P2p=be(require("fs/promises"),1);var FwA="0.0.1";function v2p({previewId:e}){let t=Math.floor(Date.now()/1e3);return`${FwA}-${e}.${t}`}var x2p=require("child_process"),C2p=require("crypto"),w2p=require("util"),NwA=(0,w2p.promisify)(x2p.exec),jwA=40;async function S2p(){try{let{stdout:e}=await NwA("git rev-parse --abbrev-ref HEAD"),t=e.trim();if(t==="HEAD"||t==="")return QUs();let r=QwA(t);return r===""?QUs():r}catch{return QUs()}}function QwA(e){return e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,jwA).replace(/-$/,"")}function QUs(){return(0,C2p.randomBytes)(4).toString("hex")}function T2p(e,t){let r=e.match(/^@[^/]+\/(.+)$/);if(r!=null){let[,n]=r;return`@${t}-preview/${n}`}return`@${t}-preview/${e}`}function O2p(e){return e.startsWith("https://")||e.startsWith("http://")}async function zUs({cliContext:e,groupName:t,generatorFilter:r,apiName:n,output:i,local:o,pushDiff:s}){let a=[],c,u,l=!0;try{if(s&&o)return{status:"error",message:"--push-diff requires remote generation and cannot be combined with --local."};let p=await e.runTask(async x=>ed(x));if(p==null)return{status:"error",message:"Authentication required. Run 'fern login' or set FERN_TOKEN.",code:S.Code.AuthError};let d=await La(e,{commandLineApiWorkspace:n,defaultToAllApiWorkspaces:!1});c=d.config.organization,p.type==="user"&&await e.runTask(async x=>{await iS({organization:d.config.organization,token:p,context:x})});let f=await S2p();e.logger.info(`Preview ID: ${f}`);let m=i?.filter(x=>!O2p(x))??[],g=i?.filter(O2p)??[];m.length>1&&e.logger.warn(`Multiple output paths provided; only the first will be used: ${m[0]}`),g.length>1&&e.logger.warn(`Multiple registry URLs provided; only the first will be used: ${g[0]}`);let A=!o;i==null?(u=_1p,l=!0):g.length>0?(u=g[0],l=!0):(u=void 0,l=!1);let y=m[0],E=y!=null?Mt.of(Yn(mc(),y)):void 0;E!=null&&await P2p.default.mkdir(E,{recursive:!0});for(let x of d.apiWorkspaces){if(x.generatorsConfiguration==null){e.logger.warn(`Workspace "${x.workspaceName}" has no ${lp}`);continue}let v=t??x.generatorsConfiguration.defaultGroup;if(v==null)return{status:"error",message:`No group specified. Use the --${uer} option, or set "${_be}" in ${lp}`,code:S.Code.ConfigError};let C=x.generatorsConfiguration.groups.find(P=>P.groupName===v);if(C==null)return{status:"error",message:`Group '${v}' does not exist in ${lp}`,code:S.Code.ConfigError};let O=r!=null?C.generators.filter(P=>P.name===r):C.generators;if(r!=null&&O.length===0)return{status:"error",message:`Generator '${r}' not found in group '${v}' in ${lp}`,code:S.Code.ConfigError};let D=O.filter(P=>yer(P.name)),R=O.filter(P=>!yer(P.name));for(let P of R)e.logger.warn(`Skipping '${P.name}' \u2014 SDK preview currently only supports TypeScript/npm generators. Use --generator to target a specific generator.`);if(D.length===0)return{status:"error",message:`No supported generators found in group '${v}'. SDK preview currently only supports TypeScript/npm generators.`,code:S.Code.ConfigError};for(let P of D){let M=m0e(P);if(M==null)return{status:"error",message:`Could not determine package name for generator '${P.name}'. Ensure 'output.package-name' is set in ${lp}.`,code:S.Code.ConfigError};let J=T2p(M,d.config.organization),X=v2p({previewId:f});e.logger.info(`Preview version: ${X}`);let $={...C,generators:[P]},ie=H4s(P.outputMode);s&&A&&ie==null&&e.logger.warn(`Generator '${P.name}' has no github output configuration. --push-diff will be ignored; falling back to registry-only publish.`);let ue=s&&A&&l&&u!=null&&ie!=null,oe;if(l&&u!=null?oe=q1p({group:$,packageName:J,token:p.value,registryUrl:u}):A?oe=G1p({group:$}):oe=$,A){let se={projectConfig:d.config,organization:d.config.organization,workspace:x,shouldLogS3Url:!1,token:p,whitelabel:x.generatorsConfiguration?.whitelabel,replay:x.generatorsConfiguration?.replay,mode:void 0,fernignorePath:void 0,skipFernignore:!1,dynamicIrOnly:!1,validateWorkspace:!0,retryRateLimited:!1,requireEnvVars:!1,verify:!1};if(await e.runTaskForWorkspace(x,async ae=>{await Fke({...se,context:ae,generatorGroup:oe,version:X,absolutePathToPreview:E,isPreview:!0,fiddlePreview:!1,pushPreviewBranch:!1,getSpecsTarGzBuffer:per({workspace:x,context:ae,group:oe})})}),ue){let ae=W1p({group:$});ae.generators.length>0&&await e.runTaskForWorkspace(x,async Oe=>{await Fke({...se,context:Oe,generatorGroup:ae,version:X,absolutePathToPreview:void 0,isPreview:!0,fiddlePreview:!0,pushPreviewBranch:!0,getSpecsTarGzBuffer:per({workspace:x,context:Oe,group:ae})})})}}else await e.runTaskForWorkspace(x,async se=>{await BTt({token:p,projectConfig:d.config,workspace:x,generatorGroup:oe,version:X,keepDocker:!1,context:se,absolutePathToPreview:E,runner:void 0,inspect:!1,ai:x.generatorsConfiguration?.ai,replay:void 0,noReplay:!0,validateWorkspace:!0,publishToRegistry:l,isPreview:!0,disableTelemetry:bGe()})});let de=E!=null?ze(E,ve.of(w$t(P.name))):void 0,we=`fern-preview-${X}`,De=s&&ie!=null?`https://github.com/${ie.owner}/${ie.repo}/compare/${we}`:void 0;if(l&&u!=null){let se=`npm install ${M}@npm:${J}@${X} --registry ${u}`;a.push({preview_id:f,install:se,version:X,package_name:J,registry_url:u,output_path:de,diff_url:De})}else a.push({preview_id:f,install:"",version:X,package_name:J,registry_url:"",output_path:de,diff_url:De})}}}catch(p){return{status:"error",message:p instanceof Error?p.message:String(p)}}return{status:"success",org:c??"",previews:a}}Q0();Ft();In();var B2p=require("fs/promises"),Wh=require("path");async function zwA(e,t){let r,n;switch(t){case"npm":r="npm",n=["bin","-g"];break;case"pnpm":r="pnpm",n=["bin","-g"];break;case"yarn":r="yarn",n=["global","bin"];break;case"bun":r="bun",n=["pm","bin","-g"];break}let{stdout:i,failed:o}=await Ca(e,r,n,{doNotPipeOutput:!0,reject:!1});return o||!i.trim()?null:i.trim()}async function MwA(e){let r=process.platform==="win32"?"where":"which",{stdout:n,failed:i}=await Ca(e,r,["fern"],{doNotPipeOutput:!0,reject:!1});if(i||!n.trim())return{type:"unknown",command:""};let o=n.trim().split(/\r?\n/)[0]??n.trim();e.debug(`Found fern at: ${o}`);let s;try{s=await(0,B2p.realpath)(o),e.debug(`Resolved to: ${s}`)}catch(l){e.debug(`Failed to resolve symlink: ${l}`),s=o}if(process.platform!=="win32"&&(s.includes("/Cellar/")||s.includes("/Homebrew/")||s.includes("/opt/homebrew/")||s.includes("/usr/local/Cellar/"))){let{failed:l}=await Ca(e,"brew",["list","--versions","fern-api"],{doNotPipeOutput:!0,reject:!1});if(!l)return{type:"brew",command:"brew",detectedPath:o,resolvedPath:s};let{failed:p}=await Ca(e,"brew",["list","--versions","fern"],{doNotPipeOutput:!0,reject:!1});if(!p)return{type:"brew",command:"brew",detectedPath:o,resolvedPath:s}}let a=(0,Wh.dirname)(s);e.debug(`fern directory: ${a}`);let c=["pnpm","yarn","bun","npm"];for(let l of c){let p=await zwA(e,l);if(p!=null){e.debug(`${l} bin dir: ${p}`);let d=(0,Wh.normalize)(a),f=(0,Wh.normalize)(p);if(d===f||d.startsWith(f+Wh.sep)||d.startsWith(f+"/")||d.startsWith(f+"\\"))return{type:l,command:l,detectedPath:o,resolvedPath:s}}}let u=(0,Wh.normalize)(s);return u.includes(".pnpm")||u.includes("pnpm-global")||u.includes(`${Wh.sep}pnpm${Wh.sep}`)||u.includes("/pnpm/")||u.includes("\\pnpm\\")?{type:"pnpm",command:"pnpm",detectedPath:o,resolvedPath:s}:u.includes(`${Wh.sep}.yarn${Wh.sep}`)||u.includes(`${Wh.sep}yarn${Wh.sep}`)||u.includes("/.yarn/")||u.includes("/yarn/")||u.includes("\\.yarn\\")||u.includes("\\yarn\\")?{type:"yarn",command:"yarn",detectedPath:o,resolvedPath:s}:u.includes(`${Wh.sep}.bun${Wh.sep}`)||u.includes(`${Wh.sep}bun${Wh.sep}`)||u.includes("/.bun/")||u.includes("/bun/")||u.includes("\\.bun\\")||u.includes("\\bun\\")?{type:"bun",command:"bun",detectedPath:o,resolvedPath:s}:u.includes(`${Wh.sep}lib${Wh.sep}node_modules${Wh.sep}`)||u.includes(`${Wh.sep}node_modules${Wh.sep}`)||u.includes("/lib/node_modules/")||u.includes("/node_modules/")||u.includes("\\lib\\node_modules\\")||u.includes("\\node_modules\\")?{type:"npm",command:"npm",detectedPath:o,resolvedPath:s}:(e.debug("Installation method detection failed:"),process.platform!=="win32"&&e.debug(" - Not installed via Homebrew (no Cellar/Homebrew path)"),e.debug(" - Package manager bin directories checked: pnpm, yarn, bun, npm (none matched)"),e.debug(` - Path patterns checked: .pnpm, pnpm-global, ${Wh.sep}pnpm${Wh.sep}, .yarn, ${Wh.sep}yarn${Wh.sep}, .bun, ${Wh.sep}bun${Wh.sep}, ${Wh.sep}node_modules${Wh.sep}`),e.debug(` - Resolved path: ${s}`),e.debug(` - Directory: ${a}`),{type:"unknown",command:"",detectedPath:o,resolvedPath:s})}function LwA(e,t){let r=t!=null?`fern-api@${t}`:"fern-api@latest";switch(e.type){case"npm":return["npm","install","-g",r];case"pnpm":return["pnpm","add","-g",r];case"yarn":return["yarn","global","add",r];case"bun":return["bun","install","-g",r];case"brew":return["brew","upgrade","fern-api"];default:return[]}}async function D2p({cliContext:e,version:t,dryRun:r}){e.logger.info("Detecting installation method...");let n=await MwA(e.logger);if(n.type==="unknown"){let l="Could not detect how Fern CLI was installed.";return n.detectedPath!=null&&(l+=`
5161
5161
  Found fern at: ${n.detectedPath}`,n.resolvedPath!=null&&n.resolvedPath!==n.detectedPath&&(l+=`