fern-api 5.121.0 → 5.121.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.cjs +7 -7
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -3367,7 +3367,7 @@ ${bju.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&wzo(th
|
|
|
3367
3367
|
`+y3e.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?y3e.default.cyan(Oju(t,this.opt.mask)):y3e.default.italic(y3e.default.dim("[hidden]")):this.opt.mask?Oju(t,this.opt.mask):y3e.default.italic(y3e.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 D7r=ye($w(),1);var TQu=ye(sMo(),1),B7r=require("child_process"),Sot=require("fs"),O7r=ye(require("path"),1),OQu=ye(require("os"),1),BQu=require("crypto"),GMo=ye(wQu(),1);var w7r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var m_t=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var S7r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var T7r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function P7r(e="",t,r){let n=new qMo(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 SQu(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function sSm(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 qMo=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=sSm(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??OQu.default.tmpdir(),r=(0,BQu.randomUUID)(),n=SQu(this.fileOptions.prefix),i=SQu(this.fileOptions.postfix),o=`${n}${r}${i}`,s=O7r.default.resolve(t,o),a=O7r.default.resolve(t)+O7r.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,Sot.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new w7r(t)}}readTemporaryFile(){try{let t=(0,Sot.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,TQu.detect)(t)??"utf8";GMo.default.encodingExists(r)||(r="utf8"),this.text=GMo.default.decode(t,r)}}catch(t){throw new S7r(t)}}removeTemporaryFile(){try{(0,Sot.unlinkSync)(this.tempFile)}catch(t){throw new T7r(t)}}launchEditor(){try{let t=(0,B7r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new m_t(t)}}launchEditorAsync(t){try{(0,B7r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new m_t(r)}}};var PQu=ye(E3(),1);var h_t=class extends eS{_run(t){this.done=t,this.editorResult=new PQu.Subject;let r=GB(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"?D7r.default.dim("Received"):D7r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=D7r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),P7r(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 NQu=require("stream");var kQu=ye(require("readline"),1),FQu=ye(RQu(),1),v3e=class{constructor(t){this.rl||=kQu.default.createInterface(cSm(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 cSm(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 FQu.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var g_t=class extends v3e{constructor(t={}){super(t),this.log=new NQu.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return $Ut(this.rl,this.bottomBar.split(`
|
|
3368
3368
|
`).length),this}updateBottomBar(t){return $Ut(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+`
|
|
3369
3369
|
`}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&&$qr(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var Ud=ye(E3(),1),zQu=ye(PUt(),1);var R7r=ye(E3(),1),jQu=ye(PUt(),1),k7r=function(e,t,r){return typeof e[t]!="function"?(0,R7r.of)(e):(0,R7r.from)((0,jQu.default)(e[t])(r).then(n=>(e[t]=n,e)))};var QQu={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}},Tot=class extends v3e{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,Ud.from)(t):(0,Ud.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,Ud.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,Ud.from)([t]),this.process=n.pipe((0,Ud.concatMap)(this.processQuestion.bind(this)),(0,Ud.publish)()),this.process.connect(),this.process.pipe((0,Ud.reduce)((i,o)=>(QQu.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,Ud.defer)(()=>(0,Ud.of)(t).pipe((0,Ud.concatMap)(this.setDefaultType.bind(this)),(0,Ud.concatMap)(this.filterIfRunnable.bind(this)),(0,Ud.concatMap)(()=>k7r(t,"message",this.answers)),(0,Ud.concatMap)(()=>k7r(t,"default",this.answers)),(0,Ud.concatMap)(()=>k7r(t,"choices",this.answers)),(0,Ud.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,Ud.defer)(()=>(0,Ud.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,Ud.defer)(()=>(0,Ud.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&QQu.get(this.answers,t.name)!==void 0)return Ud.EMPTY;if(t.when===!1)return Ud.EMPTY;if(typeof t.when!="function")return(0,Ud.of)(t);let{answers:r}=this;return(0,Ud.defer)(()=>(0,Ud.from)((0,zQu.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,Ud.filter)(n=>n!=null)))}};function MQu(e){let t=function(r,n){let i;try{i=new Tot(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",t_t),this.registerPrompt("input",A3e),this.registerPrompt("number",r_t),this.registerPrompt("confirm",n_t),this.registerPrompt("rawlist",i_t),this.registerPrompt("expand",o_t),this.registerPrompt("checkbox",s_t),this.registerPrompt("password",a_t),this.registerPrompt("editor",h_t)},t.restoreDefaultPrompts(),t}var HMo=MQu();function lSm(e,t){HMo.registerPrompt(e,t)}function pSm(){HMo.restoreDefaultPrompts()}var fSm={prompt:HMo,ui:{BottomBar:g_t,Prompt:Tot},createPromptModule:MQu,registerPrompt:lSm,restoreDefaultPrompts:pSm,Separator:pz},pu=fSm;var Oot=require("path");function VQu(){let e=dSm();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function dSm(e=process.argv[1]?(0,Oot.dirname)(process.argv[1]):process.cwd(),t=Oot.sep==="\\"){let r=t?LQu(e):e;return n=>{if(!n)return;let i=t?LQu(n):n,{dir:o,base:s,ext:a}=Oot.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 LQu(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var KMo=e=>{if("flags"in e){let t=UQu(e.flags),r=_Qu(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,JMo(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,mSm(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function mSm(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 UQu=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,A_t(r)]).filter(([,t])=>t!==void 0)),_Qu=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?JMo(n):void 0]}))};var A_t=e=>e===void 0?void 0:e.variant??e.enabled,JMo=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var E2=(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 YMo(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var gSm="NativeGzipValidationError",ASm=31,ySm=139,bSm=8,ESm=e=>e.length>=2&&e[0]===ASm&&e[1]===ySm;var y_t,ISm=()=>{if(y_t)return y_t;y_t=[];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;y_t[e]=t>>>0}return y_t},vSm=e=>{let t=ISm(),r=4294967295;for(let n=0;n<e.length;n++)r=t[(r^e[n])&255]^r>>>8;return(4294967295^r)>>>0},F7r=e=>{let t=new Error(`Native gzip produced invalid output: ${e}`);throw t.name=gSm,t},xSm=async(e,t)=>{e.size<18&&F7r("too-short");let r=new Uint8Array(await e.slice(0,10).arrayBuffer());(!ESm(r)||r[2]!==bSm)&&F7r("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());n.getUint32(0,!0)!==vSm(t)&&F7r("invalid-crc");let i=t.length>>>0;n.getUint32(4,!0)!==i&&F7r("invalid-size")};async function b_t(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 xSm(c,n),c}catch(n){if(r?.rethrow)throw n;return t&&console.error("Failed to gzip compress data",n),null}}var CSm=["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"],GQu=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return CSm.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var SSm=Array.isArray,qQu=Object.prototype,qMI=qQu.hasOwnProperty,XMo=qQu.toString,Bot=SSm||function(e){return XMo.call(e)==="[object Array]"};var E_t=e=>e===Object(e)&&!Bot(e);var Pot=e=>e===void 0,Pxe=e=>XMo.call(e)=="[object String]",WQu=e=>Pxe(e)&&e.trim().length===0;var I_t=e=>XMo.call(e)=="[object Number]"&&e===e;var ZMo=e=>e instanceof Error;function N7r(e){return e===null||typeof e!="object"}function x3e(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function HQu(e){return x3e(e,"ErrorEvent")}function Dot(e){return typeof Event<"u"&&TSm(e,Event)}function KQu(e){return x3e(e,"Object")}function TSm(e,t){try{return e instanceof t}catch{return!1}}function v_t(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),I_t(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),v_t(i||r,t,r,n))}var OSm=864e5,j7r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=v_t(t.bucketSize,0,100,t._logger),this._refillRate=v_t(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=v_t(t.refillInterval,0,OSm,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 Q7r="0123456789abcdef",z7r=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+=Q7r.charAt(this.bytes[r]>>>4),t+=Q7r.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+=Q7r.charAt(this.bytes[r]>>>4),t+=Q7r.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}},$Mo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??BSm()}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 z7r.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,z7r.ofInner(t)}},BSm=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),JQu,Kee=()=>PSm().toString(),PSm=()=>(JQu||(JQu=new $Mo)).generate();var M7r=class{add(t){let r=Kee();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 DSm(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var YQu=(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=>YQu(`${e} ${o}`,t,r)}},RSm=e=>e();function XQu(e,t=RSm){return YQu(e,t,DSm())}var kot="Mobile",V7r="iOS",Rot="Android",ZQu="Tablet",n6I=Rot+" "+ZQu;var FSm="Apple",i6I=FSm+" Watch",$Qu="Safari",U7r="BlackBerry",ezu="Samsung",NSm=ezu+"Browser",jSm=ezu+" Internet",_7r="Chrome",QSm=_7r+" OS",zSm=_7r+" "+V7r,tzu="Internet Explorer",MSm=tzu+" "+kot,t6o="Opera",o6I=t6o+" Mini",rzu="Edge",LSm="Microsoft "+rzu,r6o="Firefox",VSm=r6o+" "+V7r,n6o="Nintendo",i6o="PlayStation",L7r="Xbox",USm=Rot+" "+kot,_Sm=kot+" "+$Qu,x_t="Windows",GSm=x_t+" Phone";var nzu="Generic",s6I=nzu+" "+kot.toLowerCase(),a6I=nzu+" "+ZQu.toLowerCase(),qSm="Konqueror",WSm="Oculus Browser",HD="(\\d+(\\.\\d+)?)",e6o=new RegExp("Version/"+HD),c6I=new RegExp(L7r,"i"),u6I=new RegExp(i6o+" \\w+","i"),l6I=new RegExp(n6o+" \\w+","i"),HSm=new RegExp(U7r+"|PlayBook|BB10","i"),KSm={"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 p6I={[MSm]:[new RegExp("rv:"+HD)],[LSm]:[new RegExp(rzu+"?\\/"+HD)],[_7r]:[new RegExp("("+_7r+"|CrMo)\\/"+HD)],[zSm]:[new RegExp("CriOS\\/"+HD)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+HD)],[$Qu]:[e6o],[_Sm]:[e6o],[t6o]:[new RegExp("("+t6o+"|OPR)\\/"+HD)],[r6o]:[new RegExp(r6o+"\\/"+HD)],[VSm]:[new RegExp("FxiOS\\/"+HD)],[qSm]:[new RegExp("Konqueror[:/]?"+HD,"i")],[U7r]:[new RegExp(U7r+" "+HD),e6o],[USm]:[new RegExp("android\\s"+HD,"i")],[jSm]:[new RegExp(NSm+"\\/"+HD)],[WSm]:[new RegExp("OculusBrowser\\/"+HD)],[tzu]:[new RegExp("(rv:|MSIE )"+HD)],Mozilla:[new RegExp("rv:"+HD)]};var f6I=[[new RegExp(L7r+"; "+L7r+" (.*?)[);]","i"),e=>[L7r,e&&e[1]||""]],[new RegExp(n6o,"i"),[n6o,""]],[new RegExp(i6o,"i"),[i6o,""]],[HSm,[U7r,""]],[new RegExp(x_t,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[GSm,""];if(new RegExp(kot).test(t)&&!/IEMobile\b/.test(t))return[x_t+" "+kot,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=KSm[n]||"";return/arm/i.test(t)&&(i="RT"),[x_t,i]}return[x_t,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[V7r,t.join(".")]}return[V7r,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=Pot(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+Rot+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Rot+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[Rot,t.join(".")]}return[Rot,""]}],[/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/,[QSm,""]],[/Linux|debian/i,["Linux",""]]];var izu="utf8";function ozu(e){return e?.replace(/\/+$/,"")}async function szu(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 G7r(){return new Date().toISOString()}function Jee(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var azu=e=>e instanceof Error;function o6o(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var JSm={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}},S6I=JSm.info;var q7r=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 w3e=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()}},C3e=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function czu(e){if(e instanceof w3e){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 W7r(e){return typeof e=="object"&&(e instanceof w3e||e instanceof C3e)}function H7r(e){return typeof e=="object"&&e instanceof w3e&&e.status===413}var C_t=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new M7r,this._events=new q7r,this._isInitialized=!1;let n=typeof t=="string"?t.trim():"",i=typeof r.host=="string"?r.host.trim():"",o=!n;this._logger=XQu("[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=ozu(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:W7r},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=!YMo()||(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(E2.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(E2.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(E2.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:KMo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof w3e)return{type:"api_error",statusCode:t.status};if(t instanceof C3e){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=A_t(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(E2.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(E2.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(E2.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(E2.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(E2.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=Jee(()=>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:G7r()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await b_t(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:G7r(),uuid:n?.uuid?n.uuid:Kee()};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 czu(t)})}async flush(){if(this.disabled)return;let t=o6o([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),o6o([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(E2.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(E2.Queue)||[]).slice(i.length);this.setPersistedProperty(E2.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:G7r()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await b_t(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>H7r(f)?!1:W7r(f)};try{await(await this.fetchWithRetry(u,p,d)).body?.cancel()?.catch(()=>{})}catch(f){if(H7r(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 C3e||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 b_t(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=>H7r(s)?!1:W7r(s)}),{kind:"ok"}}catch(s){return H7r(s)?{kind:"too-large"}:s instanceof C3e?{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,izu)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await szu(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=Jee(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new C3e(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new w3e(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(E2.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!W7r(o))throw o;await czu(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=Jee(()=>{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 dz={};Z(dz,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>Z7r,DOMExceptionCoercer:()=>u6o,EXCEPTION_STEP_INTERNAL_FIELDS:()=>w_t,ErrorCoercer:()=>l6o,ErrorEventCoercer:()=>p6o,ErrorPropertiesBuilder:()=>s6o,EventCoercer:()=>m6o,ExceptionStepsBuffer:()=>b6o,ObjectCoercer:()=>d6o,PrimitiveCoercer:()=>h6o,PromiseRejectionEventCoercer:()=>g6o,ReduceableCache:()=>A6o,StringCoercer:()=>f6o,chromeStackLineParser:()=>a6o,createDefaultStackParser:()=>f1m,createStackParser:()=>bzu,geckoStackLineParser:()=>c6o,getUtf8ByteLength:()=>Izu,nodeStackLineParser:()=>hzu,opera10StackLineParser:()=>fzu,opera11StackLineParser:()=>dzu,resolveExceptionStepsConfig:()=>y6o,reverseAndStripFrames:()=>yzu,stripReservedExceptionStepFields:()=>h1m,winjsStackLineParser:()=>pzu});var K7r,uzu,J7r;function lzu(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return J7r&&r.length===uzu||(uzu=r.length,J7r=r.reduce((n,i)=>{K7r||(K7r={});let o=K7r[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,K7r[i]=[u,l];break}}}return n},{})),J7r}var $Sm=4,s6o=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&&Bot(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:lzu(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=$Sm){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 WB="?";function Yee(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?WB:r,in_app:!0};return Pot(n)||(o.lineno=n),Pot(i)||(o.colno=i),o}var Y7r=(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]:WB,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var e1m=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,t1m=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,r1m=/\((\S*)(?::(\d+))(?::(\d+))\)/,a6o=(e,t)=>{let r=e1m.exec(e);if(r){let[,i,o,s]=r;return Yee(t,i,WB,+o,+s)}let n=t1m.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=r1m.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=Y7r(n[1]||WB,n[2]);return Yee(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var n1m=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,i1m=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c6o=(e,t)=>{let r=n1m.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=i1m.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]||WB;return[o,i]=Y7r(o,i),Yee(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var o1m=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,pzu=(e,t)=>{let r=o1m.exec(e);return r?Yee(t,r[2],r[1]||WB,+r[3],r[4]?+r[4]:void 0):void 0};var s1m=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,fzu=(e,t)=>{let r=s1m.exec(e);return r?Yee(t,r[2],r[3]||WB,+r[1]):void 0},a1m=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,dzu=(e,t)=>{let r=a1m.exec(e);return r?Yee(t,r[5],r[3]||r[4]||WB,+r[1],+r[2]):void 0};var c1m=/^\s*[-]{4,}$/,u1m=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,hzu=(e,t)=>{let r=e.match(u1m);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||WB,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:mzu(r[3]),colno:mzu(r[4]),in_app:l1m(c||"",u),platform:t}}if(e.match(c1m))return{filename:e,platform:t}};function l1m(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 mzu(e){return parseInt(e||"",10)||void 0}var gzu=/\(error: (.*)\)/,Azu=50;function yzu(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,Azu).map(r=>({...r,filename:r.filename||p1m(t).filename,function:r.function||WB}))}function p1m(e){return e[e.length-1]||{}}function f1m(){return bzu("web:javascript",a6o,c6o)}function bzu(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
3370
|
-
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=gzu.test(a)?a.replace(gzu,"$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>=Azu)break}}return yzu(i)}}var u6o=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=Pxe(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 x3e(t,"DOMException")}isDOMError(t){return x3e(t,"DOMError")}};var l6o=class{match(t){return ZMo(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 p6o=class{constructor(){}match(t){return HQu(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 d1m=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,f6o=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(d1m);return i&&(r=i[1],n=i[2]),[r,n]}};var Ezu=["fatal","error","warning","log","info","debug"];function X7r(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 d6o=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 Dot(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=X7r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return Pxe(t)&&!WQu(t)&&Ezu.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(azu(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var m6o=class{match(t){return Dot(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${X7r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var h6o=class{match(t){return N7r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var g6o=class{match(t){return x3e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Dot(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 N7r(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 A6o=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 w_t={MESSAGE:"$message",TIMESTAMP:"$timestamp"},m1m=new Set([w_t.MESSAGE,w_t.TIMESTAMP]),Z7r={enabled:!0,max_bytes:32768};function y6o(e){return e?{enabled:e.enabled??Z7r.enabled,max_bytes:g1m(e.max_bytes,Z7r.max_bytes)}:{...Z7r}}function h1m(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>m1m.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var b6o=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=y6o(t)}setConfig(t){this._config=y6o(t),this._trimToMaxBytes()}add(t){let r=A1m(t);if(!r)return;let n=Izu(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 g1m(e,t){if(!I_t(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function A1m(e){let t=y1m(e);if(t)try{let r=JSON.parse(t);if(!E_t(r))return;let n=r,i=n[w_t.MESSAGE],o=n[w_t.TIMESTAMP];return!Pxe(i)||i.trim().length===0||!Pxe(o)&&!I_t(o)?void 0:{step:n,json:t}}catch{return}}function y1m(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 Izu(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 Czu=require("fs"),wzu=require("readline"),$7r=new dz.ReduceableCache(25),Szu=new dz.ReduceableCache(20),E6o=7,b1m=1e3,E1m=1e4;async function Tzu(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"||C1m(s)||w1m(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(Szu.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=T1m(o);if(s.every(c=>S1m(i,c)))continue;let a=O1m($7r,i,{});n.push(I1m(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&v1m(e,$7r),$7r.reduce(),e}function I1m(e,t,r){return new Promise(n=>{let i=(0,Czu.createReadStream)(e),o=(0,wzu.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(){Szu.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]=B1m(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 v1m(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;x1m(r.lineno,r,n)}}function x1m(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=Ozu(e);i<e;i++){let o=r[i];if(o===void 0)return void vzu(t);t.pre_context.push(o)}if(r[e]===void 0)return void vzu(t);t.context_line=r[e];let n=Bzu(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 vzu(e){delete e.pre_context,delete e.context_line,delete e.post_context}function C1m(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function w1m(e){return e.lineno!==void 0&&e.lineno>E1m||e.colno!==void 0&&e.colno>b1m}function S1m(e,t){let r=$7r.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 T1m(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=xzu(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+E6o:(i.push(n),n=xzu(o)),t++}return i}function xzu(e){return[Ozu(e),Bzu(e)]}function Ozu(e){return Math.max(1,e-E6o)}function Bzu(e){return e+E6o}function O1m(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function B1m(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 Fot=require("path");function Pzu(e=process.cwd()){let t=Fot.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,Fot.isAbsolute)(o.filename)&&(o.filename=r((0,Fot.relative)(n,r(o.filename))));return i}}function P1m(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 Dzu(e,t){globalThis.process?.on("uncaughtException",P1m(e,t))}function Rzu(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var D1m=2e3,RH=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new j7r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return E_t(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()&&(Dzu(this.onException.bind(this),this.onFatalError.bind(this)),Rzu(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(D1m),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var kzu="5.35.1";var ide={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var Not=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(ide.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(ide.QUOTA_LIMITED),r===void 0&&o.push(ide.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 Fzu(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 R1m=6e4,k1m=1152921504606847e3,F1m=["is_not","is_set"],jot=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},_d=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},Xee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},eWr=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 Xee||u instanceof _d?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 Xee||u instanceof _d?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 _d("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 _d("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 _d(`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 _d("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new _d(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new _d(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new _d(`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 _d(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new _d(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new _d(`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 Xee)throw f;if(f instanceof _d)l=!0;else throw f}if(p!==void 0)return p;if(l)throw new _d("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 Mzu(c,i,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,i,o)):u==="flag"?await this.evaluateFlagDependency(c,i,o):zzu(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await Nzu(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await Nzu(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(R1m,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 jot(`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 jot(`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 jot(`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 jot&&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=Jee(()=>{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 Nzu(e,t,r=""){let n=await Fzu(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/k1m}function zzu(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 _d(`Property ${n} not found in propertyValues`)}let s=t[n];if(s==null&&!F1m.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 jzu(String(i))&&String(s).match(String(i))!==null;case"not_regex":return jzu(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 _d("Date operations cannot be performed on boolean values");let u=M1m(String(i));if(u==null&&(u=Qzu(i)),u==null)throw new _d(`Invalid date: ${i}`);let l=Qzu(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return e5(HB(String(s)),HB(String(i)))===0;case"semver_neq":return e5(HB(String(s)),HB(String(i)))!==0;case"semver_gt":return e5(HB(String(s)),HB(String(i)))>0;case"semver_gte":return e5(HB(String(s)),HB(String(i)))>=0;case"semver_lt":return e5(HB(String(s)),HB(String(i)))<0;case"semver_lte":return e5(HB(String(s)),HB(String(i)))<=0;case"semver_tilde":{let u=HB(String(s)),{lower:l,upper:p}=j1m(String(i));return e5(u,l)>=0&&e5(u,p)<0}case"semver_caret":{let u=HB(String(s)),{lower:l,upper:p}=Q1m(String(i));return e5(u,l)>=0&&e5(u,p)<0}case"semver_wildcard":{let u=HB(String(s)),{lower:l,upper:p}=z1m(String(i));return e5(u,l)>=0&&e5(u,p)<0}default:throw new _d(`Unknown operator: ${o}`)}}function N1m(e,t){if(!(e in t))throw new Xee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function Mzu(e,t,r,n=!1,i){let o=String(e.value);N1m(o,r);let s=r[o];return Lzu(s,t,r,n,i)}async function Lzu(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 Lzu(c,t,r,n,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof Xee)throw u;if(u instanceof _d)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new _d("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 Mzu(c,t,r,n,i);else if(c.type==="flag"){if(!i)throw new _d(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await i(c)}else u=zzu(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 Xee)throw u;if(u instanceof _d)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new _d("can't match cohort without a given cohort property value");return o==="AND"}function jzu(e){try{return new RegExp(e),!0}catch{return!1}}function Vzu(e,t){if(!/^\d+$/.test(e))throw new _d(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new _d(`Invalid semver: ${t}`);return parseInt(e,10)}function HB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new _d(`Invalid semver: ${e}`);let n=r.split("."),i=c=>c===void 0||c===""?0:Vzu(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 j1m(e){let t=HB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Q1m(e){let t=HB(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 z1m(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new _d(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=c=>{try{return Vzu(c,e)}catch{throw new _d(`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 Qzu(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 _d(`${e} is in an invalid date format`)}throw new _d(`The date provided ${e} must be a string, number, or date object`)}function M1m(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 tWr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var L1m=100,Uzu=3e4,V1m=5e4,U1m=50,_1m=500,G1m="https://us.i.posthog.com",_zu=new Set;function rWr(e,t){_zu.has(e)||(_zu.add(e),console.warn(`[PostHog] ${t}`))}function q1m(e){return typeof e=="string"?e.trim():""}function W1m(e){return(typeof e=="string"?e.trim():"")||void 0}function H1m(e){return(typeof e=="string"?e.trim():"")||G1m}function K1m(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 nWr=class extends C_t{constructor(t,r={}){let n=q1m(t),i={...r,host:H1m(r.host),personalApiKey:W1m(r.personalApiKey)};if(super(n,i),this._memoryStorage=new tWr,this.options=i,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,L1m):Uzu,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 eWr({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 RH(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||V1m}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??_1m,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??U1m;this._waitUntilCycle.timer=Jee(()=>{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 kzu}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=Uzu){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 T=this._flagOverrides[t];if(T===void 0)return;let P=this._payloadOverrides?.[t];return{key:t,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:P}}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,I;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let T=this.featureFlagsPoller?.featureFlagsByKey[t];if(T)try{let P=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(T,d,{matchValue:i});if(P){m=!0;let D=P.value;E=T.id,I="Evaluated locally",f={key:t,enabled:D!==!1,variant:typeof D=="string"?D:void 0,payload:P.payload??void 0}}}catch(P){if(P instanceof Xee||P instanceof _d)this._logger?.info(`${P.name} when computing flag locally: ${t}: ${P.message}`);else throw P}}if(!m&&!c){let T=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(T===void 0)y=ide.UNKNOWN_ERROR;else{g=T.requestId,A=T.evaluatedAt;let P=[];T.errorsWhileComputingFlags&&P.push(ide.ERRORS_WHILE_COMPUTING),T.quotaLimited?.includes("feature_flags")&&P.push(ide.QUOTA_LIMITED);let D=T.flags[t];if(D===void 0)P.push(ide.FLAG_MISSING);else{E=D.metadata?.id,x=D.metadata?.version,I=D.reason?.description??D.reason?.code;let O;if(D.metadata?.payload!==void 0)try{O=JSON.parse(D.metadata.payload)}catch{O=D.metadata.payload}f={key:t,enabled:D.enabled,variant:D.variant,payload:O}}P.length>0&&(y=P.join(","))}}if(o){let T=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,P={$feature_flag:t,$feature_flag_response:T,$feature_flag_id:E,$feature_flag_version:x,$feature_flag_reason:I,locally_evaluated:m,[`$feature/${t}`]:T,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let D=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();D!==void 0&&(P.$feature_flag_definitions_loaded_at=D)}y&&(P.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:T,groups:s,disableGeoip:a,properties:P})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){rWr("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(rWr("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){rWr("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 Not({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,T]of Object.entries(E.response)){let P=this.featureFlagsPoller?.featureFlagsByKey[C];f[C]={key:C,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:E.payloads[C],id:P?.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[T,P]of Object.entries(C.flags)){if(x.has(T))continue;let D;if(P.metadata?.payload!==void 0)try{D=JSON.parse(P.metadata.payload)}catch{D=P.metadata.payload}f[T]={key:T,enabled:P.enabled,variant:P.variant,payload:D,id:P.metadata?.id,version:P.metadata?.version,reason:P.reason?.description??P.reason?.code,locallyEvaluated:!1}}}}if(this._flagOverrides!==void 0)for(let[C,T]of Object.entries(this._flagOverrides)){if(T===void 0){delete f[C];continue}let P=f[C];f[C]={key:C,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:P?.payload,id:P?.id,version:P?.version,reason:P?.reason,locallyEvaluated:P?.locallyEvaluated??!1}}if(this._payloadOverrides!==void 0)for(let[C,T]of Object.entries(this._payloadOverrides)){let P=f[C];P&&(f[C]={...P,payload:T})}return new Not({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=Jee(()=>{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(KQu(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(!RH.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise(RH.buildEventMessage(t,{syntheticException:s},r,n).then(a=>this.capture({...a,uuid:i,flags:o})))}}async captureExceptionImmediate(t,r,n,i){if(!RH.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise(RH.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=Kee(),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){rWr("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 K1m(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"&&GQu(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 Gzu=require("async_hooks"),iWr=class{constructor(){this.storage=new Gzu.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 qzu="posthog-node";function J1m(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[I6o.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 I6o=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=qzu,this.name=qzu,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(J1m(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};RH.errorPropertiesBuilder=new dz.ErrorPropertiesBuilder([new dz.EventCoercer,new dz.ErrorCoercer,new dz.ObjectCoercer,new dz.StringCoercer,new dz.PrimitiveCoercer],dz.createStackParser("node:javascript",dz.nodeStackLineParser),[VQu(),Tzu,Pzu()]);var Dxe=class extends nWr{getLibraryId(){return"posthog-node"}initializeContext(){return new iWr}};var oWr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new Dxe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.121.0",usingAccessToken:!0,...zce()}})}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 S_t=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};Md();Jt();var Qot=require("fs/promises"),Wzu=require("os"),Hzu=require("path");Int();var Y1m="id",X1m=".fern",T_t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new Dxe(r),this.userId=t==null?void 0:GFo(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.121.0",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...zce()}})}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 Rf({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=UD(),r=Me(Ut.of((0,Wzu.homedir)()),ve.of(X1m),ve.of(Y1m));try{await Xt(r)?this.persistedDistinctId=(await(0,Qot.readFile)(r)).toString():(await(0,Qot.mkdir)((0,Hzu.dirname)(r),{recursive:!0}),await(0,Qot.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var v6o;async function O_t(){return v6o==null&&(v6o=await Z1m()),v6o}async function Z1m(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new S_t;let r=await Znt();return r!=null?new T_t({token:r,posthogApiKey:e}):await oz()!=null?new oWr({posthogApiKey:e}):new T_t({token:void 0,posthogApiKey:e})}catch{return new S_t}}En();Tt();jt();B_();var B_t=ye(require("process"),1);R7e();var Yzu=ye(BSo(),1),Xzu=ye(Jzu(),1);function sT(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,Xzu.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(Yzu.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}En();function sWr(e){let t=0;for(let r of e.split(`
|
|
3370
|
+
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=gzu.test(a)?a.replace(gzu,"$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>=Azu)break}}return yzu(i)}}var u6o=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=Pxe(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 x3e(t,"DOMException")}isDOMError(t){return x3e(t,"DOMError")}};var l6o=class{match(t){return ZMo(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 p6o=class{constructor(){}match(t){return HQu(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 d1m=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,f6o=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(d1m);return i&&(r=i[1],n=i[2]),[r,n]}};var Ezu=["fatal","error","warning","log","info","debug"];function X7r(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 d6o=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 Dot(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=X7r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return Pxe(t)&&!WQu(t)&&Ezu.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(azu(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var m6o=class{match(t){return Dot(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${X7r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var h6o=class{match(t){return N7r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var g6o=class{match(t){return x3e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Dot(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 N7r(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 A6o=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 w_t={MESSAGE:"$message",TIMESTAMP:"$timestamp"},m1m=new Set([w_t.MESSAGE,w_t.TIMESTAMP]),Z7r={enabled:!0,max_bytes:32768};function y6o(e){return e?{enabled:e.enabled??Z7r.enabled,max_bytes:g1m(e.max_bytes,Z7r.max_bytes)}:{...Z7r}}function h1m(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>m1m.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var b6o=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=y6o(t)}setConfig(t){this._config=y6o(t),this._trimToMaxBytes()}add(t){let r=A1m(t);if(!r)return;let n=Izu(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 g1m(e,t){if(!I_t(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function A1m(e){let t=y1m(e);if(t)try{let r=JSON.parse(t);if(!E_t(r))return;let n=r,i=n[w_t.MESSAGE],o=n[w_t.TIMESTAMP];return!Pxe(i)||i.trim().length===0||!Pxe(o)&&!I_t(o)?void 0:{step:n,json:t}}catch{return}}function y1m(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 Izu(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 Czu=require("fs"),wzu=require("readline"),$7r=new dz.ReduceableCache(25),Szu=new dz.ReduceableCache(20),E6o=7,b1m=1e3,E1m=1e4;async function Tzu(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"||C1m(s)||w1m(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(Szu.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=T1m(o);if(s.every(c=>S1m(i,c)))continue;let a=O1m($7r,i,{});n.push(I1m(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&v1m(e,$7r),$7r.reduce(),e}function I1m(e,t,r){return new Promise(n=>{let i=(0,Czu.createReadStream)(e),o=(0,wzu.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(){Szu.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]=B1m(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 v1m(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;x1m(r.lineno,r,n)}}function x1m(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=Ozu(e);i<e;i++){let o=r[i];if(o===void 0)return void vzu(t);t.pre_context.push(o)}if(r[e]===void 0)return void vzu(t);t.context_line=r[e];let n=Bzu(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 vzu(e){delete e.pre_context,delete e.context_line,delete e.post_context}function C1m(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function w1m(e){return e.lineno!==void 0&&e.lineno>E1m||e.colno!==void 0&&e.colno>b1m}function S1m(e,t){let r=$7r.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 T1m(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=xzu(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+E6o:(i.push(n),n=xzu(o)),t++}return i}function xzu(e){return[Ozu(e),Bzu(e)]}function Ozu(e){return Math.max(1,e-E6o)}function Bzu(e){return e+E6o}function O1m(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function B1m(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 Fot=require("path");function Pzu(e=process.cwd()){let t=Fot.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,Fot.isAbsolute)(o.filename)&&(o.filename=r((0,Fot.relative)(n,r(o.filename))));return i}}function P1m(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 Dzu(e,t){globalThis.process?.on("uncaughtException",P1m(e,t))}function Rzu(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var D1m=2e3,RH=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new j7r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return E_t(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()&&(Dzu(this.onException.bind(this),this.onFatalError.bind(this)),Rzu(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(D1m),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var kzu="5.35.1";var ide={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var Not=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(ide.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(ide.QUOTA_LIMITED),r===void 0&&o.push(ide.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 Fzu(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 R1m=6e4,k1m=1152921504606847e3,F1m=["is_not","is_set"],jot=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},_d=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},Xee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},eWr=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 Xee||u instanceof _d?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 Xee||u instanceof _d?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 _d("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 _d("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 _d(`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 _d("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new _d(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new _d(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new _d(`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 _d(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new _d(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new _d(`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 Xee)throw f;if(f instanceof _d)l=!0;else throw f}if(p!==void 0)return p;if(l)throw new _d("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 Mzu(c,i,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,i,o)):u==="flag"?await this.evaluateFlagDependency(c,i,o):zzu(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await Nzu(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await Nzu(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(R1m,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 jot(`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 jot(`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 jot(`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 jot&&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=Jee(()=>{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 Nzu(e,t,r=""){let n=await Fzu(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/k1m}function zzu(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 _d(`Property ${n} not found in propertyValues`)}let s=t[n];if(s==null&&!F1m.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 jzu(String(i))&&String(s).match(String(i))!==null;case"not_regex":return jzu(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 _d("Date operations cannot be performed on boolean values");let u=M1m(String(i));if(u==null&&(u=Qzu(i)),u==null)throw new _d(`Invalid date: ${i}`);let l=Qzu(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return e5(HB(String(s)),HB(String(i)))===0;case"semver_neq":return e5(HB(String(s)),HB(String(i)))!==0;case"semver_gt":return e5(HB(String(s)),HB(String(i)))>0;case"semver_gte":return e5(HB(String(s)),HB(String(i)))>=0;case"semver_lt":return e5(HB(String(s)),HB(String(i)))<0;case"semver_lte":return e5(HB(String(s)),HB(String(i)))<=0;case"semver_tilde":{let u=HB(String(s)),{lower:l,upper:p}=j1m(String(i));return e5(u,l)>=0&&e5(u,p)<0}case"semver_caret":{let u=HB(String(s)),{lower:l,upper:p}=Q1m(String(i));return e5(u,l)>=0&&e5(u,p)<0}case"semver_wildcard":{let u=HB(String(s)),{lower:l,upper:p}=z1m(String(i));return e5(u,l)>=0&&e5(u,p)<0}default:throw new _d(`Unknown operator: ${o}`)}}function N1m(e,t){if(!(e in t))throw new Xee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function Mzu(e,t,r,n=!1,i){let o=String(e.value);N1m(o,r);let s=r[o];return Lzu(s,t,r,n,i)}async function Lzu(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 Lzu(c,t,r,n,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof Xee)throw u;if(u instanceof _d)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new _d("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 Mzu(c,t,r,n,i);else if(c.type==="flag"){if(!i)throw new _d(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await i(c)}else u=zzu(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 Xee)throw u;if(u instanceof _d)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new _d("can't match cohort without a given cohort property value");return o==="AND"}function jzu(e){try{return new RegExp(e),!0}catch{return!1}}function Vzu(e,t){if(!/^\d+$/.test(e))throw new _d(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new _d(`Invalid semver: ${t}`);return parseInt(e,10)}function HB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new _d(`Invalid semver: ${e}`);let n=r.split("."),i=c=>c===void 0||c===""?0:Vzu(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 j1m(e){let t=HB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Q1m(e){let t=HB(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 z1m(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new _d(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=c=>{try{return Vzu(c,e)}catch{throw new _d(`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 Qzu(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 _d(`${e} is in an invalid date format`)}throw new _d(`The date provided ${e} must be a string, number, or date object`)}function M1m(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 tWr=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var L1m=100,Uzu=3e4,V1m=5e4,U1m=50,_1m=500,G1m="https://us.i.posthog.com",_zu=new Set;function rWr(e,t){_zu.has(e)||(_zu.add(e),console.warn(`[PostHog] ${t}`))}function q1m(e){return typeof e=="string"?e.trim():""}function W1m(e){return(typeof e=="string"?e.trim():"")||void 0}function H1m(e){return(typeof e=="string"?e.trim():"")||G1m}function K1m(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 nWr=class extends C_t{constructor(t,r={}){let n=q1m(t),i={...r,host:H1m(r.host),personalApiKey:W1m(r.personalApiKey)};if(super(n,i),this._memoryStorage=new tWr,this.options=i,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,L1m):Uzu,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 eWr({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 RH(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||V1m}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??_1m,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??U1m;this._waitUntilCycle.timer=Jee(()=>{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 kzu}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=Uzu){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 T=this._flagOverrides[t];if(T===void 0)return;let P=this._payloadOverrides?.[t];return{key:t,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:P}}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,I;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let T=this.featureFlagsPoller?.featureFlagsByKey[t];if(T)try{let P=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(T,d,{matchValue:i});if(P){m=!0;let D=P.value;E=T.id,I="Evaluated locally",f={key:t,enabled:D!==!1,variant:typeof D=="string"?D:void 0,payload:P.payload??void 0}}}catch(P){if(P instanceof Xee||P instanceof _d)this._logger?.info(`${P.name} when computing flag locally: ${t}: ${P.message}`);else throw P}}if(!m&&!c){let T=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(T===void 0)y=ide.UNKNOWN_ERROR;else{g=T.requestId,A=T.evaluatedAt;let P=[];T.errorsWhileComputingFlags&&P.push(ide.ERRORS_WHILE_COMPUTING),T.quotaLimited?.includes("feature_flags")&&P.push(ide.QUOTA_LIMITED);let D=T.flags[t];if(D===void 0)P.push(ide.FLAG_MISSING);else{E=D.metadata?.id,x=D.metadata?.version,I=D.reason?.description??D.reason?.code;let O;if(D.metadata?.payload!==void 0)try{O=JSON.parse(D.metadata.payload)}catch{O=D.metadata.payload}f={key:t,enabled:D.enabled,variant:D.variant,payload:O}}P.length>0&&(y=P.join(","))}}if(o){let T=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,P={$feature_flag:t,$feature_flag_response:T,$feature_flag_id:E,$feature_flag_version:x,$feature_flag_reason:I,locally_evaluated:m,[`$feature/${t}`]:T,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let D=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();D!==void 0&&(P.$feature_flag_definitions_loaded_at=D)}y&&(P.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:T,groups:s,disableGeoip:a,properties:P})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){rWr("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(rWr("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){rWr("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 Not({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,T]of Object.entries(E.response)){let P=this.featureFlagsPoller?.featureFlagsByKey[C];f[C]={key:C,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:E.payloads[C],id:P?.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[T,P]of Object.entries(C.flags)){if(x.has(T))continue;let D;if(P.metadata?.payload!==void 0)try{D=JSON.parse(P.metadata.payload)}catch{D=P.metadata.payload}f[T]={key:T,enabled:P.enabled,variant:P.variant,payload:D,id:P.metadata?.id,version:P.metadata?.version,reason:P.reason?.description??P.reason?.code,locallyEvaluated:!1}}}}if(this._flagOverrides!==void 0)for(let[C,T]of Object.entries(this._flagOverrides)){if(T===void 0){delete f[C];continue}let P=f[C];f[C]={key:C,enabled:T!==!1,variant:typeof T=="string"?T:void 0,payload:P?.payload,id:P?.id,version:P?.version,reason:P?.reason,locallyEvaluated:P?.locallyEvaluated??!1}}if(this._payloadOverrides!==void 0)for(let[C,T]of Object.entries(this._payloadOverrides)){let P=f[C];P&&(f[C]={...P,payload:T})}return new Not({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=Jee(()=>{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(KQu(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(!RH.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise(RH.buildEventMessage(t,{syntheticException:s},r,n).then(a=>this.capture({...a,uuid:i,flags:o})))}}async captureExceptionImmediate(t,r,n,i){if(!RH.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise(RH.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=Kee(),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){rWr("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 K1m(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"&&GQu(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 Gzu=require("async_hooks"),iWr=class{constructor(){this.storage=new Gzu.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 qzu="posthog-node";function J1m(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[I6o.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 I6o=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=qzu,this.name=qzu,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(J1m(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};RH.errorPropertiesBuilder=new dz.ErrorPropertiesBuilder([new dz.EventCoercer,new dz.ErrorCoercer,new dz.ObjectCoercer,new dz.StringCoercer,new dz.PrimitiveCoercer],dz.createStackParser("node:javascript",dz.nodeStackLineParser),[VQu(),Tzu,Pzu()]);var Dxe=class extends nWr{getLibraryId(){return"posthog-node"}initializeContext(){return new iWr}};var oWr=class{posthog;constructor({posthogApiKey:t}){this.posthog=new Dxe(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.121.1",usingAccessToken:!0,...zce()}})}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 S_t=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};Md();Jt();var Qot=require("fs/promises"),Wzu=require("os"),Hzu=require("path");Int();var Y1m="id",X1m=".fern",T_t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new Dxe(r),this.userId=t==null?void 0:GFo(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.121.1",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...zce()}})}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 Rf({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=UD(),r=Me(Ut.of((0,Wzu.homedir)()),ve.of(X1m),ve.of(Y1m));try{await Xt(r)?this.persistedDistinctId=(await(0,Qot.readFile)(r)).toString():(await(0,Qot.mkdir)((0,Hzu.dirname)(r),{recursive:!0}),await(0,Qot.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var v6o;async function O_t(){return v6o==null&&(v6o=await Z1m()),v6o}async function Z1m(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new S_t;let r=await Znt();return r!=null?new T_t({token:r,posthogApiKey:e}):await oz()!=null?new oWr({posthogApiKey:e}):new T_t({token:void 0,posthogApiKey:e})}catch{return new S_t}}En();Tt();jt();B_();var B_t=ye(require("process"),1);R7e();var Yzu=ye(BSo(),1),Xzu=ye(Jzu(),1);function sT(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,Xzu.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(Yzu.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}En();function sWr(e){let t=0;for(let r of e.split(`
|
|
3371
3371
|
`))t=Math.max(t,sT(r));return t}var AMu=ye(C6o(),1);var eTm=/[\p{Lu}]/u,tTm=/[\p{Ll}]/u,eMu=/^[\p{Lu}](?![\p{Lu}])/gu,nMu=/([\p{Alpha}\p{N}_]|$)/u,w6o=/[_.\- ]+/,rTm=new RegExp("^"+w6o.source),tMu=new RegExp(w6o.source+nMu.source,"gu"),rMu=new RegExp("\\d+"+nMu.source,"gu"),nTm=(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&&eTm.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&tTm.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},iTm=(e,t)=>(eMu.lastIndex=0,e.replace(eMu,r=>t(r))),oTm=(e,t)=>(tMu.lastIndex=0,rMu.lastIndex=0,e.replace(tMu,(r,n)=>t(n)).replace(rMu,r=>t(r)));function S6o(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?w6o.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=nTm(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(rTm,""),e=t.preserveConsecutiveUppercase?iTm(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),oTm(e,n))}var P6o=ye(oMu(),1);R7e();var sMu=(e=0)=>t=>`\x1B[${t+e}m`,aMu=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,cMu=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,L0={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]}},yVI=Object.keys(L0.modifier),uTm=Object.keys(L0.color),lTm=Object.keys(L0.bgColor),bVI=[...uTm,...lTm];function pTm(){let e=new Map;for(let[t,r]of Object.entries(L0)){for(let[n,i]of Object.entries(r))L0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=L0[n],e.set(i[0],i[1]);Object.defineProperty(L0,t,{value:r,enumerable:!1})}return Object.defineProperty(L0,"codes",{value:e,enumerable:!1}),L0.color.close="\x1B[39m",L0.bgColor.close="\x1B[49m",L0.color.ansi=sMu(),L0.color.ansi256=aMu(),L0.color.ansi16m=cMu(),L0.bgColor.ansi=sMu(10),L0.bgColor.ansi256=aMu(10),L0.bgColor.ansi16m=cMu(10),Object.defineProperties(L0,{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=>L0.rgbToAnsi256(...L0.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)=>L0.ansi256ToAnsi(L0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>L0.ansi256ToAnsi(L0.hexToAnsi256(t)),enumerable:!1}}),L0}var fTm=pTm(),uMu=fTm;var aWr=new Set(["\x1B","\x9B"]),dTm=39,O6o="\x07",fMu="[",mTm="]",dMu="m",B6o=`${mTm}8;;`,lMu=e=>`${aWr.values().next().value}${fMu}${e}${dMu}`,pMu=e=>`${aWr.values().next().value}${B6o}${e}${O6o}`,hTm=e=>e.split(" ").map(t=>sT(t)),T6o=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=sT(f7(e[e.length-1]));for(let[a,c]of n.entries()){let u=sT(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),aWr.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(B6o)),i){o?c===O6o&&(i=!1,o=!1):c===dMu&&(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())},gTm=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(sT(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},ATm=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=hTm(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=sT(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(""),T6o(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){T6o(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){T6o(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>gTm(u)));let c=[...a.join(`
|
|
3372
3372
|
`)];for(let[u,l]of c.entries()){if(n+=l,aWr.has(l)){let{groups:d}=new RegExp(`(?:\\${fMu}(?<code>\\d+)m|\\${B6o}(?<uri>.*)${O6o})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===dTm?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=uMu.codes.get(Number(i));c[u+1]===`
|
|
3373
3373
|
`?(o&&(n+=pMu("")),i&&p&&(n+=lMu(p))):l===`
|
|
@@ -3941,7 +3941,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
|
|
|
3941
3941
|
Add a 'docs:' section to your fern.yml to get started.`,code:S.Code.ConfigError});let o=await new iDe({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&&Tmh(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}`)}
|
|
3942
3942
|
`)}let l=0;if(o.mdxParseErrors.length>0){for(let p of o.mdxParseErrors)t.stderr.info(`
|
|
3943
3943
|
${p.toString()}
|
|
3944
|
-
`);r.fix?l+=await kni(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!X$n()&&await Fni(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new K0t({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(`${Pr.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(`${Pr.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=>rte(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 Tmh(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 Yes(e){let t=new Jes;oi(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}))}Bb();jt();var Mfl=ye(require("net"),1),Lfl=ye(require("os"),1),Qni=class extends Error{constructor(t){super(`${t} is locked`)}},Z0t={old:new Set,young:new Set},Omh=1e3*15,Vfl=new Set;var Iqt,Bmh=()=>{let e=Lfl.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},Qfl=e=>new Promise((t,r)=>{let n=Mfl.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),zfl=async(e,t)=>{if(e.host||e.port===0)return Qfl(e);for(let r of t)try{await Qfl({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},Pmh=e=>Z0t.old.has(e)||Z0t.young.has(e)||Vfl.has(e),Dmh=function*(e){e&&(yield*e),yield 0};async function sDe(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??{};Iqt===void 0&&(Iqt=setTimeout(()=>{Iqt=void 0,Z0t.old=Z0t.young,Z0t.young=new Set},Omh),Iqt.unref&&Iqt.unref());let o=Bmh();for(let s of Dmh(t))try{if(r.has(s))continue;let a=await zfl({...i,port:s},o);for(;Pmh(a);){if(s!==0)throw new Qni(s);a=await zfl({...i,port:s},o)}return n?Vfl.add(a):Z0t.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof Qni))throw a}throw new Error("No available ports found")}jt();var Gfl=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Ufl="docs.buildwithfern.com",_fl=62;function kVe(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)),Gfl.test(t)}function qfl(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function vqt({orgId:e,previewId:t}){let r=qfl(t),n=`${e}-preview-${r}.${Ufl}`;if(n.length<=_fl)return n;let i=`${e}-preview-`,o=_fl-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}.${Ufl}`}Tt();hx();eh();Jt();RE();jt();En();var jis=require("child_process"),hCl=ye($es(),1),Qis=ye(xii(),1),zis=ye(require("fs"),1),SDe=require("fs/promises"),gCl=ye(require("http"),1),ACl=ye(require("os"),1),fsi=ye(require("path"),1);zii();Jt();var oG=require("fs/promises"),Byl=require("os"),Lrs=ye(require("path"),1),yvh=".fern",bvh="logs",Mrs=100*1024*1024;function Evh(){return"cli@5.121.
|
|
3944
|
+
`);r.fix?l+=await kni(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!X$n()&&await Fni(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new K0t({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(`${Pr.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(`${Pr.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=>rte(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 Tmh(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 Yes(e){let t=new Jes;oi(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}))}Bb();jt();var Mfl=ye(require("net"),1),Lfl=ye(require("os"),1),Qni=class extends Error{constructor(t){super(`${t} is locked`)}},Z0t={old:new Set,young:new Set},Omh=1e3*15,Vfl=new Set;var Iqt,Bmh=()=>{let e=Lfl.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},Qfl=e=>new Promise((t,r)=>{let n=Mfl.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),zfl=async(e,t)=>{if(e.host||e.port===0)return Qfl(e);for(let r of t)try{await Qfl({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},Pmh=e=>Z0t.old.has(e)||Z0t.young.has(e)||Vfl.has(e),Dmh=function*(e){e&&(yield*e),yield 0};async function sDe(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??{};Iqt===void 0&&(Iqt=setTimeout(()=>{Iqt=void 0,Z0t.old=Z0t.young,Z0t.young=new Set},Omh),Iqt.unref&&Iqt.unref());let o=Bmh();for(let s of Dmh(t))try{if(r.has(s))continue;let a=await zfl({...i,port:s},o);for(;Pmh(a);){if(s!==0)throw new Qni(s);a=await zfl({...i,port:s},o)}return n?Vfl.add(a):Z0t.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof Qni))throw a}throw new Error("No available ports found")}jt();var Gfl=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Ufl="docs.buildwithfern.com",_fl=62;function kVe(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)),Gfl.test(t)}function qfl(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function vqt({orgId:e,previewId:t}){let r=qfl(t),n=`${e}-preview-${r}.${Ufl}`;if(n.length<=_fl)return n;let i=`${e}-preview-`,o=_fl-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}.${Ufl}`}Tt();hx();eh();Jt();RE();jt();En();var jis=require("child_process"),hCl=ye($es(),1),Qis=ye(xii(),1),zis=ye(require("fs"),1),SDe=require("fs/promises"),gCl=ye(require("http"),1),ACl=ye(require("os"),1),fsi=ye(require("path"),1);zii();Jt();var oG=require("fs/promises"),Byl=require("os"),Lrs=ye(require("path"),1),yvh=".fern",bvh="logs",Mrs=100*1024*1024;function Evh(){return"cli@5.121.1"}var HVe=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??Me(Me(Ut.of((0,Byl.homedir)()),ve.of(yvh)),ve.of(bvh));await Xt(n)||await(0,oG.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=Me(n,ve.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${Lrs.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3945
3945
|
`);await(0,oG.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)+`
|
|
3946
3946
|
`;try{await(0,oG.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:Evh(),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,oG.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=Lrs.default.join(t,c);try{let l=await(0,oG.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=Mrs/1024/1024;if(o<=Mrs){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<=Mrs)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,oG.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 Mii={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function Pyl(e){let t=Ivh();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:Mii});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",...Mii}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...Mii}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:Mii}):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 HVe.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 Ivh(){return globalThis.Bun}jt();var Jyl=require("events"),Gii=ye(require("fs"),1),JVe=ye(require("path"),1);var Dyl=ye(require("os"),1),Ryl=300,hDe=20,t7t=1e7,kyl=Dyl.default.platform();var vvh=kyl==="darwin",Vrs=kyl==="win32",gDe=vvh||Vrs,Fyl=3e3,Nyl=2e4,Urs=1250;var aoe;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(aoe||(aoe={}));var KVe;(function(e){e.CHANGE="change",e.RENAME="rename"})(KVe||(KVe={}));var r7t;(function(e){e.CHANGE="change",e.ERROR="error"})(r7t||(r7t={}));var Bc;(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"})(Bc||(Bc={}));var ON;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(ON||(ON={}));var xvh=(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 I=Date.now(),C=I-c,T=I-u,P=C>=t||T>=o;return[I,P]},p=I=>{if(u=I,!s)return;let C=s;s=void 0,e.apply(void 0,C)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=I=>{if(u=I,n)return p(I)},g=I=>{if(i&&s)return p(I);s=void 0},A=()=>{a=void 0;let[I,C]=l();return C?g(I):y(I)},y=I=>{let C=I-c,T=I-u,P=t-C,D=o-T,O=Math.min(P,D);return E(O)},E=I=>{a&&clearTimeout(a),!(I<=0)&&(a=setTimeout(A,I))},x=(...I)=>{let[C,T]=l(),P=!!a;if(s=I,c=C,(T||!a)&&E(t),T)return P?p(C):m(C)};return x.cancel=d,x.flush=f,x},Lii=xvh;var Wrs=ye(require("fs"),1),Uii=ye(require("path"),1);var Hd=ye(require("fs"),1),uP=require("util");var jme=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},coe=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var _rs=ye(require("process"),1),jyl=_rs.default.getuid?!_rs.default.getuid():!1,Qyl=1e4,RM=()=>{};var n7t={isChangeErrorOk:e=>{if(!n7t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!jyl&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!n7t.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(!n7t.isNodeError(e))throw e;if(!n7t.isChangeErrorOk(e))throw e}},gx=n7t;var Grs=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=Qyl,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()}}}}},zyl=new Grs;var Qme=(e,t)=>function(n){return function i(...o){return zyl.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)})}},zme=(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 Cvh={attempt:{chmod:jme((0,uP.promisify)(Hd.default.chmod),gx.onChangeError),chown:jme((0,uP.promisify)(Hd.default.chown),gx.onChangeError),close:jme((0,uP.promisify)(Hd.default.close),RM),fsync:jme((0,uP.promisify)(Hd.default.fsync),RM),mkdir:jme((0,uP.promisify)(Hd.default.mkdir),RM),realpath:jme((0,uP.promisify)(Hd.default.realpath),RM),stat:jme((0,uP.promisify)(Hd.default.stat),RM),unlink:jme((0,uP.promisify)(Hd.default.unlink),RM),chmodSync:coe(Hd.default.chmodSync,gx.onChangeError),chownSync:coe(Hd.default.chownSync,gx.onChangeError),closeSync:coe(Hd.default.closeSync,RM),existsSync:coe(Hd.default.existsSync,RM),fsyncSync:coe(Hd.default.fsync,RM),mkdirSync:coe(Hd.default.mkdirSync,RM),realpathSync:coe(Hd.default.realpathSync,RM),statSync:coe(Hd.default.statSync,RM),unlinkSync:coe(Hd.default.unlinkSync,RM)},retry:{close:Qme((0,uP.promisify)(Hd.default.close),gx.isRetriableError),fsync:Qme((0,uP.promisify)(Hd.default.fsync),gx.isRetriableError),open:Qme((0,uP.promisify)(Hd.default.open),gx.isRetriableError),readFile:Qme((0,uP.promisify)(Hd.default.readFile),gx.isRetriableError),rename:Qme((0,uP.promisify)(Hd.default.rename),gx.isRetriableError),stat:Qme((0,uP.promisify)(Hd.default.stat),gx.isRetriableError),write:Qme((0,uP.promisify)(Hd.default.write),gx.isRetriableError),writeFile:Qme((0,uP.promisify)(Hd.default.writeFile),gx.isRetriableError),closeSync:zme(Hd.default.closeSync,gx.isRetriableError),fsyncSync:zme(Hd.default.fsyncSync,gx.isRetriableError),openSync:zme(Hd.default.openSync,gx.isRetriableError),readFileSync:zme(Hd.default.readFileSync,gx.isRetriableError),renameSync:zme(Hd.default.renameSync,gx.isRetriableError),statSync:zme(Hd.default.statSync,gx.isRetriableError),writeSync:zme(Hd.default.writeSync,gx.isRetriableError),writeFileSync:zme(Hd.default.writeFileSync,gx.isRetriableError)}},Myl=Cvh;var Vii=ye(require("fs"),1),i7t=ye(require("path"),1);var qrs=()=>{};var wvh=()=>{let e=qrs,t=qrs,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}},Lyl=wvh;var Svh=()=>{let{promise:e,resolve:t,isPending:r}=Lyl(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Vyl=Svh;var Uyl={then:e=>{e()}};var _yl=e=>Array.isArray(e)?e:[e],Gyl=e=>typeof e=="function";var Tvh=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=_yl(o).map(ae=>Gyl(ae)?ae:de=>ae.test(de)),a=ae=>s.some(de=>de(ae)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,g={},A=[],y=new Set,E={},x={},I=new Set,C={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},T={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:g,symlinks:A,symlinksNames:y,symlinksNamesToPaths:E,map:x},{promise:P,increment:D,decrement:O}=Vyl(),z=0,J=(ae,de,Oe,Ce)=>{I.has(de)||z>=i||(z+=1,ae.directories.push(de),ae.directoriesNames.add(Oe),l.push(de),p.add(Oe),d.propertyIsEnumerable(Oe)||(d[Oe]=[]),d[Oe].push(de),I.add(de),!(Ce>=n)&&(z>=i||pe(de,Ce+1)))},Y=(ae,de,Oe)=>{I.has(de)||z>=i||(z+=1,ae.files.push(de),ae.filesNames.add(Oe),f.push(de),m.add(Oe),g.propertyIsEnumerable(Oe)||(g[Oe]=[]),g[Oe].push(de),I.add(de))},ee=(ae,de,Oe,Ce)=>{I.has(de)||z>=i||(z+=1,ae.symlinks.push(de),ae.symlinksNames.add(Oe),A.push(de),y.add(Oe),E.propertyIsEnumerable(Oe)||(E[Oe]=[]),E[Oe].push(de),I.add(de),r&&(Ce>=n||z>=i||Be(de,Ce+1)))},oe=(ae,de,Oe,Ce,Ne)=>{c.aborted||a(de)||(Ce.isDirectory()?J(ae,de,Oe,Ne):Ce.isFile()?Y(ae,de,Oe):Ce.isSymbolicLink()&&ee(ae,de,Oe,Ne))},le=(ae,de,Oe,Ce)=>{if(c.aborted)return;let Ne=de===i7t.default.sep?"":i7t.default.sep,Xe=Oe.name,ut=`${de}${Ne}${Xe}`;a(ut)||(Oe.isDirectory()?J(ae,ut,Xe,Ce):Oe.isFile()?Y(ae,ut,Xe):Oe.isSymbolicLink()&&ee(ae,ut,Xe,Ce))},ne=(ae,de,Oe,Ce)=>{for(let Ne=0,Xe=Oe.length;Ne<Xe;Ne++)le(ae,de,Oe[Ne],Ce)},pe=(ae,de)=>{c.aborted||de>n||z>=i||(D(),Vii.default.readdir(ae,{withFileTypes:!0},(Oe,Ce)=>{if(Oe||c.aborted||!Ce.length)return O();(u(Ce)||Uyl).then(()=>{let Xe=x[ae]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ne(Xe,ae,Ce,de),O()})}))},Be=(ae,de)=>{D(),Vii.default.realpath(ae,(Oe,Ce)=>{if(Oe||c.aborted)return O();Vii.default.stat(Ce,(Ne,Xe)=>{if(Ne||c.aborted)return O();let ut=i7t.default.basename(Ce),At=x[ae]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};oe(At,Ce,ut,Xe,de),O()})})};return(async(ae,de=1)=>(ae=i7t.default.normalize(ae),I.add(ae),pe(ae,de),await P,c.aborted?C:T))(e)},qyl=Tvh;var uoe={lang:{debounce:Lii,attempt:e=>{try{return e()}catch(t){return uoe.lang.castError(t)}},castArray:e=>uoe.lang.isArray(e)?e:[e],castError:e=>uoe.lang.isError(e)?e:uoe.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(uoe.lang.isNaN(e))return uoe.lang.isNaN(t);if(uoe.lang.isPrimitive(e)||uoe.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(Uii.default.sep).length-1),getRealPath:(e,t)=>{try{return t?Wrs.default.realpathSync.native(e):Wrs.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===Uii.default.sep&&t.length-e.length>Uii.default.sep.length,poll:(e,t=Nyl)=>Myl.retry.stat(t)(e,{bigint:!0}).catch(uoe.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 qyl(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},rp=uoe;var _ii=ye(require("path"),1);var Hrs=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||rp.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=Ryl){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=rp.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===Bc.CHANGE&&a===Bc.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===Bc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Bc.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??hDe:Math.min(1,this.options.depth??hDe),s=this.options.limit??t7t,[a,c]=await rp.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())rp.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(Bc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!gDe&&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(Bc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Bc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(_ii.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Bc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(_ii.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(Bc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Bc.ADD?this.onTargetAdd(n):r===Bc.ADD_DIR?this.onTargetAddDir(n):r===Bc.CHANGE?this.onTargetChange(n):r===Bc.UNLINK?this.onTargetUnlink(n):r===Bc.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=KVe.CHANGE,r){if(this.watcher.isClosed())return;let n=_ii.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){Vrs&&t.code==="EPERM"?this.onWatcherChange(KVe.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(r7t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(r7t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(KVe.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&gDe&&this.options.native!==!1?this.options.depth??hDe:Math.min(1,this.options.depth??hDe),n=this.options.limit??t7t,[i,o]=await rp.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(KVe.CHANGE,a,t)}))}}},Wyl=Hrs;var BN={interval:100,intervalId:void 0,fns:new Map,init:()=>{BN.intervalId||(BN.intervalId=setInterval(BN.resolve,BN.interval))},reset:()=>{BN.intervalId&&(clearInterval(BN.intervalId),delete BN.intervalId)},add:(e,t)=>{BN.fns.set(e,Date.now()+t),BN.init()},remove:e=>{BN.fns.delete(e)},resolve:()=>{if(!BN.fns.size)return BN.reset();let e=Date.now();for(let[t,r]of BN.fns)r>=e||(BN.remove(t),t())}},o7t=BN;var s7t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=Urs){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(rp.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),o7t.remove(u)},u=()=>{c(),a()};o7t.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=Urs){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),o7t.remove(u)},u=()=>{c(),a()};o7t.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,Bc.ADD,aoe.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,Bc.ADD_DIR,aoe.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,Bc.UNLINK,aoe.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,Bc.UNLINK_DIR,aoe.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}}};s7t.DIR_EVENTS={add:Bc.ADD_DIR,rename:Bc.RENAME_DIR,unlink:Bc.UNLINK_DIR};s7t.FILE_EVENTS={add:Bc.ADD,change:Bc.CHANGE,rename:Bc.RENAME,unlink:Bc.UNLINK};var Hyl=s7t;var Krs=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(rp.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(rp.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(rp.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(rp.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return rp.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);rp.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},Jrs=Krs;var Yrs=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}},Kyl=Yrs;var Xrs=class{constructor(){this.inos={},this.paths=new Jrs,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 rp.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Kyl(n)}reset(){this.inos={},this.paths=new Jrs,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,Bc.ADD,i),[Bc.ADD];if(i.isDirectory())return this.updateIno(t,Bc.ADD_DIR,i),[Bc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Bc.UNLINK,n),[Bc.UNLINK];if(n.isDirectory())return this.updateIno(t,Bc.UNLINK_DIR,n),[Bc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Bc.CHANGE,i),[Bc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Bc.UNLINK,n),this.updateIno(t,Bc.ADD_DIR,i),[Bc.UNLINK,Bc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Bc.UNLINK_DIR,n),this.updateIno(t,Bc.ADD,i),[Bc.UNLINK_DIR,Bc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Bc.UNLINK_DIR,n),this.updateIno(t,Bc.ADD_DIR,i),[Bc.UNLINK_DIR,Bc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?aoe.FILE:aoe.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)}}},Zrs=Xrs;var $rs=class e extends Jyl.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(ON.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(ON.CLOSE,i)),this._readyWait=new Promise(i=>this.on(ON.READY,i)),this._locker=new Hyl(this),this._roots=new Set,this._poller=new Zrs,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&&(rp.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(ON.CLOSE))}error(t){if(this.isClosed())return!1;let r=rp.lang.castError(t);return this.emit(ON.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(ON.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(ON.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&rp.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&rp.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)rp.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 Wyl(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=rp.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=JVe.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??hDe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&gDe&&l.options.native!==!1)))return!0;if(!gDe)break;let u=JVe.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=rp.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||gDe&&r.native!==!1?r:{...r,recursive:!1},l={watcher:Gii.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=JVe.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||gDe&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??hDe,a=r.limit??t7t,[c]=await rp.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=rp.fs.getDepth(t);for(let p of c){let d=rp.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(ON.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(ON.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=JVe.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new Zrs,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 rp.lang.noop;if(this.pollerExists(t,r))return rp.lang.noop;let i={...r,interval:r.pollingInterval??Fyl},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(ON.CLOSE,a),Gii.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(ON.CLOSE,a),Gii.default.unwatchFile(t,n)};return rp.lang.attempt(s),()=>rp.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=rp.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!rp.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=JVe.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await rp.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=JVe.default.dirname(t);return(await rp.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=rp.lang.noop){if(rp.lang.isFunction(t))return this.watch([],{},t);if(rp.lang.isUndefined(t))return this.watch([],r,n);if(rp.lang.isFunction(r))return this.watch(t,{},r);if(rp.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=rp.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==rp.lang.noop&&this.on(ON.ALL,n),r.readdirMap=void 0,this.ready())}},Yyl=$rs;function Ovh(e){return"code"in e&&typeof e.code=="string"}function Xyl(e){return e instanceof Error?e:new Error(String(e))}function Zyl(e){return Ovh(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 qii({absoluteFilePathToFern:e,additionalFilepaths:t,context:r}){let n=new Yyl([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(Xyl(c))};n.once("ready",s),n.once("error",a)});return i!=null&&(n.close(),r.failAndThrow(Zyl(i),i,{code:S.Code.EnvironmentError})),n.on("error",o=>{let s=Xyl(o);r.failWithoutThrowing(Zyl(s),s,{code:S.Code.EnvironmentError}),n.close()}),n}Jt();RE();jt();En();var eCl=require("child_process"),isi=ye(cns(),1),tCl=ye(Iis(),1),sI=require("fs"),mP=require("fs/promises"),rCl=require("os"),DN=ye(require("path"),1),nCl=ye(IE(),1),iCl=ye($xl(),1),iUe=process.platform==="win32",nsi=fe.cyan("[docs]:"),i1h="etag",o1h=23,Ris=e=>e.padEnd(o1h," "),s1h="preview",a1h="app-preview",c1h="bundle",u1h=".next",l1h="standalone",p1h=".fern",f1h="packages/fern-docs/bundle/.next/server/instrumentation.js",d1h='Cannot find matching keyid: {"signatures":',m1h="ERR_PNPM_IGNORED_BUILDS";function h1h(e){try{let r=(0,eCl.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.
|
|
3947
3947
|
|
|
@@ -4275,7 +4275,7 @@ ${n}
|
|
|
4275
4275
|
`);o.logger.log(Mng(s),b_({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})+`
|
|
4276
4276
|
`)}function zng(e){return e.some(t=>t.severity==="fatal")?"fatal":e.some(t=>t.severity==="error")?"error":"warning"}function Mng(e){switch(e){case"fatal":return qn.Error;case"error":return qn.Error;case"warning":return qn.Warn;default:Ee(e)}}function Lng(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 Vng({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 Ung(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}}co();Jt();Tt();async function qGl({groups:e,visitor:t,nodePath:r,cliVersion:n}){if(e!=null)for(let[i,o]of Object.entries(e))await _ng({group:o,visitor:t,nodePath:[...r,i],cliVersion:n})}async function _ng({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 WGl(e,t,r){await r.file?.(e,[]),await BV(e,{"auth-schemes":mt,api:mt,whitelabel:mt,metadata:mt,readme:mt,"default-group":mt,aliases:mt,reviewers:mt,openapi:mt,"openapi-overrides":mt,"spec-origin":mt,"async-api":mt,"api-settings":mt,ai:mt,autorelease:mt,replay:mt,automation:mt,groups:async n=>{await qGl({groups:n,visitor:r,nodePath:["groups"],cliVersion:t})}})}function HGl({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")}}co();Md();mfe();jt();function Gng(e,t,r){let n;try{n=H1(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 qng(e){return Number(e.replace("v",""))}var qAs={name:"compatible-ir-version",create:async()=>({generatorsYml:{generatorInvocation:async({invocation:e,cliVersion:t})=>{if(t==null||t==="0.0.0")return[];let r=VLr({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=qng(e["ir-version"]);else{let c={...e,name:_A(o)},u=await k6e(c);if(u==null)return[];s=u}if(s<=i)return[];let a=await r.generators.cli.getMinCliForIr(s);return a.ok?Gng(o,a.body.version,t)??[]:[]}}})};var WAs={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 KGl(){return[qAs,WAs]}async function vhi(e,t){return Wng({workspace:e,rules:KGl(),logger:t})}async function Wng({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 Hng({contents:e.generatorsConfiguration.rawConfiguration,allRuleVisitors:i,cliVersion:e.cliVersion});n.push(...o)}return n}async function Hng({contents:e,allRuleVisitors:t,cliVersion:r}){let n=[],i=HGl({relativeFilepath:ve.of(zp),contents:e,allRuleVisitors:t,addViolations:o=>{n.push(...o)}});return await WGl(e,r,i),n}jt();var HAs=ye(YGl(),1);async function KAs({workspace:e,context:t,ossWorkspace:r}){(0,HAs.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=v6e(e,t.logger),o=await vhi(e,t.logger),s=[...i,...o];r&&s.push(...await Lve(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 XGl({workspace:e,context:t,logWarnings:r,logSummary:n=!0,ossWorkspace:i}){let o=performance.now(),s=v6e(e,t.logger),a=await vhi(e,t.logger),c=[...s,...a];i&&c.push(...await Lve(i,t));let u=performance.now()-o,{hasErrors:l}=Z_e({violations:c,context:t,logWarnings:r,logSummary:n,elapsedMillis:u});return{hasErrors:l}}async function tJ({workspace:e,context:t,logWarnings:r,ossWorkspace:n}){(0,HAs.default)(e.definition.rootApiFile.contents.name).validForNewPackages||t.failAndThrow("API name is not valid.",void 0,{code:S.Code.ValidationError});let{hasErrors:i}=await XGl({workspace:e,context:t,logWarnings:r,ossWorkspace:n});i&&t.failAndThrow(void 0,void 0,{code:S.Code.ValidationError})}ofe();Tt();vm();jt();p0t();LW();var Eql=require("fs/promises");Jt();B_();En();var ZGl=require("fs"),xhi=require("fs/promises"),$Gl=require("stream/promises");async function eql({snippetsS3PreSignedReadUrl:e,absolutePathToLocalSnippetJSON:t,context:r}){try{await Zng({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 Zng({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await Ug.get(e,{responseType:"stream"});await Xt(t)&&await(0,xhi.rm)(t,{recursive:!0}),await(0,xhi.mkdir)(An(t),{recursive:!0}),await(0,$Gl.pipeline)(r.data,(0,ZGl.createWriteStream)(t))}function tql(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(!$ng(i.type))throw new Error(`Generator ${e.generatorId} ${e.requestedVersion} 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 $ng(e){return e==="openapi"||e==="asyncapi"||e==="graphql"}Ea();Jt();async function rql({generatorInvocation:e,context:t}){if(e.absolutePathToLocalOutput==null)return;let r=Me(e.absolutePathToLocalOutput,ve.of(i1));if(await Xt(r))return t.logger.debug(`Auto-discovered ${i1} at ${r}`),r}bu();v2();Ea();Md();Tt();eh();var mq=ye(Ohe(),1);ep();Ln();Za();vm();Sme();jt();bu();Md();Jt();jt();LW();B_();var oql=ye(grt(),1),whi=require("fs/promises");is();var sql=ye(Xm(),1),aql=require("util"),cql=require("zlib");Md();async function Chi({intermediateRepresentation:e,generatorInvocation:t,context:r,irVersionOverride:n}){let i=await k6e(t),o=n??(i==null?void 0:`v${i}`),s={name:t.name,version:t.version};return o==null?z9t({intermediateRepresentation:e,context:r,targetGenerator:s}):kHo({intermediateRepresentation:e,context:r,irVersion:o,targetGenerator:s})}jt();var eig=2e3,nql=12e4,JAs=5,tig=.5,$_e=class e extends Error{retryAfterSeconds;constructor(t){super("Received 429 Too Many Requests"),Object.setPrototypeOf(this,e.prototype),this.retryAfterSeconds=t}};async function iql({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 $_e)return n();throw o}for(let o=0;o<=JAs;o++)try{return await e()}catch(s){if(s instanceof $_e&&o<JAs){let a=Math.min(eig*2**o,nql),c=s.retryAfterSeconds!=null?s.retryAfterSeconds*1e3:void 0,u=c!=null?Math.max(a,c):a,l=1+(Math.random()-.5)*tig,p=Math.round(Math.min(Math.max(u*l,c??0),nql));r.warn(`Received 429 Too Many Requests. Retrying in ${(p/1e3).toFixed(1)}s (attempt ${o+1}/${JAs})...`),await i(p)}else throw s}throw new S({message:"Exceeded maximum retries for 429 Too Many Requests.",code:S.Code.NetworkError})}var rig=(0,aql.promisify)(cql.gzip);async function uql({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:I,verify:C,loginCommand:T="fern login",specsTarGzBuffer:P}){let D;if(A)D="";else if(g!=null)try{D=await(0,whi.readFile)(g,"utf-8")}catch(z){s.failAndThrow(`Failed to read fernignore file at ${g}: ${z}`,void 0,{code:S.Code.ConfigError})}let O=await iql({fn:()=>nig({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:D,automationMode:E,autoMerge:x,skipIfNoDiff:I,verify:C,loginCommand:T}),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 iig({intermediateRepresentation:n,job:O,context:s,generatorInvocation:i,irVersionOverride:p,specsTarGzBuffer:P}),O}async function nig({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=pfe({token:a.value}),E={id:n.name,version:n.version,outputMode:n.outputMode,customConfig:oX(n.config),publishMetadata:n.publishMetadata},x={apiName:t.definition.rootApiFile.contents.name,version:i,organizationName:r,generators:[E],uploadToS3:uig({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},I=await y.remoteGen.createJobV3(x);if(!I.ok){let C=I.error;if(C?.content?.reason==="status-code"&&C.content.statusCode===429){let P=aig(C);throw new $_e(P)}let T=sig(C);return T!=null?o.failAndThrow(T,void 0,{code:S.Code.ConfigError}):cig(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:P,invalidScope:D})=>o.failAndThrow(`You do not have permission to publish to ${D} (expected ${P})`,void 0,{code:S.Code.AuthError}),cannotPublishToMavenGroup:({validGroup:P,invalidGroup:D})=>o.failAndThrow(`You do not have permission to publish to ${D} (expected ${P})`,void 0,{code:S.Code.AuthError}),cannotPublishPypiPackage:({validPrefix:P,invalidPackageName:D})=>o.failAndThrow(`You do not have permission to publish to ${D} (expected ${P})`,void 0,{code:S.Code.AuthError}),generatorsDoNotExistError:P=>o.failAndThrow("Generators do not exist: "+P.nonExistentGenerators.map(D=>`${D.id}@${D.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.
|
|
4277
4277
|
|
|
4278
|
-
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:P=>o.failAndThrow(`Branch ${P.branch} does not exist in repository ${P.repositoryOwner}/${P.repositoryName}`,void 0,{code:S.Code.ConfigError}),rateLimitExceeded:()=>{throw new $_e},_other:P=>{o.logger.debug(`Failed to create job: ${JSON.stringify(P)}`);let D=oig(P);return D!=null?o.failAndThrow(D,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 I.body}async function iig({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i,specsTarGzBuffer:o}){let s=await Chi({intermediateRepresentation:e,generatorInvocation:t,context:n,irVersionOverride:i}),a=new oql.default,c=await kcr(s,{onWrite:d=>{n.logger.debug("Wrote IR to disk: "+d)}}),u=new TextEncoder().encode(c),l=await rig(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,sql.default)(F6e(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await Ug.post(p,a,{headers:a.getHeaders(),maxBodyLength:1/0})}catch(d){let f=d instanceof ryu?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 oig(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 sig(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 aig(e){let t=e?.content?.body?.content?.retryAfter;return typeof t=="number"&&t>0?t:void 0}function cig(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Gr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Gr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Gr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Gr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Gr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Gr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Gr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Gr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Gr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function uig({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}jt();Md();var lql=pfe();var lig=3;function pql({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await lql.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===lig&&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)}}})}bu();Jt();var fql=ye($n(),1),dql=require("util"),mql=require("zlib");var pig=(0,dql.promisify)(mql.gzip),fig=Ut.of("/tmp/fern-runtime/ir.json"),dig=Ut.of("/fern/output");async function hql({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 Chi({intermediateRepresentation:i,generatorInvocation:r,context:u,irVersionOverride:o}),p=CCt({workspaceName:e,organization:t,outputVersion:n,customConfig:oX(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:fig,outputDirectory:dig}}),d=await fql.GeneratorConfig.jsonOrThrow(p);return pig(Buffer.from(JSON.stringify({config:d,ir:l})))}Jt();Ln();RE();jt();var Shi=require("fs/promises"),gql=ye(IE(),1),mig="proto.zip",RKt=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,Shi.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,Shi.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await gql.default.dir(),n=Me(Ut.of(r.path),ve.of(mig));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await ja(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(Uj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(Uj.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}};async function yql({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:I,requireEnvVars:C,automationMode:T,autoMerge:P,skipIfNoDiff:D,verify:O,noReplay:z,disableTelemetry:J,loginCommand:Y,specsTarGzBuffer:ee,sdkGenApiSourceArchive:oe,sdkGenApiRoute:le,sdkConfigV1:ne,sdkGenApiPreparationBatch:pe,sdkGenApiBatch:Be,sdkGenApiTargetIdSeed:Se,generateFullProject:ae}){let de=r2({token:c.value}),Ce=await X4t("https://registry.buildwithfern.com/health",n.logger),Ne=Dn.getPackageName({generatorInvocation:i})??(i.outputMode.type==="downloadFiles"?fbe(i):void 0),Xe=f??d!=null,ut=u==null?void 0:uA(u,{onError:_n=>{!Xe&&C&&n.failAndThrow(void 0,_n,{code:S.Code.EnvironmentError})}},{substituteAsEmpty:Xe}),At=O_e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:i}),st=le?.payloadKind==="sdk-config-v1"?ne?.targets.find(_n=>_n.language===le.language):void 0,Ht=st?.sdkVersion??ne?.sdkVersion,cr=o??Ht??await M0r({packageName:Ne,generatorInvocation:i});o!=null&&(Xe?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await vbr({version:o,packageName:Ne,generatorInvocation:i,context:n}));let Ae=cr!=null&&(0,mq.isAutoVersion)(cr)?mq.MAGIC_VERSION:cr,me=dbe(i),Ue=mbe(i),tt=Lg({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:Ne,userAgentTemplate:me,idempotencyKeyGeneration:Ue,organization:t,version:Ae,context:n,sourceResolver:new jh(n,r),dynamicGeneratorConfig:At,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:uX(),originGitCommitIsDirty:lX(),invokedBy:aX(),requestedVersion:o,ciProvider:cX()}}),be,Re,vt=BG(i.name);if(le!=null){if(l?.enabled===!0)return n.failAndThrow("sdk-gen-api does not yet support replay",void 0,{code:S.Code.ConfigError});if(ae===!0)return n.failAndThrow("sdk-gen-api does not yet support full-project generation",void 0,{code:S.Code.ConfigError});let _n={generatorInvocation:i,sdkVersion:cr,specsTarGzBuffer:ee,whitelabel:u};if(!aVl(_n)){let Qt=cr==null?"the SDK version could not be resolved":(0,mq.isAutoVersion)(cr)?"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":ee==null?"the source archive is unavailable":`generator language ${i.language??"unknown"} does not match ${vt}`;return n.failAndThrow(`Cannot submit SDK generation to sdk-gen-api: ${Qt}`,void 0,{code:S.Code.ConfigError})}if(be=_n,le.payloadKind==="sdk-config-v1"){if(ne==null||st==null)return n.failAndThrow(`Cannot submit ${_n.generatorInvocation.name} ${_n.generatorInvocation.version} 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});Re={apiName:Rr(tt.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:_n.generatorInvocation,sdkName:st.sdkName??ne.sdkName,sdkVersion:_n.sdkVersion,apiVersion:ne.apiVersion,token:c,specsTarGzBuffer:_n.specsTarGzBuffer,payload:{payloadKind:"sdk-config-v1",body:ne.body},absolutePathToPreview:d,context:n,targetIdSeed:Se,sourceSpecIndexes:oe?.specIndexes,skipFernignore:E}}if(Se==null)throw new Error("sdk-gen-api target is missing its preparation ID");await pe?.ready(Se,Re)}let ot=le?.payloadKind!=="sdk-config-v1",Ke=!1,er=!1;if(!Ce&&ot){let Qt=await Rf({token:c.value}).organization.get({orgId:e.organization});Qt.ok&&(Qt.body.isWhitelabled&&(tt.readmeConfig==null&&(tt.readmeConfig=Aig),tt.readmeConfig.whiteLabel=!0),tt.selfHosted=Qt.body.selfHostedSdKs,Ke=Qt.body.oauthClientEnabled??!1,er=Qt.body.paginationEnabled??!1)}let Kt;if(ot){let _n=r.getSources(),Qt,sr=ZT({ir:tt,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 Le=await de.api.register.registerApiDefinition({orgId:ln.OrgId(t),apiId:ln.ApiId(Rr(tt.apiName)),definition:sr,sources:_n.length>0?gig(_n):void 0});Kt=Le.apiDefinitionId,Qt=Le.sources??void 0}catch(Le){new RKt(n,_n).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(Le)}`)}let Ge=new RKt(n,_n);if(Qt==null&&Ge.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 Le=await Ge.uploadSources(Qt);n.logger.debug("Setting IR source configuration ..."),tt.sourceConfig=Le}}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(Ne==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:S.Code.ConfigError});return}try{await Aql({fdr:de,organization:t,version:o,language:i.language,packageName:Ne,ir:tt,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,dynamicGeneratorConfig:At,context:n})}catch(_n){n.failAndThrow(`Failed to upload dynamic IR: ${Fn(_n)}`,void 0,{code:S.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let ar={...tt,fdrApiDefinitionId:Kt,publishConfig:hig({generatorInvocation:i,version:cr,userProvidedVersion:o,packageName:Ne,selfHosted:tt.selfHosted??!1,generateFullProject:ae,context:n})},Kn;if(le!=null){if(be==null)throw new Error("sdk-gen-api target passed preflight without an eligible candidate");let _n=le.payloadKind==="sdk-config-v1"?Re??n.failAndThrow("SDK Config v1 target reached submission without prepared build parameters",void 0,{code:S.Code.ConfigError}):{apiName:Rr(tt.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:be.generatorInvocation,sdkVersion:be.sdkVersion,apiVersion:tt.specVersion,token:c,specsTarGzBuffer:be.specsTarGzBuffer,payload:{payloadKind:"fern-runtime-bundle",body:await hql({apiName:Rr(tt.apiName),organization:t,generatorInvocation:be.generatorInvocation,sdkVersion:be.sdkVersion,intermediateRepresentation:ar,irVersionOverride:p,generateOauthClients:Ke,generatePaginatedClients:er,context:n})},absolutePathToPreview:d,context:n,targetIdSeed:Se,sourceSpecIndexes:oe?.specIndexes,audiences:s.type==="select"?s.audiences:void 0,skipFernignore:E};Kn=await(Be?.run(_n)??cVl(_n))}else{let _n=await uql({projectConfig:e,workspace:r,organization:t,generatorInvocation:i,context:n,version:cr,intermediateRepresentation:ar,shouldLogS3Url:a,token:c,whitelabel:ut,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:y,skipFernignore:E,retryRateLimited:I,automationMode:T,autoMerge:P,skipIfNoDiff:D,verify:O,loginCommand:Y,specsTarGzBuffer:ee});n.logger.debug(`Job ID: ${_n.jobId}`);let Qt=_n.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 sr=new Wdi({job:_n,taskId:Qt,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:T===!0,autoMerge:P===!0,skipIfNoDiff:D===!0,versionArg:o==null?"none":(0,mq.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:z===!0,disableTelemetry:J===!0}});Kn=await pql({job:_n,taskHandler:sr,taskId:Qt,context:n})}if(Kn!=null&&Kn.actualVersion==null){let _n=yig(cr);_n!=null&&(Kn={...Kn,actualVersion:_n})}let pn=Kn?.actualVersion??cr;if(Kn!=null&&pn!=null&&i.language!=null&&Ne!=null&&!Xe)try{await Aql({fdr:de,organization:t,version:pn,language:i.language,packageName:Ne,ir:tt,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,dynamicGeneratorConfig:At,context:n})}catch(_n){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${Fn(_n)}`)}return Kn}function hig({generatorInvocation:e,version:t,userProvidedVersion:r,packageName:n,selfHosted:i,generateFullProject:o,context:s}){let a=e.language??(0,mq.extractLanguageFromGeneratorName)(e.name),c=u=>u!=null&&(0,mq.isAutoVersion)(u)?(0,mq.mapMagicVersionForLanguage)(mq.MAGIC_VERSION,a):u;return e.outputMode._visit({downloadFiles:()=>_t.PublishingConfig.filesystem({generateFullProject:i||(o??!1),publishTarget:L0r({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"]),_t.PublishingConfig.direct({target:_t.PublishTarget.postman({apiKey:l.apiKey,workspaceId:l.workspaceId,collectionId:p})})},_other:()=>{}}),_other:()=>{}})}function gig(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var Aig={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 Aql({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:ln.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=A6e({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 yig(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function XRe({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:I,automationMode:C,autoMerge:T,skipIfNoDiff:P,verify:D,noReplay:O,disableTelemetry:z,automation:J,occurrenceTracker:Y,loginCommand:ee,getSpecsTarGzBuffer:oe,sdkConfigV1:le,generateFullProject:ne}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let pe=[],Be=Y??new d_e;Y==null&&Be.recordOccurrences(i.generators);let Se=r.generatorsConfiguration?.absolutePathToConfiguration,ae=big({generators:i.generators,enabled:ygs(),sdkConfigV1:le,requireEnvVars:I,isPreview:p??l!=null,verify:D,skipIfNoDiff:P,autoMerge:T}),de=ae.map(Ue=>Ue.route),Oe=ae.map(Ue=>Ue.generatorInvocation),Ce=ae.map(Ue=>Ue.error);J==null&&bql(Ce,i.generators);let Ne=Oe.flatMap((Ue,tt)=>ae[tt]?.error==null?[{generatorIndex:tt,generatorInvocation:Ue,sdkGenApiRoute:de[tt]}]:[]),Xe={sourceArchives:new Map,errors:new Map};if(Ne.length>0)try{Xe=await oe?.(Ne)??Xe}catch(Ue){Xe={sourceArchives:new Map,errors:new Map(Ne.map(tt=>[tt.generatorIndex,Ue]))}}let ut=Iig({generators:Oe,routes:de,routeErrors:Ce,sourceResolution:Xe}),At=ut.sourceArchives,st=ae.map((Ue,tt)=>Ue.error??ut.preflightErrors[tt]);J==null&&bql(st,i.generators);let Ht=vig(de,st);uVl(Ht.size);let cr=Ht.size>1?new $di(Ht.size):void 0,Ae=Ht.size>0?new emi([...Ht].map(String)):void 0,me=await Promise.all(i.generators.map((Ue,tt)=>n.runInteractiveTask({name:Ue.name},be=>xig({generatorInvocation:Ue,resolvedGeneratorInvocation:Oe[tt]??Ue,interactiveTaskContext:be,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:I,automationMode:C,autoMerge:T,skipIfNoDiff:P,verify:D,noReplay:O,disableTelemetry:z,automation:J,generatorsYmlAbsolutePath:Se,occurrenceTracker:Be,loginCommand:ee,specsTarGzArchive:At[tt],sdkGenApiPreflightError:st[tt],sdkGenApiRoute:de[tt],sdkConfigV1:le,sdkGenApiPreparationBatch:Ht.has(tt)?Ae:void 0,sdkGenApiBatch:Ht.has(tt)?cr:void 0,sdkGenApiTargetIdSeed:tt.toString(),generateFullProject:ne,onSnippetsProduced:Re=>pe.push(Re)}))));if(J==null&&me.some(Ue=>!Ue))throw new iu;return{snippetsProducedBy:pe}}function big({generators:e,enabled:t,sdkConfigV1:r,requireEnvVars:n,isPreview:i,verify:o,skipIfNoDiff:s,autoMerge:a}){return e.map(c=>{let u=c;try{u=uA(c,{onError:m=>{if(!i&&n)throw m}},{substituteAsEmpty:i});let l=BG(u.name),p=l==null?void 0:r?.targets.find(m=>m.language===l);if(r!=null&&l==null)throw new Error(`SDK Config v1 generation only supports Fern SDK generators routed through sdk-gen-api; the selected group contains ${u.name}`);if(r!=null&&p==null)throw new Error(`SDK Config v1 does not contain a target for ${l}`);if(p?.generatorVersion!=null&&(u={...u,version:p.generatorVersion}),!t){if(r!=null)throw new Error("SDK Config v1 generation requires the sdk-gen-api generation backend");return{generatorInvocation:u,route:void 0,error:void 0}}let d=oVl(u,r==null?"legacy-fern":"sdk-config-v1"),f=Eig({generatorInvocation:u,verify:o,skipIfNoDiff:s,autoMerge:a});if(d!=null&&f!=null){if(d.configKind==="legacy-fern")return{generatorInvocation:u,route:void 0,error:void 0};throw new Error(`Cannot route ${u.name} ${u.version} through sdk-gen-api: ${f}. This generator version requires SDK Config v1, so Fern cannot fall back to legacy Fiddle generation.`)}return{generatorInvocation:u,route:d,error:void 0}}catch(l){let p=l instanceof NRe?new S({message:Igs(l),code:S.Code.ConfigError}):l;return{generatorInvocation:u,route:void 0,error:p}}})}function Eig({generatorInvocation:e,verify:t,skipIfNoDiff:r,autoMerge:n}){let i=[];return e.outputMode.type!=="downloadFiles"&&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 Iig({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{tql(s,c);return}catch(u){return u}})}}function vig(e,t){return new Set(e.flatMap((r,n)=>r!=null&&t[n]==null?[n]:[]))}async function xig({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:I,validateWorkspace:C,retryRateLimited:T,requireEnvVars:P,automationMode:D,autoMerge:O,skipIfNoDiff:z,verify:J,noReplay:Y,disableTelemetry:ee,automation:oe,generatorsYmlAbsolutePath:le,occurrenceTracker:ne,loginCommand:pe,specsTarGzArchive:Be,sdkGenApiPreflightError:Se,sdkGenApiRoute:ae,sdkConfigV1:de,sdkGenApiPreparationBatch:Oe,sdkGenApiBatch:Ce,sdkGenApiTargetIdSeed:Ne,generateFullProject:Xe,onSnippetsProduced:ut}){let At=Date.now();try{if(Se!=null)throw Se;let st=K0e(t),Ht=await o.toFernWorkspace({context:s},st,t.apiOverride?.specs);C&&await tJ({workspace:Ht,context:s,logWarnings:!1,ossWorkspace:o instanceof lp?o:void 0});let cr=x?void 0:E??await rql({generatorInvocation:t,context:r}),Ae=await yql({projectConfig:n,organization:i,workspace:Ht,interactiveTaskContext:r,generatorInvocation:{...t,outputMode:t.outputMode._visit({downloadFiles:()=>t.outputMode,github:me=>Gr.OutputMode.github({...me,makePr:y==="pull-request"}),githubV2:me=>y==="pull-request"?Gr.OutputMode.githubV2(Gr.GithubOutputModeV2.pullRequest(me)):t.outputMode,publish:()=>t.outputMode,publishV2:()=>t.outputMode,_other:()=>t.outputMode})},version:c,audiences:de==null?a.audiences:de.audiences==null?{type:"all"}:{type:"select",audiences:de.audiences},shouldLogS3Url:u,token:l,whitelabel:p,replay:d,readme:t.readme,irVersionOverride:t.irVersionOverride,absolutePathToPreview:f,isPreview:m,fiddlePreview:g,pushPreviewBranch:A,fernignorePath:cr,skipFernignore:x,dynamicIrOnly:I,retryRateLimited:T,requireEnvVars:P,automationMode:D,autoMerge:O,skipIfNoDiff:z,verify:J,noReplay:Y,disableTelemetry:ee,loginCommand:pe,specsTarGzBuffer:Be?.buffer,sdkGenApiSourceArchive:Be,sdkGenApiRoute:ae,sdkConfigV1:de,sdkGenApiPreparationBatch:Oe,sdkGenApiBatch:Ce,sdkGenApiTargetIdSeed:Ne,generateFullProject:Xe});if(Ae?.createdSnippets&&(ut(e),e.absolutePathToLocalSnippets!=null&&Ae.snippetsS3PreSignedReadUrl!=null&&await eql({snippetsS3PreSignedReadUrl:Ae.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:r})),oe!=null){let me=le!=null?await h_e(le,e.name,ne.lookup(e)):void 0;oe.recorder.recordSuccess({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,version:Ae?.actualVersion??null,durationMs:Date.now()-At,pullRequestUrl:Ae?.pullRequestUrl,noChangesDetected:Ae?.noChangesDetected,publishTarget:Ae?.publishTarget,outputRepoUrl:m_e(e),generatorsYmlAbsolutePath:le,generatorsYmlLineNumber:me})}await Cig({pullRequestUrl:Ae?.pullRequestUrl,publishTarget:Ae?.publishTarget,noChangesDetected:Ae?.noChangesDetected,version:Ae?.actualVersion,generatorName:e.name,groupName:a.groupName,apiName:o.workspaceName,isAutomation:oe!=null})}catch(st){if(Oe?.fail(Ne,st,oe!=null),oe!=null?Ce?.remove(Ne,st):Ce?.cancel(st),oe==null)throw st;if(st instanceof iu){let Ae=le!=null?await h_e(le,e.name,ne.lookup(e)):void 0;throw oe.recorder.recordFailure({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,errorMessage:r.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-At,outputRepoUrl:m_e(e),generatorsYmlAbsolutePath:le,generatorsYmlLineNumber:Ae}),st}let Ht=Fn(st),cr=le!=null?await h_e(le,e.name,ne.lookup(e)):void 0;oe.recorder.recordFailure({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,errorMessage:Ht,durationMs:Date.now()-At,outputRepoUrl:m_e(e),generatorsYmlAbsolutePath:le,generatorsYmlLineNumber:cr}),r.failWithoutThrowing(Ht,st,{code:X2e(st)})}}function bql(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 Cig(e){if(!w6e())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&&t.push({event:`Published to ${e.publishTarget.label}`,body:`${e.publishTarget.version} \u2192 ${e.publishTarget.url}`,summaryLine:`\u{1F4E6} **${e.generatorName}** \u2192 [${e.publishTarget.label} ${e.publishTarget.version}](${e.publishTarget.url})`}),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=S6e("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}
|
|
4278
|
+
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:P=>o.failAndThrow(`Branch ${P.branch} does not exist in repository ${P.repositoryOwner}/${P.repositoryName}`,void 0,{code:S.Code.ConfigError}),rateLimitExceeded:()=>{throw new $_e},_other:P=>{o.logger.debug(`Failed to create job: ${JSON.stringify(P)}`);let D=oig(P);return D!=null?o.failAndThrow(D,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 I.body}async function iig({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i,specsTarGzBuffer:o}){let s=await Chi({intermediateRepresentation:e,generatorInvocation:t,context:n,irVersionOverride:i}),a=new oql.default,c=await kcr(s,{onWrite:d=>{n.logger.debug("Wrote IR to disk: "+d)}}),u=new TextEncoder().encode(c),l=await rig(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,sql.default)(F6e(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await Ug.post(p,a,{headers:a.getHeaders(),maxBodyLength:1/0})}catch(d){let f=d instanceof ryu?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 oig(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 sig(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 aig(e){let t=e?.content?.body?.content?.retryAfter;return typeof t=="number"&&t>0?t:void 0}function cig(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Gr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Gr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Gr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Gr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Gr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Gr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Gr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Gr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Gr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function uig({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}jt();Md();var lql=pfe();var lig=3;function pql({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await lql.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===lig&&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)}}})}bu();Jt();var fql=ye($n(),1),dql=require("util"),mql=require("zlib");var pig=(0,dql.promisify)(mql.gzip),fig=Ut.of("/tmp/fern-runtime/ir.json"),dig=Ut.of("/fern/output");async function hql({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 Chi({intermediateRepresentation:i,generatorInvocation:r,context:u,irVersionOverride:o}),p=CCt({workspaceName:e,organization:t,outputVersion:n,customConfig:oX(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:fig,outputDirectory:dig}}),d=await fql.GeneratorConfig.jsonOrThrow(p);return pig(Buffer.from(JSON.stringify({config:d,ir:l})))}Jt();Ln();RE();jt();var Shi=require("fs/promises"),gql=ye(IE(),1),mig="proto.zip",RKt=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,Shi.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,Shi.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await gql.default.dir(),n=Me(Ut.of(r.path),ve.of(mig));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await ja(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(Uj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(Uj.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}};async function yql({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:I,requireEnvVars:C,automationMode:T,autoMerge:P,skipIfNoDiff:D,verify:O,noReplay:z,disableTelemetry:J,loginCommand:Y,specsTarGzBuffer:ee,sdkGenApiSourceArchive:oe,sdkGenApiRoute:le,sdkConfigV1:ne,sdkGenApiPreparationBatch:pe,sdkGenApiBatch:Be,sdkGenApiTargetIdSeed:Se,generateFullProject:ae}){let de=r2({token:c.value}),Ce=await X4t("https://registry.buildwithfern.com/health",n.logger),Ne=Dn.getPackageName({generatorInvocation:i})??(i.outputMode.type==="downloadFiles"?fbe(i):void 0),Xe=f??d!=null,ut=u==null?void 0:uA(u,{onError:_n=>{!Xe&&C&&n.failAndThrow(void 0,_n,{code:S.Code.EnvironmentError})}},{substituteAsEmpty:Xe}),At=O_e({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:i}),st=le?.payloadKind==="sdk-config-v1"?ne?.targets.find(_n=>_n.language===le.language):void 0,Ht=st?.sdkVersion??ne?.sdkVersion,cr=o??Ht??await M0r({packageName:Ne,generatorInvocation:i});o!=null&&(Xe?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await vbr({version:o,packageName:Ne,generatorInvocation:i,context:n}));let Ae=cr!=null&&(0,mq.isAutoVersion)(cr)?mq.MAGIC_VERSION:cr,me=dbe(i),Ue=mbe(i),tt=Lg({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:Ne,userAgentTemplate:me,idempotencyKeyGeneration:Ue,organization:t,version:Ae,context:n,sourceResolver:new jh(n,r),dynamicGeneratorConfig:At,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:uX(),originGitCommitIsDirty:lX(),invokedBy:aX(),requestedVersion:o,ciProvider:cX()}}),be,Re,vt=BG(i.name);if(le!=null){if(l?.enabled===!0)return n.failAndThrow("sdk-gen-api does not yet support replay",void 0,{code:S.Code.ConfigError});if(ae===!0)return n.failAndThrow("sdk-gen-api does not yet support full-project generation",void 0,{code:S.Code.ConfigError});let _n={generatorInvocation:i,sdkVersion:cr,specsTarGzBuffer:ee,whitelabel:u};if(!aVl(_n)){let Qt=cr==null?"the SDK version could not be resolved":(0,mq.isAutoVersion)(cr)?"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":ee==null?"the source archive is unavailable":`generator language ${i.language??"unknown"} does not match ${vt}`;return n.failAndThrow(`Cannot submit SDK generation to sdk-gen-api: ${Qt}`,void 0,{code:S.Code.ConfigError})}if(be=_n,le.payloadKind==="sdk-config-v1"){if(ne==null||st==null)return n.failAndThrow(`Cannot submit ${_n.generatorInvocation.name} ${_n.generatorInvocation.version} 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});Re={apiName:Rr(tt.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:_n.generatorInvocation,sdkName:st.sdkName??ne.sdkName,sdkVersion:_n.sdkVersion,apiVersion:ne.apiVersion,token:c,specsTarGzBuffer:_n.specsTarGzBuffer,payload:{payloadKind:"sdk-config-v1",body:ne.body},absolutePathToPreview:d,context:n,targetIdSeed:Se,sourceSpecIndexes:oe?.specIndexes,skipFernignore:E}}if(Se==null)throw new Error("sdk-gen-api target is missing its preparation ID");await pe?.ready(Se,Re)}let ot=le?.payloadKind!=="sdk-config-v1",Ke=!0,er=!0;if(!Ce&&ot){let Qt=await Rf({token:c.value}).organization.get({orgId:e.organization});Qt.ok?(Qt.body.isWhitelabled&&(tt.readmeConfig==null&&(tt.readmeConfig=Aig),tt.readmeConfig.whiteLabel=!0),tt.selfHosted=Qt.body.selfHostedSdKs,Ke=Qt.body.oauthClientEnabled??!0,er=Qt.body.paginationEnabled??!0):n.logger.warn(`Failed to load organization settings for ${e.organization}; assuming pagination and OAuth clients are enabled.`)}let Kt;if(ot){let _n=r.getSources(),Qt,sr=ZT({ir:tt,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 Le=await de.api.register.registerApiDefinition({orgId:ln.OrgId(t),apiId:ln.ApiId(Rr(tt.apiName)),definition:sr,sources:_n.length>0?gig(_n):void 0});Kt=Le.apiDefinitionId,Qt=Le.sources??void 0}catch(Le){new RKt(n,_n).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(Le)}`)}let Ge=new RKt(n,_n);if(Qt==null&&Ge.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 Le=await Ge.uploadSources(Qt);n.logger.debug("Setting IR source configuration ..."),tt.sourceConfig=Le}}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(Ne==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:S.Code.ConfigError});return}try{await Aql({fdr:de,organization:t,version:o,language:i.language,packageName:Ne,ir:tt,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,dynamicGeneratorConfig:At,context:n})}catch(_n){n.failAndThrow(`Failed to upload dynamic IR: ${Fn(_n)}`,void 0,{code:S.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let ar={...tt,fdrApiDefinitionId:Kt,publishConfig:hig({generatorInvocation:i,version:cr,userProvidedVersion:o,packageName:Ne,selfHosted:tt.selfHosted??!1,generateFullProject:ae,context:n})},Kn;if(le!=null){if(be==null)throw new Error("sdk-gen-api target passed preflight without an eligible candidate");let _n=le.payloadKind==="sdk-config-v1"?Re??n.failAndThrow("SDK Config v1 target reached submission without prepared build parameters",void 0,{code:S.Code.ConfigError}):{apiName:Rr(tt.apiName),organization:t,cliVersion:r.cliVersion,generatorInvocation:be.generatorInvocation,sdkVersion:be.sdkVersion,apiVersion:tt.specVersion,token:c,specsTarGzBuffer:be.specsTarGzBuffer,payload:{payloadKind:"fern-runtime-bundle",body:await hql({apiName:Rr(tt.apiName),organization:t,generatorInvocation:be.generatorInvocation,sdkVersion:be.sdkVersion,intermediateRepresentation:ar,irVersionOverride:p,generateOauthClients:Ke,generatePaginatedClients:er,context:n})},absolutePathToPreview:d,context:n,targetIdSeed:Se,sourceSpecIndexes:oe?.specIndexes,audiences:s.type==="select"?s.audiences:void 0,skipFernignore:E};Kn=await(Be?.run(_n)??cVl(_n))}else{let _n=await uql({projectConfig:e,workspace:r,organization:t,generatorInvocation:i,context:n,version:cr,intermediateRepresentation:ar,shouldLogS3Url:a,token:c,whitelabel:ut,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:y,skipFernignore:E,retryRateLimited:I,automationMode:T,autoMerge:P,skipIfNoDiff:D,verify:O,loginCommand:Y,specsTarGzBuffer:ee});n.logger.debug(`Job ID: ${_n.jobId}`);let Qt=_n.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 sr=new Wdi({job:_n,taskId:Qt,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:T===!0,autoMerge:P===!0,skipIfNoDiff:D===!0,versionArg:o==null?"none":(0,mq.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:z===!0,disableTelemetry:J===!0}});Kn=await pql({job:_n,taskHandler:sr,taskId:Qt,context:n})}if(Kn!=null&&Kn.actualVersion==null){let _n=yig(cr);_n!=null&&(Kn={...Kn,actualVersion:_n})}let pn=Kn?.actualVersion??cr;if(Kn!=null&&pn!=null&&i.language!=null&&Ne!=null&&!Xe)try{await Aql({fdr:de,organization:t,version:pn,language:i.language,packageName:Ne,ir:tt,smartCasing:i.smartCasing,smartCasingDigitWordBoundary:i.smartCasingDigitWordBoundary,dynamicGeneratorConfig:At,context:n})}catch(_n){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${Fn(_n)}`)}return Kn}function hig({generatorInvocation:e,version:t,userProvidedVersion:r,packageName:n,selfHosted:i,generateFullProject:o,context:s}){let a=e.language??(0,mq.extractLanguageFromGeneratorName)(e.name),c=u=>u!=null&&(0,mq.isAutoVersion)(u)?(0,mq.mapMagicVersionForLanguage)(mq.MAGIC_VERSION,a):u;return e.outputMode._visit({downloadFiles:()=>_t.PublishingConfig.filesystem({generateFullProject:i||(o??!1),publishTarget:L0r({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"]),_t.PublishingConfig.direct({target:_t.PublishTarget.postman({apiKey:l.apiKey,workspaceId:l.workspaceId,collectionId:p})})},_other:()=>{}}),_other:()=>{}})}function gig(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var Aig={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 Aql({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:ln.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=A6e({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 yig(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function XRe({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:I,automationMode:C,autoMerge:T,skipIfNoDiff:P,verify:D,noReplay:O,disableTelemetry:z,automation:J,occurrenceTracker:Y,loginCommand:ee,getSpecsTarGzBuffer:oe,sdkConfigV1:le,generateFullProject:ne}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let pe=[],Be=Y??new d_e;Y==null&&Be.recordOccurrences(i.generators);let Se=r.generatorsConfiguration?.absolutePathToConfiguration,ae=big({generators:i.generators,enabled:ygs(),sdkConfigV1:le,requireEnvVars:I,isPreview:p??l!=null,verify:D,skipIfNoDiff:P,autoMerge:T}),de=ae.map(Ue=>Ue.route),Oe=ae.map(Ue=>Ue.generatorInvocation),Ce=ae.map(Ue=>Ue.error);J==null&&bql(Ce,i.generators);let Ne=Oe.flatMap((Ue,tt)=>ae[tt]?.error==null?[{generatorIndex:tt,generatorInvocation:Ue,sdkGenApiRoute:de[tt]}]:[]),Xe={sourceArchives:new Map,errors:new Map};if(Ne.length>0)try{Xe=await oe?.(Ne)??Xe}catch(Ue){Xe={sourceArchives:new Map,errors:new Map(Ne.map(tt=>[tt.generatorIndex,Ue]))}}let ut=Iig({generators:Oe,routes:de,routeErrors:Ce,sourceResolution:Xe}),At=ut.sourceArchives,st=ae.map((Ue,tt)=>Ue.error??ut.preflightErrors[tt]);J==null&&bql(st,i.generators);let Ht=vig(de,st);uVl(Ht.size);let cr=Ht.size>1?new $di(Ht.size):void 0,Ae=Ht.size>0?new emi([...Ht].map(String)):void 0,me=await Promise.all(i.generators.map((Ue,tt)=>n.runInteractiveTask({name:Ue.name},be=>xig({generatorInvocation:Ue,resolvedGeneratorInvocation:Oe[tt]??Ue,interactiveTaskContext:be,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:I,automationMode:C,autoMerge:T,skipIfNoDiff:P,verify:D,noReplay:O,disableTelemetry:z,automation:J,generatorsYmlAbsolutePath:Se,occurrenceTracker:Be,loginCommand:ee,specsTarGzArchive:At[tt],sdkGenApiPreflightError:st[tt],sdkGenApiRoute:de[tt],sdkConfigV1:le,sdkGenApiPreparationBatch:Ht.has(tt)?Ae:void 0,sdkGenApiBatch:Ht.has(tt)?cr:void 0,sdkGenApiTargetIdSeed:tt.toString(),generateFullProject:ne,onSnippetsProduced:Re=>pe.push(Re)}))));if(J==null&&me.some(Ue=>!Ue))throw new iu;return{snippetsProducedBy:pe}}function big({generators:e,enabled:t,sdkConfigV1:r,requireEnvVars:n,isPreview:i,verify:o,skipIfNoDiff:s,autoMerge:a}){return e.map(c=>{let u=c;try{u=uA(c,{onError:m=>{if(!i&&n)throw m}},{substituteAsEmpty:i});let l=BG(u.name),p=l==null?void 0:r?.targets.find(m=>m.language===l);if(r!=null&&l==null)throw new Error(`SDK Config v1 generation only supports Fern SDK generators routed through sdk-gen-api; the selected group contains ${u.name}`);if(r!=null&&p==null)throw new Error(`SDK Config v1 does not contain a target for ${l}`);if(p?.generatorVersion!=null&&(u={...u,version:p.generatorVersion}),!t){if(r!=null)throw new Error("SDK Config v1 generation requires the sdk-gen-api generation backend");return{generatorInvocation:u,route:void 0,error:void 0}}let d=oVl(u,r==null?"legacy-fern":"sdk-config-v1"),f=Eig({generatorInvocation:u,verify:o,skipIfNoDiff:s,autoMerge:a});if(d!=null&&f!=null){if(d.configKind==="legacy-fern")return{generatorInvocation:u,route:void 0,error:void 0};throw new Error(`Cannot route ${u.name} ${u.version} through sdk-gen-api: ${f}. This generator version requires SDK Config v1, so Fern cannot fall back to legacy Fiddle generation.`)}return{generatorInvocation:u,route:d,error:void 0}}catch(l){let p=l instanceof NRe?new S({message:Igs(l),code:S.Code.ConfigError}):l;return{generatorInvocation:u,route:void 0,error:p}}})}function Eig({generatorInvocation:e,verify:t,skipIfNoDiff:r,autoMerge:n}){let i=[];return e.outputMode.type!=="downloadFiles"&&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 Iig({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{tql(s,c);return}catch(u){return u}})}}function vig(e,t){return new Set(e.flatMap((r,n)=>r!=null&&t[n]==null?[n]:[]))}async function xig({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:I,validateWorkspace:C,retryRateLimited:T,requireEnvVars:P,automationMode:D,autoMerge:O,skipIfNoDiff:z,verify:J,noReplay:Y,disableTelemetry:ee,automation:oe,generatorsYmlAbsolutePath:le,occurrenceTracker:ne,loginCommand:pe,specsTarGzArchive:Be,sdkGenApiPreflightError:Se,sdkGenApiRoute:ae,sdkConfigV1:de,sdkGenApiPreparationBatch:Oe,sdkGenApiBatch:Ce,sdkGenApiTargetIdSeed:Ne,generateFullProject:Xe,onSnippetsProduced:ut}){let At=Date.now();try{if(Se!=null)throw Se;let st=K0e(t),Ht=await o.toFernWorkspace({context:s},st,t.apiOverride?.specs);C&&await tJ({workspace:Ht,context:s,logWarnings:!1,ossWorkspace:o instanceof lp?o:void 0});let cr=x?void 0:E??await rql({generatorInvocation:t,context:r}),Ae=await yql({projectConfig:n,organization:i,workspace:Ht,interactiveTaskContext:r,generatorInvocation:{...t,outputMode:t.outputMode._visit({downloadFiles:()=>t.outputMode,github:me=>Gr.OutputMode.github({...me,makePr:y==="pull-request"}),githubV2:me=>y==="pull-request"?Gr.OutputMode.githubV2(Gr.GithubOutputModeV2.pullRequest(me)):t.outputMode,publish:()=>t.outputMode,publishV2:()=>t.outputMode,_other:()=>t.outputMode})},version:c,audiences:de==null?a.audiences:de.audiences==null?{type:"all"}:{type:"select",audiences:de.audiences},shouldLogS3Url:u,token:l,whitelabel:p,replay:d,readme:t.readme,irVersionOverride:t.irVersionOverride,absolutePathToPreview:f,isPreview:m,fiddlePreview:g,pushPreviewBranch:A,fernignorePath:cr,skipFernignore:x,dynamicIrOnly:I,retryRateLimited:T,requireEnvVars:P,automationMode:D,autoMerge:O,skipIfNoDiff:z,verify:J,noReplay:Y,disableTelemetry:ee,loginCommand:pe,specsTarGzBuffer:Be?.buffer,sdkGenApiSourceArchive:Be,sdkGenApiRoute:ae,sdkConfigV1:de,sdkGenApiPreparationBatch:Oe,sdkGenApiBatch:Ce,sdkGenApiTargetIdSeed:Ne,generateFullProject:Xe});if(Ae?.createdSnippets&&(ut(e),e.absolutePathToLocalSnippets!=null&&Ae.snippetsS3PreSignedReadUrl!=null&&await eql({snippetsS3PreSignedReadUrl:Ae.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:r})),oe!=null){let me=le!=null?await h_e(le,e.name,ne.lookup(e)):void 0;oe.recorder.recordSuccess({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,version:Ae?.actualVersion??null,durationMs:Date.now()-At,pullRequestUrl:Ae?.pullRequestUrl,noChangesDetected:Ae?.noChangesDetected,publishTarget:Ae?.publishTarget,outputRepoUrl:m_e(e),generatorsYmlAbsolutePath:le,generatorsYmlLineNumber:me})}await Cig({pullRequestUrl:Ae?.pullRequestUrl,publishTarget:Ae?.publishTarget,noChangesDetected:Ae?.noChangesDetected,version:Ae?.actualVersion,generatorName:e.name,groupName:a.groupName,apiName:o.workspaceName,isAutomation:oe!=null})}catch(st){if(Oe?.fail(Ne,st,oe!=null),oe!=null?Ce?.remove(Ne,st):Ce?.cancel(st),oe==null)throw st;if(st instanceof iu){let Ae=le!=null?await h_e(le,e.name,ne.lookup(e)):void 0;throw oe.recorder.recordFailure({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,errorMessage:r.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-At,outputRepoUrl:m_e(e),generatorsYmlAbsolutePath:le,generatorsYmlLineNumber:Ae}),st}let Ht=Fn(st),cr=le!=null?await h_e(le,e.name,ne.lookup(e)):void 0;oe.recorder.recordFailure({apiName:o.workspaceName,groupName:a.groupName,generatorName:e.name,errorMessage:Ht,durationMs:Date.now()-At,outputRepoUrl:m_e(e),generatorsYmlAbsolutePath:le,generatorsYmlLineNumber:cr}),r.failWithoutThrowing(Ht,st,{code:X2e(st)})}}function bql(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 Cig(e){if(!w6e())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&&t.push({event:`Published to ${e.publishTarget.label}`,body:`${e.publishTarget.version} \u2192 ${e.publishTarget.url}`,summaryLine:`\u{1F4E6} **${e.generatorName}** \u2192 [${e.publishTarget.label} ${e.publishTarget.version}](${e.publishTarget.url})`}),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=S6e("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}
|
|
4279
4279
|
`).join("");try{await(0,Eql.appendFile)(i,o,"utf8")}catch(s){process.stderr.write(`[warn] Failed to append to GITHUB_STEP_SUMMARY: ${s}
|
|
4280
4280
|
`)}}}}Tt();jt();jt();var Thi="https://",YAs="http://";function vql(e){return e.startsWith(Thi)?e.slice(Thi.length):e.startsWith(YAs)?e.slice(YAs.length):e}function Iql(e){try{let t=e.startsWith(Thi)||e.startsWith(YAs)?e:`${Thi}${e}`;return wig(new URL(t).pathname)}catch{return"/"}}function wig(e){return e===""||e==="/"?"/":e.endsWith("/")?e.slice(0,-1):e}function xql(e,t,r){let n=Iql(e);for(let i of t){let o=Iql(i);n!==o&&r.failAndThrow(`Basepath mismatch between Fern url and custom-domain. The instance 'url' and 'custom-domain' must share the same basepath, since navigation links and redirects are generated relative to the basepath and would break on a custom domain with a different one. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:S.Code.ConfigError})}}v2();Ea();Md();Tt();hx();eh();hx();Jt();ep();Za();vm();Sme();jt();B_();En();var k$l=require("crypto"),iJt=require("fs/promises");Ui();var nJt=ye(HIe(),1),dEs=require("path");var Sig=new Set(["legacy","ledger"]);function Cql(){if(process.env.FERN_SELF_HOSTED==="true")return"legacy";let e=process.env.FERN_DOCS_DEPLOY_MODE?.toLowerCase().trim();return e==null||e===""?"ledger":Tig(e)?e:(console.warn(`[fern] Unrecognized FERN_DOCS_DEPLOY_MODE="${e}" \u2014 falling back to "ledger". Valid values: ledger, legacy.`),"ledger")}function Tig(e){return Sig.has(e)}Tt();var l7l=ye(u7l(),1);Ui();var p7l=require("util"),msg=(0,p7l.promisify)(l7l.default);async function f7l(e,t,r){let n=IDt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await msg(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(oa))}return new Map(i.map(o=>[o.filePath,o]))}Tt();function d7l(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)}}hx();eh();Sme();var y$l=require("crypto"),b$l=require("fs/promises"),E$l=ye(HIe(),1);Tt();function wCt(e,t){if(e==null)return;let r=t?.get(e);return r??e}function hsg(e,t,r){let n=wCt(e,r);if(n==null)return;let i=t?.[n];if(!(i?.width==null||i?.height==null))return{path:n,width:i.width,height:i.height}}function NKt(e,t){if(e==null)return;if(e.type==="url")return{type:"url",value:e.value};let r=wCt(e.value,t);if(r!=null)return{type:"path",value:r}}function Ays(e,t,r){let n=e.background!=null?{type:"solid",...e.background}:void 0,i=wCt(e.backgroundImage,r);return{logo:hsg(e.logo,t,r),backgroundImage:i,accentPrimary:e.accentPrimary,background:n,border:e.border,sidebarBackground:e.sidebarBackground,headerBackground:e.headerBackground,cardBackground:e.cardBackground}}function gsg(e,t,r){if(e!=null)switch(e.type){case"dark":case"light":return{type:e.type,...Ays(e,t,r)};case"darkAndLight":return{type:"darkAndLight",dark:Ays(e.dark,t,r),light:Ays(e.light,t,r)};default:Ee(e)}}function Asg(e,t){if(e==null)return;let{"og:image":r,"og:logo":n,"twitter:image":i,"og:background-image":o,"og:dynamic:background-image":s,...a}=e;return{...a,"og:image":NKt(r,t)??void 0,"og:logo":NKt(n,t)??void 0,"twitter:image":NKt(i,t)??void 0,"og:background-image":NKt(o,t)??void 0,"og:dynamic:background-image":NKt(s,t)??void 0}}function ysg(e,t){if(e==null)return;let r=[];for(let n of e.files){let i=wCt(n.fileId,t);i!=null&&r.push({path:i,strategy:n.strategy})}return{remote:e.remote?.map(n=>({url:n.url,strategy:n.strategy,disableSri:n.disableSri})),files:r,inline:e.inline}}function bsg(e,t){if(e==null)return;let r=n=>{if(n!=null)return{type:"custom",name:n.name,variants:n.variants.map(i=>({fontFile:wCt(i.fontFile,t)??i.fontFile,weight:i.weight,style:i.style})),display:n.display,fallback:n.fallback,fontVariationSettings:n.fontVariationSettings}};return{headingsFont:r(e.headingsFont),bodyFont:r(e.bodyFont),codeFont:r(e.codeFont)}}function Esg(e){if(e!=null)return{pageDirective:e.pageDirective,pageDescriptionSource:e.pageDescriptionSource,siteDescription:e.siteDescription}}function Isg(e){if(e!=null)return{intercom:e.intercom}}function m7l({docsConfig:e,fileManifest:t,fileIdToPath:r,editThisPage:n}){return{title:e.title,defaultLanguage:e.defaultLanguage,translations:e.translations,announcement:e.announcement,navbarLinks:e.navbarLinks,footerLinks:e.footerLinks,logoHeight:e.logoHeight,logoHref:e.logoHref,logoRightText:e.logoRightText,favicon:wCt(e.favicon,r),agents:Esg(e.agents),metadata:Asg(e.metadata,r),redirects:e.redirects,colorsV3:gsg(e.colorsV3,t,r),layout:e.layout,theme:e.theme,settings:e.settings,typographyV2:bsg(e.typographyV2,r),analyticsConfig:e.analyticsConfig,css:e.css,js:ysg(e.js,r),aiChatConfig:e.aiChatConfig,pageActions:e.pageActions,editThisPageLaunch:e.editThisPageLaunch,editThisPageGithub:n?.github!=null?{owner:n.github.owner,repo:n.github.repo,branch:n.github.branch??"main",host:n.github.host??"https://github.com"}:void 0,integrations:Isg(e.integrations),header:e.header,footer:e.footer}}async function SCt(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var bpg=10,Epg=4,lEs=3,Ipg=1e3;function I$l(e){return(0,y$l.createHash)("sha256").update(e).digest("hex")}var v$l=/file:([^\s"'<>)}\]]+)/g;function vpg(e){let t=new Set;for(let r of e.matchAll(v$l)){let n=r[1];n!=null&&t.add(n)}return[...t]}function xpg(e,t){return t==null||t.size===0?e:e.replace(v$l,(r,n)=>`file:${t.get(n)??n}`)}function Cpg(e){return JSON.stringify(e,(t,r)=>r!=null&&typeof r=="object"&&!Array.isArray(r)?Object.fromEntries(Object.entries(r).sort(([n],[i])=>n<i?-1:n>i?1:0)):r)}function g$l(e){let t=Buffer.from(Cpg(e),"utf-8"),r=I$l(t);return{ref:{hash:r,contentType:"application/json",contentLength:t.length},hash:r,buf:t}}function Ggi({docsDefinition:e,git:t,apiDefinitions:r,fileManifest:n,fileIdToPath:i,editThisPage:o,locale:s}){let a=new Map,c={};for(let[f,m]of Object.entries(e.pages)){if(m==null)continue;let g=xpg(m.markdown,i),A=Buffer.from(g,"utf-8"),y=I$l(A),E=vpg(g);c[f]={hash:y,contentType:"text/markdown",contentLength:A.length,...E.length>0?{referencedFiles:E}:{}},a.set(y,A)}let u=m7l({docsConfig:e.config,fileManifest:n,fileIdToPath:i,editThisPage:o}),l=null;if(r.size>0){let f=Object.fromEntries(r),m=g$l(f);a.set(m.hash,m.buf),l=m.ref}let p=null;if(e.jsFiles!=null&&Object.keys(e.jsFiles).length>0){let f=g$l(e.jsFiles);a.set(f.hash,f.buf),p=f.ref}return{localeEntry:{root:e.config.root??e.config.navigation,pages:c,config:u,apiManifest:l,jsFiles:p,fileManifest:n,redirects:null,locale:s??e.config.translations?.defaultLocale??"en",git:t},blobs:a}}async function x$l({docsDefinition:e,organization:t,domain:r,basepath:n,basepathAware:i,previewId:o,customDomains:s,git:a,token:c,fdrOrigin:u,headers:l,context:p,apiDefinitions:d,fileManifest:f,filePaths:m,fileIdToPath:g,editThisPage:A,resolver:y}){let{localeEntry:E,blobs:x}=Ggi({docsDefinition:e,git:a,apiDefinitions:d,fileManifest:f,fileIdToPath:g,editThisPage:A}),I=await fEs({docsDefinition:e,git:a,apiDefinitions:d,fileManifest:f,fileIdToPath:g,editThisPage:A,resolver:y,context:p});for(let le of I)for(let[ne,pe]of le.blobs)x.set(ne,pe);let{createDocsLedgerClient:C}=await Promise.resolve().then(()=>(cEs(),d$l)),T=C({baseUrl:u,token:c,headers:l}),P=[E,...I.map(le=>le.localeEntry)],D={orgId:t,domain:r,basepath:n??"",...i&&{basepathAware:!0},customDomains:s??[],previewId:o??null,defaultLocale:E.locale,locales:P};p.logger.debug("[ledger] Registering deployment...");let O=performance.now(),z=await T.register(D),J=performance.now()-O;p.logger.debug(`[ledger] Registered in ${J.toFixed(0)}ms \u2014 hash=${z.deploymentHash}, missing=${z.missingContent.length} blobs`),await pEs(z.missingContent,x,p,m),p.logger.debug("[ledger] Finishing deployment...");let Y=performance.now(),ee=await T.finish(D),oe=performance.now()-Y;if(p.logger.debug(`[ledger] Finished in ${oe.toFixed(0)}ms \u2014 deploymentId=${ee.deploymentId}, reused=${ee.reusedDeployment}`),ee.translationsProcessed!=null)for(let le of ee.translationsProcessed)p.logger.debug(`[ledger] Locale "${le.locale}": ${le.segmentsAdded} segment(s) added`);return ee}async function pEs(e,t,r,n){if(e.length>0){r.logger.debug(`[ledger] Uploading ${e.length} missing blobs...`);let i=performance.now(),o=await SCt(bpg,[...e],async({hash:u,uploadUrl:l})=>{let p=t.get(u),d="application/octet-stream";if(p==null&&n!=null){let f=n.get(u);if(f!=null){p=await(0,b$l.readFile)(f);let m=E$l.lookup(f);m!==!1&&(d=m)}}return p==null?(r.logger.warn(`[ledger] Server requested blob ${u} but we don't have it \u2014 skipping`),"skipped"):wpg(p,l,u,d,r)}),s=o.filter(u=>u==="uploaded").length,a=o.filter(u=>u==="already_exists").length,c=performance.now()-i;r.logger.debug(`[ledger] Upload complete in ${c.toFixed(0)}ms \u2014 ${s} uploaded, ${a} already in store`)}else r.logger.debug("[ledger] All content already in CAS \u2014 no uploads needed")}async function wpg(e,t,r,n,i){let o=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let s=0;s<=lEs;s++){let a=await fetch(t,{method:"PUT",headers:{"Content-Type":n},body:o});if(a.ok)return"uploaded";if(a.status===412)return i.logger.debug(`[ledger] Blob ${r} already exists in store \u2014 skipping`),"already_exists";if(a.status===403){let l=await a.text();throw new Error(`[ledger] Presigned URL rejected for ${r} (expired or signature mismatch): ${l}`)}if(a.status===400){let l=await a.text();throw new Error(`[ledger] Content integrity check failed for ${r}: ${l}`)}if((a.status===429||a.status>=500)&&s<lEs){let l=Ipg*2**s;i.logger.debug(`[ledger] Upload ${r} got ${a.status}, retrying in ${l}ms (attempt ${s+1}/${lEs})`),await new Promise(p=>setTimeout(p,l));continue}let u=await a.text();throw new Error(`[ledger] S3 upload failed for ${r}: ${a.status} ${u}`)}throw new Error(`[ledger] Upload exhausted retries for ${r}`)}function A$l(e,t,r){try{let n=jpe(e,ln.ApiDefinitionId(t),new Qpe({snippetsConfigWithSdkId:{},snippetsBySdkId:{},snippetTemplatesByEndpoint:{},snippetTemplatesByEndpointId:{},snippetsBySdkIdAndEndpointId:{}}));return zpe(n)}catch(n){r.logger.debug(`[ledger] Failed to convert API definition "${t}" to read form: ${String(n)}`);return}}function Spg({baseApiDefinitions:e,translatedSpecs:t,context:r}){let n=new Map(e);for(let[i,o]of t)try{let s=ZT({ir:o.ir,snippetsConfig:o.snippetsConfig,playgroundConfig:o.playgroundConfig,graphqlOperations:o.graphqlOperations,graphqlTypes:o.graphqlTypes,context:r,apiNameOverride:o.apiName});n.set(i,s)}catch(s){r.logger.warn(`[ledger] Failed to convert translated API definition for API "${i}": ${String(s)}. Falling back to base (untranslated) API.`)}return n}async function fEs({docsDefinition:e,git:t,apiDefinitions:r,fileManifest:n,fileIdToPath:i,editThisPage:o,resolver:s,context:a}){if(s==null)return[];let c=s.getTranslationPages(),u=s.getTranslationNavigationOverlays();if(c==null||Object.keys(c).length===0)return[];let l=s.getTranslatedApiSpecs(),p={};if(l.size>0)for(let[m,g]of r){let A=A$l(g,m,a);A!=null&&(p[m]=A)}let d=Object.entries(c);a.logger.debug(`[ledger] Building ${d.length} translation locale(s)...`);let{buildTranslatedDocsDefinition:f}=await Promise.resolve().then(()=>(h$l(),m$l));return SCt(Epg,d,async([m,g])=>{let A=await f({docsDefinition:e,locale:m,localePages:g,translationNavigationOverlays:u,resolver:s,context:a}),y=l.get(m),E=r;if(y!=null&&y.size>0&&(E=Spg({baseApiDefinitions:r,translatedSpecs:y,context:a}),A.config.root!=null)){let C={};for(let[D]of y){let O=E.get(D);if(O!=null){let z=A$l(O,D,a);z!=null&&(C[D]=z)}}let T=uVe(A.config.root,p,C);if(T.size>0){a.logger.warn(`Translated API definition(s) [${Array.from(T).join(", ")}] for locale "${m}" diverge from the default-locale spec (e.g. changed OpenAPI tag names, operationIds, or paths, or a missing/added endpoint), so they can't be fully matched to the navigation tree. Serving the default-locale API for those (localized sidebar titles are still applied where they can be matched). For fully localized API reference content, translate only human-readable text and keep tag names/operationIds/paths identical to the base spec.`);for(let D of T){let O=r.get(D);O!=null&&E.set(D,O)}}let P=new Set(Object.keys(C).filter(D=>!T.has(D)));Object.keys(C).length>0&&(A.config.root=lVe(A.config.root,p,C,{rewritableApiIds:P}))}let{localeEntry:x,blobs:I}=Ggi({docsDefinition:A,git:t,apiDefinitions:E,fileManifest:n,fileIdToPath:i,editThisPage:o,locale:m});return{locale:m,localePages:g,translatedDefinition:A,localeEntry:x,blobs:I}})}cEs();async function C$l({docsDefinition:e,organization:t,basePath:r,previewId:n,git:i,token:o,fdrOrigin:s,headers:a,context:c,apiDefinitions:u,fileManifest:l,filePaths:p,fileIdToPath:d,editThisPage:f,resolver:m}){let{localeEntry:g,blobs:A}=Ggi({docsDefinition:e,git:i,apiDefinitions:u,fileManifest:l,fileIdToPath:d,editThisPage:f}),y=await fEs({docsDefinition:e,git:i,apiDefinitions:u,fileManifest:l,fileIdToPath:d,editThisPage:f,resolver:m,context:c});for(let J of y)for(let[Y,ee]of J.blobs)A.set(Y,ee);let E=[g,...y.map(J=>J.localeEntry)],x=Ugi({baseUrl:s,token:o,headers:a});c.logger.debug("[ledger-preview] Registering preview deployment...");let I=performance.now(),C={orgId:t,previewId:n??null,basePath:r??"",defaultLocale:g.locale,locales:E,root:g.root,pages:g.pages,apiManifest:g.apiManifest,config:g.config,fileManifest:g.fileManifest,jsFiles:g.jsFiles,redirects:g.redirects,locale:g.locale,version:g.version,repo:g.repo,git:i},T=await x.previewRegister(C),P=performance.now()-I;c.logger.debug(`[ledger-preview] Registered in ${P.toFixed(0)}ms \u2014 hash=${T.deploymentHash}, preview=${T.previewUrl}, missing=${T.missingContent.length} blobs`),await pEs(T.missingContent,A,c,p),c.logger.debug("[ledger-preview] Finishing preview deployment...");let D=performance.now(),O=await x.finish({orgId:t,domain:T.domain,basepath:T.basepath,customDomains:[],previewId:T.previewId,defaultLocale:g.locale,locales:E}),z=performance.now()-D;if(c.logger.debug(`[ledger-preview] Finished in ${z.toFixed(0)}ms \u2014 deploymentId=${O.deploymentId}, reused=${O.reusedDeployment}`),O.translationsProcessed!=null)for(let J of O.translationsProcessed)c.logger.debug(`[ledger-preview] Locale "${J.locale}": ${J.segmentsAdded} segment(s) added`);return{previewUrl:T.previewUrl,deploymentId:O.deploymentId}}async function w$l({fn:e,maxRetries:t,baseDelayMs:r,jitterFactor:n=0,isRetryable:i=()=>!0,logger:o,label:s,delayFn:a=c=>new Promise(u=>setTimeout(u,c))}){let c;for(let u=0;u<=t;u++)try{return await e()}catch(l){if(c=l,!i(l)||u>=t)throw l;let p=n>0?1+(Math.random()-.5)*n:1,d=Math.round(r*2**u*p);s!=null&&o.warn(`${s} (attempt ${u+1}/${t+1}), retrying in ${d}ms...`),await a(d)}throw c}var Tpg=10,S$l=10,qgi=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10),Opg=3,Bpg=1e3,Ppg=.5;function T$l(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function Dpg(e){if(e==null)return"Unknown error";let t=e instanceof Error?e.message:String(e),r=e.data;if(r?.issues!=null&&Array.isArray(r.issues)&&r.issues.length>0){let n=r.issues.map(i=>{let o=i.path?.join(".")??"",s=i.message??"invalid";return o?` - ${o}: ${s}`:` - ${s}`}).join(`
|
|
4281
4281
|
`);return t+`
|
|
@@ -4291,7 +4291,7 @@ Please ensure you have membership at https://dashboard.buildwithfern.com, and as
|
|
|
4291
4291
|
`);i.failAndThrow(s!=null?`No docs instance found matching '${s}'.
|
|
4292
4292
|
|
|
4293
4293
|
Available instances:
|
|
4294
|
-
${I}`:"No docs instance found. Failed to register.",void 0,{code:S.Code.ConfigError});return}let E=(typeof y.customDomain=="string"?[y.customDomain]:y.customDomain??[]).map(vql);xql(y.url,E,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:y.url},async()=>{let I=performance.now(),C=()=>F$l({docsWorkspace:n,customDomains:E,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let P=0;;P++)try{x=await C();break}catch(D){if(!(D instanceof VCt)||P>=oJt.length){if(D instanceof VCt)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 D}let O=oJt[P]??oJt[oJt.length-1]??6e4,z=O/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${z} minute${z===1?"":"s"} (attempt ${P+1}/${oJt.length})...`),await new Promise(J=>setTimeout(J,O))}let T=performance.now()-I;i.logger.debug(`Docs publishing completed in ${T.toFixed(0)}ms`)}),x}jt();var Wgi=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 Ad({context:this.context,task:this.task});try{let s=await sJt({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.121.
|
|
4294
|
+
${I}`:"No docs instance found. Failed to register.",void 0,{code:S.Code.ConfigError});return}let E=(typeof y.customDomain=="string"?[y.customDomain]:y.customDomain??[]).map(vql);xql(y.url,E,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let x;return await i.runInteractiveTask({name:y.url},async()=>{let I=performance.now(),C=()=>F$l({docsWorkspace:n,customDomains:E,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let P=0;;P++)try{x=await C();break}catch(D){if(!(D instanceof VCt)||P>=oJt.length){if(D instanceof VCt)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 D}let O=oJt[P]??oJt[oJt.length-1]??6e4,z=O/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${z} minute${z===1?"":"s"} (attempt ${P+1}/${oJt.length})...`),await new Promise(J=>setTimeout(J,O))}let T=performance.now()-I;i.logger.debug(`Docs publishing completed in ${T.toFixed(0)}ms`)}),x}jt();var Wgi=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 Ad({context:this.context,task:this.task});try{let s=await sJt({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.121.1",loginCommand:"fern auth login"});return o.getResult()===Vf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Fn(s)}}}};Tt();En();var UCt=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(`
|
|
4295
4295
|
`),this.stream.write(`${fe.cyan("\u25C6")} ${fe.bold(t.title)}
|
|
4296
4296
|
`),t.subtitle!=null&&this.stream.write(` ${fe.dim(t.subtitle)}
|
|
4297
4297
|
`),this.stream.write(`
|
|
@@ -4708,7 +4708,7 @@ generators:
|
|
|
4708
4708
|
uri: your-org/your-sdk-repo
|
|
4709
4709
|
token: \${GITHUB_TOKEN}
|
|
4710
4710
|
mode: pull-request
|
|
4711
|
-
`,void 0,{code:S.Code.ConfigError}),st!=null){await REi.rm(At,{recursive:!0,force:!0}),await REi.mkdir(At,{recursive:!0}),ee.logger.debug(`Self-hosted GitHub mode: cloning ${st.uri} to ${At}`);try{let{execSync:Kt}=await import("child_process"),ar=Kt("which git 2>/dev/null || echo 'not found'",{encoding:"utf-8"}).trim(),Kn=Kt("git --version 2>/dev/null || echo 'unknown'",{encoding:"utf-8"}).trim();ee.logger.debug(`Git environment: path=${ar}, version=${Kn}, PATH=${process.env.PATH??"unset"}`)}catch{ee.logger.debug(`Git environment: unable to determine git info, PATH=${process.env.PATH??"unset"}`)}try{let Kt=await Hbr({githubRepository:st.uri,installationToken:st.token,targetDirectory:At,timeoutMs:3e4}),ar=st.mode??"push";if((ar==="push"||ar==="pull-request"||ar==="commit-and-release")&&st.branch!=null){if(ee.logger.debug(`Checking out branch ${st.branch} before generation`),ar==="pull-request"&&!await Kt.remoteBranchExists(st.branch)){let pn=rC(st.uri);ee.failAndThrow(`Branch ${st.branch} does not exist in repository ${pn.owner}/${pn.repo}`,void 0,{code:S.Code.ConfigError})}await Kt.checkoutRemoteBranch(st.branch)}}catch(Kt){ee.failAndThrow(`Failed to clone GitHub repository ${st.uri}: ${Fn(Kt)}`,void 0,{code:S.Code.NetworkError})}}let Ht;Y.raw?.snippets?.path!=null&&(Ht=Ut.of(Me(r.absoluteFilePath,ve.of(Y.raw.snippets.path)))),Ht==null&&st!=null&&(Ht=Ut.of((await DEi()).path+"/snippet.json"));let cr=await DEi(),{shouldCommit:Ae,autoVersioningCommitMessage:me,autoVersioningChangelogEntry:Ue,autoVersioningPrDescription:tt,autoVersioningVersionBumpReason:be,autoVersioningVersionBump:Re,autoVersioningNewVersion:vt,autoVersioningPreviousVersion:ot}=await PEi({organization:t.organization,absolutePathToFernConfig:r.generatorsConfiguration?.absolutePathToConfiguration??t._absolutePath,workspace:ne,generatorInvocation:Y,absolutePathToLocalOutput:At,absolutePathToLocalSnippetJSON:Ht,absolutePathToLocalSnippetTemplateJSON:void 0,version:i,audiences:n.audiences,workspaceTempDir:cr,keepDocker:o,context:ee,irVersionOverride:Y.irVersionOverride,outputVersionOverride:i,writeUnitTests:!0,generateOauthClients:Ne?.oauthClientEnabled??!1,generatePaginatedClients:Ne?.paginationEnabled??!1,includeOptionalRequestPropertyExamples:!1,inspect:s,executionEnvironment:void 0,ir:Ce,whiteLabel:Ne?.isWhitelabled??!1,publishToRegistry:A,runner:u,ai:l,autoVersioningCache:z,absolutePathToSpecRepo:An(r.absoluteFilePath),skipFernignore:g,disableTelemetry:D,rawApiSpecs:r instanceof lp&&ywt(Y.name)?r.allSpecs:void 0});ee.logger.info(fe.green("Wrote files to "+At));let Ke=st!=null&&Ae;if(Ke||!Ke&&P===!0){let Kt={debug:sr=>ee.logger.debug(sr),info:sr=>ee.logger.info(sr),warn:sr=>ee.logger.warn(sr),error:sr=>ee.logger.error(sr)},ar=Re==="MAJOR",Kn=new l1t.PostGenerationPipeline({outputDir:At,replay:Ke?{enabled:p?.enabled===!0,skipApplication:d,stageOnly:!1}:void 0,verify:{enabled:P===!0,runner:u},github:Ke&&st!=null?{enabled:!0,uri:st.uri,token:st.token,mode:st.mode??"push",branch:st.branch,commitMessage:me,changelogEntry:Ue,prDescription:tt,versionBumpReason:be,previousVersion:ot,newVersion:vt??i,versionBump:Re,previewMode:st.previewMode,workflows:st.workflows??!0,generatorName:Y.name,automationMode:E,autoMerge:x,skipIfNoDiff:I,hasBreakingChanges:ar,breakingChangesSummary:ar?tt:void 0,runId:process.env.FERN_RUN_ID,apiBaseUrl:y0r(st.uri)}:void 0,cliVersion:r.cliVersion??"unknown",generatorVersions:{[Y.name]:Y.version},generatorName:Y.name},Kt),pn=Date.now(),_n=await Kn.run(),Qt=Date.now()-pn;if(_n.steps.replay!=null&&st!=null&&((0,l1t.logReplaySummary)(_n.steps.replay,{debug:sr=>ee.logger.debug(sr),info:sr=>{let Ge=sr.startsWith("[replay] ")||sr.startsWith("[telemetry] ");ee.logger.info(Ge?sr:fe.cyan(sr))},warn:sr=>ee.logger.warn(fe.yellow(sr)),error:sr=>ee.logger.error(fe.red(sr))}),!D))try{let Ge={...(0,l1t.buildReplayTelemetryProps)({pipelineResult:_n,generatorName:Y.name,generatorVersion:Y.version,cliVersion:r.cliVersion,repoUri:st.uri,automationMode:E===!0,autoMerge:x===!0,skipIfNoDiff:I===!0,hasBreakingChanges:ar,versionArg:i==null?"none":(0,zk.isAutoVersion)(i)?"auto":"explicit",versionBump:Re,replayConfigEnabled:p?.enabled===!0,noReplayFlag:d===!0,githubMode:st.mode??"push",previewMode:st.previewMode===!0,durationMs:Qt}),surface:"cli",org_id:t.organization};ee.instrumentPostHogEvent({command:"replay",properties:Ge}),ee.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(Ge)}`)}catch(sr){ee.logger.debug(`[telemetry] failed to send replay event: ${String(sr)}`)}_n.steps.github?.skippedNoDiff&&ee.logger.info(fe.green("No changes detected \u2014 skipping PR creation")),_n.steps.github?.autoMergeEnabled&&ee.logger.info(fe.green("Automerge enabled on PR")),_n.success||ee.failAndThrow(`Post-generation pipeline failed: ${_n.errors?.join(", ")}`,void 0,{code:S.Code.UserError})}})))).some(Y=>!Y))throw new iu}function YHg(e,t){if(e==null)return;let r=RXt(t.name);return Me(e,ve.of(r))}async function DEi(){return fjs.default.dir({tmpdir:pjs.default.platform()==="darwin"?Qlp.default.join("/private",pjs.default.tmpdir()):void 0,prefix:"fern"})}function XHg({generatorInvocation:e,org:t,version:r,userProvidedVersion:n,packageName:i,context:o,generateTests:s,generateFullProject:a}){let c=e.language??(0,zk.extractLanguageFromGeneratorName)(e.name),u=d=>d!=null&&(0,zk.isAutoVersion)(d)?(0,zk.mapMagicVersionForLanguage)(zk.MAGIC_VERSION,c):d,l=u(r),p=u(n);if(e.raw?.github!=null&&zlp(e.raw.github)){let d=rC(e.raw.github.uri),f=e.raw.github.mode==="pull-request"?"pull-request":void 0;return _t.PublishingConfig.github({owner:d.owner,repo:d.repo,uri:e.raw.github.uri,token:e.raw.github.token,mode:f,branch:e.raw.github.branch,target:ZHg({outputSchema:e.raw.output,version:l,packageName:i})})}if(e.raw?.output?.location==="local-file-system"){let d=L0r({generatorInvocation:e,version:l,userProvidedVersion:p,packageName:i,context:o});return _t.PublishingConfig.filesystem({generateFullProject:s||a||t?.selfHostedSdKs||!1,publishTarget:d})}return e.outputMode._visit({downloadFiles:()=>_t.PublishingConfig.filesystem({generateFullProject:s||a||t?.selfHostedSdKs||!1,publishTarget:void 0}),github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:()=>{},_other:()=>{}})}function ZHg({outputSchema:e,version:t,packageName:r}){let n=_t.PublishTarget.postman({apiKey:"",workspaceId:"",collectionId:void 0});if(e==null)return n;if(e.location==="npm"){let i=(e.token||"${NPM_TOKEN}").trim(),o=i==="<USE_OIDC>"||i==="OIDC";return id.npm({packageName:e["package-name"],version:t??"0.0.0",tokenEnvironmentVariable:o?"<USE_OIDC>":i.startsWith("${")&&i.endsWith("}")?i.slice(2,-1).trim():""})}else return e.location==="maven"?id.maven({version:t??"0.0.0",coordinate:e.coordinate,usernameEnvironmentVariable:e.username||"MAVEN_USERNAME",passwordEnvironmentVariable:e.password||"MAVEN_PASSWORD",mavenUrlEnvironmentVariable:e.url||"MAVEN_PUBLISH_REGISTRY_URL"}):e.location==="pypi"?id.pypi({version:t,packageName:r}):n}function zlp(e){return e==null?!1:"uri"in e&&"token"in e}var $Hg={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};function eKg(e,t){if(e.raw?.github!=null&&zlp(e.raw.github))return{...e.raw.github,previewMode:t}}var kXt=class{executionEnvironment;constructor(t){this.executionEnvironment=t}async run({organization:t,absolutePathToFernConfig:r,workspace:n,generatorGroup:i,context:o,irVersionOverride:s,outputVersionOverride:a,shouldGenerateDynamicSnippetTests:c,skipUnstableDynamicSnippetTests:u,inspect:l,skipFernignore:p,skipAutogenerationIfManualExamplesExist:d,rawApiSpecs:f,verify:m,verifyRunner:g,verifyValidatorVersion:A}){let y=await Promise.all(i.generators.map(async E=>o.runInteractiveTask({name:E.name},async x=>{if(E.absolutePathToLocalOutput==null){x.failWithoutThrowing("Cannot generate because output location is not local-file-system",void 0,{code:S.Code.ConfigError});return}try{let{ir:I,generatorConfig:C}=await this.executeGenerator({generatorGroup:i,generatorInvocation:E,context:x,workspace:n,organization:t,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:r,inspect:l,skipFernignore:p,skipAutogenerationIfManualExamplesExist:d,rawApiSpecs:f});x.logger.info(fe.green("Wrote files to "+E.absolutePathToLocalOutput)),c&&E.language!=null?(x.logger.info(`Generating dynamic snippet tests for ${E.language}...`),await blp({context:x,ir:I,config:C,language:E.language,outputDir:E.absolutePathToLocalOutput,skipUnstable:u})):x.logger.info(`Skipping dynamic snippet tests; shouldGenerateDynamicSnippetTests: ${c}, language: ${E.language}`),m===!0&&await tKg({outputDir:E.absolutePathToLocalOutput,generatorName:E.name,generatorVersion:A??E.version,cliVersion:n.cliVersion,runner:g??"docker",context:x})}catch(I){I instanceof iu||x.failWithoutThrowing(`Generation failed: ${I instanceof Error?I.message:"Unknown error"}`,I,{code:I instanceof S?I.code:S.Code.InternalError})}})))}async executeGenerator({generatorGroup:t,generatorInvocation:r,context:n,workspace:i,organization:o,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:c,inspect:u,skipFernignore:l,skipAutogenerationIfManualExamplesExist:p,rawApiSpecs:d}){if(n.logger.info(`Starting generation for ${r.name}`),r.absolutePathToLocalOutput==null)throw new S({message:"Output path is required for generation",code:S.Code.ConfigError});let f=Lg({workspace:i,audiences:t.audiences,generationLanguage:r.language,keywords:r.keywords,smartCasing:r.smartCasing,smartCasingDigitWordBoundary:r.smartCasingDigitWordBoundary,exampleGeneration:{includeOptionalRequestPropertyExamples:!0,disabled:r.disableExamples,skipAutogenerationIfManualExamplesExist:p??!1},readme:r.readme,version:a,packageName:Dn.getPackageName({generatorInvocation:r}),userAgentTemplate:dbe(r),idempotencyKeyGeneration:mbe(r),organization:o,context:n,sourceResolver:new jh(n,i),generationMetadata:{cliVersion:i.cliVersion,generatorName:r.name,generatorVersion:r.version,generatorConfig:r.config,originGitCommit:uX(),originGitCommitIsDirty:lX(),invokedBy:aX(),requestedVersion:a,ciProvider:cX()}}),m=await DEi();return PEi({organization:o,absolutePathToFernConfig:c,workspace:i,generatorInvocation:r,absolutePathToLocalOutput:r.absolutePathToLocalOutput,absolutePathToLocalSnippetJSON:r.absolutePathToLocalOutput?Ut.of(Me(r.absolutePathToLocalOutput,ve.of(U0r))):void 0,absolutePathToLocalSnippetTemplateJSON:void 0,audiences:t.audiences,workspaceTempDir:m,version:a,keepDocker:!1,context:n,irVersionOverride:s,outputVersionOverride:a,writeUnitTests:!0,generateOauthClients:!0,generatePaginatedClients:!0,includeOptionalRequestPropertyExamples:!0,inspect:u,executionEnvironment:this.executionEnvironment,ir:f,runner:void 0,ai:i.generatorsConfiguration?.ai,absolutePathToSpecRepo:void 0,skipFernignore:l,rawApiSpecs:d})}};async function tKg({outputDir:e,generatorName:t,generatorVersion:r,cliVersion:n,runner:i,context:o}){let s={debug:u=>o.logger.debug(u),info:u=>o.logger.info(u),warn:u=>o.logger.warn(u),error:u=>o.logger.error(u)},c=await new Mlp.PostGenerationPipeline({outputDir:e,verify:{enabled:!0,runner:i},cliVersion:n??"unknown",generatorVersions:{[t]:r},generatorName:t},s).run();bap(c,t)}Bb();jt();var Vlp=require("fs/promises");Ea();co();Tt();Jt();dU();jt();LW();var Llp=require("fs/promises"),f1t=class{context;constructor(t){this.context=t.context}async adapt(t){return{raw:this.buildRaw(t),name:t.image,containerImage:t.registry?`${t.registry}/${RMe(t.image)}`:void 0,version:t.version,config:t.config,language:this.mapLanguage(t.lang),outputMode:await this.buildOutputMode(t),absolutePathToLocalOutput:this.context.resolveOutputFilePath(t.output.path),smartCasing:t.smartCasing??!0,smartCasingDigitWordBoundary:!1,readme:this.buildReadme(t),absolutePathToLocalSnippets:void 0,disableExamples:!1,irVersionOverride:void 0,keywords:void 0,publishMetadata:void 0,settings:void 0,automation:{generate:!0,upgrade:!0,preview:!0,verify:!0}}}buildRaw(t){let r=t.output.git;if(!(r==null||!WA.isGitOutputSelfHosted(r)))return{name:t.image,version:t.version,github:{uri:r.uri,token:r.token,mode:this.mapSelfHostedMode(r.mode),branch:r.branch}}}mapSelfHostedMode(t){if(t==null)return Dn.GithubSelfhostedMode.PullRequest;switch(t){case"pr":return Dn.GithubSelfhostedMode.PullRequest;case"push":return Dn.GithubSelfhostedMode.Push;case"release":return Dn.GithubSelfhostedMode.CommitAndRelease;default:Ee(t)}}async buildOutputMode(t){if(t.output.git!=null){let r=t.output.git;return WA.isGitOutputSelfHosted(r)?await this.buildGitSelfHostedOutputMode({target:t,git:r}):await this.buildGitHubRepositoryOutputMode({target:t,git:r})}return Gr.remoteGen.OutputMode.downloadFiles({})}async buildGitHubRepositoryOutputMode({target:t,git:r}){let n=rC(r.repository),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=this.buildReviewers(r.reviewers),a=r.mode??"pr";switch(a){case"pr":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,license:i,publishInfo:o,reviewers:s,downloadSnippets:void 0}));case"release":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.commitAndRelease({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o,downloadSnippets:void 0}));case"push":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o,downloadSnippets:void 0}));default:Ee(a)}}async buildGitSelfHostedOutputMode({target:t,git:r}){let n=rC(r.uri),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=r.mode??"pr";switch(s){case"pr":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));case"push":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));case"release":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.commitAndRelease({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));default:Ee(s)}}buildPublishInfo(t){if(t.npm!=null)return this.buildNpmPublishInfo(t.npm);if(t.pypi!=null)return this.buildPypiPublishInfo(t.pypi);if(t.maven!=null)return this.buildMavenPublishInfo(t.maven);if(t.nuget!=null)return this.buildNugetPublishInfo(t.nuget);if(t.rubygems!=null)return this.buildRubygemsPublishInfo(t.rubygems);if(t.crates!=null)return this.buildCratesPublishInfo(t.crates)}buildNpmPublishInfo(t){return Gr.GithubPublishInfo.npm({registryUrl:t.url??"https://registry.npmjs.org",packageName:t.packageName,token:t.token})}buildPypiPublishInfo(t){return Gr.GithubPublishInfo.pypi({registryUrl:t.url??"https://upload.pypi.org/legacy/",packageName:t.packageName,credentials:t.token!=null?{username:"__token__",password:t.token}:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,pypiMetadata:t.metadata!=null?{keywords:t.metadata.keywords,documentationLink:t.metadata.documentationLink,homepageLink:t.metadata.homepageLink}:void 0})}buildMavenPublishInfo(t){return Gr.GithubPublishInfo.maven({registryUrl:t.url??"https://s01.oss.sonatype.org/content/repositories/releases/",coordinate:t.coordinate,credentials:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,signature:t.signature!=null?{keyId:t.signature.keyId,password:t.signature.password,secretKey:t.signature.secretKey}:void 0})}buildNugetPublishInfo(t){return Gr.GithubPublishInfo.nuget({registryUrl:t.url??"https://nuget.org/",packageName:t.packageName,apiKey:t.apiKey})}buildRubygemsPublishInfo(t){return Gr.GithubPublishInfo.rubygems({registryUrl:t.url??"https://rubygems.org/",packageName:t.packageName,apiKey:t.apiKey})}buildCratesPublishInfo(t){return Gr.GithubPublishInfo.crates({registryUrl:t.url??"https://crates.io/api/v1/crates",packageName:t.packageName,token:t.token})}buildReviewers(t){if(t==null)return;let r=[];if(t.teams!=null)for(let n of t.teams)r.push(Gr.GithubPullRequestReviewer.team({name:n}));if(t.users!=null)for(let n of t.users)r.push(Gr.GithubPullRequestReviewer.user({name:n}));return r.length>0?r:void 0}async convertLicense(t){if(t==="MIT")return Gr.GithubLicense.basic({id:Gr.GithubLicenseId.Mit});if(t==="Apache-2.0")return Gr.GithubLicense.basic({id:Gr.GithubLicenseId.Apache});let r=Me(this.context.cwd,ve.of(t));if(!await Xt(r,"file"))throw new S({message:`Custom license file "${r}" does not exist; did you mean to use either MIT or Apache-2.0?`,code:S.Code.InternalError});let n=await(0,Llp.readFile)(r,"utf-8");return Gr.GithubLicense.custom({contents:n})}buildReadme(t){let r=t.readme;if(r==null)return;let n={};return r.bannerLink!=null&&(n.bannerLink=r.bannerLink),r.introduction!=null&&(n.introduction=r.introduction),r.apiReferenceLink!=null&&(n.apiReferenceLink=r.apiReferenceLink),r.apiName!=null&&(n.apiName=r.apiName),r.disabledSections!=null&&(n.disabledSections=r.disabledSections),r.defaultEndpoint!=null&&(n.defaultEndpoint=r.defaultEndpoint),r.features!=null&&(n.features=r.features),r.customSections!=null&&(n.customSections=r.customSections.map(i=>({title:i.title,language:i.language??t.lang,content:i.content}))),r.exampleStyle!=null&&(n.exampleStyle=r.exampleStyle),n}mapLanguage(t){return{typescript:Dn.GenerationLanguage.TYPESCRIPT,python:Dn.GenerationLanguage.PYTHON,java:Dn.GenerationLanguage.JAVA,go:Dn.GenerationLanguage.GO,ruby:Dn.GenerationLanguage.RUBY,csharp:Dn.GenerationLanguage.CSHARP,swift:Dn.GenerationLanguage.SWIFT,php:Dn.GenerationLanguage.PHP,rust:Dn.GenerationLanguage.RUST}[t.toLowerCase()]}};Jt();var kEi=require("path");function FEi({context:e,task:t,target:r,preview:n,outputPath:i}){if(n)return[(i!=null?(0,kEi.resolve)(e.cwd,i):(0,kEi.join)(e.cwd,ve.of(".fern/preview"))).toString()];let o=rKg(t);if(o!=null){if(o.pullRequestUrl!=null)return[o.pullRequestUrl];if(o.releaseUrl!=null)return[o.releaseUrl];if(o.branchUrl!=null)return[o.branchUrl]}return e.resolveTargetOutputs(r)}function rKg(e){let t={};for(let r of e.logs??[]){let n=r.message.match(/Created pull request: (.+)/);n!=null&&(t.pullRequestUrl=n[1]);let i=r.message.match(/Created commit (\w+)/);i!=null&&(t.commitHash=i[1]);let o=r.message.match(/Pushed branch: (.+)/);o!=null&&(t.branchUrl=o[1]);let s=r.message.match(/Release tagged\. View here: (.+)/);s!=null&&(t.releaseUrl=s[1])}return Object.keys(t).length>0?t:void 0}var NEi=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new f1t({context:this.context})}async run(t){let r=new Ad({context:this.context,task:t.task,logLevel:qn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new CPe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition);return t.target.output.git!=null&&WA.isGitOutputSelfHosted(t.target.output.git)?await this.runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i}):await this.runLocalGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i,generatorInvocation:n})}catch(n){return r.getResult()===Vf.Failure?{success:!1}:{success:!1,error:Fn(n)}}}async runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i}){let o={_absolutePath:Me(this.context.cwd,ve.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion};return await p1t({token:t.token,projectConfig:o,workspace:n,generatorGroup:i,version:t.version,keepDocker:t.keepContainer??!1,context:r,runner:t.containerEngine,absolutePathToPreview:void 0,inspect:!1,ai:void 0,skipFernignore:t.skipFernignore,requireEnvVars:t.requireEnvVars,disableTelemetry:!this.context.telemetry.isTelemetryEnabled()}),r.getResult()===Vf.Failure?{success:!1}:{success:!0,output:FEi({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}async runLocalGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i,generatorInvocation:o}){let a=`${t.target.registry?`${t.target.registry}/${RMe(t.target.image)}`:t.target.image}:${t.target.version}`,c=new N5e({containerImage:a,keepContainer:t.keepContainer??!1,runner:t.containerEngine,disableTelemetry:!this.context.telemetry.isTelemetryEnabled()});if(await new kXt(c).run({organization:t.organization,workspace:n,generatorGroup:i,context:r,outputVersionOverride:t.version,ai:t.ai,absolutePathToFernConfig:void 0,irVersionOverride:void 0,shouldGenerateDynamicSnippetTests:!1,skipUnstableDynamicSnippetTests:!0,inspect:!1,skipFernignore:t.skipFernignore}),t.target.output.path!=null&&o.absolutePathToLocalOutput!=null){let l=Me(o.absolutePathToLocalOutput,ve.of(U0r));await(0,Vlp.rm)(l,{force:!0})}return r.getResult()===Vf.Failure?{success:!1}:{success:!0,output:this.context.resolveTargetOutputs(t.target)}}};Tt();Jt();Bb();jt();var q8e=require("fs/promises"),Ulp=require("os");var jEi=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new f1t({context:this.context})}async run(t){let r=new Ad({context:this.context,task:t.task,logLevel:qn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new CPe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition),a=await this.getAbsolutePathToPreview(t);if(await XRe({projectConfig:this.getProjectConfig(t),organization:t.organization,workspace:s,context:r,generatorGroup:i,version:t.version,shouldLogS3Url:t.shouldLogS3Url??!1,token:t.token,mode:this.mapMode(t.target),fernignorePath:t.fernignorePath,loginCommand:"fern auth login",skipFernignore:t.skipFernignore,absolutePathToPreview:a,whitelabel:void 0,replay:s.generatorsConfiguration?.replay,dynamicIrOnly:!1,retryRateLimited:!1,requireEnvVars:t.requireEnvVars??!0,verify:!1,disableTelemetry:!this.context.telemetry.isTelemetryEnabled()}),this.isLocalGitCombo(t)&&a!=null){let c=VS(n.name),u=Me(a,ve.of(c)),l=n.absolutePathToLocalOutput;l!=null&&(await(0,q8e.cp)(u,l,{recursive:!0}),await(0,q8e.rm)(Me(l,ve.of(".git")),{recursive:!0,force:!0})),await(0,q8e.rm)(a,{recursive:!0,force:!0})}return r.getResult()===Vf.Failure?{success:!1}:{success:!0,output:FEi({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}catch(n){return r.getResult()===Vf.Failure?{success:!1}:{success:!1,error:Fn(n)}}}async getAbsolutePathToPreview(t){if(this.isLocalGitCombo(t)){let r=await(0,q8e.mkdtemp)(Me(Ut.of((0,Ulp.tmpdir)()),ve.of("fern-preview-")));return Ut.of(r)}if(t.preview)return t.outputPath!=null?Jn(this.context.cwd,t.outputPath):Me(this.context.cwd,ve.of(".fern/preview"))}getProjectConfig(t){return{_absolutePath:Me(this.context.cwd,ve.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion}}mapMode(t){if(t.output.git!=null)return t.output.git.mode==="pr"?"pull-request":void 0}isLocalGitCombo(t){return t.target.output.path!=null&&t.target.output.git!=null&&!t.preview}};var QEi=class{context;cliVersion;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion}async run(t){try{if(this.isLocalGeneration(t))return await this.runLocalGeneration(t);if(t.target.registry!=null)throw new S({message:`Custom image configurations are only supported with local generation (--local). Target "${t.target.name}" uses a custom image registry.`,code:S.Code.ConfigError});return await this.runRemoteGeneration(t)}catch(r){let n=Fn(r);return{success:!1,target:t.target,error:n}}}async runLocalGeneration(t){let n=await new NEi({context:this.context,cliVersion:this.cliVersion}).run({task:t.task,target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,ai:t.ai,audiences:t.audiences,version:t.version,keepContainer:t.keepContainer,preview:t.preview,outputPath:t.outputPath,containerEngine:t.containerEngine,token:t.token,skipFernignore:t.skipFernignore,requireEnvVars:t.requireEnvVars});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}async runRemoteGeneration(t){if(t.token==null)throw S.authRequired("Authentication required. Please run 'fern auth login' or set the FERN_TOKEN environment variable.");let n=await new jEi({context:this.context,cliVersion:this.cliVersion}).run({target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,token:t.token,task:t.task,ai:t.ai,audiences:t.audiences,version:t.version,shouldLogS3Url:t.shouldLogS3Url,preview:t.preview,outputPath:t.outputPath,fernignorePath:t.fernignorePath,skipFernignore:t.skipFernignore,requireEnvVars:t.requireEnvVars});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}isLocalGeneration(t){return t.runtime==="local"||t.target.output.git!=null&&WA.isGitOutputSelfHosted(t.target.output.git)}};jt();var zEi=class{id;taskGroup;stage;constructor({id:t,taskGroup:r}){this.id=t,this.taskGroup=r,this.stage={validation:new Vhe({taskId:t,taskGroup:r,stageId:"validation"}),generator:new Vhe({taskId:t,taskGroup:r,stageId:"generator"}),output:new Vhe({taskId:t,taskGroup:r,stageId:"output"})}}getTask(){let t=this.taskGroup.getTask(this.id);if(t==null)throw new S({message:`Internal error; task '${this.id}' does not exist`,code:S.Code.InternalError});return t}start(t){this.taskGroup.updateTask({id:this.id,update:{status:"running",currentStep:t}})}complete(t){this.taskGroup.updateTask({id:this.id,update:{status:"success",output:t}})}fail(t){this.taskGroup.updateTask({id:this.id,update:{status:"error",error:t}})}};var MEi=class{taskGroup;tasks={};defaultStages=[{id:"validation",labels:{pending:"Validate API",running:"Validating API...",success:"Validated API"}},{id:"generator",labels:{pending:"Run generator",running:"Running generator...",success:"Generator completed"}},{id:"output",labels:{pending:"Write output",running:"Writing output...",success:"Wrote output"}}];constructor({context:t}){this.tasks={},this.taskGroup=new UCt({context:t})}addTask({id:t,name:r,stageOverrides:n}){let i=r??t;this.taskGroup.addTask({id:t,name:i});let o=this.buildStages(n);this.taskGroup.setStages(t,o);let s=new zEi({taskGroup:this.taskGroup,id:t});return this.tasks[t]=s,s}getTask(t){return this.tasks[t]}async start(t){await this.taskGroup.start(t)}finish({successMessage:t,errorMessage:r}){return this.taskGroup.complete({successMessage:t,errorMessage:r})}buildStages(t){return t==null?this.defaultStages:this.defaultStages.map(r=>{let n=t[r.id];return n==null?r:{...r,labels:{...r.labels,...n}}})}};Jt();var LEi=class{context;constructor({context:t}){this.context=t}async build({org:t,lang:r,resolvedSpec:n,output:i,targetVersion:o}){let s=OHr({lang:r,version:o}),a=ve.of(So(this.context.cwd,n.absoluteFilePath)),c=new t5({absoluteFilePath:n.absoluteFilePath,relativeFilePath:a,line:1,column:1}),u={name:r,api:nst,image:s.image,registry:void 0,lang:r,version:s.tag,sourceLocation:c,output:WA.resolveOutputObjectSchema(i)};return{apis:{[nst]:{specs:[n.spec]}},cliVersion:"*",org:t,sdks:{org:t,targets:[u]}}}};var FXt=class{async handle(t,r){let n=new wPe;k9(r.api)&&n.claimStdin("api");let i=await t.loadWorkspace();if(i==null)return this.handleWithFlags(t,r);if(!i.success)throw new yH(i.issues);return this.handleWithWorkspace(t,i.workspace,r)}async handleWithWorkspace(t,r,n){let i=r;if(n.api!=null){let a=await new iYt({context:t}).resolve({reference:n.api}),c={};for(let u of Object.keys(i.apis))c[u]={specs:[a.spec]};i={...i,apis:c}}n.org!=null&&(i={...i,org:n.org});let o=await this.getTargets({context:t,workspace:i,args:n,groupName:n.target!=null?void 0:n.group??i.sdks?.defaultGroup});this.validateArgs({workspace:i,args:n,targets:o}),await this.runGeneration({context:t,workspace:i,targets:o,args:n,forceLocal:!1})}async handleWithFlags(t,r){let n=[];if(r.api==null&&n.push("--api <path|url> Path or URL to an API spec file (e.g. ./openapi.yaml)"),r.target==null&&n.push("--target <language> The SDK language to generate (e.g. typescript)"),r.org==null&&n.push("--org <name> Your organization name (e.g. acme)"),r.output==null&&n.push("--output <path|url> Output path or git URL (e.g. ./my-sdk)"),r.group!=null&&n.push("remove --group Groups are not supported without a fern.yml"),n.length>0)throw new S({message:`No fern.yml found, either run 'fern init' or specify all of the required flags:
|
|
4711
|
+
`,void 0,{code:S.Code.ConfigError}),st!=null){await REi.rm(At,{recursive:!0,force:!0}),await REi.mkdir(At,{recursive:!0}),ee.logger.debug(`Self-hosted GitHub mode: cloning ${st.uri} to ${At}`);try{let{execSync:Kt}=await import("child_process"),ar=Kt("which git 2>/dev/null || echo 'not found'",{encoding:"utf-8"}).trim(),Kn=Kt("git --version 2>/dev/null || echo 'unknown'",{encoding:"utf-8"}).trim();ee.logger.debug(`Git environment: path=${ar}, version=${Kn}, PATH=${process.env.PATH??"unset"}`)}catch{ee.logger.debug(`Git environment: unable to determine git info, PATH=${process.env.PATH??"unset"}`)}try{let Kt=await Hbr({githubRepository:st.uri,installationToken:st.token,targetDirectory:At,timeoutMs:3e4}),ar=st.mode??"push";if((ar==="push"||ar==="pull-request"||ar==="commit-and-release")&&st.branch!=null){if(ee.logger.debug(`Checking out branch ${st.branch} before generation`),ar==="pull-request"&&!await Kt.remoteBranchExists(st.branch)){let pn=rC(st.uri);ee.failAndThrow(`Branch ${st.branch} does not exist in repository ${pn.owner}/${pn.repo}`,void 0,{code:S.Code.ConfigError})}await Kt.checkoutRemoteBranch(st.branch)}}catch(Kt){ee.failAndThrow(`Failed to clone GitHub repository ${st.uri}: ${Fn(Kt)}`,void 0,{code:S.Code.NetworkError})}}let Ht;Y.raw?.snippets?.path!=null&&(Ht=Ut.of(Me(r.absoluteFilePath,ve.of(Y.raw.snippets.path)))),Ht==null&&st!=null&&(Ht=Ut.of((await DEi()).path+"/snippet.json"));let cr=await DEi(),{shouldCommit:Ae,autoVersioningCommitMessage:me,autoVersioningChangelogEntry:Ue,autoVersioningPrDescription:tt,autoVersioningVersionBumpReason:be,autoVersioningVersionBump:Re,autoVersioningNewVersion:vt,autoVersioningPreviousVersion:ot}=await PEi({organization:t.organization,absolutePathToFernConfig:r.generatorsConfiguration?.absolutePathToConfiguration??t._absolutePath,workspace:ne,generatorInvocation:Y,absolutePathToLocalOutput:At,absolutePathToLocalSnippetJSON:Ht,absolutePathToLocalSnippetTemplateJSON:void 0,version:i,audiences:n.audiences,workspaceTempDir:cr,keepDocker:o,context:ee,irVersionOverride:Y.irVersionOverride,outputVersionOverride:i,writeUnitTests:!0,generateOauthClients:Ne?.oauthClientEnabled??!0,generatePaginatedClients:Ne?.paginationEnabled??!0,includeOptionalRequestPropertyExamples:!1,inspect:s,executionEnvironment:void 0,ir:Ce,whiteLabel:Ne?.isWhitelabled??!1,publishToRegistry:A,runner:u,ai:l,autoVersioningCache:z,absolutePathToSpecRepo:An(r.absoluteFilePath),skipFernignore:g,disableTelemetry:D,rawApiSpecs:r instanceof lp&&ywt(Y.name)?r.allSpecs:void 0});ee.logger.info(fe.green("Wrote files to "+At));let Ke=st!=null&&Ae;if(Ke||!Ke&&P===!0){let Kt={debug:sr=>ee.logger.debug(sr),info:sr=>ee.logger.info(sr),warn:sr=>ee.logger.warn(sr),error:sr=>ee.logger.error(sr)},ar=Re==="MAJOR",Kn=new l1t.PostGenerationPipeline({outputDir:At,replay:Ke?{enabled:p?.enabled===!0,skipApplication:d,stageOnly:!1}:void 0,verify:{enabled:P===!0,runner:u},github:Ke&&st!=null?{enabled:!0,uri:st.uri,token:st.token,mode:st.mode??"push",branch:st.branch,commitMessage:me,changelogEntry:Ue,prDescription:tt,versionBumpReason:be,previousVersion:ot,newVersion:vt??i,versionBump:Re,previewMode:st.previewMode,workflows:st.workflows??!0,generatorName:Y.name,automationMode:E,autoMerge:x,skipIfNoDiff:I,hasBreakingChanges:ar,breakingChangesSummary:ar?tt:void 0,runId:process.env.FERN_RUN_ID,apiBaseUrl:y0r(st.uri)}:void 0,cliVersion:r.cliVersion??"unknown",generatorVersions:{[Y.name]:Y.version},generatorName:Y.name},Kt),pn=Date.now(),_n=await Kn.run(),Qt=Date.now()-pn;if(_n.steps.replay!=null&&st!=null&&((0,l1t.logReplaySummary)(_n.steps.replay,{debug:sr=>ee.logger.debug(sr),info:sr=>{let Ge=sr.startsWith("[replay] ")||sr.startsWith("[telemetry] ");ee.logger.info(Ge?sr:fe.cyan(sr))},warn:sr=>ee.logger.warn(fe.yellow(sr)),error:sr=>ee.logger.error(fe.red(sr))}),!D))try{let Ge={...(0,l1t.buildReplayTelemetryProps)({pipelineResult:_n,generatorName:Y.name,generatorVersion:Y.version,cliVersion:r.cliVersion,repoUri:st.uri,automationMode:E===!0,autoMerge:x===!0,skipIfNoDiff:I===!0,hasBreakingChanges:ar,versionArg:i==null?"none":(0,zk.isAutoVersion)(i)?"auto":"explicit",versionBump:Re,replayConfigEnabled:p?.enabled===!0,noReplayFlag:d===!0,githubMode:st.mode??"push",previewMode:st.previewMode===!0,durationMs:Qt}),surface:"cli",org_id:t.organization};ee.instrumentPostHogEvent({command:"replay",properties:Ge}),ee.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(Ge)}`)}catch(sr){ee.logger.debug(`[telemetry] failed to send replay event: ${String(sr)}`)}_n.steps.github?.skippedNoDiff&&ee.logger.info(fe.green("No changes detected \u2014 skipping PR creation")),_n.steps.github?.autoMergeEnabled&&ee.logger.info(fe.green("Automerge enabled on PR")),_n.success||ee.failAndThrow(`Post-generation pipeline failed: ${_n.errors?.join(", ")}`,void 0,{code:S.Code.UserError})}})))).some(Y=>!Y))throw new iu}function YHg(e,t){if(e==null)return;let r=RXt(t.name);return Me(e,ve.of(r))}async function DEi(){return fjs.default.dir({tmpdir:pjs.default.platform()==="darwin"?Qlp.default.join("/private",pjs.default.tmpdir()):void 0,prefix:"fern"})}function XHg({generatorInvocation:e,org:t,version:r,userProvidedVersion:n,packageName:i,context:o,generateTests:s,generateFullProject:a}){let c=e.language??(0,zk.extractLanguageFromGeneratorName)(e.name),u=d=>d!=null&&(0,zk.isAutoVersion)(d)?(0,zk.mapMagicVersionForLanguage)(zk.MAGIC_VERSION,c):d,l=u(r),p=u(n);if(e.raw?.github!=null&&zlp(e.raw.github)){let d=rC(e.raw.github.uri),f=e.raw.github.mode==="pull-request"?"pull-request":void 0;return _t.PublishingConfig.github({owner:d.owner,repo:d.repo,uri:e.raw.github.uri,token:e.raw.github.token,mode:f,branch:e.raw.github.branch,target:ZHg({outputSchema:e.raw.output,version:l,packageName:i})})}if(e.raw?.output?.location==="local-file-system"){let d=L0r({generatorInvocation:e,version:l,userProvidedVersion:p,packageName:i,context:o});return _t.PublishingConfig.filesystem({generateFullProject:s||a||t?.selfHostedSdKs||!1,publishTarget:d})}return e.outputMode._visit({downloadFiles:()=>_t.PublishingConfig.filesystem({generateFullProject:s||a||t?.selfHostedSdKs||!1,publishTarget:void 0}),github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:()=>{},_other:()=>{}})}function ZHg({outputSchema:e,version:t,packageName:r}){let n=_t.PublishTarget.postman({apiKey:"",workspaceId:"",collectionId:void 0});if(e==null)return n;if(e.location==="npm"){let i=(e.token||"${NPM_TOKEN}").trim(),o=i==="<USE_OIDC>"||i==="OIDC";return id.npm({packageName:e["package-name"],version:t??"0.0.0",tokenEnvironmentVariable:o?"<USE_OIDC>":i.startsWith("${")&&i.endsWith("}")?i.slice(2,-1).trim():""})}else return e.location==="maven"?id.maven({version:t??"0.0.0",coordinate:e.coordinate,usernameEnvironmentVariable:e.username||"MAVEN_USERNAME",passwordEnvironmentVariable:e.password||"MAVEN_PASSWORD",mavenUrlEnvironmentVariable:e.url||"MAVEN_PUBLISH_REGISTRY_URL"}):e.location==="pypi"?id.pypi({version:t,packageName:r}):n}function zlp(e){return e==null?!1:"uri"in e&&"token"in e}var $Hg={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};function eKg(e,t){if(e.raw?.github!=null&&zlp(e.raw.github))return{...e.raw.github,previewMode:t}}var kXt=class{executionEnvironment;constructor(t){this.executionEnvironment=t}async run({organization:t,absolutePathToFernConfig:r,workspace:n,generatorGroup:i,context:o,irVersionOverride:s,outputVersionOverride:a,shouldGenerateDynamicSnippetTests:c,skipUnstableDynamicSnippetTests:u,inspect:l,skipFernignore:p,skipAutogenerationIfManualExamplesExist:d,rawApiSpecs:f,verify:m,verifyRunner:g,verifyValidatorVersion:A}){let y=await Promise.all(i.generators.map(async E=>o.runInteractiveTask({name:E.name},async x=>{if(E.absolutePathToLocalOutput==null){x.failWithoutThrowing("Cannot generate because output location is not local-file-system",void 0,{code:S.Code.ConfigError});return}try{let{ir:I,generatorConfig:C}=await this.executeGenerator({generatorGroup:i,generatorInvocation:E,context:x,workspace:n,organization:t,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:r,inspect:l,skipFernignore:p,skipAutogenerationIfManualExamplesExist:d,rawApiSpecs:f});x.logger.info(fe.green("Wrote files to "+E.absolutePathToLocalOutput)),c&&E.language!=null?(x.logger.info(`Generating dynamic snippet tests for ${E.language}...`),await blp({context:x,ir:I,config:C,language:E.language,outputDir:E.absolutePathToLocalOutput,skipUnstable:u})):x.logger.info(`Skipping dynamic snippet tests; shouldGenerateDynamicSnippetTests: ${c}, language: ${E.language}`),m===!0&&await tKg({outputDir:E.absolutePathToLocalOutput,generatorName:E.name,generatorVersion:A??E.version,cliVersion:n.cliVersion,runner:g??"docker",context:x})}catch(I){I instanceof iu||x.failWithoutThrowing(`Generation failed: ${I instanceof Error?I.message:"Unknown error"}`,I,{code:I instanceof S?I.code:S.Code.InternalError})}})))}async executeGenerator({generatorGroup:t,generatorInvocation:r,context:n,workspace:i,organization:o,irVersionOverride:s,outputVersionOverride:a,absolutePathToFernConfig:c,inspect:u,skipFernignore:l,skipAutogenerationIfManualExamplesExist:p,rawApiSpecs:d}){if(n.logger.info(`Starting generation for ${r.name}`),r.absolutePathToLocalOutput==null)throw new S({message:"Output path is required for generation",code:S.Code.ConfigError});let f=Lg({workspace:i,audiences:t.audiences,generationLanguage:r.language,keywords:r.keywords,smartCasing:r.smartCasing,smartCasingDigitWordBoundary:r.smartCasingDigitWordBoundary,exampleGeneration:{includeOptionalRequestPropertyExamples:!0,disabled:r.disableExamples,skipAutogenerationIfManualExamplesExist:p??!1},readme:r.readme,version:a,packageName:Dn.getPackageName({generatorInvocation:r}),userAgentTemplate:dbe(r),idempotencyKeyGeneration:mbe(r),organization:o,context:n,sourceResolver:new jh(n,i),generationMetadata:{cliVersion:i.cliVersion,generatorName:r.name,generatorVersion:r.version,generatorConfig:r.config,originGitCommit:uX(),originGitCommitIsDirty:lX(),invokedBy:aX(),requestedVersion:a,ciProvider:cX()}}),m=await DEi();return PEi({organization:o,absolutePathToFernConfig:c,workspace:i,generatorInvocation:r,absolutePathToLocalOutput:r.absolutePathToLocalOutput,absolutePathToLocalSnippetJSON:r.absolutePathToLocalOutput?Ut.of(Me(r.absolutePathToLocalOutput,ve.of(U0r))):void 0,absolutePathToLocalSnippetTemplateJSON:void 0,audiences:t.audiences,workspaceTempDir:m,version:a,keepDocker:!1,context:n,irVersionOverride:s,outputVersionOverride:a,writeUnitTests:!0,generateOauthClients:!0,generatePaginatedClients:!0,includeOptionalRequestPropertyExamples:!0,inspect:u,executionEnvironment:this.executionEnvironment,ir:f,runner:void 0,ai:i.generatorsConfiguration?.ai,absolutePathToSpecRepo:void 0,skipFernignore:l,rawApiSpecs:d})}};async function tKg({outputDir:e,generatorName:t,generatorVersion:r,cliVersion:n,runner:i,context:o}){let s={debug:u=>o.logger.debug(u),info:u=>o.logger.info(u),warn:u=>o.logger.warn(u),error:u=>o.logger.error(u)},c=await new Mlp.PostGenerationPipeline({outputDir:e,verify:{enabled:!0,runner:i},cliVersion:n??"unknown",generatorVersions:{[t]:r},generatorName:t},s).run();bap(c,t)}Bb();jt();var Vlp=require("fs/promises");Ea();co();Tt();Jt();dU();jt();LW();var Llp=require("fs/promises"),f1t=class{context;constructor(t){this.context=t.context}async adapt(t){return{raw:this.buildRaw(t),name:t.image,containerImage:t.registry?`${t.registry}/${RMe(t.image)}`:void 0,version:t.version,config:t.config,language:this.mapLanguage(t.lang),outputMode:await this.buildOutputMode(t),absolutePathToLocalOutput:this.context.resolveOutputFilePath(t.output.path),smartCasing:t.smartCasing??!0,smartCasingDigitWordBoundary:!1,readme:this.buildReadme(t),absolutePathToLocalSnippets:void 0,disableExamples:!1,irVersionOverride:void 0,keywords:void 0,publishMetadata:void 0,settings:void 0,automation:{generate:!0,upgrade:!0,preview:!0,verify:!0}}}buildRaw(t){let r=t.output.git;if(!(r==null||!WA.isGitOutputSelfHosted(r)))return{name:t.image,version:t.version,github:{uri:r.uri,token:r.token,mode:this.mapSelfHostedMode(r.mode),branch:r.branch}}}mapSelfHostedMode(t){if(t==null)return Dn.GithubSelfhostedMode.PullRequest;switch(t){case"pr":return Dn.GithubSelfhostedMode.PullRequest;case"push":return Dn.GithubSelfhostedMode.Push;case"release":return Dn.GithubSelfhostedMode.CommitAndRelease;default:Ee(t)}}async buildOutputMode(t){if(t.output.git!=null){let r=t.output.git;return WA.isGitOutputSelfHosted(r)?await this.buildGitSelfHostedOutputMode({target:t,git:r}):await this.buildGitHubRepositoryOutputMode({target:t,git:r})}return Gr.remoteGen.OutputMode.downloadFiles({})}async buildGitHubRepositoryOutputMode({target:t,git:r}){let n=rC(r.repository),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=this.buildReviewers(r.reviewers),a=r.mode??"pr";switch(a){case"pr":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,license:i,publishInfo:o,reviewers:s,downloadSnippets:void 0}));case"release":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.commitAndRelease({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o,downloadSnippets:void 0}));case"push":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o,downloadSnippets:void 0}));default:Ee(a)}}async buildGitSelfHostedOutputMode({target:t,git:r}){let n=rC(r.uri),i=r.license!=null?await this.convertLicense(r.license):void 0,o=t.publish!=null?this.buildPublishInfo(t.publish):void 0,s=r.mode??"pr";switch(s){case"pr":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.pullRequest({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));case"push":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.push({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));case"release":return Gr.remoteGen.OutputMode.githubV2(Gr.GithubOutputModeV2.commitAndRelease({owner:n.owner,repo:n.repo,branch:r.branch,license:i,publishInfo:o}));default:Ee(s)}}buildPublishInfo(t){if(t.npm!=null)return this.buildNpmPublishInfo(t.npm);if(t.pypi!=null)return this.buildPypiPublishInfo(t.pypi);if(t.maven!=null)return this.buildMavenPublishInfo(t.maven);if(t.nuget!=null)return this.buildNugetPublishInfo(t.nuget);if(t.rubygems!=null)return this.buildRubygemsPublishInfo(t.rubygems);if(t.crates!=null)return this.buildCratesPublishInfo(t.crates)}buildNpmPublishInfo(t){return Gr.GithubPublishInfo.npm({registryUrl:t.url??"https://registry.npmjs.org",packageName:t.packageName,token:t.token})}buildPypiPublishInfo(t){return Gr.GithubPublishInfo.pypi({registryUrl:t.url??"https://upload.pypi.org/legacy/",packageName:t.packageName,credentials:t.token!=null?{username:"__token__",password:t.token}:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,pypiMetadata:t.metadata!=null?{keywords:t.metadata.keywords,documentationLink:t.metadata.documentationLink,homepageLink:t.metadata.homepageLink}:void 0})}buildMavenPublishInfo(t){return Gr.GithubPublishInfo.maven({registryUrl:t.url??"https://s01.oss.sonatype.org/content/repositories/releases/",coordinate:t.coordinate,credentials:t.username!=null&&t.password!=null?{username:t.username,password:t.password}:void 0,signature:t.signature!=null?{keyId:t.signature.keyId,password:t.signature.password,secretKey:t.signature.secretKey}:void 0})}buildNugetPublishInfo(t){return Gr.GithubPublishInfo.nuget({registryUrl:t.url??"https://nuget.org/",packageName:t.packageName,apiKey:t.apiKey})}buildRubygemsPublishInfo(t){return Gr.GithubPublishInfo.rubygems({registryUrl:t.url??"https://rubygems.org/",packageName:t.packageName,apiKey:t.apiKey})}buildCratesPublishInfo(t){return Gr.GithubPublishInfo.crates({registryUrl:t.url??"https://crates.io/api/v1/crates",packageName:t.packageName,token:t.token})}buildReviewers(t){if(t==null)return;let r=[];if(t.teams!=null)for(let n of t.teams)r.push(Gr.GithubPullRequestReviewer.team({name:n}));if(t.users!=null)for(let n of t.users)r.push(Gr.GithubPullRequestReviewer.user({name:n}));return r.length>0?r:void 0}async convertLicense(t){if(t==="MIT")return Gr.GithubLicense.basic({id:Gr.GithubLicenseId.Mit});if(t==="Apache-2.0")return Gr.GithubLicense.basic({id:Gr.GithubLicenseId.Apache});let r=Me(this.context.cwd,ve.of(t));if(!await Xt(r,"file"))throw new S({message:`Custom license file "${r}" does not exist; did you mean to use either MIT or Apache-2.0?`,code:S.Code.InternalError});let n=await(0,Llp.readFile)(r,"utf-8");return Gr.GithubLicense.custom({contents:n})}buildReadme(t){let r=t.readme;if(r==null)return;let n={};return r.bannerLink!=null&&(n.bannerLink=r.bannerLink),r.introduction!=null&&(n.introduction=r.introduction),r.apiReferenceLink!=null&&(n.apiReferenceLink=r.apiReferenceLink),r.apiName!=null&&(n.apiName=r.apiName),r.disabledSections!=null&&(n.disabledSections=r.disabledSections),r.defaultEndpoint!=null&&(n.defaultEndpoint=r.defaultEndpoint),r.features!=null&&(n.features=r.features),r.customSections!=null&&(n.customSections=r.customSections.map(i=>({title:i.title,language:i.language??t.lang,content:i.content}))),r.exampleStyle!=null&&(n.exampleStyle=r.exampleStyle),n}mapLanguage(t){return{typescript:Dn.GenerationLanguage.TYPESCRIPT,python:Dn.GenerationLanguage.PYTHON,java:Dn.GenerationLanguage.JAVA,go:Dn.GenerationLanguage.GO,ruby:Dn.GenerationLanguage.RUBY,csharp:Dn.GenerationLanguage.CSHARP,swift:Dn.GenerationLanguage.SWIFT,php:Dn.GenerationLanguage.PHP,rust:Dn.GenerationLanguage.RUST}[t.toLowerCase()]}};Jt();var kEi=require("path");function FEi({context:e,task:t,target:r,preview:n,outputPath:i}){if(n)return[(i!=null?(0,kEi.resolve)(e.cwd,i):(0,kEi.join)(e.cwd,ve.of(".fern/preview"))).toString()];let o=rKg(t);if(o!=null){if(o.pullRequestUrl!=null)return[o.pullRequestUrl];if(o.releaseUrl!=null)return[o.releaseUrl];if(o.branchUrl!=null)return[o.branchUrl]}return e.resolveTargetOutputs(r)}function rKg(e){let t={};for(let r of e.logs??[]){let n=r.message.match(/Created pull request: (.+)/);n!=null&&(t.pullRequestUrl=n[1]);let i=r.message.match(/Created commit (\w+)/);i!=null&&(t.commitHash=i[1]);let o=r.message.match(/Pushed branch: (.+)/);o!=null&&(t.branchUrl=o[1]);let s=r.message.match(/Release tagged\. View here: (.+)/);s!=null&&(t.releaseUrl=s[1])}return Object.keys(t).length>0?t:void 0}var NEi=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new f1t({context:this.context})}async run(t){let r=new Ad({context:this.context,task:t.task,logLevel:qn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new CPe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition);return t.target.output.git!=null&&WA.isGitOutputSelfHosted(t.target.output.git)?await this.runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i}):await this.runLocalGeneration({args:t,taskContext:r,fernWorkspace:s,generatorGroup:i,generatorInvocation:n})}catch(n){return r.getResult()===Vf.Failure?{success:!1}:{success:!1,error:Fn(n)}}}async runSelfHostedGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i}){let o={_absolutePath:Me(this.context.cwd,ve.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion};return await p1t({token:t.token,projectConfig:o,workspace:n,generatorGroup:i,version:t.version,keepDocker:t.keepContainer??!1,context:r,runner:t.containerEngine,absolutePathToPreview:void 0,inspect:!1,ai:void 0,skipFernignore:t.skipFernignore,requireEnvVars:t.requireEnvVars,disableTelemetry:!this.context.telemetry.isTelemetryEnabled()}),r.getResult()===Vf.Failure?{success:!1}:{success:!0,output:FEi({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}async runLocalGeneration({args:t,taskContext:r,fernWorkspace:n,generatorGroup:i,generatorInvocation:o}){let a=`${t.target.registry?`${t.target.registry}/${RMe(t.target.image)}`:t.target.image}:${t.target.version}`,c=new N5e({containerImage:a,keepContainer:t.keepContainer??!1,runner:t.containerEngine,disableTelemetry:!this.context.telemetry.isTelemetryEnabled()});if(await new kXt(c).run({organization:t.organization,workspace:n,generatorGroup:i,context:r,outputVersionOverride:t.version,ai:t.ai,absolutePathToFernConfig:void 0,irVersionOverride:void 0,shouldGenerateDynamicSnippetTests:!1,skipUnstableDynamicSnippetTests:!0,inspect:!1,skipFernignore:t.skipFernignore}),t.target.output.path!=null&&o.absolutePathToLocalOutput!=null){let l=Me(o.absolutePathToLocalOutput,ve.of(U0r));await(0,Vlp.rm)(l,{force:!0})}return r.getResult()===Vf.Failure?{success:!1}:{success:!0,output:this.context.resolveTargetOutputs(t.target)}}};Tt();Jt();Bb();jt();var q8e=require("fs/promises"),Ulp=require("os");var jEi=class{context;cliVersion;invocationAdapter;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion,this.invocationAdapter=new f1t({context:this.context})}async run(t){let r=new Ad({context:this.context,task:t.task,logLevel:qn.Info});try{let n=await this.invocationAdapter.adapt(t.target),i={groupName:t.target.name,audiences:t.audiences??{type:"all"},generators:[n],reviewers:void 0},s=await new CPe({context:this.context,cliVersion:this.cliVersion,task:t.task}).adapt(t.apiDefinition),a=await this.getAbsolutePathToPreview(t);if(await XRe({projectConfig:this.getProjectConfig(t),organization:t.organization,workspace:s,context:r,generatorGroup:i,version:t.version,shouldLogS3Url:t.shouldLogS3Url??!1,token:t.token,mode:this.mapMode(t.target),fernignorePath:t.fernignorePath,loginCommand:"fern auth login",skipFernignore:t.skipFernignore,absolutePathToPreview:a,whitelabel:void 0,replay:s.generatorsConfiguration?.replay,dynamicIrOnly:!1,retryRateLimited:!1,requireEnvVars:t.requireEnvVars??!0,verify:!1,disableTelemetry:!this.context.telemetry.isTelemetryEnabled()}),this.isLocalGitCombo(t)&&a!=null){let c=VS(n.name),u=Me(a,ve.of(c)),l=n.absolutePathToLocalOutput;l!=null&&(await(0,q8e.cp)(u,l,{recursive:!0}),await(0,q8e.rm)(Me(l,ve.of(".git")),{recursive:!0,force:!0})),await(0,q8e.rm)(a,{recursive:!0,force:!0})}return r.getResult()===Vf.Failure?{success:!1}:{success:!0,output:FEi({context:this.context,task:t.task,target:t.target,preview:t.preview,outputPath:t.outputPath})}}catch(n){return r.getResult()===Vf.Failure?{success:!1}:{success:!1,error:Fn(n)}}}async getAbsolutePathToPreview(t){if(this.isLocalGitCombo(t)){let r=await(0,q8e.mkdtemp)(Me(Ut.of((0,Ulp.tmpdir)()),ve.of("fern-preview-")));return Ut.of(r)}if(t.preview)return t.outputPath!=null?Jn(this.context.cwd,t.outputPath):Me(this.context.cwd,ve.of(".fern/preview"))}getProjectConfig(t){return{_absolutePath:Me(this.context.cwd,ve.of("fern.config.json")),rawConfig:{organization:t.organization,version:this.cliVersion},organization:t.organization,version:this.cliVersion}}mapMode(t){if(t.output.git!=null)return t.output.git.mode==="pr"?"pull-request":void 0}isLocalGitCombo(t){return t.target.output.path!=null&&t.target.output.git!=null&&!t.preview}};var QEi=class{context;cliVersion;constructor(t){this.context=t.context,this.cliVersion=t.cliVersion}async run(t){try{if(this.isLocalGeneration(t))return await this.runLocalGeneration(t);if(t.target.registry!=null)throw new S({message:`Custom image configurations are only supported with local generation (--local). Target "${t.target.name}" uses a custom image registry.`,code:S.Code.ConfigError});return await this.runRemoteGeneration(t)}catch(r){let n=Fn(r);return{success:!1,target:t.target,error:n}}}async runLocalGeneration(t){let n=await new NEi({context:this.context,cliVersion:this.cliVersion}).run({task:t.task,target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,ai:t.ai,audiences:t.audiences,version:t.version,keepContainer:t.keepContainer,preview:t.preview,outputPath:t.outputPath,containerEngine:t.containerEngine,token:t.token,skipFernignore:t.skipFernignore,requireEnvVars:t.requireEnvVars});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}async runRemoteGeneration(t){if(t.token==null)throw S.authRequired("Authentication required. Please run 'fern auth login' or set the FERN_TOKEN environment variable.");let n=await new jEi({context:this.context,cliVersion:this.cliVersion}).run({target:t.target,apiDefinition:t.apiDefinition,organization:t.organization,token:t.token,task:t.task,ai:t.ai,audiences:t.audiences,version:t.version,shouldLogS3Url:t.shouldLogS3Url,preview:t.preview,outputPath:t.outputPath,fernignorePath:t.fernignorePath,skipFernignore:t.skipFernignore,requireEnvVars:t.requireEnvVars});return n.success?{success:!0,target:t.target,output:n.output}:{success:!1,target:t.target,error:n.error}}isLocalGeneration(t){return t.runtime==="local"||t.target.output.git!=null&&WA.isGitOutputSelfHosted(t.target.output.git)}};jt();var zEi=class{id;taskGroup;stage;constructor({id:t,taskGroup:r}){this.id=t,this.taskGroup=r,this.stage={validation:new Vhe({taskId:t,taskGroup:r,stageId:"validation"}),generator:new Vhe({taskId:t,taskGroup:r,stageId:"generator"}),output:new Vhe({taskId:t,taskGroup:r,stageId:"output"})}}getTask(){let t=this.taskGroup.getTask(this.id);if(t==null)throw new S({message:`Internal error; task '${this.id}' does not exist`,code:S.Code.InternalError});return t}start(t){this.taskGroup.updateTask({id:this.id,update:{status:"running",currentStep:t}})}complete(t){this.taskGroup.updateTask({id:this.id,update:{status:"success",output:t}})}fail(t){this.taskGroup.updateTask({id:this.id,update:{status:"error",error:t}})}};var MEi=class{taskGroup;tasks={};defaultStages=[{id:"validation",labels:{pending:"Validate API",running:"Validating API...",success:"Validated API"}},{id:"generator",labels:{pending:"Run generator",running:"Running generator...",success:"Generator completed"}},{id:"output",labels:{pending:"Write output",running:"Writing output...",success:"Wrote output"}}];constructor({context:t}){this.tasks={},this.taskGroup=new UCt({context:t})}addTask({id:t,name:r,stageOverrides:n}){let i=r??t;this.taskGroup.addTask({id:t,name:i});let o=this.buildStages(n);this.taskGroup.setStages(t,o);let s=new zEi({taskGroup:this.taskGroup,id:t});return this.tasks[t]=s,s}getTask(t){return this.tasks[t]}async start(t){await this.taskGroup.start(t)}finish({successMessage:t,errorMessage:r}){return this.taskGroup.complete({successMessage:t,errorMessage:r})}buildStages(t){return t==null?this.defaultStages:this.defaultStages.map(r=>{let n=t[r.id];return n==null?r:{...r,labels:{...r.labels,...n}}})}};Jt();var LEi=class{context;constructor({context:t}){this.context=t}async build({org:t,lang:r,resolvedSpec:n,output:i,targetVersion:o}){let s=OHr({lang:r,version:o}),a=ve.of(So(this.context.cwd,n.absoluteFilePath)),c=new t5({absoluteFilePath:n.absoluteFilePath,relativeFilePath:a,line:1,column:1}),u={name:r,api:nst,image:s.image,registry:void 0,lang:r,version:s.tag,sourceLocation:c,output:WA.resolveOutputObjectSchema(i)};return{apis:{[nst]:{specs:[n.spec]}},cliVersion:"*",org:t,sdks:{org:t,targets:[u]}}}};var FXt=class{async handle(t,r){let n=new wPe;k9(r.api)&&n.claimStdin("api");let i=await t.loadWorkspace();if(i==null)return this.handleWithFlags(t,r);if(!i.success)throw new yH(i.issues);return this.handleWithWorkspace(t,i.workspace,r)}async handleWithWorkspace(t,r,n){let i=r;if(n.api!=null){let a=await new iYt({context:t}).resolve({reference:n.api}),c={};for(let u of Object.keys(i.apis))c[u]={specs:[a.spec]};i={...i,apis:c}}n.org!=null&&(i={...i,org:n.org});let o=await this.getTargets({context:t,workspace:i,args:n,groupName:n.target!=null?void 0:n.group??i.sdks?.defaultGroup});this.validateArgs({workspace:i,args:n,targets:o}),await this.runGeneration({context:t,workspace:i,targets:o,args:n,forceLocal:!1})}async handleWithFlags(t,r){let n=[];if(r.api==null&&n.push("--api <path|url> Path or URL to an API spec file (e.g. ./openapi.yaml)"),r.target==null&&n.push("--target <language> The SDK language to generate (e.g. typescript)"),r.org==null&&n.push("--org <name> Your organization name (e.g. acme)"),r.output==null&&n.push("--output <path|url> Output path or git URL (e.g. ./my-sdk)"),r.group!=null&&n.push("remove --group Groups are not supported without a fern.yml"),n.length>0)throw new S({message:`No fern.yml found, either run 'fern init' or specify all of the required flags:
|
|
4712
4712
|
|
|
4713
4713
|
`+n.map(f=>` ${f}`).join(`
|
|
4714
4714
|
`),code:S.Code.ConfigError});if(r.api==null||r.target==null||r.org==null||r.output==null)throw new S({message:"Internal error: required flags missing",code:S.Code.InternalError});let{api:i,target:o,org:s,output:a}=r,u=await new iYt({context:t}).resolve({reference:i}),p=await new LEi({context:t}).build({org:s,lang:this.resolveLanguage(o),resolvedSpec:u,output:this.parseTargetOutput({...r,output:a}),targetVersion:r["target-version"]}),d=p.sdks?.targets??[];await this.runGeneration({context:t,workspace:p,targets:d,args:r,forceLocal:!0})}async runGeneration({context:t,workspace:r,targets:n,args:i,forceLocal:o}){if(r.sdks==null)throw new S({message:"No SDKs configured",code:S.Code.InternalError});let s=[...new Set(n.map(y=>y.api))],c=await new tte({context:t,cliVersion:r.cliVersion}).check({workspace:r,apiNames:s});if(c.violations.length>0)for(let y of c.violations)process.stderr.write(`${fe.red(`${y.displayRelativeFilepath}:${y.line}:${y.column}: ${y.message}`)}
|
|
@@ -4966,7 +4966,7 @@ ${r}`}function fIi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
|
|
|
4966
4966
|
`),g="";return c&&(g=l.style.error(c)),[`${p} ${f} ${s}`,[m,g].filter(Boolean).join(`
|
|
4967
4967
|
`)]});var YZg=Qx((e,t)=>{let{validate:r=()=>!0}=e,n=EI(e.theme),[i,o]=tu("idle"),[s,a]=tu(),[c,u]=tu(""),l=Nx({status:i,theme:n});jx(async(g,A)=>{if(i==="idle")if(Fx(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]")}${k1t}`),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 g9e=ye($w(),1);var XZg={icon:{cursor:BC.pointer},style:{disabled:e=>g9e.default.dim(`- ${e}`),searchTerm:e=>g9e.default.cyan(e),description:e=>g9e.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${g9e.default.bold(t)} ${g9e.default.dim(r)}`).join(g9e.default.dim(" \u2022 "))},helpMode:"always"};function Szs(e){return!Cd.isSeparator(e)&&!e.disabled}function ZZg(e){return e.map(t=>{if(Cd.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 $Zg=Qx((e,t)=>{let{pageSize:r=7,validate:n=()=>!0}=e,i=EI(XZg,e.theme),[o,s]=tu("loading"),[a,c]=tu(""),[u,l]=tu([]),[p,d]=tu(),f=Nx({status:o,theme:i}),m=B6(()=>{let z=u.findIndex(Szs),J=u.findLastIndex(Szs);return{first:z,last:J}},[u]),[g=m.first,A]=tu();O4(()=>{let z=new AbortController;return s("loading"),d(void 0),(async()=>{try{let Y=await e.source(a||void 0,{signal:z.signal});z.signal.aborted||(A(void 0),d(void 0),l(ZZg(Y)),s("idle"))}catch(Y){!z.signal.aborted&&Y instanceof Error&&d(Y.message)}})(),()=>{z.abort()}},[a]);let y=u[g];jx(async(z,J)=>{if(Fx(z))if(y){s("loading");let Y=await n(y.value);s("idle"),Y===!0?(s("done"),t(y.value)):y.name===a?d(Y||"You must provide a valid value"):(J.write(y.name),c(y.name))}else J.write(a);else if(Sge(z)&&y)J.clearLine(0),J.write(y.name),c(y.name);else if(o!=="loading"&&(OP(z)||O6(z))){if(J.clearLine(0),OP(z)&&g!==m.first||O6(z)&&g!==m.last){let Y=OP(z)?-1:1,ee=g;do ee=(ee+Y+u.length)%u.length;while(!Szs(u[ee]));A(ee)}}else c(J.line)});let E=i.style.message(e.message,o),x;if(i.helpMode!=="never")if(e.instructions){let{pager:z,navigation:J}=e.instructions;x=i.style.help(u.length>r?z:J)}else x=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let I=f9e({items:u,active:g,renderItem({item:z,isActive:J}){if(Cd.isSeparator(z))return` ${z.separator}`;if(z.disabled){let oe=typeof z.disabled=="string"?z.disabled:"(disabled)";return i.style.disabled(`${z.name} ${oe}`)}let Y=J?i.style.highlight:oe=>oe,ee=J?i.icon.cursor:" ";return Y(`${ee} ${z.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 T;if(o==="done"&&y)return[f,E,i.style.answer(y.short)].filter(Boolean).join(" ").trimEnd();T=i.style.searchTerm(a);let P=y?.description,D=[f,E,T].filter(Boolean).join(" ").trimEnd(),O=[C??I," ",P?i.style.description(P):"",x].filter(Boolean).join(`
|
|
4968
4968
|
`).trimEnd();return[D,O]});var N1t=ye($w(),1);var e$g={icon:{cursor:BC.pointer},style:{disabled:e=>N1t.default.dim(`- ${e}`),description:e=>N1t.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${N1t.default.bold(t)} ${N1t.default.dim(r)}`).join(N1t.default.dim(" \u2022 "))},helpMode:"always",indexMode:"hidden",keybindings:[]};function F1t(e){return!Cd.isSeparator(e)&&!e.disabled}function t$g(e){return e.map(t=>{if(Cd.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 Tzs=Qx((e,t)=>{let{loop:r=!0,pageSize:n=7}=e,i=EI(e$g,e.theme),{keybindings:o}=i,[s,a]=tu("idle"),c=Nx({status:s,theme:i}),u=p9e(),l=!o.includes("vim"),p=B6(()=>t$g(e.choices),[e.choices]),d=B6(()=>{let P=p.findIndex(F1t),D=p.findLastIndex(F1t);if(P===-1)throw new oce("[select prompt] No selectable choices. All choices are disabled.");return{first:P,last:D}},[p]),f=B6(()=>"default"in e?p.findIndex(P=>F1t(P)&&P.value===e.default):-1,[e.default,p]),[m,g]=tu(f===-1?d.first:f),A=p[m];jx((P,D)=>{if(clearTimeout(u.current),Fx(P))a("done"),t(A.value);else if(OP(P,o)||O6(P,o)){if(D.clearLine(0),r||OP(P,o)&&m!==d.first||O6(P,o)&&m!==d.last){let O=OP(P,o)?-1:1,z=m;do z=(z+O+p.length)%p.length;while(!F1t(p[z]));g(z)}}else if(lZt(P)&&!Number.isNaN(Number(D.line))){let O=Number(D.line)-1,z=-1,J=p.findIndex(ee=>Cd.isSeparator(ee)?!1:(z++,z===O)),Y=p[J];Y!=null&&F1t(Y)&&g(J),u.current=setTimeout(()=>{D.clearLine(0)},700)}else if(c9e(P))D.clearLine(0);else if(l){let O=D.line.toLowerCase(),z=p.findIndex(J=>Cd.isSeparator(J)||!F1t(J)?!1:J.name.toLowerCase().startsWith(O));z!==-1&&g(z),u.current=setTimeout(()=>{D.clearLine(0)},700)}}),O4(()=>()=>{clearTimeout(u.current)},[]);let y=i.style.message(e.message,s),E;if(i.helpMode!=="never")if(e.instructions){let{pager:P,navigation:D}=e.instructions;E=i.style.help(p.length>n?P:D)}else E=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let x=0,I=f9e({items:p,active:m,renderItem({item:P,isActive:D,index:O}){if(Cd.isSeparator(P))return x++,` ${P.separator}`;let z=i.indexMode==="number"?`${O+1-x}. `:"";if(P.disabled){let ee=typeof P.disabled=="string"?P.disabled:"(disabled)";return i.style.disabled(`${z}${P.name} ${ee}`)}let J=D?i.style.highlight:ee=>ee,Y=D?i.icon.cursor:" ";return J(`${Y} ${z}${P.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(" "),I," ",C?i.style.description(C):"",E].filter(Boolean).join(`
|
|
4969
|
-
`).trimEnd()}${k1t}`});En();Ui();var sce={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"},r$g={[sce.GENERATION_STARTED]:!1,[sce.GENERATION_COMPLETED]:!1,[sce.GENERATION_FAILED]:!0,[sce.VERIFICATION_FAILED]:!0,[sce.SDK_PR_CREATED]:!1,[sce.UPGRADE_APPLIED]:!1,[sce.MAJOR_VERSION_BUMP]:!1};function Qgp(e){return r$g[e]}function zgp(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 Mgp(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 Lgp(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 Vgp(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 Ugp(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?sce.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?sce.VERIFICATION_FAILED:sce.GENERATION_FAILED}var n$g="",i$g="FERN_AUTOMATION_EVENTS_ORIGIN",o$g=3e3,KIi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[i$g]??n$g)),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(),o$g);try{let s={"content-type":"application/json"},a=await oz();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(Vgp(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function _gp(){let{fern_run_id:e,github_run_id:t}=zce();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.121.
|
|
4969
|
+
`).trimEnd()}${k1t}`});En();Ui();var sce={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"},r$g={[sce.GENERATION_STARTED]:!1,[sce.GENERATION_COMPLETED]:!1,[sce.GENERATION_FAILED]:!0,[sce.VERIFICATION_FAILED]:!0,[sce.SDK_PR_CREATED]:!1,[sce.UPGRADE_APPLIED]:!1,[sce.MAJOR_VERSION_BUMP]:!1};function Qgp(e){return r$g[e]}function zgp(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 Mgp(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 Lgp(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 Vgp(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 Ugp(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?sce.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?sce.VERIFICATION_FAILED:sce.GENERATION_FAILED}var n$g="",i$g="FERN_AUTOMATION_EVENTS_ORIGIN",o$g=3e3,KIi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[i$g]??n$g)),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(),o$g);try{let s={"content-type":"application/json"},a=await oz();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(Vgp(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function _gp(){let{fern_run_id:e,github_run_id:t}=zce();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.121.1"}}function Ggp(){return process.env.FERN_AUTOMATION==="true"}var JIi=class{constructor(t,r=KIi.getInstance()){this.reporter=t;this.automationEventApiClient=r;this.context=_gp()}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:zgp(t,r)})}captureSentryForFailure({event:t,context:r,error:n}){if(!(!Qgp(t.event)||t.errorCode==null))return this.reporter.captureException(n,{tags:Mgp(t,r),context:{automation:Lgp(t,r)}})}captureAutomationEventApiEvent(t,r){this.automationEventApiClient.post(t,r)}};jt();function YIi(e,t,r){if(t instanceof iu)return;let n=X2e(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});Ggp()?a$g(i,e,n,s,a):s$g(e,o,n,a)}function s$g(e,t,r,n){e.instrumentPostHogEvent({command:t,properties:{failed:!0,errorCode:r}}),aDt(r)&&e.captureException(n,{tags:{"error.code":r}})}function a$g(e,t,r,n,i){let o=Ugp(e);t.emitAutomationTelemetryEvent({event:o,errorCode:r,attributes:{error_message:n}},{error:i})}jt();function A9e(){return process.env.FERN_DISABLE_TELEMETRY==="true"}function XIi({cliName:e,packageVersion:t,isLocal:r}){return A9e()||r?!1:!(t==="0.0.0")&&(e==="fern"&&!0)}var ZIi=class{sentry;constructor({release:t,telemetry:r}){let n="https://84f58b5e457f06999d92f11ce4b79158@o4509504076185600.ingest.us.sentry.io/4511021546602496";if(XIi(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=$Pt({dsn:n,release:t,environment:i,defaultIntegrations:!1,integrations:[dqe(),PAe(),DAe(),mAe(),BAe()],tracesSampleRate:0,attachStacktrace:!0,sendClientReports:!1}),eDt()}}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):NO(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(()=>{})}};jt();var $Ii=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()}}};ofe();Tt();Bb();jt();En();var mZt=class{result=Vf.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 iu}failWithoutThrowing(t,r,n){this.result=Vf.Failure,!(r instanceof iu)&&(t!=null&&(this.lastFailureMessage=t),zLt({message:t,error:r,logger:this.logger}),YIi(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=Ov(this.logAtLevel.bind(this));addInteractiveTask({name:t,subtitle:r}){let n=new Ozs({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()===Vf.Success}printInteractiveTasks({spinner:t}){return this.subtasks.map(r=>r.print({spinner:t})).join(`
|
|
4970
4970
|
`)}},Ozs=class extends mZt{name;subtitle;constructor({name:t,subtitle:r,...n}){super(n),this.name=t,this.subtitle=r}start(){return super.start(),this.logAtLevelWithOverrides(qn.Info,["Started."],{omitOnTTY:!0}),this.flushLogs(),this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.result===Vf.Success?this.logAtLevelWithOverrides(qn.Info,["Finished."],{omitOnTTY:!0}):this.logAtLevelWithOverrides(qn.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}))),Tj({prefix:this.getIcon({spinner:t}),content:r.join(`
|
|
4971
4971
|
`)})}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 Vf.Success:return r?fe.green("\u25BE "):fe.green("\u2713 ");case Vf.Failure:return r?fe.red("\u25BE "):fe.red("x ")}}}getResult(){if(this.result===Vf.Failure)return Vf.Failure;for(let t of this.subtasks)if(t.getResult()===Vf.Failure)return Vf.Failure;return Vf.Success}};jt();var qgp=ye(_Me(),1);En();function Wgp(e){return e.filter(t=>t.isUpgradeAvailable).length>0}function c$g(e){return(e.cliUpgradeInfo?.isUpgradeAvailable??!1)||Wgp(e.generatorUpgradeInfo)}async function Hgp({cliEnvironment:e,upgradeInfo:t}){if(!c$g(t)||e.packageVersion==t.cliUpgradeInfo?.latestVersion)return;let r=`${fe.underline("Upgrades available")}
|
|
4972
4972
|
|
|
@@ -4975,7 +4975,7 @@ ${r}`}function fIi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
|
|
|
4975
4975
|
Run ${fe.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
4976
4976
|
Run ${fe.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),zot(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function Bzs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!Wgp(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+=`
|
|
4977
4977
|
${await u$g(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+fe.dim(a.currentVersion)+fe.reset(" \u2192 ")+fe.green(a.latestVersion);return i+=`
|
|
4978
|
-
`,n?zot(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function u$g(e){let r=await new qgp.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}co();mfe();jt();async function l$g({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await Kgp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=kMe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await P1({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await Kgp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=kMe(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await P1({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function Kgp({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 KL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?_A(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 Jgp(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;try{c=H1(a.latestVersion,a.previousVersion)}catch{throw new S({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:S.Code.ConfigError})}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 evi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await l$g({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(...Jgp(u,c,t.logger));else s.push(...Jgp(a.versions,void 0,t.logger))}return s}jt();Q0r();async function Tge({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await bje(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 Ygp=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],tvi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=qn.Info;isLocal;stdoutRedirector=new $Ii;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await O_t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new e3t(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 ZIi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new JIi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.121.
|
|
4978
|
+
`,n?zot(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function u$g(e){let r=await new qgp.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}co();mfe();jt();async function l$g({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await Kgp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=kMe(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await P1({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await Kgp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=kMe(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await P1({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function Kgp({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 KL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?_A(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 Jgp(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;try{c=H1(a.latestVersion,a.previousVersion)}catch{throw new S({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:S.Code.ConfigError})}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 evi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await l$g({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(...Jgp(u,c,t.logger));else s.push(...Jgp(a.versions,void 0,t.logger))}return s}jt();Q0r();async function Tge({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await bje(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 Ygp=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],tvi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=qn.Info;isLocal;stdoutRedirector=new $Ii;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await O_t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new e3t(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 ZIi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new JIi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.121.1"}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 iu}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof iu)&&(zLt({message:t,error:r,logger:this.logger}),YIi(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)+`
|
|
4979
4979
|
`)}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 Hgp({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
4980
4980
|
`)||(r+=`
|
|
4981
4981
|
`),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=GFi(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 mZt(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 iu}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=Ov((t,...r)=>this.log(t,...r));stderr=Ov((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=Xgp(r),i=1+(this.longestWorkspaceName!=null?Xgp(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=Ygp[this.numTasks++%Ygp.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===Vf.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=>vw.indexOf(i.level)>=vw.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===qn.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 Tge({cliEnvironment:this.environment,includePreReleases:t}),n=H1(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await evi({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 Tzs({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(`
|
package/package.json
CHANGED