fern-api 5.167.0 → 5.168.0
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 +9 -9
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -3456,7 +3456,7 @@ ${pnl.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&BJo(th
|
|
|
3456
3456
|
`).length),this}updateBottomBar(t){return IHt(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+`
|
|
3457
3457
|
`}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&&xnn(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var am=Ae(_4(),1),Bil=Ae(Z7t(),1);var nin=Ae(_4(),1),Oil=Ae(Z7t(),1),iin=function(e,t,r){return typeof e[t]!="function"?(0,nin.of)(e):(0,nin.from)((0,Oil.default)(e[t])(r).then(n=>(e[t]=n,e)))};var Pil={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}},Aft=class extends d5e{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,am.from)(t):(0,am.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,am.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,am.from)([t]),this.process=n.pipe((0,am.concatMap)(this.processQuestion.bind(this)),(0,am.publish)()),this.process.connect(),this.process.pipe((0,am.reduce)((i,o)=>(Pil.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,am.defer)(()=>(0,am.of)(t).pipe((0,am.concatMap)(this.setDefaultType.bind(this)),(0,am.concatMap)(this.filterIfRunnable.bind(this)),(0,am.concatMap)(()=>iin(t,"message",this.answers)),(0,am.concatMap)(()=>iin(t,"default",this.answers)),(0,am.concatMap)(()=>iin(t,"choices",this.answers)),(0,am.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,am.defer)(()=>(0,am.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,am.defer)(()=>(0,am.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&Pil.get(this.answers,t.name)!==void 0)return am.EMPTY;if(t.when===!1)return am.EMPTY;if(typeof t.when!="function")return(0,am.of)(t);let{answers:r}=this;return(0,am.defer)(()=>(0,am.from)((0,Bil.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,am.filter)(n=>n!=null)))}};function Ril(e){let t=function(r,n){let i;try{i=new Aft(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",CHt),this.registerPrompt("input",c5e),this.registerPrompt("number",xHt),this.registerPrompt("confirm",wHt),this.registerPrompt("rawlist",SHt),this.registerPrompt("expand",THt),this.registerPrompt("checkbox",OHt),this.registerPrompt("password",PHt),this.registerPrompt("editor",zHt)},t.restoreDefaultPrompts(),t}var ZYo=Ril();function tah(e,t){ZYo.registerPrompt(e,t)}function rah(){ZYo.restoreDefaultPrompts()}var nah={prompt:ZYo,ui:{BottomBar:QHt,Prompt:Aft},createPromptModule:Ril,registerPrompt:tah,restoreDefaultPrompts:rah,Separator:SM},Pu=nah;var iah=["prod","pre-prod","beta","dev","local"];function oah(e){return iah.some(t=>t===e)}function FJ(e="prod"){let t=e?.trim();return t!=null&&oah(t)?t:"local"}function oin(){let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";return e==null||e.trim().length===0?!1:process.env.FERN_DISABLE_TELEMETRY!=="true"}var yft=require("path");function kil(){let e=sah();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function sah(e=process.argv[1]?(0,yft.dirname)(process.argv[1]):process.cwd(),t=yft.sep==="\\"){let r=t?Dil(e):e;return n=>{if(!n)return;let i=t?Dil(n):n,{dir:o,base:s,ext:a}=yft.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 Dil(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var nO={};te(nO,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>Cin,DOMExceptionCoercer:()=>hXo,EXCEPTION_STEP_INTERNAL_FIELDS:()=>KHt,ErrorCoercer:()=>GHt,ErrorEventCoercer:()=>gXo,ErrorPropertiesBuilder:()=>VHt,EventCoercer:()=>AXo,ExceptionStepsBuffer:()=>IXo,ObjectCoercer:()=>WHt,PrimitiveCoercer:()=>HHt,PromiseRejectionEventCoercer:()=>yXo,ReduceableCache:()=>bXo,StringCoercer:()=>qHt,chromeStackLineParser:()=>pXo,createDefaultStackParser:()=>mXo,createStackParser:()=>Iol,geckoStackLineParser:()=>fXo,getInjectedReleaseId:()=>Ech,getUtf8ByteLength:()=>Col,nodeStackLineParser:()=>hol,opera10StackLineParser:()=>fol,opera11StackLineParser:()=>dol,resolveExceptionStepsConfig:()=>EXo,reverseAndStripFrames:()=>Eol,stripReservedExceptionStepFields:()=>Ach,winjsStackLineParser:()=>pol});var OM=(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.AiQueue="ai_queue",e.AiCaptureQueue="ai_capture_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.PushRegistered="push_registered",e.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysInProgress="surveys_in_progress",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e})({});function u1e(e){let t=[];return JSON.stringify(e,function(r,n){if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;t.length>0&&t[t.length-1]!==this;)t.pop();if(t.includes(n))return"[Circular]";t.push(n)}return n}})??"null"}var aah=Array.isArray,Nil=Object.prototype,lqv=Nil.hasOwnProperty,sin=Nil.toString,V4=aah||function(e){return sin.call(e)==="[object Array]"};var MHt=e=>e===Object(e)&&!V4(e);var Vhe=e=>e===void 0,rk=e=>sin.call(e)=="[object String]",$Yo=e=>rk(e)&&e.trim().length===0,eXo=e=>e===null,NJ=e=>Vhe(e)||eXo(e),bft=e=>sin.call(e)=="[object Number]"&&e===e;var jil=e=>sin.call(e)==="[object Boolean]";function ain(e){return e===null||typeof e!="object"}function m5e(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function l1e(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Mil(e,Error)}}function zil(e){return m5e(e,"ErrorEvent")}function Eft(e){return"u">typeof Event&&Mil(e,Event)}function Qil(e){return m5e(e,"Object")}function Mil(e,t){try{return e instanceof t}catch{return!1}}var cah=["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","pinterestbot","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"],cin=new Map,uah=256;function lah(e,t){let r="";for(let n=0;n<t.length;n++){let i=t[n];r+=i.length+":"+i}return e.length+":"+e+"|"+t.length+":"+r}var Lil=function(e,t=[]){if(!e)return!1;let r=lah(e,t),n=cin.get(r);if(n!==void 0)return n;let i=e.toLowerCase(),o=cah.concat(t).some(s=>i.indexOf(s.toLowerCase())!==-1);return cin.size>=uah&&cin.clear(),cin.set(r,o),o};function LHt(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),bft(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),LHt(i??r,t,r,n))}var pah=864e5,fah=1,dah=10;function _il(e={}){return{refillRate:e.exceptionRateLimiterRefillRate??e.__exceptionRateLimiterRefillRate??fah,bucketSize:e.exceptionRateLimiterBucketSize??e.__exceptionRateLimiterBucketSize??dah}}var uin=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=LHt(t.bucketSize,0,100,t._logger),this._refillRate=LHt(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=LHt(t.refillInterval,0,pah,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 lin="0123456789abcdef",pin=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+=lin.charAt(this.bytes[r]>>>4),t+=lin.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+=lin.charAt(this.bytes[r]>>>4),t+=lin.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}},tXo=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??mah()}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 pin.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,pin.ofInner(t)}},mah=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),Uil,jN=()=>hah().toString(),hah=()=>(Uil||(Uil=new tXo)).generate();var fin=class{add(t){let r=jN(),n=++this.nextId;return this.promiseByIds[r]={id:n,promise:t},t.catch(()=>{}).finally(()=>{delete this.promiseByIds[r]}),t}async join(){let t=Object.values(this.promiseByIds).map(n=>n.promise),r=t.length;for(;r>0;)await Promise.all(t),t=Object.values(this.promiseByIds).map(n=>n.promise),r=t.length}getPromises(t=[],r=this.nextId){let n=new Set(t);return Object.values(this.promiseByIds).filter(i=>i.id<=r&&!n.has(i.promise)).map(i=>i.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}};function gah(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var Vil=(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=>Vil(`${e} ${o}`,t,r)}},Aah=e=>e();function Gil(e,t=Aah){return Vil(e,t,gah())}var vft="Mobile",min="iOS",Ift="Android",Jil="Tablet",wqv=Ift+" "+Jil;var bah="Apple",Sqv=bah+" Watch",Yil="Safari",hin="BlackBerry",Xil="Samsung",Eah=Xil+"Browser",Iah=Xil+" Internet",gin="Chrome",vah=gin+" OS",Cah=gin+" "+min,Zil="Internet Explorer",xah=Zil+" "+vft,iXo="Opera",Tqv=iXo+" Mini",$il="Edge",wah="Microsoft "+$il,oXo="Firefox",Sah=oXo+" "+min,sXo="Nintendo",aXo="PlayStation",din="Xbox",Tah=Ift+" "+vft,Oah=vft+" "+Yil,_Ht="Windows",Pah=_Ht+" Phone";var eol="Generic",Oqv=eol+" "+vft.toLowerCase(),Pqv=eol+" "+Jil.toLowerCase(),Bah="Konqueror",Rah="Oculus Browser",qil="Vivaldi",Dah="Yandex",Wil="Whale",kah="DuckDuckGo",Fah="Pale Moon",Hil="Waterfox",Kil="Brave",tol="Claude",rol="Codex",nol="ChatGPT",Nah="Google Search App",E0="(\\d+(\\.\\d+)?)",rXo=new RegExp("Version/"+E0),nXo=new RegExp("("+tol+"|"+rol+"|"+nol+")\\/"+E0);var Bqv=new RegExp(din,"i"),Rqv=new RegExp(aXo+" \\w+","i"),Dqv=new RegExp(sXo+" \\w+","i"),jah=new RegExp(hin+"|PlayBook|BB10","i"),zah={"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 kqv={[xah]:[new RegExp("rv:"+E0)],[wah]:[new RegExp($il+"?\\/"+E0)],[gin]:[new RegExp("("+gin+"|CrMo)\\/"+E0)],[Cah]:[new RegExp("CriOS\\/"+E0)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+E0)],[Yil]:[rXo],[Oah]:[rXo],[iXo]:[new RegExp("("+iXo+"|OPR)\\/"+E0)],[oXo]:[new RegExp(oXo+"\\/"+E0)],[Sah]:[new RegExp("FxiOS\\/"+E0)],[Bah]:[new RegExp("Konqueror[:/]?"+E0,"i")],[hin]:[new RegExp(hin+" "+E0),rXo],[Tah]:[new RegExp("android\\s"+E0,"i")],[Iah]:[new RegExp(Eah+"\\/"+E0)],[Rah]:[new RegExp("OculusBrowser\\/"+E0)],[qil]:[new RegExp(qil+"\\/"+E0)],[Dah]:[new RegExp("YaBrowser\\/"+E0)],[Wil]:[new RegExp(Wil+"\\/"+E0)],[Kil]:[new RegExp(Kil+"\\/"+E0)],[tol]:[nXo],[rol]:[nXo],[nol]:[nXo],[kah]:[new RegExp("(DuckDuckGo|Ddg)\\/"+E0)],[Fah]:[new RegExp("PaleMoon\\/"+E0)],[Hil]:[new RegExp(Hil+"\\/"+E0)],[Nah]:[new RegExp("GSA\\/"+E0)],[Zil]:[new RegExp("(rv:|MSIE )"+E0)],Mozilla:[new RegExp("rv:"+E0)]};var Fqv=[[new RegExp(din+"; "+din+" (.*?)[);]","i"),e=>[din,e&&e[1]||""]],[new RegExp(sXo,"i"),[sXo,""]],[new RegExp(aXo,"i"),[aXo,""]],[jah,[hin,""]],[new RegExp(_Ht,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[Pah,""];if(new RegExp(vft).test(t)&&!/IEMobile\b/.test(t))return[_Ht+" "+vft,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=zah[n]||"";return/arm/i.test(t)&&(i="RT"),[_Ht,i]}return[_Ht,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[min,t.join(".")]}return[min,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=Vhe(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+Ift+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Ift+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[Ift,t.join(".")]}return[Ift,""]}],[/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/,[vah,""]],[/Linux|debian/i,["Linux",""]]];var Ain="[Circular]",yin="[Truncated]",L8="[Unserializable]",iol="[Function]",zqv=Date.prototype.getTime,Qqv=Date.prototype.toISOString;function mne(e){let t="";for(let r=0;r<e.length;r++){let n=e.charCodeAt(r);if(n>=55296&&n<=56319){let i=e.charCodeAt(r+1);i>=56320&&i<=57343?(t+=e[r]+e[r+1],r++):t+="\uFFFD"}else t+=n>=56320&&n<=57343?"\uFFFD":e[r]}return t}function Ghe(e,t){if(!t)return e;let r=[];try{r=Object.keys(t)}catch{r=[]}for(let n of r){let i;try{i=t[n]}catch{i=L8}Object.defineProperty(e,n,{value:i,enumerable:!0,writable:!0,configurable:!0})}return e}function cXo(e,t=Date.now()){if(typeof e!="string"||!e)return;let r=e.trim(),n=/^\d+\s*,/.test(r)?r.slice(0,r.indexOf(",")).trim():r;if(/^\d+$/.test(n)){let s=1e3*Math.min(Number(n),300);return s>0?s:void 0}if(!/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*[ ,]/.test(n))return;let i=/^\w{3} \w{3} /.test(n)?n+" GMT":n,o=Date.parse(i)-t;if(!(!Number.isFinite(o)||o<=0))return Math.min(o,3e5)}var h5e=class{record(t){if(t.kind==="too-large")return;if(t.kind!=="retry-later")return void this.reset();if(!t.retryAfterMs)return;let r=this.isOpen(),n=Date.now(),i=Math.min(t.retryAfterMs,3e5);if(!r){this._installedAt=n,this._until=n+i;return}this._until=Math.max(this._until,Math.min(n+i,this._installedAt+3e5))}remainingMs(){let t=Date.now();if(t<this._installedAt-5e3)return this.reset(),0;let r=Math.min(3e5,Math.max(0,this._until-t));return r===0&&this.reset(),r}isOpen(){return this.remainingMs()>0}reset(){this._until=0,this._installedAt=0}constructor(){this._until=0,this._installedAt=0}};var ool="utf8",Qah=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Mah(e){return typeof e=="string"&&Qah.test(e)}function g5e(e,t){return Mah(e)?e:t()}function Cft(e,t){let r=new Error(t);try{Object.defineProperty(r,"name",{value:e,writable:!0,enumerable:!0,configurable:!0})}catch{}return r}function sol(e){return e?.replace(/\/+$/,"")}async function aol(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 uXo(){return new Date().toISOString()}function zN(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}async function p1e(e,t,r){let n;try{return await Promise.race([e,new Promise((i,o)=>{n=zN(()=>{try{r?.(),i()}catch(s){o(s)}},t)})])}finally{clearTimeout(n)}}var col=e=>e&&typeof e.then=="function";function UHt(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var bin,uol,Ein;function lol(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return Ein&&r.length===uol||(uol=r.length,Ein=r.reduce((n,i)=>{bin||(bin={});let o=bin[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,bin[i]=[u,l];break}}}return n},{})),Ein}var lXo=50,Lah=1e3,_ah=100,Uah=4,VHt=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&&V4(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;if(t.stack!=""&&t.stack!=null)try{i=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?r.skipFirstLines:0),r.chunkIdMap)}catch{}return{...t,cause:n,stack:i,errors:t.errors?.map(o=>this.parseStacktrace(o,r))}}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=[],i=(o,s,a)=>{let c=n.length,u=s===void 0?{type:typeof r.type=="string"&&r.type.length>0?r.type:"generic",...typeof r.handled=="boolean"?{handled:r.handled}:r.handled===void 0?{handled:!0}:{},synthetic:typeof r.synthetic=="boolean"?r.synthetic:o.synthetic,exception_id:c}:{type:"chained",source:a,synthetic:o.synthetic,exception_id:c,parent_id:s},l={type:o.type,value:o.value,mechanism:u};o.stack&&(l.stacktrace={type:"raw",frames:o.stack}),n.push(l),o.cause&&i(o.cause,c,"cause");for(let p of o.errors??[])i(p,c,"member")};return i(t),n}buildParsingContext(t){return{chunkIdMap:lol(this.stackParser),skipFirstLines:t.skipFirstLines??1}}getAggregateErrors(t){try{if(l1e(t)){let r=Object.getPrototypeOf(t);for(let n=0;r&&n<_ah;n++){let i=Object.getOwnPropertyDescriptor(r,"constructor")?.value;if(typeof i=="function"&&i.name==="AggregateError"){let o=t.errors;return V4(o)?o:void 0}r=Object.getPrototypeOf(r)}}}catch{}}buildCoercingContext(t,r,n=0){let i=0,o=0,s=!1,a=new Set,c=[],u={},l=(f,m,g=0)=>{let A=p(m,g),y=A.apply;if(A.apply=R=>{c.push(f);try{return y(R)}finally{c.pop()}},g>Uah||g>0&&c.indexOf(f)!==-1)return this.coerceFallback(A);let I=typeof f=="object"&&f!==null||typeof f=="function";if(g===0&&i>=lXo||I&&a.has(f))return;I&&a.add(f),g===0&&i++;let x=this.getAggregateErrors(f);s||=!!x;let v;try{if(v=this.applyCoercers(f,A),!v)throw u}catch(R){if(R===u){g===0&&i--;return}if(!s)throw R;v=this.coerceFallback(A)}if(!x||i>=lXo)return v;let w;try{w=x.length}catch{return v}if(!Number.isInteger(w)||w<0||w>4294967295)return v;let B=[];for(let R=0;i<lXo&&o<Lah&&R<w;R++){o++;let D;try{D=A.next(x[R])}catch{i++,D=this.coerceFallback(p(m+1))}D&&B.push(D)}return{...v,errors:B}},p=(f,m=0)=>({...r,syntheticException:f==0?r.syntheticException:void 0,mechanism:f==0?t:{},apply:g=>{let A=l(g,f,m+1);if(!A)throw u;return A},next:g=>l(g,f+1)}),d=p(n);return{...d,apply:f=>l(f,n)??this.coerceFallback(d)}}};var tR="?",Vah="<anonymous>",Gah=/^([a-z][a-z0-9.+-]+):/i,qah=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function Wah(e){if(!e||e===Vah)return!1;let t=Gah.exec(e);return!t||qah.includes(t[1].toLowerCase())}function hne(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?tR:r,in_app:Wah(t)};return Vhe(n)||(o.lineno=n),Vhe(i)||(o.colno=i),o}var Iin=(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]:tR,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var Hah=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Kah=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Jah=/\((\S*)(?::(\d+))(?::(\d+))\)/,pXo=(e,t)=>{let r=Hah.exec(e);if(r){let[,i,o,s]=r;return hne(t,i,tR,+o,+s)}let n=Kah.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Jah.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=Iin(n[1]||tR,n[2]);return hne(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var Yah=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Xah=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,fXo=(e,t)=>{let r=Yah.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=Xah.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]||tR;return[o,i]=Iin(o,i),hne(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var Zah=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,pol=(e,t)=>{let r=Zah.exec(e);return r?hne(t,r[2],r[1]||tR,+r[3],r[4]?+r[4]:void 0):void 0};var $ah=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,fol=(e,t)=>{let r=$ah.exec(e);return r?hne(t,r[2],r[3]||tR,+r[1]):void 0},ech=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,dol=(e,t)=>{let r=ech.exec(e);return r?hne(t,r[5],r[3]||r[4]||tR,+r[1],+r[2]):void 0};var tch=/^\s*[-]{4,}$/,rch=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,nch=/^Promise\.(?:all|any)$/,ich=/^index \d+$/,och="node:internal/promise",hol=(e,t)=>{let r=e.match(rch);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||tR,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]),nch.test(o)&&ich.test(c||"")&&(c=och),{filename:c?decodeURI(c):void 0,module:void 0,function:o,lineno:mol(r[3]),colno:mol(r[4]),in_app:sch(c||"",u),platform:t}}if(e.match(tch))return{filename:e,platform:t}};function sch(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 mol(e){return parseInt(e||"",10)||void 0}var gol=/\(error: (.*)\)/,Aol=50,ach=10,cch=1e3;function dXo(e,t){return e.filename===t.filename&&e.function===t.function&&e.module===t.module&&e.lineno===t.lineno&&e.colno===t.colno}function uch(e){for(let t=1;t<=ach;t++){let r=e.length-2*t;if(r<0)break;let n=!0;for(let i=0;i<t;i++){let o=e[r+i];if(!dXo(o,e[r+t+i])){n=!1;break}}if(n){for(let i=0;i<t;i++)e[r+i]=e[r+t+i];return e.length=r+t,{start:r,length:t}}}}function lch(e,t){let r=t.start+t.length,n=bol(e,t);n&&e.splice(r+n===e.length?r:t.start,n)}function yol(e,t){let r=t.start;for(;r>0&&dXo(e[r-1],e[r-1+t.length]);)r--;return t.start-r}function bol(e,t){let r=t.start+t.length,n=r;for(;n<e.length&&dXo(e[n],e[n-t.length]);)n++;return n-r}function pch(e,t){let r=t[0],n=e.length-(r?yol(e,r):0);for(let i of t)n-=bol(e,i);return n}function fch(e){let t=e.map(n=>`${n.function}|${n.filename}|${n.lineno}|${n.colno}|${n.module}`),r=0;for(let n=1;n<t.length;n++)dch(t,n,r)&&(r=n);e.push(...e.splice(0,r))}function dch(e,t,r){for(let n=0;n<e.length;n++){let i=e[(t+n)%e.length],o=e[(r+n)%e.length];if(i!==o)return i<o}return!1}function Eol(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,Aol).map(r=>({...r,filename:r.filename||mch(t).filename,function:r.function||tR}))}function mch(e){return e[e.length-1]||{}}function mXo(){return Iol("web:javascript",pXo,fXo)}function Iol(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
3458
3458
|
`),s=Math.min(o.length,n+cch),a=[];for(let l=n;l<s;l++){let p=o[l];if(p.length>1024)continue;let d=gol.test(p)?p.replace(gol,"$1"):p;if(!d.match(/\S*Error: /)){for(let f of t){let m=f(d,e);if(m){i.push(m);let g=uch(i);if(g){for(let A=a.length-1;A>=0;A--){let y=a[A];if(y.start+y.length<=g.start)break;a.pop()}a.push(g)}break}}if(pch(i,a)>=Aol)break}}let c=[...a].sort((l,p)=>p.start-l.start),u=c[c.length-1];if(u){let l=yol(i,u);i.splice(u.start-l,l);for(let p of c)p.start-=l}for(let l of c)lch(i,l);return a.some(l=>l.start===0&&i.length===l.length)&&fch(i),Eol(i)}}var hXo=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=rk(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 m5e(t,"DOMException")}isDOMError(t){return m5e(t,"DOMError")}};var GHt=class{match(t){return l1e(t)}coerce(t,r){let n=this.getStack(t),i=n===void 0?r.syntheticException?.stack:void 0,o=!!i;return{type:this.getType(t),value:this.getMessage(t,r),stack:n??i,cause:t.cause?r.next(t.cause):void 0,synthetic:o}}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){try{let r=t.stacktrace;if(typeof r=="string"&&r.length>0)return r;let n=t.stack;return typeof n=="string"&&n.length>0?n:void 0}catch{return}}};var gXo=class{match(t){if(!zil(t))return!1;let r=t;return r.error!=null||this._hasUsableMessage(r)}coerce(t,r){if(t.error!=null)return r.apply(t.error);let n=r.apply(t.message);return{...n,stack:this._buildLocationStack(t)??n.stack,synthetic:!0}}_hasUsableMessage(t){return rk(t.message)&&t.message.length>0}_buildLocationStack(t){let r=t,n=r.lineno??0,i=r.colno??0;if(!(!rk(r.filename)||r.filename.length===0)&&n!==0)return`Error
|
|
3459
|
-
at ${r.filename}:${n}:${i}`}};var hch=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,qHt=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(hch);return i&&(r=i[1],n=i[2]),[r,n]}};var vol=["fatal","error","warning","log","info","debug"];function vin(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 WHt=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:this.getStack(t)??r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){if(Eft(t))return t.constructor.name;let r="name"in t?t.name:void 0;return rk(r)&&!$Yo(r)?r:"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=vin(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return rk(t)&&!$Yo(t)&&vol.indexOf(t)>=0}getStack(t){try{return rk(t.stacktrace)&&t.stacktrace.length>0?t.stacktrace:rk(t.stack)&&t.stack.length>0?t.stack:void 0}catch{return}}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(l1e(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var AXo=class{match(t){return Eft(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${vin(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var HHt=class{match(t){return ain(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var yXo=class{match(t){return m5e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Eft(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 ain(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 bXo=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 KHt={MESSAGE:"$message",TIMESTAMP:"$timestamp"},gch=new Set([KHt.MESSAGE,KHt.TIMESTAMP]),Cin={enabled:!0,max_bytes:32768};function EXo(e){return e?{enabled:e.enabled??Cin.enabled,max_bytes:ych(e.max_bytes,Cin.max_bytes)}:{...Cin}}function Ach(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>gch.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var IXo=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=EXo(t)}setConfig(t){this._config=EXo(t),this._trimToMaxBytes()}add(t){let r=bch(t);if(!r)return;let n=Col(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 ych(e,t){if(!bft(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function bch(e){let t;try{t=u1e(e)}catch{return}try{let r=JSON.parse(t);if(!MHt(r))return;let n=r,i=n[KHt.MESSAGE],o=n[KHt.TIMESTAMP];return!rk(i)||i.trim().length===0||!rk(o)&&!bft(o)?void 0:{step:n,json:t}}catch{return}}function Col(e){if("u">typeof TextEncoder)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}function Ech(){let e=globalThis._posthogReleaseId;return typeof e=="string"&&e.length>0?e:void 0}var vXo=e=>{if("flags"in e){let t=xol(e.flags),r=wol(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,xft(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,Ich(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function Ich(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 xol=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,JHt(r)]).filter(([,t])=>t!==void 0)),wol=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?xft(n):void 0]}))},JHt=e=>e===void 0?void 0:e.variant??e.enabled,xft=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var Sol=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","oppref","irclid","_kx"],vch=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain",...Sol,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server","$react_native_version"],YHt=(e,t=[])=>{let r={},n=i=>{e[i]!==void 0&&(r[i]=e[i])};return vch.forEach(n),t.forEach(n),r};var xin=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)}};function CXo(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var xch="NativeGzipValidationError",wch=31,Sch=139,Tch=8,Och=e=>e.length>=2&&e[0]===wch&&e[1]===Sch;var XHt,Pch=()=>{if(XHt)return XHt;XHt=[];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;XHt[e]=t>>>0}return XHt},Bch=e=>{let t=Pch(),r=4294967295;for(let n=0;n<e.length;n++)r=t[(r^e[n])&255]^r>>>8;return(4294967295^r)>>>0},win=e=>{throw Cft(xch,`Native gzip produced invalid output: ${e}`)},Rch=async(e,t)=>{e.size<18&&win("too-short");let r=new Uint8Array(await e.slice(0,10).arrayBuffer());(!Och(r)||r[2]!==Tch)&&win("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());n.getUint32(0,!0)!==Bch(t)&&win("invalid-crc");let i=t.length>>>0;n.getUint32(4,!0)!==i&&win("invalid-size")};async function ZHt(e,t=!0,r){try{let n=new TextEncoder().encode(e),i=new globalThis.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 Rch(c,n),c}catch(n){if(r?.rethrow)throw n;return t&&console.error("Failed to gzip compress data",n),null}}var _8=class extends Error{constructor(t,r,n,i){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.responseBodyDeadline=n,this.abortController=i,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return cXo(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let t=Cft("AbortError","Response body read timed out");this.cancelResponseBody(t),this.responseBodyTextPromise=Promise.reject(t)}else{let t=new Promise((n,i)=>{this.responseBodyTimer=zN(()=>{this._bodyReadTimedOut=!0;let o=Cft("AbortError","Response body read timed out");i(o),this.cancelResponseBody(o)},this.responseBodyDeadline-Date.now())}),r;try{r=Promise.resolve(this.response.text())}catch(n){r=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([r,t]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(t=>JSON.parse(t))}cancelResponseBody(t){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(t),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},qhe=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};var Rol=(e,t)=>{for(let r of Object.keys(t))(r.startsWith("$feature/")||r==="$active_feature_flags")&&(e[r]=t[r])};async function Tol(e){if(e instanceof _8){let t="";try{t=await e.text}catch{e.bodyReadTimedOut&&(t="<response body read timed out>")}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 Dch(e){return typeof e=="object"&&(e instanceof _8||Dol(e))}function Dol(e){return e instanceof qhe}function kch(e){if(e instanceof _8)return e.status===502||e.status===504;if(!(e instanceof qhe))return!1;let t=e.error;return(t?.code??t?.cause?.code)!=="ECONNREFUSED"}var Ool=10485760;function Pol(e){try{return typeof e!="string"?e instanceof Uint8Array?e.byteLength:e.size:"u">typeof Buffer?Buffer.byteLength(e,ool):new TextEncoder().encode(e).length}catch{return 0}}function wft(e){return typeof e=="object"&&e instanceof _8&&e.status===413}function Sin(e){return e instanceof _8?e.status===408||e.status===429||e.status>=500:Dol(e)}function Bol(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var xXo="default",$Ht=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new VHt([new GHt,new WHt,new qHt,new HHt],mXo())}getEvaluationRuntime(){}constructor(t,r={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new fin,this._events=new xin,this._isInitialized=!1;let n=typeof t=="string"?t.trim():"",i=typeof r.host=="string"?r.host.trim():"",o=!n;this._logger=Gil("[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=sol(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:Sin},this.requestTimeout=r.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=r.featureFlagsRequestTimeoutMs??3e3,this.featureFlagsRequestMaxRetries=r.featureFlagsRequestMaxRetries??1,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=!CXo()||(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(OM.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(OM.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(OM.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){let r=t.properties||{},n={...r,...this.getCommonEventProperties()};return Rol(n,r),t.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=YHt(n)),{distinct_id:t.distinct_id,event:t.event,properties:n}}isMinimalFlagCalledEventsEnabled(){return!1}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 groupIdentifyStatelessImmediate(t,r,n,i,o,s){let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});await this.sendImmediate("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,{type:"required",consume:i=>i.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).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=this.getEvaluationRuntime();l&&(u.evaluation_runtime=l);let p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,p,{type:"required",consume:d=>d.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:kch},this.featureFlagsRequestTimeoutMs).then(d=>({success:!0,response:vXo(d)})).catch(d=>(this._events.emit("error",d),{success:!1,error:this.categorizeRequestError(d)}))}categorizeRequestError(t){if(t instanceof _8)return{type:"api_error",statusCode:t.status};if(t instanceof qhe){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=JHt(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={geoip_disable:o??this.disableGeoip};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,{type:"required",consume:o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);return this._logger.error(a),this._events.emit("error",new Error(s)),Promise.resolve(void 0)}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(OM.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(OM.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(OM.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}getQueueRouteKey(t){return xXo}persistedQueueKeyForRoute(t){return OM.Queue}getActiveQueueRoutes(){return[xXo]}getRouteQueue(t){return this.getPersistedProperty(this.persistedQueueKeyForRoute(t))||[]}enqueue(t,r,n,i){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let o=this.prepareMessage(r,n);if(o=this.processBeforeEnqueue(o),o===null)return;o=this.normalizeMessage(o);let s=this.persistedQueueKeyForRoute(i??this.getQueueRouteKey(o)),a=this.getPersistedProperty(s)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:o}),this.setPersistedProperty(s,a),this._events.emit(t,o),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=zN(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n,i){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 o=this.prepareMessage(r,n);if(o=this.processBeforeEnqueue(o),o!==null){o=this.normalizeMessage(o);try{await this.sendBatch([o],void 0,i??this.getQueueRouteKey(o))}catch(s){this._events.emit("error",s)}}}normalizeMessage(t){let{type:r,library:n,library_version:i,...o}=t,s=Bol(o.properties)?o.properties:void 0;return n!==void 0&&s?.$lib===void 0&&(s={...s||{},$lib:n}),i!==void 0&&s?.$lib_version===void 0&&(s={...s||{},$lib_version:i}),s&&(o.properties=s),o.uuid=g5e(o.uuid,jN),o}normalizeTimestampForWire(t){let r=t instanceof Date?t:typeof t=="string"?new Date(t):null;if(!r||Number.isNaN(r.getTime()))return t;let n=r.toISOString(),i=typeof t=="string"?t.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return i&&i.length>3?n.replace(/\.\d{3}Z$/,`.${i}Z`):n}prepareMessage(t,r){let n={...t,timestamp:r?.timestamp?r?.timestamp:uXo(),uuid:g5e(r?.uuid,jN)};return(r?.disableGeoip??this.disableGeoip)&&(Bol(n.properties)||(n.properties={}),n.properties.$geoip_disable=!0),n.distinctId&&(n.distinct_id=n.distinctId,delete n.distinctId),n}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.pendingFlushPromise||this.flushAutomatic().catch(async t=>{await Tol(t)})}flushAutomatic(){return this.flush()}async waitForPendingPromises(t,r=[]){let n=r.filter(o=>!!o),i=0;for(;;){let o=this.promiseQueue.getPromises([...n,...this.flushPromises],t);if(o.length===0)return;i>0&&this._logger.debug(`flush() re-checking ${o.length} pending promise(s) before flushing`),await Promise.all(o.map(s=>s.catch(()=>{}))),i++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(t){if(this.disabled)return Promise.resolve();if(!t&&this.pendingFlushPromise)return this.pendingFlushPromise;let r=this.flushPromise,n=this.promiseQueue.maxId,i=Promise.resolve().then(()=>{if(t)return this.waitForPendingPromises(n,[r,i])}).then(()=>UHt([r])).then(()=>(this.pendingFlushPromise===i&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=i,this.flushPromise=i,this.flushPromises.add(i),this.addPendingPromise(i),UHt([i]).then(()=>{this.flushPromises.delete(i),this.pendingFlushPromise===i&&(this.pendingFlushPromise=null),this.flushPromise===i&&(this.flushPromise=null)}),i}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}compressPayload(t){return ZHt(t,this.isDebug)}getBatchEndpointPath(t){return"/batch/"}async sendBatch(t,r,n=xXo){let i={api_key:this.apiKey,batch:t.map(u=>{if(!u)return u;let l=this.normalizeTimestampForWire(u.timestamp);return l===u.timestamp?u:{...u,timestamp:l}}),sent_at:uXo()};this.historicalMigration&&(i.historical_migration=!0);let o=u1e(i),s=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(o),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||o};await this.fetchWithRetry(s,c,{type:"successful-write"},r)}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getActiveQueueRoutes();if(!t.some(i=>this.getRouteQueue(i).length>0))return;let r=[],n;for(let i of t)try{await this._flushRoute(i,r)}catch(o){n===void 0&&(n=o)}if(n!==void 0)throw n;this._events.emit("flush",r)}async _flushRoute(t,r){let n=this.persistedQueueKeyForRoute(t),i=this.getPersistedProperty(n)||[];if(!i.length)return;let o=i.length,s=0;for(;i.length>0&&s<o;){let a=i.slice(0,this.maxBatchSize),c=a.map(p=>p.message===void 0?p.message:this.normalizeMessage(p.message)),u=async()=>{let p=this.getPersistedProperty(n)||[],d=[...a],f=p.filter(m=>{let g=m.message?.uuid,A=d.findIndex(y=>y===m||typeof g=="string"&&g.length>0&&y.message?.uuid===g);return A===-1?!0:(d.splice(A,1),!1)});this.setPersistedProperty(n,f),i=f,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},l={retryCheck:p=>wft(p)?!1:Sin(p)};try{await this.sendBatch(c,l,t)}catch(p){if(wft(p)&&c.length>1){this.maxBatchSize=Math.max(1,Math.floor(c.length/2)),this._logger.warn(`Received 413 when sending batch of size ${c.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw p instanceof qhe||await u(),this._events.emit("error",p),p}await u(),r.push(...c),s+=c.length}}async _sendOtlpBatch({path:t,auth:r,payload:n}){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let i;try{i=JSON.stringify(n)}catch(l){return this.logMsgIfDebug(()=>console.warn(`[PostHog] Could not serialize a ${t} batch; reporting it as too large`,l)),{kind:"too-large",measuredLocally:!0}}let o=Pol(i);if(o>Ool)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${t} batch of ${o} bytes: the endpoint accepts at most ${Ool}`)),{kind:"too-large",measuredLocally:!0};let s=r==="bearer"?`${this.host}/i/v1/${t}`:`${this.host}/i/v1/${t}?token=${encodeURIComponent(this.apiKey)}`,a=this.disableCompression?null:await this.compressPayload(i),c=a||i,u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...r==="bearer"&&{Authorization:`Bearer ${this.apiKey}`},...a!==null&&{"Content-Encoding":"gzip"}},body:c};try{return await this.fetchWithRetry(s,u,{type:"successful-write"},{retryCheck:l=>wft(l)||l instanceof _8&&l.retryAfterMs!==void 0?!1:Sin(l)}),{kind:"ok"}}catch(l){if(wft(l))return{kind:"too-large"};if(Sin(l)){let p=l instanceof _8?l.retryAfterMs:void 0;return{kind:"retry-later",error:l,...p!==void 0&&{retryAfterMs:p}}}return{kind:"fatal",error:l}}}async _sendLogsBatch(t){return this._sendOtlpBatch({path:"logs",auth:"query-token",payload:t})}async _sendMetricsBatch(t){return this._sendOtlpBatch({path:"metrics",auth:"query-token",payload:t})}async _sendTracesBatch(t){return this._sendOtlpBatch({path:"traces",auth:"bearer",payload:t})}async fetchWithRetry(t,r,n,i,o){let s=r.body?r.body:"",a=Pol(s),c={...this._retryOptions,...i},u=0;return await aol(async()=>{u++;let l=new AbortController,p=o??this.requestTimeout,d=Date.now()+p,f,m=new Promise((x,v)=>{f=zN(()=>{let w=Cft("AbortError",`Request timed out after ${p}ms`);v(w),l.abort(w)},p)}),g,A=!1,y,I=()=>y??=(async()=>{try{await g?.body?.cancel()}catch{}})();try{let x;try{x=this.fetch(t,{signal:l.signal,...r})}catch(B){throw new qhe(B)}x.then(B=>{l.signal.aborted&&!A&&Promise.resolve(B.body?.cancel()).catch(()=>{})}).catch(()=>{});try{g=await Promise.race([x,m]),A=!0}catch(B){throw new qhe(B)}let v=r.mode==="no-cors",w=n.type==="successful-write"?300:400;if(!v&&(g.status<200||g.status>=w))throw new _8(g,a,d,l);if(n.type==="successful-write"){try{await Promise.race([I(),m])}catch{}return}try{return await Promise.race([n.consume(g),m])}catch(B){throw l.signal.aborted?new qhe(B):B}}finally{clearTimeout(f),l.signal.aborted&&g&&I()}},{...c,retryCheck:l=>{let p=c.retryCheck(l);return p&&u<=c.retryCount&&l instanceof _8&&l.cancelResponseBody(),p}})}async _shutdown(t=3e4){await this._initPromise;let r=!1;return this.clearFlushTimer(),this.disabled?void 0:p1e((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(s=>this.getRouteQueue(s).length>0);){let o=this._dequeuedMessagesCount;if(await this.flush(),r)break;if(this._dequeuedMessagesCount===o){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(i){if(!Dch(i))throw i;await Tol(i)}})(),t,()=>{this._logger.critical("Timeout while shutting down PostHog. Some events may not have been sent.",{shutdownTimeoutMs:t}),r=!0})}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 Qch=/[a-z][a-z0-9+.-]{0,63}:[^\s<>"]+/gi;var GWv=new RegExp(Qch.source,"i"),kol=/[a-z][a-z0-9+.-]{0,63}:\/\//i,qWv=new RegExp(`^${kol.source}`,"i"),WWv=new RegExp(kol.source,"gi");var Mch=["is_not","is_set"],Lch=1152921504606847e3,Zu=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Object.setPrototypeOf(this,e.prototype)}};function wXo(e){if(typeof e=="boolean")return!0;if(typeof e=="string"){let t=e.toLowerCase();return t==="true"||t==="false"}if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t++)if(!wXo(t in e?e[t]:null))return!1;return!0}function SXo(e){if(typeof e=="boolean")return e;if(typeof e=="string")return e.toLowerCase()==="true";if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t++)if(!SXo(t in e?e[t]:null))return!1;return!0}function eKt(e){for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r>=55296&&r<=56319){let n=e.charCodeAt(t+1);if(t+1>=e.length||n<56320||n>57343)throw new Zu("Cannot stringify an unpaired surrogate like the flags service");t++}else if(r>=56320&&r<=57343)throw new Zu("Cannot stringify an unpaired surrogate like the flags service")}}function Oin(e,t=new Set){if(!(e===null||typeof e=="boolean")){if(typeof e=="string")return void eKt(e);if(typeof e=="number"){if(!Number.isFinite(e))throw new Zu(`Cannot represent non-finite number ${e} like the flags service`);return}if(Array.isArray(e)){if(t.has(e))throw new Zu("Cannot represent a circular array during local evaluation");t.add(e);try{for(let r=0;r<e.length;r++)r in e&&Oin(e[r],t)}finally{t.delete(e)}return}if(typeof e=="object"){let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new Zu("Cannot represent a non-JSON object like the flags service");if(t.has(e))throw new Zu("Cannot represent a circular object during local evaluation");t.add(e);try{for(let n of Object.keys(e))eKt(n),Oin(e[n],t)}finally{t.delete(e)}return}throw new Zu(`Cannot represent ${typeof e} like the flags service`)}}function _ch(e,t){let r=0,n=0;for(;r<e.length&&n<t.length;){let i=e.charCodeAt(r),o=t.charCodeAt(n),s=i>=55296&&i<=56319,a=o>=55296&&o<=56319,c=s?e.charCodeAt(r+1):0,u=a?t.charCodeAt(n+1):0,l=s?(i-55296)*1024+c-56320+65536:i,p=a?(o-55296)*1024+u-56320+65536:o;if(l!==p)return l-p;r+=s?2:1,n+=a?2:1}return e.length-t.length}function TXo(e,t=new Set){if(e===null)return"null";if(typeof e=="string")return eKt(e),JSON.stringify(e);if(typeof e=="boolean")return e?"true":"false";if(typeof e=="number"){if(!Number.isFinite(e))throw new Zu(`Cannot stringify non-finite number ${e} like the flags service`);if(Number.isInteger(e))throw new Zu(`Cannot distinguish integer ${e} from an integral JSON float during local evaluation`);return String(e)}if(Array.isArray(e)){if(t.has(e))throw new Zu("Cannot stringify a circular array during local evaluation");t.add(e);try{let r=[];for(let n=0;n<e.length;n++)r.push(n in e?TXo(e[n],t):"null");return`[${r.join(",")}]`}finally{t.delete(e)}}if(typeof e=="object"){let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new Zu("Cannot stringify a non-JSON object like the flags service");if(t.has(e))throw new Zu("Cannot stringify a circular object during local evaluation");t.add(e);try{let n=Object.keys(e);return n.forEach(eKt),`{${n.sort(_ch).map(i=>`${JSON.stringify(i)}:${TXo(e[i],t)}`).join(",")}}`}finally{t.delete(e)}}throw new Zu(`Cannot stringify ${typeof e} like the flags service`)}function Tin(e){return typeof e=="string"?(eKt(e),e):TXo(e)}function Fol(e){try{return new RegExp(e),!0}catch{return!1}}function U8(e){return String(e).replace(/[A-Z]/g,t=>t.toLowerCase())}function jol(e,t,r){if(!/^\d+$/.test(e)||r==="strict"&&e.length>1&&e[0]==="0")throw new Zu(`Invalid semver: ${t}`);return parseInt(e,10)}function XS(e,t="strict"){let n=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new Zu(`Invalid semver: ${e}`);let i=n.split("."),o=s=>s===void 0||s===""?0:jol(s,e,t);return[o(i[0]),o(i[1]),o(i[2])]}function V8(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 Uch(e,t){let r=XS(e,t);return{lower:[r[0],r[1],r[2]],upper:[r[0],r[1]+1,0]}}function Vch(e,t){let[r,n,i]=XS(e,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 Gch(e,t){let n=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new Zu(`Invalid wildcard semver: ${e}`);let i=n.split("."),o=c=>{if(t==="legacy-permissive"){let u=parseInt(c,10);if(!isNaN(u))return u}else try{return jol(c,e,t)}catch{}throw new Zu(`Invalid wildcard semver: ${e}`)},s=o(i[0]);if(i.length===1)return{lower:[s,0,0],upper:[s+1,0,0]};let a=o(i[1]);return{lower:[s,a,0],upper:[s,a+1,0]}}function Nol(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 Zu(`${e} is in an invalid date format`)}throw new Zu(`The date provided ${e} must be a string, number, or date object`)}function OXo(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r||!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}function PXo(e,t,r={}){let n=e.key,i=e.value,o=e.operator||"exact",s=r.semverParsingPolicy??"strict";if(Object.prototype.hasOwnProperty.call(t,n)){if(o==="is_not_set")return!1;if(o==="is_set")return!0}else throw new Zu(`Property ${n} not found in propertyValues`);let c=t[n];if(c===void 0)return r.warnFunction?.(`Property ${n} cannot have a value of undefined with the ${o} operator`),o==="is_not";if(c===null&&!Mch.includes(o)&&o!=="exact"&&o!=="is_not")return r.warnFunction?.(`Property ${n} cannot have a value of null with the ${o} operator`),!1;let u=(p,d)=>{if(r.propertyMatchingVersion!==2&&wXo(p)||Array.isArray(p)&&p.length===0)return Oin(d),SXo(p)===SXo(d);if(r.propertyMatchingVersion===2&&typeof d=="number"&&wXo(p))return Oin(d),!1;if(Array.isArray(p)){let f=Tin(d).toLowerCase();return p.some(m=>Tin(m).toLowerCase()===f)}return Tin(p).toLowerCase()===Tin(d).toLowerCase()},l=(p,d,f)=>{if(f==="gt")return p>d;if(f==="gte")return p>=d;if(f==="lt")return p<d;if(f==="lte")return p<=d;throw new Error(`Invalid operator: ${f}`)};switch(o){case"exact":return u(i,c);case"is_not":return!u(i,c);case"is_set":return!0;case"icontains":return U8(c).includes(U8(i));case"not_icontains":return!U8(c).includes(U8(i));case"starts_with":return U8(c).startsWith(U8(i));case"not_starts_with":return!U8(c).startsWith(U8(i));case"ends_with":return U8(c).endsWith(U8(i));case"not_ends_with":return!U8(c).endsWith(U8(i));case"regex":return Fol(String(i))&&String(c).match(String(i))!==null;case"not_regex":return Fol(String(i))&&String(c).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let p=typeof i=="number"?i:parseFloat(String(i)),d=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(p)&&Number.isFinite(d)?l(d,p,o):l(String(c),String(i),o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Zu("Date operations cannot be performed on boolean values");let p=OXo(String(i));p==null&&(p=Nol(i));let d=Nol(c);return o==="is_date_before"?d<p:d>p}case"semver_eq":return V8(XS(String(c),s),XS(String(i),s))===0;case"semver_neq":return V8(XS(String(c),s),XS(String(i),s))!==0;case"semver_gt":return V8(XS(String(c),s),XS(String(i),s))>0;case"semver_gte":return V8(XS(String(c),s),XS(String(i),s))>=0;case"semver_lt":return V8(XS(String(c),s),XS(String(i),s))<0;case"semver_lte":return V8(XS(String(c),s),XS(String(i),s))<=0;case"semver_tilde":{let p=XS(String(c),s),{lower:d,upper:f}=Uch(String(i),s);return V8(p,d)>=0&&V8(p,f)<0}case"semver_caret":{let p=XS(String(c),s),{lower:d,upper:f}=Vch(String(i),s);return V8(p,d)>=0&&V8(p,f)<0}case"semver_wildcard":{let p=XS(String(c),s),{lower:d,upper:f}=Gch(String(i),s);return V8(p,d)>=0&&V8(p,f)<0}default:throw new Zu(`Unknown operator: ${o}`)}}async function zol(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(n=>n.toString(16).padStart(2,"0")).join("")}async function tKt(e,t,r="",n="."){let i=await zol(`${e}${n}${t}${r}`);return parseInt(i.slice(0,15),16)/Lch}async function BXo(e,t){if(e==null||e.id==null||e.exclusion_percentage==null)return;let r=Number(e.exclusion_percentage);if(!Number.isFinite(r))return;let n=Math.min(Math.max(r,0),100);if(!(n!==100&&await tKt("holdout",t,"","-")>n/100))return`holdout-${e.id}`}function Pin(e){let t=[],r=0;for(let n of e){let i=r+n.rollout_percentage/100;t.push({valueMin:r,valueMax:i,key:n.key}),r=i}return t}async function RXo(e,t,r){let n=await tKt(e,t,"variant");return Pin(r).find(i=>n>=i.valueMin&&n<i.valueMax)?.key}function DXo(e,t){if(t===!1||t==null||!e)return null;let r=typeof t=="boolean"?t.toString():t,n=e[r]||null;return n==null?null:xft(n)}var Qol=9223372036854776e3,qch="9223372036854775808",Wch=Object.prototype.propertyIsEnumerable;function Hch(){return{ancestors:new WeakSet,remainingNodes:1e4}}function gne(e,t){try{return Mol(e,t,Hch(),0)}catch{return[]}}function Kch(e,t){let r=e.toString(),n=BigInt(qch);return e>=n||e<-n?(t?.debug(`Attribute ${r} is outside the int64 range; encoding it as a string`),{stringValue:r}):{intValue:r}}function NXo(e,t,r,n){if(r.remainingNodes<=0)return{stringValue:yin};if(r.remainingNodes--,jil(e))return{boolValue:e};if(typeof e=="bigint")return Kch(e,t);if(typeof e=="number"){if(!Number.isFinite(e))return{stringValue:String(e)};if(Number.isInteger(e)){if(Number.isSafeInteger(e))return{intValue:String(e)};if("u"<typeof BigInt)return{stringValue:String(e)};let i=BigInt(e).toString();return e>=Qol||e<-Qol?(t?.debug(`Attribute ${i} is outside the int64 range; encoding it as a string`),{stringValue:i}):{intValue:i}}return{doubleValue:e}}if(typeof e=="string")return{stringValue:mne(e)};if(typeof e=="function")return{stringValue:iol};if(typeof e=="symbol")return{stringValue:String(e)};if(typeof e=="object"&&e!==null){if(r.ancestors.has(e))return{stringValue:Ain};if(n>=20)return{stringValue:yin};if(e instanceof Date){let i=e.getTime(),o=Number.isFinite(i)?e.toISOString():String(e);return{stringValue:typeof o=="string"?mne(o):String(o)}}r.ancestors.add(e);try{try{let i=e.toJSON;if(typeof i=="function")return NXo(i.call(e),t,r,n+1)}catch{}return V4(e)?{arrayValue:{values:Jch(e,t,r,n+1)}}:{kvlistValue:{values:Mol(e,t,r,n+1)}}}finally{r.ancestors.delete(e)}}return{stringValue:mne(String(e))}}function Jch(e,t,r,n){let i=[],o=Math.min(e.length,1e3),s=0;for(;s<o&&r.remainingNodes>0;s++)try{let a=s in e?e[s]:void 0;if(NJ(a))continue;i.push(NXo(a,t,r,n))}catch{i.push({stringValue:L8})}return e.length>s&&i.push({stringValue:yin}),i}function Mol(e,t,r,n){let i=[];for(let o in e)if(Wch.call(e,o)){if(!o){t?.debug("Dropping an attribute with an empty key");continue}if(i.length>=1e3||r.remainingNodes<=0){t?.debug("Attributes truncated: the value exceeds the OTLP encoder budget");break}try{let s=e[o];if(eXo(s)||Vhe(s))continue;i.push({key:mne(o),value:NXo(s,t,r,n)})}catch{i.push({key:mne(o),value:{stringValue:L8}})}}return i}function nKt(e,t,r){return{...Ghe({},e.resourceAttributes),"service.name":e.serviceName||"unknown_service",...e.environment&&{"deployment.environment":e.environment},...e.serviceVersion&&{"service.version":e.serviceVersion},"telemetry.sdk.name":t,"telemetry.sdk.version":r}}var Ych=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function iKt(e,t){let r=Ghe({},e),n={};for(let i of Ych)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i],delete r[i]);return[...gne(r,t),...gne(n,t)]}var Lol={darwin:"macOS",win32:"Windows",cygwin:"Windows",linux:"Linux",android:"Android",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",sunos:"SunOS",aix:"AIX",haiku:"Haiku","Mac OS X":"macOS"};function Xch(e){if(e)return Object.prototype.hasOwnProperty.call(Lol,e)?Lol[e]:e}function jXo(e,t){let r=Xch(e);return{...r?{"os.name":r}:{},...t?{"os.version":t}:{}}}var Zch={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}},c7v=Zch.info;var A5e=class{constructor(t){this._onFire=t,this._firesAt=0}get pending(){return!!this._timer}arm(t){this.clear(),this._firesAt=Date.now()+t,this._timer=zN(()=>{this._timer=void 0,this._onFire()},t)}armNoEarlierThan(t){this._timer&&Date.now()+t<=this._firesAt||this.arm(t)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function oKt(){return 1-.25+Math.random()*.25*2}var G8=1;function sKt(e,t,r,n){let i=Math.min(Math.max(0,t-1),6),o=e*2**i,s=n===void 0?o:Math.min(o,Math.max(n,e));return Math.round(s*r)}var aKt=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function zXo(e){return String(e)+"000000"}function QXo(e,t,r,n){let i="";return n&&(i=Object.keys(n).sort().map(s=>`${JSON.stringify(s)}:${JSON.stringify(n[s])}`).join(",")),`${e}\0${t}\0${r??""}\0${i}`}function _ol(e,t){for(let r=0;r<t.length;r++)if(e<=t[r])return r;return t.length}function MXo(e,t,r){return nKt(e,t,r)}function LXo(e,t,r,n){return{resourceMetrics:[{resource:{attributes:iKt(t)},scopeMetrics:[{scope:{name:r,version:n},metrics:e}]}]}}function Rin(e){let t=e?.resourceAttributes;return{serviceName:t?.["service.name"]??e?.serviceName,serviceVersion:t?.["service.version"]??e?.serviceVersion,environment:t?.["deployment.environment"]??e?.environment,resourceAttributes:t,beforeSend:e?.beforeSend,flushIntervalMs:e?.flushIntervalMs??1e4,maxSeriesPerFlush:e?.maxSeriesPerFlush??1e3}}var Uol=1,cKt=class{constructor(t,r,n){this._instance=t,this._config=r,this._logger=n,this._series=new Map,this._flushTimer=new A5e(()=>this.flush().catch(i=>{this._logger.error("Metrics flush failed:",i)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new h5e,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._generation=0}count(t,r=1,n){this._capture({name:t,type:"count",value:r,unit:n?.unit,attributes:n?.attributes})}gauge(t,r,n){this._capture({name:t,type:"gauge",value:r,unit:n?.unit,attributes:n?.attributes})}histogram(t,r,n){this._capture({name:t,type:"histogram",value:r,unit:n?.unit,attributes:n?.attributes})}flush(){let t=this._flushPromise,n=(async()=>{t&&await t.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let t=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(t)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=G8,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(t){if(this._instance.isDisabled||this._instance.optedOut)return;let r=this._runBeforeSend(t);if(r===null)return;if(!r.name||typeof r.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof r.value!="number"||!Number.isFinite(r.value))return void this._logger.warn(`Dropping metric '${r.name}': value must be a finite number`);if(r.type==="count"&&r.value<0)return void this._logger.warn(`Dropping count '${r.name}': counters are monotonic, value must be >= 0`);let n,i;try{n=r.attributes?{...r.attributes}:void 0,i=QXo(r.type,r.name,r.unit,n)}catch(a){this._logger.warn(`Dropping metric '${r.name}': attributes could not be serialized`,a);return}let o=this._series.get(i);if(!o){if(!this._admitNewSeries())return;o={name:r.name,type:r.type,unit:r.unit,attributes:n,windowStartMs:Date.now()},this._series.set(i,o)}let s=this._typeByName.get(r.name);s===void 0?this._typeByName.set(r.name,r.type):s!==r.type&&!this._typeCollisionWarned.has(r.name)&&(this._typeCollisionWarned.add(r.name),this._logger.warn(`Metric name '${r.name}' is already used as a ${s}; recording it as a ${r.type} too will blend both series in charts. Use a distinct name.`)),this._fold(o,r.value),this._armFlushTimer()}_admitNewSeries(){return this._series.size<this._config.maxSeriesPerFlush?!0:(this._seriesCapWarned||(this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`)),!1)}_fold(t,r){switch(t.type){case"count":t.total=(t.total??0)+r;break;case"gauge":t.last=r;break;case"histogram":{t.hist||(t.hist={count:0,sum:0,min:r,max:r,bucketCounts:new Array(aKt.length+1).fill(0)});let n=t.hist;n.count+=1,n.sum+=r,n.min=Math.min(n.min,r),n.max=Math.max(n.max,r),n.bucketCounts[_ol(r,aKt)]+=1;break}}}_runBeforeSend(t){let r=this._config.beforeSend;if(!r)return t;let n=V4(r)?r:[r],i=t;for(let o of n)try{let s=o(i);if(!s)return this._logger.info("Metric was rejected in beforeSend function"),null;i=s}catch(s){return this._logger.error("Error in beforeSend function for metric:",s),null}return i}_armFlushTimer(){this._flushTimer.pending||this._flushTimer.arm(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(sKt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}async _doFlush(){if(this._flushTimer.clear(),this._series.size===0)return;let t=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let r=this._generation,n=await this._instance._sendMetricsBatch(this._buildPayload(t));if(r===this._generation)switch(this._retryAfter.record(n),n.kind==="retry-later"?(this._consecutiveFlushFailures++,this._flushJitter=oKt()):(this._consecutiveFlushFailures=0,this._flushJitter=G8),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(t),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(t){return LXo(this._buildMetrics(t),MXo(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(t){let r=zXo(Date.now()),n=new Map;for(let i of t.values()){let o=QXo(i.type,i.name,i.unit,void 0),s=n.get(o);s||(s={name:i.name,...i.unit&&{unit:i.unit}},i.type==="count"?s.sum={aggregationTemporality:Uol,isMonotonic:!0,dataPoints:[]}:i.type==="gauge"?s.gauge={dataPoints:[]}:s.histogram={aggregationTemporality:Uol,dataPoints:[]},n.set(o,s));let a=gne(i.attributes??{},this._logger),c=zXo(i.windowStartMs);if(i.type==="count"){let u={attributes:a,startTimeUnixNano:c,timeUnixNano:r,asDouble:i.total??0};s.sum.dataPoints.push(u)}else if(i.type==="gauge"){let u={attributes:a,timeUnixNano:r,asDouble:i.last??0};s.gauge.dataPoints.push(u)}else if(i.hist){let u={attributes:a,startTimeUnixNano:c,timeUnixNano:r,count:i.hist.count,sum:i.hist.sum,min:i.hist.min,max:i.hist.max,bucketCounts:i.hist.bucketCounts,explicitBounds:aKt};s.histogram.dataPoints.push(u)}}return Array.from(n.values())}_mergeWindowBack(t){for(let[r,n]of t){let i=this._series.get(r);if(!i){this._admitNewSeries()&&this._series.set(r,n);continue}switch(i.windowStartMs=Math.min(i.windowStartMs,n.windowStartMs),i.type){case"count":i.total=(i.total??0)+(n.total??0);break;case"gauge":break;case"histogram":if(n.hist)if(i.hist){i.hist.count+=n.hist.count,i.hist.sum+=n.hist.sum,i.hist.min=Math.min(i.hist.min,n.hist.min),i.hist.max=Math.max(i.hist.max,n.hist.max);for(let o=0;o<i.hist.bucketCounts.length;o++)i.hist.bucketCounts[o]+=n.hist.bucketCounts[o]}else i.hist=n.hist;break}}}};var ruh="0".repeat(32),nuh="0".repeat(16),iuh=/^[0-9a-f]+$/;function ouh(e){let t=new Uint8Array(e),r=globalThis.crypto;if(r&&typeof r.getRandomValues=="function")try{return r.getRandomValues(t),t}catch{}for(let n=0;n<e;n++)t[n]=Math.floor(256*Math.random());return t}function suh(e){let t="";for(let r=0;r<e.length;r++)t+=e[r].toString(16).padStart(2,"0");return t}function Vol(e){let t=suh(ouh(e));return/[^0]/.test(t)?t:t.slice(0,-1)+"1"}function Gol(){return Vol(16)}function qol(){return Vol(8)}function Wol(e,t,r){return typeof e=="string"&&e.length===t&&e!==r&&iuh.test(e)}function Hol(e){return Wol(e,32,ruh)}function Kol(e){return Wol(e,16,nuh)}var auh=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Jol(e){let t=Yol(e);return t&&{traceId:t.traceId,spanId:t.spanId,flags:cuh(t.flags)}}function cuh(e){return 1&parseInt(e,16)?kin:uuh}function Yol(e){if(typeof e!="string")return;let t=auh.exec(e.trim());if(!t)return;let[,r,n,i,o,s]=t;if(r!=="ff"&&!(r==="00"&&s)&&!(!Hol(n)||!Kol(i)))return{version:r,traceId:n,spanId:i,flags:o}}function Xol(e){return Yol(e)&&e.trim()}function Din(e){return Array.isArray(e)&&e.length===1?e[0]:e}var kin="01",uuh="00";function Zol(e,t,r=kin){return`00-${e}-${t}-${r}`}var luh=32,_Xo=512;function Fin(e){if(typeof e!="string")return;let t=e.trim();if(!t||/[^\x20-\x7e\t]/.test(t))return;let r=t.split(",");if(!(r.length>luh)){for(let n of r)if(n.trim()&&!n.includes("="))return;return t.length<=_Xo?t:fuh(r)}}var puh=128;function fuh(e){let t=[...e],r=()=>t.reduce((n,i)=>n+i.length,0)+t.length-1;for(let n=t.length-1;n>=0&&r()>_Xo;n--)t[n].length>puh&&t.splice(n,1);for(;t.length&&r()>_Xo;)t.pop();return t.length?t.join(","):void 0}var $ol="unknown";function y5e(e,t,r,n){return typeof e=="string"&&e.trim()?e.length>r?e.slice(0,r):e:(n?.debug(`${t} must be a non-empty string; using "${$ol}"`),$ol)}function Sft(e){if(e==null)return;let t=e;if(e instanceof Date)try{t=e.getTime()}catch{return}if(!(typeof t!="number"||!Number.isFinite(t))&&!(t<0||t>9223372036854))return t}function esl(e,t,r){let n=Sft(e);return n===void 0?(e!==void 0&&r?.debug("Span startTime is out of range or not a valid time; using the current time"),t):(t-n>864e5?r?.debug("Span startTime is more than 24 hours in the past; the server will clamp it to receive time and keep the original in $originalTimestamp"):n>t&&r?.debug("Span startTime is in the future; the span may export with a zero duration"),n)}function Nin(e,t){return e<t?t:e}function uKt(e,t,r,n){let i=Sft(e);return i===void 0?(e!==void 0&&n?.debug(`Span ${r} is out of range or not a valid time; using the derived time`),t):i}function zin(){let e=globalThis.performance;return typeof e?.now=="function"?e.now():void 0}var Tft=class{constructor(t,r,n){this._onEnd=r,this._logger=n,this._events=[],this._ended=!1,this._userAttributeCount=0,this._userEventCount=0,this._droppedAttributes=0,this._droppedEvents=0,this._traceId=t.traceId,this._spanId=t.spanId,this._parentSpanId=t.parentSpanId,this._traceState=t.traceState,this._traceFlags=t.traceFlags??kin,this._parentIsRemote=t.parentIsRemote??!1,this._name=t.name,this._kind=t.kind,this._autoKeys=new Set(t.autoAttributeKeys),this._maxAttributes=t.maxAttributes,this._maxEvents=t.maxEvents,this._maxAttributesPerEvent=t.maxAttributesPerEvent,this._maxAttributeValueLength=t.maxAttributeValueLength,this._attributes=Object.create(null);for(let i of Object.keys(t.attributes))this._writeAttribute(i,t.attributes[i]);this._startMono=t.backdated?void 0:zin(),this._startTime=t.clockAnchor&&this._startMono!==void 0?t.clockAnchor.wall+(this._startMono-t.clockAnchor.mono):t.startTime,this._startMono!==void 0&&(this._clockAnchor=t.clockAnchor??{wall:this._startTime,mono:this._startMono})}_now(){if(this._startMono!==void 0){let t=zin();if(t!==void 0)return this._startTime+Math.max(0,t-this._startMono)}return Date.now()}_mutable(t){return this._ended?(this._logger?.debug(`Ignoring ${t} on a span that has already ended`),!1):!0}_writeAttribute(t,r){if(NJ(r)){t in this._attributes&&!this._autoKeys.has(t)&&this._userAttributeCount--,delete this._attributes[t];return}if(!this._autoKeys.has(t)&&!(t in this._attributes)){if(this._userAttributeCount>=this._maxAttributes)return void this._droppedAttributes++;this._userAttributeCount++}this._attributes[t]=Min(r,this._maxAttributeValueLength)}setAttribute(t,r){return this._mutable("setAttribute")&&this._writeAttribute(t,r),this}setAttributes(t){if(this._mutable("setAttributes")){let r=Ghe({},t);for(let n of Object.keys(r))this._writeAttribute(n,r[n])}return this}addEvent(t,r,n){if(this._mutable("addEvent")){if(this._userEventCount>=this._maxEvents)return this._droppedEvents++,this;this._userEventCount++;let i=r&&isl(r,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:y5e(t,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:uKt(n,this._now(),"event timestamp",this._logger),...i&&{attributes:i.attributes,...i.dropped&&{droppedAttributesCount:i.dropped}}})}return this}setStatus(t,r){if(this._mutable("setStatus")){if(t!=="ok"&&t!=="error")return this._logger?.debug(`Ignoring unknown span status "${String(t)}"; expected "ok" or "error"`),this;this._status={code:t,...r&&{message:UXo(r,this._maxAttributeValueLength)}}}return this}get statusIsExplicitlyOk(){return this._status?.code==="ok"}recordException(t){if(!this._mutable("recordException"))return this;let{type:r,message:n,stack:i}=VXo(t);return this.addEvent(duh,{"exception.type":r,"exception.message":n,...i&&{"exception.stacktrace":i}}),this.setStatus("error",n)}updateName(t){return this._mutable("updateName")&&(this._name=y5e(t,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return Zol(this._traceId,this._spanId,this._traceFlags)}tracestate(){return this._traceState??null}childContext(){return{traceId:this._traceId,parentSpanId:this._spanId,traceState:this._traceState,traceFlags:this._traceFlags,clockAnchor:this._clockAnchor}}end(t){if(this._ended)return void this._logger?.debug("Ignoring end() on a span that has already ended");this._ended=!0;let r=this._now(),n=uKt(t,r,"end time",this._logger);this._onEnd({traceId:this._traceId,spanId:this._spanId,...this._parentSpanId&&{parentSpanId:this._parentSpanId},...this._traceState&&{traceState:this._traceState},traceFlags:this._traceFlags,parentIsRemote:this._parentIsRemote,name:this._name,kind:this._kind,...this._status&&{status:this._status},attributes:{...this._attributes},events:this._events,startTime:this._startTime,endTime:Nin(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},duh="exception",muh=4294967295;function huh(e){try{return typeof e=="string"?e:String(e)}catch{return L8}}function b5e(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?0:Math.min(Math.floor(e),muh)}function guh(e,t){if(!t.length)return Object.keys(e);let r=t.filter(i=>Object.prototype.propertyIsEnumerable.call(e,i)),n=new Set(r);return[...r,...Object.keys(e).filter(i=>!n.has(i))]}function rsl(e,t,r,n,i,o,s=[]){let a=0,c=0,u={};for(let f of guh(e.attributes,s)){let m=e.attributes[f];if(!NJ(m)){if(!t.has(f)){if(a>=r){c++;continue}a++}Object.defineProperty(u,f,{value:Min(m,o),enumerable:!0,writable:!0,configurable:!0})}}e.attributes=u,c&&(e.droppedAttributesCount=b5e(e.droppedAttributesCount)+c);let l=0,p=0,d=[];for(let f of e.events){if(l>=n){p++;continue}if(l++,f.attributes){let m=isl(f.attributes,i,o);f.attributes=m.attributes,m.dropped&&(f.droppedAttributesCount=b5e(f.droppedAttributesCount)+m.dropped)}d.push(f)}e.events=d,p&&(e.droppedEventsCount=b5e(e.droppedEventsCount)+p),e.status?.message&&(e.status={...e.status,message:UXo(huh(e.status.message),o)})}var Qin=class{setAttribute(){return this}setAttributes(){return this}addEvent(){return this}setStatus(){return this}recordException(){return this}updateName(){return this}traceparent(){return null}tracestate(){return null}end(){}},nsl=new Qin,lKt=class extends Qin{constructor(t,r){super(),this._traceparent=t,this._tracestate=r}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function Auh(e){try{let t=e.stack;return typeof t=="string"&&t?{stack:t}:{}}catch{return{}}}function f1e(e,t){let r=Din(e?.parent)??t,n=typeof r=="string"||r==null?r:tsl(r,"traceparent"),i=Xol(n);if(!i)return nsl;let o=typeof r=="string"||r==null?e?.tracestate:tsl(r,"tracestate");return new lKt(i,Fin(o))}function tsl(e,t){try{let r=e[t];return typeof r=="function"?r.call(e):void 0}catch{return}}function UXo(e,t){return e.length>t?e.slice(0,t):e}function Min(e,t){return jin(e,t,{ancestors:new WeakSet,remainingNodes:1e4},0)}function jin(e,t,r,n){if(e===null||typeof e!="object")return NJ(e)||r.remainingNodes<=0?e:(r.remainingNodes--,typeof e=="string"?UXo(e,t):e);if(r.ancestors.has(e))return Ain;if(r.remainingNodes<=0||n>=20)return e;r.remainingNodes--,r.ancestors.add(e);try{if(e instanceof Date)return e;let i=yuh(e);if(i.selfDescribed)return NJ(i.value)?String(i.value):jin(i.value,t,r,n+1);if(V4(e)){let a=Math.min(e.length,1e3),c=[];for(let u=0;u<a;u++)try{c.push(jin(e[u],t,r,n+1))}catch{c.push(L8)}return e.length>a&&(c.length=e.length),c}let o={},s=0;for(let a of Object.keys(e)){if(s>=1e3)break;let c;try{c=jin(e[a],t,r,n+1)}catch{c=L8}a&&!NJ(c)&&s++,Object.defineProperty(o,a,{value:c,enumerable:!0,writable:!0,configurable:!0})}return o}catch{return e}finally{r.ancestors.delete(e)}}function yuh(e){try{let t=e.toJSON;if(typeof t=="function")return{selfDescribed:!0,value:t.call(e)}}catch{}return{selfDescribed:!1}}function isl(e,t,r){let n;try{n=Object.keys(e)}catch{return{attributes:{},dropped:0}}let i={},o=0,s=0;for(let a of n){if(o>=t){s++;continue}let c;try{c=Min(e[a],r)}catch{c=L8}NJ(c)||(o++,Object.defineProperty(i,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:i,dropped:s}}function osl(e,t){for(let r of Object.keys(e))e[r]=Min(e[r],t);return e}function pKt(e,t,r){return t===nsl?r(t):e.with(t,()=>r(t))}function VXo(e){try{let t=Auh(e);if(l1e(e))return{type:e.name||"Error",message:e.message||"",...t};if(typeof e=="string")return{type:"string",message:e};if(e&&typeof e=="object"){let r=e;if(typeof r.message=="string")return{type:typeof r.name=="string"?r.name:"Object",message:r.message,...t}}return{type:typeof e,message:String(e)}}catch{return{type:typeof e,message:""}}}var GXo={internal:1,server:2,client:3,producer:4,consumer:5},buh={ok:1,error:2},Euh=1,Iuh=256,vuh=512;function Cuh(e){let t=parseInt(e.traceFlags,16);return(Number.isFinite(t)?255&t:Euh)|Iuh|(e.parentIsRemote?vuh:0)}function Lin(e){if(typeof e=="string")return mne(e);try{return mne(String(e))}catch{return L8}}function xuh(e){return e&&Object.prototype.hasOwnProperty.call(GXo,e)?GXo[e]:GXo.internal}function qXo(e){let t=Math.floor(e),r=Math.round((e-t)*1e6);return r>=1e6&&(t+=1,r=0),String(t)+String(r).padStart(6,"0")}function wuh(e,t){let r={name:Lin(e.name),timeUnixNano:qXo(e.timestamp)};if(e.attributes){let i=gne(e.attributes,t);i.length&&(r.attributes=i)}let n=b5e(e.droppedAttributesCount);return n&&(r.droppedAttributesCount=n),r}function ssl(e,t){let r={traceId:e.traceId,spanId:e.spanId,name:Lin(e.name),kind:xuh(e.kind),startTimeUnixNano:qXo(e.startTime),endTimeUnixNano:qXo(e.endTime),flags:Cuh(e)};e.parentSpanId&&(r.parentSpanId=e.parentSpanId),e.traceState&&(r.traceState=Lin(e.traceState));let n=gne(e.attributes,t);n.length&&(r.attributes=n),e.events.length&&(r.events=e.events.map(s=>wuh(s,t)));let i=b5e(e.droppedAttributesCount);i&&(r.droppedAttributesCount=i);let o=b5e(e.droppedEventsCount);return o&&(r.droppedEventsCount=o),e.status&&(r.status={code:buh[e.status.code],...e.status.message&&{message:Lin(e.status.message)}}),r}function asl(e,t,r){return nKt(e,t,r)}function csl(e,t,r,n,i){return{resourceSpans:[{resource:{attributes:iKt(t,i)},scopeSpans:[{scope:{name:r,version:n},spans:e}]}]}}var usl=8;function _in(){return zin()??Date.now()}function WXo(e){try{return e instanceof Tft}catch{return!1}}function lsl(e,t){let r=Jol(e);if(r)return{traceId:r.traceId,parentSpanId:r.spanId,traceState:Fin(t),traceFlags:r.flags,isRemote:!0}}function Suh(e){try{return typeof e.traceparent=="function"}catch{return!1}}function Tuh(e){return!!e.attributes&&typeof e.attributes=="object"&&!Array.isArray(e.attributes)&&Array.isArray(e.events)&&e.name!==void 0&&e.kind!==void 0&&e.startTime!==void 0&&e.endTime!==void 0}function Uin(e,t,r){e[t]!==r&&(e[t]=r)}function Ouh(e,t){try{let r=Object.getOwnPropertyDescriptors(e);for(let n of["traceId","spanId","parentSpanId","traceState"])r[n]={value:t[n],enumerable:!0,writable:!0,configurable:!0};return Object.create(Object.getPrototypeOf(e),r)}catch{return e}}var fKt=class{constructor(t,r,n,i,o,s){this._instance=t,this._config=r,this._logger=n,this._getContext=i,this._contextManager=o,this._onSpanQueued=s,this._queue=[],this._flushTimer=new A5e(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._retryAfter=new h5e,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=r.maxExportBatchSize}startSpan(t,r){if(this._instance.isDisabled||this._instance.optedOut)return f1e(r,this._contextManager.active());let n=Din(r?.parent);if(n&&typeof n!="string"&&!WXo(n)){if(Suh(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),f1e(r,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let i=this._resolveParent(n,r);if(this._liveSpans.size>=this._config.maxLiveSpans&&this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),f1e(r,this._contextManager.active());let o=Date.now(),s=esl(r?.startTime,o,this._logger),a=qol();this._liveSpans.set(a,_in());let c=this._autoContextAttributes();return new Tft({traceId:i?.traceId??Gol(),spanId:a,parentSpanId:i?.parentSpanId,traceState:i?.traceState,traceFlags:i?.traceFlags,parentIsRemote:i?.isRemote,name:y5e(t,"Span name",this._config.maxAttributeValueLength,this._logger),kind:r?.kind??"internal",attributes:Ghe({...c},r?.attributes),autoAttributeKeys:Object.keys(c),maxAttributes:this._config.maxAttributesPerSpan,maxEvents:this._config.maxEventsPerSpan,maxAttributesPerEvent:this._config.maxAttributesPerEvent,maxAttributeValueLength:this._config.maxAttributeValueLength,startTime:s,backdated:s!==o,clockAnchor:Sft(r?.startTime)===void 0?i?.clockAnchor:void 0},(u,l)=>this._onSpanEnd(u,l),this._logger)}withSpan(t,r,n){let i=typeof r=="function"?void 0:r,o=typeof r=="function"?r:n,s=this.startSpan(t,i);try{let a=pKt(this._contextManager,s,o);return col(a)?a.then(c=>(s.end(),c),c=>{throw this._recordCallbackError(s,c),s.end(),c}):(s.end(),a)}catch(a){throw this._recordCallbackError(s,a),s.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let t=this._generation,r=Promise.resolve().then(()=>t===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===r&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=r,r}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(t,r){if(typeof t=="string"){let i=lsl(t,r?.tracestate);return i||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),i}if(WXo(t))return t.childContext();let n=this._contextManager.active();if(WXo(n))return n.childContext();if(n instanceof lKt)return lsl(n.traceparent(),n.tracestate()??void 0)}_autoContextAttributes(){let t;try{t=this._getContext()}catch(n){return this._logger.debug("Failed to read tracing context; span will carry no PostHog attributes",n),{}}let r={};return t.distinctId&&(r.posthogDistinctId=t.distinctId),t.sessionId&&(r.sessionId=t.sessionId),t.currentUrl&&(r["url.full"]=t.currentUrl),t.screenName&&(r["screen.name"]=t.screenName),t.appState&&(r["app.state"]=t.appState),r}_recordCallbackError(t,r){if(!(t instanceof Tft))return;let{type:n,message:i,stack:o}=VXo(r);t.addEvent("exception",{"exception.type":n,"exception.message":i,...o&&{"exception.stacktrace":o}}),t.statusIsExplicitlyOk||t.setStatus("error",i)}_evictAgedSpans(){let t=_in()-this._config.maxSpanAgeMs,r=0;for(let[n,i]of this._liveSpans){if(i>t)break;this._liveSpans.delete(n),r++}r&&this._recordDrop(r,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(t,r){if(!this._liveSpans.delete(t.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(t,r);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(i){this._logger.debug("Span queue notification failed",i)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(t){let r=t.droppedAttributesCount??0,n=t.droppedEventsCount??0,i=0;for(let o of t.events)i+=o.droppedAttributesCount??0;(r||n||i)&&this._logger.debug(`Span limits discarded data from "${t.name}": ${r} attributes, ${n} events, ${i} event attributes`)}_runBeforeSpanSend(t,r){if(!this._config.beforeSpanSend.length)return t;let n={traceId:t.traceId,spanId:t.spanId,parentSpanId:t.parentSpanId,traceState:t.traceState},i={startTime:t.startTime,endTime:t.endTime},o={attributes:t.droppedAttributesCount,events:t.droppedEventsCount},s=Object.keys(t.attributes),a={traceFlags:t.traceFlags,parentIsRemote:t.parentIsRemote},c=t.status&&{...t.status},u=t,l=t;try{for(let f of this._config.beforeSpanSend){let m=f(u);if(!m)return this._recordDrop(1,"beforeSpanSend dropped it"),null;u=this._keepSpanIdentity(m,n)}if(l={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:u.name,kind:u.kind,status:u.status,attributes:u.attributes,events:u.events,startTime:u.startTime,endTime:u.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:o.attributes,droppedEventsCount:o.events},!Tuh(l))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;l.name=y5e(l.name,"Span name",this._config.maxAttributeValueLength,this._logger),l.status&&l.status.code!=="ok"&&l.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),l.status=c),l.startTime=Sft(l.startTime)??i.startTime,l.endTime=Nin(Sft(l.endTime)??i.endTime,l.startTime);let d=[];for(let f of l.events)try{d.push({...f,name:y5e(f.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:uKt(f.timestamp,l.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return l.events=d,rsl(l,r,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,s),l}catch(p){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",p),this._recordDrop(1,"beforeSpanSend failed"),null}}_keepSpanIdentity(t,r){(t.traceId!==r.traceId||t.spanId!==r.spanId||t.parentSpanId!==r.parentSpanId)&&this._logger.debug("beforeSpanSend changed a span identity field; keeping the original ids");try{Uin(t,"traceId",r.traceId),Uin(t,"spanId",r.spanId),Uin(t,"parentSpanId",r.parentSpanId),Uin(t,"traceState",r.traceState)}catch{return Ouh(t,r)}return t}_recordDrop(t,r){this._droppedSinceWarning+=t,this._dropReasons.add(r),Date.now()-this._lastDropWarningAt>=this._config.flushIntervalMs&&this._warnAboutDrops()}_warnAboutDrops(){this._droppedSinceWarning&&(this._lastDropWarningAt=Date.now(),this._logger.warn(`Dropping ${this._droppedSinceWarning} span(s): ${[...this._dropReasons].join("; ")}`),this._droppedSinceWarning=0,this._dropReasons.clear())}_encodeBatch(t){let r=[];for(let n of t)try{r.push(ssl(n,this._logger))}catch(i){this._logger.debug("Failed to encode a span; dropping it",i),this._recordDrop(1,"its attributes could not be encoded")}return r}_discardQueueIfConsentWithdrawn(){if(!this._instance.isDisabled&&!this._instance.optedOut)return 0;let t=this._queue.length;return this._queue=[],this._resetHeadBatchBudget(),this._recordDrop(t,"the user has opted out"),this._warnAboutDrops(),t}async _flushInner(){if(!this._queue.length)return 0;let t=this._discardQueueIfConsentWithdrawn();if(t)return t;let r=osl(asl(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._config.maxAttributeValueLength),n=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),o=this._queue.length,s=0,a=1/0,c=this._generation;try{for(;o>0&&this._queue.length>0;){let u=this._discardQueueIfConsentWithdrawn();if(u)return s+u;let l=this._headBatchFailures>0?Math.min(this._maxExportBatchSize,this._headBatchSize):this._maxExportBatchSize,p=Math.max(1,Math.min(l,a,o,this._queue.length)),d=this._queue.slice(0,p),f=this._encodeBatch(d);if(!f.length){this._queue.splice(0,p),o-=p,s+=p,this._resetHeadBatchBudget();continue}let m=_in()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),g=await this._instance._sendTracesBatch(csl(f,r,n,i,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(g),g.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget(),this._queue.splice(0,p),o-=p,s+=p,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(g.kind==="too-large"){if(p===1){this._queue.splice(0,1),o-=1,s+=1,this._recordDrop(1,"it is too large for the ingestion endpoint"),this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget();continue}let A=Math.max(1,Math.floor(p/2));g.measuredLocally?a=A:this._maxExportBatchSize=A,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${A}`);continue}if(g.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=oKt(),this._headBatchSize=p,m&&(this._headBatchFailures++,this._headBatchChargeableAt=_in()+this._nextFlushDelay()),this._headBatchFailures<usl)return this._logger.debug("Span export failed; retrying on the next flush",g.error),s;if(this._queue.splice(0,p),o-=p,s+=p,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget(),this._recordDrop(p,`the ingestion endpoint failed ${usl} times in a row`),this._retryAfter.isOpen())return s;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",g.error),this._queue.splice(0,p),o-=p,s+=p,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget(),this._recordDrop(p,"the ingestion endpoint rejected the batch")}return s}finally{this._warnAboutDrops()}}_flushInBackground(){this._backgroundFlush||(this._backgroundFlush=this.flush().catch(t=>{this._logger.debug("Background span flush failed",t)}).finally(()=>{this._backgroundFlush=void 0,this._armFlushTimerIfQueuedNoEarlierThan()}))}_armFlushTimerIfQueued(){this._flushTimer.pending||!this._queue.length||this._flushTimer.arm(this._nextFlushDelay())}_armFlushTimerIfQueuedNoEarlierThan(){this._queue.length&&this._flushTimer.armNoEarlierThan(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(sKt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var dKt=class{active(){return this._active}with(t,r){let n=this._active;this._active=t;try{return r()}finally{this._active=n}}};var Puh=5e3,Buh=512,Ruh=2048,Duh=128,kuh=128,Fuh=128,Nuh=8192,juh=1e4,zuh=36e5;function d1e(e,t){return typeof e=="number"&&Number.isInteger(e)&&e>=1?e:t}var psl=["service.name","service.version","deployment.environment"];function Quh(e){if(!(!e||typeof e!="object"||Array.isArray(e)))try{if(psl.every(r=>!(r in e)||typeof e[r]=="string"))return e;let t={...e};for(let r of psl)r in t&&typeof t[r]!="string"&&delete t[r];return t}catch{return}}function Muh(e,t){if(!e)return[];let r=[e].flat().filter(i=>!!i),n=r.filter(i=>typeof i=="function");return n.length!==r.length&&t?.critical(`beforeSpanSend: ignoring ${r.length-n.length} of ${r.length} entries that are not functions. Spans export without them, so whatever they were redacting is not redacted.`),n}function HXo(e,t,r){let n=Ghe({...t},Quh(e?.resourceAttributes)),i=d1e(e?.maxExportBatchSize,Buh);return{serviceName:n?.["service.name"]??e?.serviceName,serviceVersion:n?.["service.version"]??e?.serviceVersion,environment:n?.["deployment.environment"]??e?.environment,resourceAttributes:n,beforeSpanSend:Muh(e?.beforeSpanSend,r),maxAttributesPerSpan:d1e(e?.maxAttributesPerSpan,Duh),maxEventsPerSpan:d1e(e?.maxEventsPerSpan,kuh),maxAttributesPerEvent:Fuh,maxAttributeValueLength:d1e(e?.maxAttributeValueLength,Nuh),flushIntervalMs:d1e(e?.flushIntervalMs,Puh),maxExportBatchSize:i,maxQueueSize:Math.max(d1e(e?.maxQueueSize,Ruh),i),maxLiveSpans:d1e(e?.maxLiveSpans,juh),maxSpanAgeMs:d1e(e?.maxSpanAgeMs,zuh)}}var KXo=require("fs"),msl=require("fs/promises"),YXo=require("path"),hsl=require("readline"),Vin=new nO.ReduceableCache(25),mKt=new nO.ReduceableCache(20),XXo=7,Luh=1e3,_uh=1e4,JXo=10485760;async function gsl(e,t=msl.open,r){let n={},i;try{i=process.cwd()}catch{}for(let a=e.length-1;a>=0;a--){let c=e[a],u=c?.filename;if(!c||typeof u!="string"||typeof c.lineno!="number"||Wuh(u)||Huh(c)||!(0,YXo.isAbsolute)(u)&&i===void 0)continue;n[u]||(n[u]=[]),n[u].push(c.lineno)}let o=Object.keys(n);if(o.length==0)return e;let s=[];for(let a of o){let c=Asl(a,i);if(c===void 0||mKt.get(c))continue;let u=n[a];if(!u)continue;u.sort((d,f)=>d-f);let l=Juh(u);if(l.every(d=>Kuh(c,d)))continue;let p=Yuh(Vin,c,{});s.push(Vuh(a,l,p,c,t,r))}return await Promise.all(s).catch(()=>{}),e&&e.length>0&&Guh(e,Vin,i),Vin.reduce(),e}async function Uuh(e,t,r){let n,i=!1;try{n=await t(e,KXo.constants.O_RDONLY|KXo.constants.O_NONBLOCK);let o=await n.stat();return o.isFile()?o.size>JXo?void r?.debug(`Skipping source context for oversized file ${e}: ${o.size} bytes exceeds ${JXo}`):(i=!0,n):void 0}catch{return}finally{n&&!i&&await n.close().catch(()=>{})}}async function Vuh(e,t,r,n,i,o){let s=await Uuh(e,i,o);if(s===void 0)return void mKt.set(n,1);let a=s;return new Promise(c=>{let u=!1;function l(x){u||(u=!0,x?.destroy(),a.close().then(c,c))}let p;try{p=a.createReadStream({autoClose:!1,start:0,end:JXo-1})}catch{mKt.set(n,1),l();return}let d;try{d=(0,hsl.createInterface)({input:p})}catch{mKt.set(n,1),l(p);return}let f=0,m=0,g=t[m];if(g===void 0)return void l(p);let A=g[0],y=g[1];function I(){mKt.set(n,1),d.close(),d.removeAllListeners(),l(p)}p.on("error",I),d.on("error",I),d.on("close",()=>l(p)),d.on("line",x=>{if(f++,!(f<A)&&(r[f]=Xuh(x,0),f>=y)){if(m===t.length-1){d.close(),d.removeAllListeners();return}m++;let v=t[m];if(v===void 0){d.close(),d.removeAllListeners();return}A=v[0],y=v[1]}})})}function Guh(e,t,r){for(let n of e)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let i=Asl(n.filename,r),o=i===void 0?void 0:t.get(i);if(o===void 0)continue;quh(n.lineno,n,o)}}function quh(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=ysl(e);i<e;i++){let o=r[i];if(o===void 0)return void fsl(t);t.pre_context.push(o)}if(r[e]===void 0)return void fsl(t);t.context_line=r[e];let n=bsl(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 fsl(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Wuh(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Huh(e){return e.lineno!==void 0&&e.lineno>_uh||e.colno!==void 0&&e.colno>Luh}function Asl(e,t){return(0,YXo.isAbsolute)(e)?JSON.stringify([null,e]):t===void 0?void 0:JSON.stringify([t,e])}function Kuh(e,t){let r=Vin.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 Juh(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=dsl(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+XXo:(i.push(n),n=dsl(o)),t++}return i}function dsl(e){return[ysl(e),bsl(e)]}function ysl(e){return Math.max(1,e-XXo)}function bsl(e){return e+XXo}function Yuh(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function Xuh(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 Oft=require("path");function Esl(e=process.cwd()){let t=Oft.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,Oft.isAbsolute)(o.filename)&&(o.filename=r((0,Oft.relative)(n,r(o.filename))));return i}}var Isl="5.55.0";var Whe={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var m1e=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,r={}){let n=this._flags[t];return this._recordAccess(t),n?.enabled??r.defaultValue??!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?.hasExperiment!==void 0&&(i.$feature_flag_has_experiment=r.hasExperiment),r?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(i.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let o=[];this._errorsWhileComputing&&o.push(Whe.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(Whe.QUOTA_LIMITED),r===void 0&&o.push(Whe.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})}};var Zuh=6e4;function vsl(e){return e==="client"||e==="server"?e:"all"}function $uh(e,t){return e===t||e==="all"||t==="all"}var Pft=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}};function elh(e,t){e.name=t.name,Error.captureStackTrace(e,t),Object.setPrototypeOf(e,t.prototype)}var Ane=class e extends Error{constructor(t){super(t),elh(this,e)}},Gin=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.pollerStopped=!1,this.filteredOutFlagKeys=new Set,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.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}withEvaluationSnapshot(t){return t.definitions?t:{...t,evaluationCache:{},definitions:{featureFlagsByKey:this.featureFlagsByKey,groupTypeMapping:this.groupTypeMapping,cohorts:this.cohorts,filteredOutFlagKeys:this.filteredOutFlagKeys,propertyMatchingVersion:this.propertyMatchingVersion}}}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 Ane||u instanceof Zu?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=this.withEvaluationSnapshot({...t,definitions:void 0});return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a,{skipLoadCheck:!0});n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof Ane||u instanceof Zu?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(this.loadedSuccessfullyOnce&&(r=this.withEvaluationSnapshot(r)),o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};r=this.withEvaluationSnapshot(r),t=r.definitions.featureFlagsByKey[t.key]??t;let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=DXo(t.filters?.payloads,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 Zu("Flag has experience continuity enabled");let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=r.definitions.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Zu("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 Zu(`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}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!n.definitions.featureFlagsByKey)throw new Zu("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Zu(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Zu(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Zu(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=n.definitions.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Zu(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else if(n.definitions.filteredOutFlagKeys.has(c))i[c]=!1;else throw new Zu(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Zu(`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){i=this.withEvaluationSnapshot(i);let o=t.filters||{},s=await BXo(o.holdout,r);if(s!==void 0)return s;let a=o.groups||[],c=o.aggregation_group_type_index,u=o.early_exit??!1,{groups:l,groupProperties:p}=i,d=!1,f;for(let m of a)try{let g=m.aggregation_group_type_index!==void 0?m.aggregation_group_type_index:c,A=n,y=r;if(g!==c&&g!=null){let x=i.definitions.groupTypeMapping[String(g)];if(!x||!(x in l)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${t.key}': group type index ${g} not available`));continue}if(!(x in p)){d=!0;continue}A=p[x],y=l[x]}let I=await this.isConditionMatch(t,y,m,A,i);if(I==="match"){let x=m.variant,v=o.multivariate?.variants||[];f=x&&v.some(w=>w.key===x)?x:await this.getMatchingVariant(t,y)||!0;break}if(u&&I==="out_of_rollout_bound"){if(d)break;return!1}}catch(g){if(g instanceof Ane)throw g;if(g instanceof Zu)d=!0;else throw g}if(f!==void 0)return f;if(d)throw new Zu("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){o=this.withEvaluationSnapshot(o);let s=o.definitions,a=n.rollout_percentage,c=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let l=u.type,p=!1;if(l==="cohort"){let d=await xsl(u,i,s.cohorts,this.debugMode,f=>this.evaluateFlagDependency(f,i,o),s.propertyMatchingVersion);p=u.operator==="not_in"?!d:d}else p=l==="flag"?await this.evaluateFlagDependency(u,i,o):Csl(u,i,c,s.propertyMatchingVersion);if(!p)return"no_match"}if(a==null)return"match"}return a!=null&&await tKt(t.key,r)>a/100?"out_of_rollout_bound":"match"}async getMatchingVariant(t,r){return RXo(t.key,r,t.filters?.multivariate?.variants||[])}variantLookupTable(t){return Pin(t.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(t){if(!this.evaluationContexts||this.evaluationContexts.length===0)return t;let r=new Set(this.evaluationContexts);return t.filter(n=>{let i=n.evaluation_contexts??n.evaluation_tags;return!i||i.length===0?!0:i.some(o=>r.has(o))})}getEvaluationRuntimeForFlag(t){let r=this.featureFlagsByKey[t];return r?vsl(r.evaluation_runtime):void 0}getFlagKeysByEvaluationRuntime(t){return this.featureFlags.filter(r=>$uh(vsl(r.evaluation_runtime),t)).map(r=>r.key)}updateFlagState(t){let r=this.filterFlagsByEvaluationContexts(t.flags);this.featureFlags=r,this.featureFlagsByKey=r.reduce((i,o)=>(i[o.key]=o,i),{});let n=new Set(r.map(i=>i.key));this.filteredOutFlagKeys=new Set(t.flags.filter(i=>!n.has(i.key)).map(i=>i.key)),this.groupTypeMapping=t.group_type_mapping??t.groupTypeMapping??{},this.cohorts=t.cohorts,this.propertyMatchingVersion=t.property_matching_version??t.propertyMatchingVersion,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.((t.minimal_flag_called_events??t.minimalFlagCalledEvents)===!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(this.featureFlags),!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(){let t=this.pollingInterval??3e4;return this.shouldBeginExponentialBackoff?Math.min(Zuh,t*2**this.backOffCount):t}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);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 Pft(`Your project key or secret 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.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.propertyMatchingVersion=void 0,this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Pft(`Your secret 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 secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Pft(`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=n.group_type_mapping||{},o=n.minimal_flag_called_events===!0,s={flags:n.flags??[],group_type_mapping:i,cohorts:n.cohorts||{},minimal_flag_called_events:o,property_matching_version:n.property_matching_version,propertyMatchingVersion:n.property_matching_version,groupTypeMapping:i,minimalFlagCalledEvents:o};if(this.updateFlagState(s),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(s)}catch(a){this.onError?.(new Error(`Failed to store in cache: ${a}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(t){t instanceof Pft&&this.onError?.(t)}finally{!this.pollerStopped&&this.pollingInterval!==null&&(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}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}}async _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 o=new AbortController;n=zN(()=>{o.abort()},this.timeout),r.signal=o.signal}let i=()=>clearTimeout(n);try{let o=this.fetch,s=await o(t,r);return s.status!==200?(i(),s):{status:s.status,headers:s.headers,body:s.body,text:async()=>{try{return await s.text()}finally{i()}},json:async()=>{try{return await s.json()}finally{i()}}}}catch(o){throw i(),o}}async stopPoller(t=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await p1e(r,t,()=>{throw new Error(`Cache shutdown timeout after ${t}ms`)})}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};function Csl(e,t,r,n){return PXo(e,t,{warnFunction:r,propertyMatchingVersion:n})}function tlh(e,t){if(!(e in t))throw new Ane(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function xsl(e,t,r,n=!1,i,o){let s=String(e.value);tlh(s,r);let a=r[s];return wsl(a,t,r,n,i,o)}async function wsl(e,t,r,n=!1,i,o){if(!e)return!0;let s=e.type,a=e.values;if(!a||a.length===0)return!0;let c=!1;if("values"in a[0]){for(let u of a)try{let l=await wsl(u,t,r,n,i,o);if(s==="AND"){if(!l)return!1}else if(l)return!0}catch(l){if(l instanceof Ane)throw l;if(l instanceof Zu)n&&console.debug(`Failed to compute property ${u} locally: ${l}`),c=!0;else throw l}if(c)throw new Zu("Can't match cohort without a given cohort property value");return s==="AND"}for(let u of a)try{let l;if(u.type==="cohort")l=await xsl(u,t,r,n,i,o);else if(u.type==="flag"){if(!i)throw new Zu(`Flag dependency '${u.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);l=await i(u)}else l=Csl(u,t,void 0,o);let p=u.negation||!1;if(s==="AND"){if(!l&&!p||l&&p)return!1}else if(l&&!p||!l&&p)return!0}catch(l){if(l instanceof Ane)throw l;if(l instanceof Zu)n&&console.debug(`Failed to compute property ${u} locally: ${l}`),c=!0;else throw l}if(c)throw new Zu("can't match cohort without a given cohort property value");return s==="AND"}var rlh=["--unhandled-rejections","--unhandled_rejections"],nlh=new Set(["throw","strict","warn","warn-with-error-code","none"]),ilh=[...globalThis.process?.execArgv??[]],olh=globalThis.process?.env?.NODE_OPTIONS;function slh(e){let t=[],r="",n=!1;for(let i=0;i<e.length;i++){let o=e[i];o==="\\"&&n&&i+1<e.length?r+=e[++i]:o!==" "||n?o==='"'?n=!n:r+=o:r&&(t.push(r),r="")}return r&&t.push(r),t}function Ssl(e){let t;for(let r=0;r<e.length;r++){let n=e[r],i=rlh.find(s=>n===s||n.startsWith(`${s}=`));if(!i)continue;let o=n===i?e[++r]:n.slice(i.length+1);nlh.has(o)&&(t=o)}return t}function alh(e=ilh,t=olh){return Ssl(e)??Ssl(slh(t??""))??"throw"}var Tsl=alh();function Osl(e,t,r){e(t,{mechanism:{type:r==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function clh(e,t){let r=!1;return Object.assign((n,i)=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length;Osl(e,n,i),!r&&o===0&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function Psl(e,t,r=Tsl){let n=globalThis.process;if(n){if(r==="strict")return void n.on("uncaughtExceptionMonitor",(i,o)=>Osl(e,i,o));n.on("uncaughtException",clh(e,t))}}function Bsl(e,t=Tsl){let r=globalThis.process;!r||t==="throw"||t==="strict"||t==="warn-with-error-code"||r.on("unhandledRejection",n=>{e(n,{mechanism:{type:"onunhandledrejection",handled:!1}})})}var ulh=2e3,ZXo=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new uin({..._il(r),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return MHt(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i,o){let s={...o},a=t.buildFromUnknown(r,n);a.$exception_list=await t.modifyFrames(a.$exception_list);let c=nO.getInjectedReleaseId();return c&&(s.$release_id=c),{event:"$exception",distinctId:i,properties:{...a,...s},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(Psl(this.onException.bind(this),this.onFatalError.bind(this)),Bsl(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(this.client.getErrorPropertiesBuilder(),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._capturePreparedEvent(n,!1)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(ulh),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},E5e=ZXo;var qin=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};function llh(e){return e==="v0"||e==="v1"}function Rsl(){let e="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return llh(e)?e:"v0"}var plh="$ai_",hKt="analytics";function Dsl(e){return typeof e.event=="string"&&e.event.startsWith(plh)}var Bft=class e extends Error{constructor({requestId:t,drops:r,retryExhausted:n,cause:i}){super(e.buildMessage(t,r,n,i)),this.name="CaptureV1Error",this.requestId=t,this.drops=r,this.retryExhausted=n,this.cause=i}static buildMessage(t,r,n,i){let o=`Capture V1 batch ${t} did not fully deliver: ${r.length} dropped, ${n.length} undelivered`;return i instanceof Error&&(o+=` (${i.message})`),o}};function $Xo(e){if(typeof e=="boolean")return e;if(typeof e=="number")return e!==0;if(typeof e=="string"){let t=e.trim().toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1}}function flh(e){return typeof e=="string"?e:void 0}var dlh=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:$Xo},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:$Xo},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:$Xo},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:flh}],mlh=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function hlh(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function glh(e){if(typeof e=="string"){let r=new Date(e);if(Number.isNaN(r.getTime()))return new Date().toISOString();let n=r.toISOString(),i=e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1];return i&&i.length>3?n.replace(/\.\d{3}Z$/,`.${i}Z`):n}if(e instanceof Date)return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString();let t=e==null?new Date:new Date(e);return Number.isNaN(t.getTime())?new Date().toISOString():t.toISOString()}function ksl(e,t,r){r!==void 0&&!(t in e)&&(e[t]=r)}function Alh(e){let r={...hlh(e.properties)?e.properties:{}},n={};for(let{property:o,optionKey:s,coerce:a}of dlh)if(o in r){let c=a(r[o]);c!==void 0&&(n[s]=c),delete r[o]}let i={};for(let{property:o,field:s}of mlh)if(o in r){let a=r[o];typeof a=="string"&&(i[s]=a),delete r[o]}return delete r.$lib,delete r.$lib_version,ksl(r,"$set",e.$set),ksl(r,"$set_once",e.$set_once),{event:String(e.event??""),uuid:String(e.uuid??""),distinct_id:String(e.distinct_id??""),timestamp:glh(e.timestamp),...i,options:n,properties:r}}function Fsl(e,{createdAt:t,historicalMigration:r}){let n={created_at:t,batch:e.map(Alh)};return r&&(n.historical_migration=!0),n}var ylh="/i/v1/analytics/events",blh=3e4,Elh=new Set([408,500,502,503,504]),Win=class{constructor(t,r){this.config=t,this.maxBackoffMs=t.maxBackoffMs??blh,this.fetchFn=r.fetch,this.onError=r.onError,this.now=r.now??Date.now,this.sleep=r.sleep??(n=>new Promise(i=>zN(i,n))),this.generateRequestId=r.generateRequestId??jN,this.compress=r.compress??ZHt}async sendV1Batch(t){if(t.length===0)return;let r=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:i}=Fsl(t,{createdAt:n,historicalMigration:this.config.historicalMigration}),o=`${this.config.host}${ylh}`,s=[],a=i,c=Math.max(1,this.config.maxAttempts);for(let u=1;u<=c;u++){let l=u===c,p=u1e({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),d,f;try{d=await this.sendOnce(o,p,u,r);let{response:m,signal:g}=d,{status:A}=m;if(A<200||A>=300)if(!l&&Elh.has(A)){let y=this.parseRetryAfter(m);await d.waitFor(d.cancelBody()).catch(()=>{}),f=this.backoffDelay(u,y)}else{let y=await this.buildHttpError(m,A,d.waitFor);return this.surfaceBatchFailure(r,s,a,y)}else{let y;try{y=await d.waitFor(this.parseResponse(m))}catch(v){if(g.aborted)throw v;return this.surfaceBatchFailure(r,s,a,new Error(`Capture V1 returned an unparseable ${A} response body`))}let I=this.classify(a,y,s);if(I.length===0)return this.surfacePartialDrops(r,s);if(l)return void this.onError(new Bft({requestId:r,drops:s,retryExhausted:I.map(v=>v.uuid)}));a=I;let x=this.parseRetryAfter(m);f=this.backoffDelay(u,x)}}catch(m){if(d&&!d.signal.aborted)throw m;if(l)return this.surfaceBatchFailure(r,s,a,m);f=this.backoffDelay(u)}finally{d?.cleanup()}f!==void 0&&await this.sleep(f)}}async sendOnce(t,r,n,i){let o=this.buildHeaders(n,i),s=r;if(this.config.compressionEnabled){let p=await this.compress(r,this.config.isDebug);p!==null&&(s=p,o["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",u,l=new Promise((p,d)=>{u=zN(()=>{let f=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);f.name="AbortError",d(f),a.abort(f)},this.config.requestTimeoutMs)});try{let p=this.fetchFn(t,{method:"POST",headers:o,body:s,signal:a.signal}),d=!1;p.then(y=>{a.signal.aborted&&!d&&this.cancelBody(y)}).catch(()=>{});let f=await Promise.race([p,l]);d=!0,c="while reading the response body";let m=!1,g,A=()=>g??=this.cancelBody(f);return{response:f,signal:a.signal,waitFor:y=>Promise.race([y,l]),cancelBody:A,cleanup:()=>{m||(m=!0,clearTimeout(u),a.signal.aborted&&A())}}}catch(p){throw clearTimeout(u),p}}buildHeaders(t,r){let n=`${this.config.libraryId}/${this.config.libraryVersion}`,i={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":n,"PostHog-Attempt":String(t),"PostHog-Request-Id":r,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};return this.config.userAgent&&(i["User-Agent"]=this.config.userAgent),i}classify(t,r,n){let i=r.results??{},o=[];for(let s of t){let a=i[s.uuid];a&&(a.result==="drop"?n.push({uuid:s.uuid,details:a.details??void 0}):a.result==="retry"&&o.push(s))}return o}backoffDelay(t,r){let n=Math.min(this.config.initialRetryDelayMs*2**(t-1),this.maxBackoffMs);return r===void 0?n:Math.max(n,Math.min(r,this.maxBackoffMs))}parseRetryAfter(t){let r=t.headers?.get("Retry-After");if(!r)return;let n=r.trim();if(/^\d+$/.test(n)){let s=parseInt(n,10);return Number.isFinite(s)&&s>0?1e3*s:void 0}let i=Date.parse(n);if(Number.isNaN(i))return;let o=i-this.now();return o>0?o:void 0}async parseResponse(t){let r=await t.text(),n=JSON.parse(r);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("unexpected response shape");let i=n.results;if(i!==void 0&&(typeof i!="object"||i===null||Array.isArray(i)))throw new Error("unexpected results shape");return{results:i??{}}}async buildHttpError(t,r,n){let i="";try{i=(await n(t.text())).slice(0,512)}catch{}let o=i?`: ${i}`:"";return new Error(`Capture V1 request failed with HTTP ${r}${o}`)}surfaceBatchFailure(t,r,n,i){this.onError(new Bft({requestId:t,drops:r,retryExhausted:n.map(o=>o.uuid),cause:i}))}surfacePartialDrops(t,r){r.length>0&&this.onError(new Bft({requestId:t,drops:r,retryExhausted:[]}))}async cancelBody(t){try{await t.body?.cancel()}catch{}}};var I5e="ai-capture",Hin="/i/v0/ai/batch/";var vlh=new TextEncoder;function tZo(e){return vlh.encode(u1e(e)).length}function Nsl(e,t=8388608,r=5242880){let n=[],i=[],o=[],s=0;for(let a of e){if(a===void 0)continue;let c=tZo(a);if(c>t){i.push({event:typeof a.event=="string"?a.event:"unknown",bytes:c});continue}o.length>0&&s+c>r&&(n.push(o),o=[],s=0),o.push(a),s+=c}return o.length>0&&n.push(o),{batches:n,dropped:i}}var Clh=100,jsl=3e4,xlh=5e4,wlh=50,Slh=500,Tlh="https://us.i.posthog.com",zsl=new Set;function Jin(e,t){zsl.has(e)||(zsl.add(e),console.warn(`[PostHog] ${t}`))}function Olh(e){return typeof e=="string"?e.trim():""}function Plh(e){return(typeof e=="string"?e.trim():"")||void 0}function Blh(e){return(typeof e=="string"?e.trim():"")||Tlh}function Rlh(e){return(Array.isArray(e)?e:[e]).filter(r=>typeof r=="string"&&r.trim().length>0)}function Dlh(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 Yin=class extends $Ht{constructor(t,r={}){let n=Olh(t),i={...r,maxQueueSize:r.maxQueueSize??1e4,flushInterval:r.flushInterval??5e3,host:Blh(r.host),personalApiKey:Plh(r.secretKey??r.personalApiKey)};if(super(n,i),this._memoryStorage=new qin,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=i,this.captureMode=Rsl(),this.enableFullAiCapture=i.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,Clh):i.featureFlagsPollingInterval===null?null:jsl,typeof i.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(i.waitUntilDebounceMs,0)),typeof i.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(i.waitUntilMaxWaitMs,0)),!this.disabled&&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 Gin({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)},onMinimalFlagCalledEvents:s=>{this._minimalFlagCalledEvents=s},customHeaders:this.getCustomHeaders(),cacheProvider:i.flagDefinitionCacheProvider,strictLocalEvaluation:i.strictLocalEvaluation,evaluationContexts:i.evaluationContexts??i.evaluationEnvironments}))}this.errorTracking=new E5e(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||xlh}enqueue(t,r,n,i){super.enqueue(t,r,n,i),this.scheduleDebouncedFlush()}_flushEventsAndSpans(t=!1){let r=this.flushWithPendingPromises();return!this._traces||t&&this._traces.throttled?r:UHt([r,this._traces.flush().catch(()=>{})]).then(([n])=>{if(n.status==="rejected")throw n.reason})}flushAutomatic(){return this._flushKeepingRuntimeAlive(!0)}async flush(){return this._flushKeepingRuntimeAlive(!1)}_flushKeepingRuntimeAlive(t){let r=this._flushEventsAndSpans(t),n=this.options.waitUntil;if(n&&!this._waitUntilCycle)try{n(r.catch(()=>{}))}catch{}return r}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??Slh,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??wlh;this._waitUntilCycle.timer=zN(()=>{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 this._flushEventsAndSpans()}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)}getQueueRouteKey(t){return this.captureMode==="v1"&&Dsl(t)?"ai":hKt}persistedQueueKeyForRoute(t){return t===I5e?OM.AiCaptureQueue:t==="ai"?OM.AiQueue:OM.Queue}getActiveQueueRoutes(){let t=this.captureMode==="v1"?[hKt,"ai"]:[hKt];return this._aiCaptureRouteActive&&t.push(I5e),t}getBatchEndpointPath(t){return t===I5e?Hin:super.getBatchEndpointPath(t)}async sendBatch(t,r,n=hKt){if(n===I5e)return this.sendAiCaptureBatch(t,r);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(t,r,n);let i=t.filter(o=>o!==void 0);await this.getV1Sender().sendV1Batch(i)}async sendAiCaptureBatch(t,r){let{batches:n,dropped:i}=Nsl(t);for(let{event:o,bytes:s}of i){let a=`Event ${o} (${s} bytes) exceeds the ${8388608/1048576}MiB limit for ${Hin}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let o of n)await this.sendAiSubBatch(o,r)}async sendAiSubBatch(t,r){try{await super.sendBatch(t,r,I5e)}catch(n){if(!wft(n))throw n;if(t.length===1){let[o]=t,a=`Event ${typeof o.event=="string"?o.event:"unknown"} (${tZo(o)} bytes) was rejected with 413 by ${Hin} on its own, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a));return}let i=Math.ceil(t.length/2);await this.sendAiSubBatch(t.slice(0,i),r),await this.sendAiSubBatch(t.slice(i),r)}}getV1Sender(){return this._v1Sender||(this._v1Sender=new Win({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3e3,isDebug:this.isDebug},{fetch:(t,r)=>this.fetch(t,r),onError:t=>this._events.emit("error",t),compress:t=>this.compressPayload(t)})),this._v1Sender}getLibraryVersion(){return Isl}get metrics(){return this._metrics||(this._metrics=new cKt(this,Rin(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new dKt}hostResourceAttributes(){return{}}get _spanContextManager(){return this._spanContext||(this._spanContext=this.initializeSpanContextManager()),this._spanContext}get _tracesPipeline(){if(this.options.traces)return this._traces||(this._traces=new fKt(this,HXo(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let t=this.context?.get();return{distinctId:t?.distinctId,sessionId:t?.sessionId}}startSpan(t,r){return this._tracesPipeline?.startSpan(t,r)??f1e(r,this._spanContextManager.active())}withSpan(t,r,n){let i=typeof r=="function"?void 0:r,o=typeof r=="function"?r:n,s=this._tracesPipeline;return s?i?s.withSpan(t,i,o):s.withSpan(t,o):pKt(this._spanContextManager,f1e(i,this._spanContextManager.active()),o)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let t=super.getCommonEventProperties();return(this.options.isServer??!0)&&(t.$is_server=!0),t}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}_warnIfInvalidCapture(t,r,n){typeof t=="string"&&this._logger.warn(r),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(t,r,n,i,o){return this.addPendingPromise(this._prepareEventMessage(r,i).then(({distinctId:s,event:a,properties:c,options:u})=>{let l={timestamp:u.timestamp,disableGeoip:u.disableGeoip,uuid:u.uuid},p={distinctId:s,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(t,p,l,o):this.enqueue(t,p,l,o)}).catch(s=>{s&&console.error(s)}))}_capturePreparedEvent(t,r){return this._sendPreparedEvent("capture",t,r)}capture(t){this._warnIfInvalidCapture(t,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(t,!1)}async captureImmediate(t){return this._warnIfInvalidCapture(t,"Called captureImmediate() with a string as the first argument when an object was expected.","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._capturePreparedEvent(t,!0)}captureAi(t){if(this.disabled)return;let r=g5e(t.uuid,jN);return this._sendPreparedAiEvent({...t,uuid:r},!1),r}async captureAiImmediate(t){if(this.disabled)return;let r=g5e(t.uuid,jN);return await this._sendPreparedAiEvent({...t,uuid:r},!0),r}_sendPreparedAiEvent(t,r){return typeof t?.event=="string"&&!t.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${t.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",t,r,void 0,I5e)}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};this._sendPreparedEvent("identify",{distinctId:t,event:"$identify",properties:l,disableGeoip:n},!1,{includeContextProperties:!1})}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 this._sendPreparedEvent("identify",{distinctId:t,event:"$identify",properties:l,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:t,properties:r={},propertiesOnce:n={}}){if(Object.keys(r).length===0&&Object.keys(n).length===0)return;let i={};Object.keys(r).length>0&&(i.$set=r),Object.keys(n).length>0&&(i.$set_once=n),this.capture({distinctId:t,event:"$set",properties:i})}unsetPersonProperties({distinctId:t,properties:r}){let n=Rlh(r);n.length!==0&&this.capture({distinctId:t,event:"$set",properties:{$unset:n}})}alias(t){this._sendPreparedEvent("alias",{distinctId:t.distinctId,event:"$create_alias",properties:{distinct_id:t.distinctId,alias:t.alias},disableGeoip:t.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(t){await this._sendPreparedEvent("alias",{distinctId:t.distinctId,event:"$create_alias",properties:{distinct_id:t.distinctId,alias:t.alias},disableGeoip:t.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}getFeatureFlagEvaluationRuntime(t){return this.featureFlagsPoller?.getEvaluationRuntimeForFlag(t)}getFeatureFlagKeysByEvaluationRuntime(t){return this.featureFlagsPoller?.getFlagKeysByEvaluationRuntime(t)??[]}async waitForLocalEvaluationReady(t=jsl){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){if(this.disabled)return void this._logger.warn("The client is disabled");let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let R=this._flagOverrides[t];if(R===void 0)return;let D=this._payloadOverrides?.[t];return{key:t,enabled:R!==!1,variant:typeof R=="string"?R:void 0,payload:D}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,this.personPropertiesForLocalEvaluation(r,u),l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,g,A,y,I,x,v,w;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let R=this.featureFlagsPoller?.featureFlagsByKey[t];if(R)try{let D=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(R,d,{matchValue:i});if(D){m=!0;let O=D.value;I=R.id,v="Evaluated locally",w=R.has_experiment,f={key:t,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:D.payload??void 0,reason:v,reasonCode:R.active===!1?"flag_disabled":void 0}}}catch(D){if(D instanceof Ane||D instanceof Zu)this._logger?.info(`${D.name} when computing flag locally: ${t}: ${D.message}`);else throw D}}if(!m&&!c){let R=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,u,l,a,[t]);if(R===void 0)y=Whe.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=R.minimalFlagCalledEvents===!0,g=R.requestId,A=R.evaluatedAt;let D=[];R.errorsWhileComputingFlags&&D.push(Whe.ERRORS_WHILE_COMPUTING),R.quotaLimited?.includes("feature_flags")&&D.push(Whe.QUOTA_LIMITED);let O=R.flags[t];if(O===void 0)D.push(Whe.FLAG_MISSING);else{I=O.metadata?.id,x=O.metadata?.version,v=O.reason?.description??O.reason?.code,w=O.metadata?.has_experiment;let z;if(O.metadata?.payload!==void 0)try{z=JSON.parse(O.metadata.payload)}catch{z=O.metadata.payload}f={key:t,enabled:O.enabled,variant:O.variant??void 0,payload:z,reason:v,reasonCode:O.reason?.code}}D.length>0&&(y=D.join(","))}}if(o){let R=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,D={$feature_flag:t,$feature_flag_response:R,$feature_flag_id:I,$feature_flag_version:x,$feature_flag_reason:v,locally_evaluated:m,[`$feature/${t}`]:R,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(w!==void 0&&(D.$feature_flag_has_experiment=w),m&&this.featureFlagsPoller){let O=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();O!==void 0&&(D.$feature_flag_definitions_loaded_at=O)}y&&(D.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:R,groups:s,disableGeoip:a,properties:D})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){Jin("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(Jin("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.disabled)return void this._logger.warn("The client is disabled");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){Jin("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:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{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,this.personPropertiesForLocalEvaluation(n,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,u,l,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 m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:o,disableGeoip:s}=i||{},a=i?.flagKeys??void 0;if(a?.length===0)return new m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:{}});let{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,this.personPropertiesForLocalEvaluation(n,u),l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=a?new Set(a):void 0,m={},g,A,y=!1,I=!1,x=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),v=new Set;if(x)for(let[R,D]of Object.entries(x.response)){let O=this.featureFlagsPoller?.featureFlagsByKey[R];m[R]={key:R,enabled:D!==!1,variant:typeof D=="string"?D:void 0,payload:x.payloads[R],id:O?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:O?.has_experiment},v.add(R)}let w=f!==void 0&&Array.from(f).some(R=>this.featureFlagsPoller?.featureFlagsByKey[R]===void 0);if((x?x.fallbackToFlags||w:!0)&&!c){let R=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,u,l,s,a);if(R){this._minimalFlagCalledEvents=R.minimalFlagCalledEvents===!0,g=R.requestId,A=R.evaluatedAt,y=!!R.errorsWhileComputingFlags,I=Array.isArray(R.quotaLimited)&&R.quotaLimited.includes("feature_flags");for(let[D,O]of Object.entries(R.flags)){if(v.has(D))continue;let z;if(O.metadata?.payload!==void 0)try{z=JSON.parse(O.metadata.payload)}catch{z=O.metadata.payload}m[D]={key:D,enabled:O.enabled,variant:O.variant,payload:z,id:O.metadata?.id,version:O.metadata?.version,reason:O.reason?.description??O.reason?.code,locallyEvaluated:!1,hasExperiment:O.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[R,D]of Object.entries(this._flagOverrides)){if(D===void 0){delete m[R];continue}let O=m[R];m[R]={key:R,enabled:D!==!1,variant:typeof D=="string"?D:void 0,payload:O?.payload,id:O?.id,version:O?.version,reason:O?.reason,locallyEvaluated:O?.locallyEvaluated??!1,hasExperiment:O?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[R,D]of Object.entries(this._payloadOverrides)){let O=m[R];O&&(m[R]={...O,payload:D})}if(f!==void 0)for(let R of Object.keys(m))f.has(R)||delete m[R];return new m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:m,requestId:g,evaluatedAt:A,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:y,quotaLimited:I})}_shouldSendMinimalFlagCalledEvent(t,r){return t==="$feature_flag_called"&&this._minimalFlagCalledEvents&&r.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(t){let{distinctId:r,key:n,response:i,groups:o,disableGeoip:s,properties:a}=t,c=o&&Object.keys(o).length>0?`_${JSON.stringify(Object.entries(o).sort(([l],[p])=>l<p?-1:l>p?1:0))}`:"",u=`${n}_${i}${c}`;r in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[r].has(u)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),this.distinctIdHasSentFlagCalls[r]instanceof Set?this.distinctIdHasSentFlagCalls[r].add(u):this.distinctIdHasSentFlagCalls[r]=new Set([u]),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}){this._sendPreparedEvent("capture",{distinctId:i||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{}},disableGeoip:o},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){await this._sendPreparedEvent("capture",{distinctId:i||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{}},disableGeoip:o},!0,{includeContextProperties:!1})}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=Date.now()+(t??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),this._metrics&&(await p1e(this._metrics.flush().catch(()=>{}),Math.max(0,r-Date.now())),this._metrics.reset()),this._traces&&(await p1e(this._traces.flush().catch(()=>{}),Math.max(0,r-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,r-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},n?.()}}async _requestRemoteConfigPayload(t){if(this.disabled||!this.apiKey||!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=zN(()=>{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(Qil(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){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");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={...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}personPropertiesForLocalEvaluation(t,r){return{distinct_id:t,...r||{}}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i,o){if(!E5e.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise(E5e.buildEventMessage(this.getErrorPropertiesBuilder(),t,{syntheticException:s},r,n).then(a=>this._capturePreparedEvent({...a,uuid:i,flags:o},!1)))}}async captureExceptionImmediate(t,r,n,i){if(!E5e.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise(E5e.buildEventMessage(this.getErrorPropertiesBuilder(),t,{syntheticException:o},r,n).then(s=>this.captureImmediate({...s,flags:i})))}}async prepareEventMessage(t){return this._prepareEventMessage(t)}async _prepareEventMessage(t,r={}){let{distinctId:n,event:i,properties:o,groups:s,flags:a,sendFeatureFlags:c,timestamp:u,disableGeoip:l,uuid:p}=t,d=this.context?.get(),f=r.includeContextProperties??!0,m=n||d?.distinctId,g=f?{...this.props,...d?.properties||{},...o||{}}:{...o||{}};m||(m=jN(),g.$process_person_profile=!1),f&&d?.sessionId&&!g.$session_id&&(g.$session_id=d.sessionId);let A=this._shouldSendMinimalFlagCalledEvent(i,g)?YHt(g):g,y=this._runBeforeSend({distinctId:m,event:i,properties:A,groups:s,flags:a,sendFeatureFlags:c,timestamp:u,disableGeoip:l,uuid:p});if(!y)return Promise.reject(null);let I=await Promise.resolve().then(async()=>{if(a)return c&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),a._getEventProperties();if(c){Jin("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 x=typeof c=="object"?c:void 0,v=await this.getFeatureFlagsForEvent(y.distinctId,s,l,x);return Dlh(v)}return{}}).catch(()=>({})).then(x=>{let v=y.groups||s;return{...x,...y.properties||{},...v!==void 0&&Object.keys(v).length>0?{$groups:v}:{}}});return y.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof I.$raw_user_agent=="string"&&Lil(I.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(y.event="$bot_pageview",I.$browser_type="bot"),{distinctId:y.distinctId,event:y.event,properties:I,options:{timestamp:y.timestamp,disableGeoip:y.disableGeoip,uuid:y.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)try{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)}}catch(s){return this._logger.error(`Error in before_send function for event '${t.event}':`,s),null}return i}};var Qsl=require("async_hooks"),Xin=class{constructor(){this.storage=new Qsl.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 Msl=require("async_hooks"),Zin=class{active(){return this._storage.getStore()}with(t,r){return this._storage.run(t,r)}constructor(){this._storage=new Msl.AsyncLocalStorage}};var Lsl=require("zlib"),_sl=require("util"),klh=(0,_sl.promisify)(Lsl.gzip);async function Usl(e,t=!0){try{let r=await klh(e);return new Uint8Array(r)}catch(r){return t&&console.error("Failed to gzip compress data",r),null}}var $in=require("os");function Vsl(){let e,t;try{e=(0,$in.platform)(),t=(0,$in.release)()}catch{}return jXo(e,t)}var Gsl="posthog-node";function Flh(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[rZo.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(g=>({...g,stacktrace:g.stacktrace?{...g.stacktrace,type:"raw",frames:(g.stacktrace.frames||[]).map(A=>({...A,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},m=nO.getInjectedReleaseId();return m&&(f.$release_id=m),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 rZo=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(t,r,n,i,o){this.name=Gsl,this.name=Gsl,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(Flh(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};var yne=class extends Yin{getLibraryId(){return"posthog-node"}compressPayload(t){return Usl(t,this.isDebug)}initializeContext(){return new Xin}initializeSpanContextManager(){return new Zin}hostResourceAttributes(){return Vsl()}createErrorPropertiesBuilder(){return new nO.ErrorPropertiesBuilder([new nO.EventCoercer,new nO.ErrorCoercer,new nO.ObjectCoercer,new nO.StringCoercer,new nO.PrimitiveCoercer],nO.createStackParser("node:javascript",nO.nodeStackLineParser),[kil(),t=>gsl(t,void 0,this._logger),Esl()])}};function qsl(e){return e==null||!e.enabled?!1:e.variant==null||e.variant==="true"}var eon=class{isEnabled(){return Promise.resolve(!1)}getCachedValue(){}flush(){return Promise.resolve()}},Nlh="feature_flag_evaluated",jlh=3e3,zlh=3e3,ton=class{evaluator;environment;sendFeatureFlagEvents;pending=new Map;resolved=new Map;constructor({environment:t,sendFeatureFlagEvents:r,posthogApiKey:n,evaluator:i}){this.environment=t,this.sendFeatureFlagEvents=r,this.evaluator=i??new yne(n??"",{featureFlagsRequestTimeoutMs:jlh,isServer:!1})}isEnabled(t,r){let n=Wsl(t,r),i=this.pending.get(n);if(i!=null)return i;let o=this.evaluateAndRemember(t,r,n);return this.pending.set(n,o),o}async evaluateAndRemember(t,r,n){let i=await this.evaluate(t,r);return this.resolved.set(n,i),i}getCachedValue(t,r){return this.resolved.get(Wsl(t,r))}async flush(){if(!this.sendFeatureFlagEvents)return;let t;try{await Promise.race([this.flushAfterPendingEvaluations(),new Promise(r=>{t=setTimeout(r,zlh),t.unref()})])}catch{}finally{clearTimeout(t)}}async flushAfterPendingEvaluations(){await Promise.allSettled(this.pending.values()),await this.evaluator.flush()}async evaluate(t,r){let{org:n}=r,i=Mlh(r,this.environment),o;try{o=await this.evaluator.getFeatureFlagResult(t,nZo(n),{personProperties:i,groups:{organization:n},groupProperties:{organization:i},sendFeatureFlagEvents:!1})}catch{return!1}return this.sendFeatureFlagEvents&&this.captureFlagUsage({flag:t,org:n,result:o,properties:i}),qsl(o)}captureFlagUsage({flag:t,org:r,result:n,properties:i}){let o=Qlh(n),s={...i,...n?.reason!=null?{$feature_flag_reason:n.reason}:{},version:"5.167.0"};this.tryCapture({distinctId:nZo(r),event:"$feature_flag_called",groups:{organization:r},properties:{...s,$feature_flag:t,$feature_flag_response:o,[`$feature/${t}`]:o}}),this.tryCapture({distinctId:nZo(r),event:Nlh,groups:{organization:r},properties:{...s,flag:t,response:o,enabled:qsl(n)}})}tryCapture(t){try{this.evaluator.capture(t)}catch{}}};function Qlh(e){if(e!=null)return e.enabled?e.variant??!0:!1}function nZo(e){return`org:${e}`}function Mlh({org:e,generator:t,language:r},n){return{org:e,environment:n,...t!=null?{generator:t}:{},...r!=null?{language:r}:{}}}function Wsl(e,{org:t,generator:r,language:n}){return JSON.stringify([e,t,r??null,n??null])}var ron;function non(){return ron==null&&(ron=Llh()),ron}async function iZo(){await ron?.flush()}function Llh(){let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";return e==null||e.trim().length===0?new eon:new ton({posthogApiKey:e,environment:FJ(),sendFeatureFlagEvents:oin()})}var ion=class{posthog;constructor({posthogApiKey:t}){this.posthog=new yne(t,{isServer:!1})}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.167.0",usingAccessToken:!0,cliReleaseEnvironment:FJ(),...Ppe()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:{...t.properties,cliReleaseEnvironment:FJ()}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var gKt=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};kd();er();var Rft=require("fs/promises"),Hsl=require("os"),Ksl=require("path");iVe();var _lh="id",Ulh=".fern",AKt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new yne(r,{isServer:!1}),this.userId=t==null?void 0:J9o(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.167.0",...t,...t.properties,usingAccessToken:!1,cliReleaseEnvironment:FJ(),agent:oHr(),...r!=null?{userEmail:r}:{},...Ppe()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:{...t.properties,cliReleaseEnvironment:FJ()}})}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 Kf({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=WS(),r=De(_t.of((0,Hsl.homedir)()),be.of(Ulh),be.of(_lh));try{await Ut(r)?this.persistedDistinctId=(await(0,Rft.readFile)(r)).toString():(await(0,Rft.mkdir)((0,Ksl.dirname)(r),{recursive:!0}),await(0,Rft.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var oZo;async function yKt(){return oZo==null&&(oZo=await Vlh()),oZo}async function Vlh(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";if(e==null||!oin())return new gKt;let t=await Ult();return t!=null?new AKt({token:t,posthogApiKey:e}):await EM()!=null?new ion({posthogApiKey:e}):new AKt({token:void 0,posthogApiKey:e})}catch{return new gKt}}On();Ct();kt();h8();var bKt=Ae(require("process"),1);sZe();var Xsl=Ae(w3o(),1),Zsl=Ae(Ysl(),1);function iO(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=uH(e),e.length===0))return 0;e=e.replace((0,Zsl.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(Xsl.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}On();function oon(e){let t=0;for(let r of e.split(`
|
|
3459
|
+
at ${r.filename}:${n}:${i}`}};var hch=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,qHt=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(hch);return i&&(r=i[1],n=i[2]),[r,n]}};var vol=["fatal","error","warning","log","info","debug"];function vin(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 WHt=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:this.getStack(t)??r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){if(Eft(t))return t.constructor.name;let r="name"in t?t.name:void 0;return rk(r)&&!$Yo(r)?r:"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=vin(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return rk(t)&&!$Yo(t)&&vol.indexOf(t)>=0}getStack(t){try{return rk(t.stacktrace)&&t.stacktrace.length>0?t.stacktrace:rk(t.stack)&&t.stack.length>0?t.stack:void 0}catch{return}}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(l1e(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var AXo=class{match(t){return Eft(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${vin(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var HHt=class{match(t){return ain(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var yXo=class{match(t){return m5e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Eft(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 ain(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 bXo=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 KHt={MESSAGE:"$message",TIMESTAMP:"$timestamp"},gch=new Set([KHt.MESSAGE,KHt.TIMESTAMP]),Cin={enabled:!0,max_bytes:32768};function EXo(e){return e?{enabled:e.enabled??Cin.enabled,max_bytes:ych(e.max_bytes,Cin.max_bytes)}:{...Cin}}function Ach(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>gch.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var IXo=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=EXo(t)}setConfig(t){this._config=EXo(t),this._trimToMaxBytes()}add(t){let r=bch(t);if(!r)return;let n=Col(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 ych(e,t){if(!bft(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function bch(e){let t;try{t=u1e(e)}catch{return}try{let r=JSON.parse(t);if(!MHt(r))return;let n=r,i=n[KHt.MESSAGE],o=n[KHt.TIMESTAMP];return!rk(i)||i.trim().length===0||!rk(o)&&!bft(o)?void 0:{step:n,json:t}}catch{return}}function Col(e){if("u">typeof TextEncoder)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}function Ech(){let e=globalThis._posthogReleaseId;return typeof e=="string"&&e.length>0?e:void 0}var vXo=e=>{if("flags"in e){let t=xol(e.flags),r=wol(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,xft(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,Ich(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function Ich(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 xol=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,JHt(r)]).filter(([,t])=>t!==void 0)),wol=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?xft(n):void 0]}))},JHt=e=>e===void 0?void 0:e.variant??e.enabled,xft=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var Sol=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","oppref","irclid","_kx"],vch=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain",...Sol,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server","$react_native_version"],YHt=(e,t=[])=>{let r={},n=i=>{e[i]!==void 0&&(r[i]=e[i])};return vch.forEach(n),t.forEach(n),r};var xin=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)}};function CXo(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var xch="NativeGzipValidationError",wch=31,Sch=139,Tch=8,Och=e=>e.length>=2&&e[0]===wch&&e[1]===Sch;var XHt,Pch=()=>{if(XHt)return XHt;XHt=[];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;XHt[e]=t>>>0}return XHt},Bch=e=>{let t=Pch(),r=4294967295;for(let n=0;n<e.length;n++)r=t[(r^e[n])&255]^r>>>8;return(4294967295^r)>>>0},win=e=>{throw Cft(xch,`Native gzip produced invalid output: ${e}`)},Rch=async(e,t)=>{e.size<18&&win("too-short");let r=new Uint8Array(await e.slice(0,10).arrayBuffer());(!Och(r)||r[2]!==Tch)&&win("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());n.getUint32(0,!0)!==Bch(t)&&win("invalid-crc");let i=t.length>>>0;n.getUint32(4,!0)!==i&&win("invalid-size")};async function ZHt(e,t=!0,r){try{let n=new TextEncoder().encode(e),i=new globalThis.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 Rch(c,n),c}catch(n){if(r?.rethrow)throw n;return t&&console.error("Failed to gzip compress data",n),null}}var _8=class extends Error{constructor(t,r,n,i){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.responseBodyDeadline=n,this.abortController=i,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return cXo(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let t=Cft("AbortError","Response body read timed out");this.cancelResponseBody(t),this.responseBodyTextPromise=Promise.reject(t)}else{let t=new Promise((n,i)=>{this.responseBodyTimer=zN(()=>{this._bodyReadTimedOut=!0;let o=Cft("AbortError","Response body read timed out");i(o),this.cancelResponseBody(o)},this.responseBodyDeadline-Date.now())}),r;try{r=Promise.resolve(this.response.text())}catch(n){r=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([r,t]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(t=>JSON.parse(t))}cancelResponseBody(t){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(t),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},qhe=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};var Rol=(e,t)=>{for(let r of Object.keys(t))(r.startsWith("$feature/")||r==="$active_feature_flags")&&(e[r]=t[r])};async function Tol(e){if(e instanceof _8){let t="";try{t=await e.text}catch{e.bodyReadTimedOut&&(t="<response body read timed out>")}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 Dch(e){return typeof e=="object"&&(e instanceof _8||Dol(e))}function Dol(e){return e instanceof qhe}function kch(e){if(e instanceof _8)return e.status===502||e.status===504;if(!(e instanceof qhe))return!1;let t=e.error;return(t?.code??t?.cause?.code)!=="ECONNREFUSED"}var Ool=10485760;function Pol(e){try{return typeof e!="string"?e instanceof Uint8Array?e.byteLength:e.size:"u">typeof Buffer?Buffer.byteLength(e,ool):new TextEncoder().encode(e).length}catch{return 0}}function wft(e){return typeof e=="object"&&e instanceof _8&&e.status===413}function Sin(e){return e instanceof _8?e.status===408||e.status===429||e.status>=500:Dol(e)}function Bol(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var xXo="default",$Ht=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new VHt([new GHt,new WHt,new qHt,new HHt],mXo())}getEvaluationRuntime(){}constructor(t,r={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new fin,this._events=new xin,this._isInitialized=!1;let n=typeof t=="string"?t.trim():"",i=typeof r.host=="string"?r.host.trim():"",o=!n;this._logger=Gil("[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=sol(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:Sin},this.requestTimeout=r.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=r.featureFlagsRequestTimeoutMs??3e3,this.featureFlagsRequestMaxRetries=r.featureFlagsRequestMaxRetries??1,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=!CXo()||(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(OM.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(OM.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(OM.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){let r=t.properties||{},n={...r,...this.getCommonEventProperties()};return Rol(n,r),t.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=YHt(n)),{distinct_id:t.distinct_id,event:t.event,properties:n}}isMinimalFlagCalledEventsEnabled(){return!1}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 groupIdentifyStatelessImmediate(t,r,n,i,o,s){let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});await this.sendImmediate("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,{type:"required",consume:i=>i.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).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=this.getEvaluationRuntime();l&&(u.evaluation_runtime=l);let p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,p,{type:"required",consume:d=>d.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:kch},this.featureFlagsRequestTimeoutMs).then(d=>({success:!0,response:vXo(d)})).catch(d=>(this._events.emit("error",d),{success:!1,error:this.categorizeRequestError(d)}))}categorizeRequestError(t){if(t instanceof _8)return{type:"api_error",statusCode:t.status};if(t instanceof qhe){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=JHt(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={geoip_disable:o??this.disableGeoip};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,{type:"required",consume:o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);return this._logger.error(a),this._events.emit("error",new Error(s)),Promise.resolve(void 0)}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(OM.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(OM.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(OM.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}getQueueRouteKey(t){return xXo}persistedQueueKeyForRoute(t){return OM.Queue}getActiveQueueRoutes(){return[xXo]}getRouteQueue(t){return this.getPersistedProperty(this.persistedQueueKeyForRoute(t))||[]}enqueue(t,r,n,i){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let o=this.prepareMessage(r,n);if(o=this.processBeforeEnqueue(o),o===null)return;o=this.normalizeMessage(o);let s=this.persistedQueueKeyForRoute(i??this.getQueueRouteKey(o)),a=this.getPersistedProperty(s)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:o}),this.setPersistedProperty(s,a),this._events.emit(t,o),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=zN(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n,i){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 o=this.prepareMessage(r,n);if(o=this.processBeforeEnqueue(o),o!==null){o=this.normalizeMessage(o);try{await this.sendBatch([o],void 0,i??this.getQueueRouteKey(o))}catch(s){this._events.emit("error",s)}}}normalizeMessage(t){let{type:r,library:n,library_version:i,...o}=t,s=Bol(o.properties)?o.properties:void 0;return n!==void 0&&s?.$lib===void 0&&(s={...s||{},$lib:n}),i!==void 0&&s?.$lib_version===void 0&&(s={...s||{},$lib_version:i}),s&&(o.properties=s),o.uuid=g5e(o.uuid,jN),o}normalizeTimestampForWire(t){let r=t instanceof Date?t:typeof t=="string"?new Date(t):null;if(!r||Number.isNaN(r.getTime()))return t;let n=r.toISOString(),i=typeof t=="string"?t.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return i&&i.length>3?n.replace(/\.\d{3}Z$/,`.${i}Z`):n}prepareMessage(t,r){let n={...t,timestamp:r?.timestamp?r?.timestamp:uXo(),uuid:g5e(r?.uuid,jN)};return(r?.disableGeoip??this.disableGeoip)&&(Bol(n.properties)||(n.properties={}),n.properties.$geoip_disable=!0),n.distinctId&&(n.distinct_id=n.distinctId,delete n.distinctId),n}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.pendingFlushPromise||this.flushAutomatic().catch(async t=>{await Tol(t)})}flushAutomatic(){return this.flush()}async waitForPendingPromises(t,r=[]){let n=r.filter(o=>!!o),i=0;for(;;){let o=this.promiseQueue.getPromises([...n,...this.flushPromises],t);if(o.length===0)return;i>0&&this._logger.debug(`flush() re-checking ${o.length} pending promise(s) before flushing`),await Promise.all(o.map(s=>s.catch(()=>{}))),i++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(t){if(this.disabled)return Promise.resolve();if(!t&&this.pendingFlushPromise)return this.pendingFlushPromise;let r=this.flushPromise,n=this.promiseQueue.maxId,i=Promise.resolve().then(()=>{if(t)return this.waitForPendingPromises(n,[r,i])}).then(()=>UHt([r])).then(()=>(this.pendingFlushPromise===i&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=i,this.flushPromise=i,this.flushPromises.add(i),this.addPendingPromise(i),UHt([i]).then(()=>{this.flushPromises.delete(i),this.pendingFlushPromise===i&&(this.pendingFlushPromise=null),this.flushPromise===i&&(this.flushPromise=null)}),i}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}compressPayload(t){return ZHt(t,this.isDebug)}getBatchEndpointPath(t){return"/batch/"}async sendBatch(t,r,n=xXo){let i={api_key:this.apiKey,batch:t.map(u=>{if(!u)return u;let l=this.normalizeTimestampForWire(u.timestamp);return l===u.timestamp?u:{...u,timestamp:l}}),sent_at:uXo()};this.historicalMigration&&(i.historical_migration=!0);let o=u1e(i),s=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(o),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||o};await this.fetchWithRetry(s,c,{type:"successful-write"},r)}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getActiveQueueRoutes();if(!t.some(i=>this.getRouteQueue(i).length>0))return;let r=[],n;for(let i of t)try{await this._flushRoute(i,r)}catch(o){n===void 0&&(n=o)}if(n!==void 0)throw n;this._events.emit("flush",r)}async _flushRoute(t,r){let n=this.persistedQueueKeyForRoute(t),i=this.getPersistedProperty(n)||[];if(!i.length)return;let o=i.length,s=0;for(;i.length>0&&s<o;){let a=i.slice(0,this.maxBatchSize),c=a.map(p=>p.message===void 0?p.message:this.normalizeMessage(p.message)),u=async()=>{let p=this.getPersistedProperty(n)||[],d=[...a],f=p.filter(m=>{let g=m.message?.uuid,A=d.findIndex(y=>y===m||typeof g=="string"&&g.length>0&&y.message?.uuid===g);return A===-1?!0:(d.splice(A,1),!1)});this.setPersistedProperty(n,f),i=f,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},l={retryCheck:p=>wft(p)?!1:Sin(p)};try{await this.sendBatch(c,l,t)}catch(p){if(wft(p)&&c.length>1){this.maxBatchSize=Math.max(1,Math.floor(c.length/2)),this._logger.warn(`Received 413 when sending batch of size ${c.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw p instanceof qhe||await u(),this._events.emit("error",p),p}await u(),r.push(...c),s+=c.length}}async _sendOtlpBatch({path:t,auth:r,payload:n}){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let i;try{i=JSON.stringify(n)}catch(l){return this.logMsgIfDebug(()=>console.warn(`[PostHog] Could not serialize a ${t} batch; reporting it as too large`,l)),{kind:"too-large",measuredLocally:!0}}let o=Pol(i);if(o>Ool)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${t} batch of ${o} bytes: the endpoint accepts at most ${Ool}`)),{kind:"too-large",measuredLocally:!0};let s=r==="bearer"?`${this.host}/i/v1/${t}`:`${this.host}/i/v1/${t}?token=${encodeURIComponent(this.apiKey)}`,a=this.disableCompression?null:await this.compressPayload(i),c=a||i,u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...r==="bearer"&&{Authorization:`Bearer ${this.apiKey}`},...a!==null&&{"Content-Encoding":"gzip"}},body:c};try{return await this.fetchWithRetry(s,u,{type:"successful-write"},{retryCheck:l=>wft(l)||l instanceof _8&&l.retryAfterMs!==void 0?!1:Sin(l)}),{kind:"ok"}}catch(l){if(wft(l))return{kind:"too-large"};if(Sin(l)){let p=l instanceof _8?l.retryAfterMs:void 0;return{kind:"retry-later",error:l,...p!==void 0&&{retryAfterMs:p}}}return{kind:"fatal",error:l}}}async _sendLogsBatch(t){return this._sendOtlpBatch({path:"logs",auth:"query-token",payload:t})}async _sendMetricsBatch(t){return this._sendOtlpBatch({path:"metrics",auth:"query-token",payload:t})}async _sendTracesBatch(t){return this._sendOtlpBatch({path:"traces",auth:"bearer",payload:t})}async fetchWithRetry(t,r,n,i,o){let s=r.body?r.body:"",a=Pol(s),c={...this._retryOptions,...i},u=0;return await aol(async()=>{u++;let l=new AbortController,p=o??this.requestTimeout,d=Date.now()+p,f,m=new Promise((x,v)=>{f=zN(()=>{let w=Cft("AbortError",`Request timed out after ${p}ms`);v(w),l.abort(w)},p)}),g,A=!1,y,I=()=>y??=(async()=>{try{await g?.body?.cancel()}catch{}})();try{let x;try{x=this.fetch(t,{signal:l.signal,...r})}catch(B){throw new qhe(B)}x.then(B=>{l.signal.aborted&&!A&&Promise.resolve(B.body?.cancel()).catch(()=>{})}).catch(()=>{});try{g=await Promise.race([x,m]),A=!0}catch(B){throw new qhe(B)}let v=r.mode==="no-cors",w=n.type==="successful-write"?300:400;if(!v&&(g.status<200||g.status>=w))throw new _8(g,a,d,l);if(n.type==="successful-write"){try{await Promise.race([I(),m])}catch{}return}try{return await Promise.race([n.consume(g),m])}catch(B){throw l.signal.aborted?new qhe(B):B}}finally{clearTimeout(f),l.signal.aborted&&g&&I()}},{...c,retryCheck:l=>{let p=c.retryCheck(l);return p&&u<=c.retryCount&&l instanceof _8&&l.cancelResponseBody(),p}})}async _shutdown(t=3e4){await this._initPromise;let r=!1;return this.clearFlushTimer(),this.disabled?void 0:p1e((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(s=>this.getRouteQueue(s).length>0);){let o=this._dequeuedMessagesCount;if(await this.flush(),r)break;if(this._dequeuedMessagesCount===o){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(i){if(!Dch(i))throw i;await Tol(i)}})(),t,()=>{this._logger.critical("Timeout while shutting down PostHog. Some events may not have been sent.",{shutdownTimeoutMs:t}),r=!0})}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 Qch=/[a-z][a-z0-9+.-]{0,63}:[^\s<>"]+/gi;var GWv=new RegExp(Qch.source,"i"),kol=/[a-z][a-z0-9+.-]{0,63}:\/\//i,qWv=new RegExp(`^${kol.source}`,"i"),WWv=new RegExp(kol.source,"gi");var Mch=["is_not","is_set"],Lch=1152921504606847e3,Zu=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Object.setPrototypeOf(this,e.prototype)}};function wXo(e){if(typeof e=="boolean")return!0;if(typeof e=="string"){let t=e.toLowerCase();return t==="true"||t==="false"}if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t++)if(!wXo(t in e?e[t]:null))return!1;return!0}function SXo(e){if(typeof e=="boolean")return e;if(typeof e=="string")return e.toLowerCase()==="true";if(!Array.isArray(e))return!1;for(let t=0;t<e.length;t++)if(!SXo(t in e?e[t]:null))return!1;return!0}function eKt(e){for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r>=55296&&r<=56319){let n=e.charCodeAt(t+1);if(t+1>=e.length||n<56320||n>57343)throw new Zu("Cannot stringify an unpaired surrogate like the flags service");t++}else if(r>=56320&&r<=57343)throw new Zu("Cannot stringify an unpaired surrogate like the flags service")}}function Oin(e,t=new Set){if(!(e===null||typeof e=="boolean")){if(typeof e=="string")return void eKt(e);if(typeof e=="number"){if(!Number.isFinite(e))throw new Zu(`Cannot represent non-finite number ${e} like the flags service`);return}if(Array.isArray(e)){if(t.has(e))throw new Zu("Cannot represent a circular array during local evaluation");t.add(e);try{for(let r=0;r<e.length;r++)r in e&&Oin(e[r],t)}finally{t.delete(e)}return}if(typeof e=="object"){let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new Zu("Cannot represent a non-JSON object like the flags service");if(t.has(e))throw new Zu("Cannot represent a circular object during local evaluation");t.add(e);try{for(let n of Object.keys(e))eKt(n),Oin(e[n],t)}finally{t.delete(e)}return}throw new Zu(`Cannot represent ${typeof e} like the flags service`)}}function _ch(e,t){let r=0,n=0;for(;r<e.length&&n<t.length;){let i=e.charCodeAt(r),o=t.charCodeAt(n),s=i>=55296&&i<=56319,a=o>=55296&&o<=56319,c=s?e.charCodeAt(r+1):0,u=a?t.charCodeAt(n+1):0,l=s?(i-55296)*1024+c-56320+65536:i,p=a?(o-55296)*1024+u-56320+65536:o;if(l!==p)return l-p;r+=s?2:1,n+=a?2:1}return e.length-t.length}function TXo(e,t=new Set){if(e===null)return"null";if(typeof e=="string")return eKt(e),JSON.stringify(e);if(typeof e=="boolean")return e?"true":"false";if(typeof e=="number"){if(!Number.isFinite(e))throw new Zu(`Cannot stringify non-finite number ${e} like the flags service`);if(Number.isInteger(e))throw new Zu(`Cannot distinguish integer ${e} from an integral JSON float during local evaluation`);return String(e)}if(Array.isArray(e)){if(t.has(e))throw new Zu("Cannot stringify a circular array during local evaluation");t.add(e);try{let r=[];for(let n=0;n<e.length;n++)r.push(n in e?TXo(e[n],t):"null");return`[${r.join(",")}]`}finally{t.delete(e)}}if(typeof e=="object"){let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw new Zu("Cannot stringify a non-JSON object like the flags service");if(t.has(e))throw new Zu("Cannot stringify a circular object during local evaluation");t.add(e);try{let n=Object.keys(e);return n.forEach(eKt),`{${n.sort(_ch).map(i=>`${JSON.stringify(i)}:${TXo(e[i],t)}`).join(",")}}`}finally{t.delete(e)}}throw new Zu(`Cannot stringify ${typeof e} like the flags service`)}function Tin(e){return typeof e=="string"?(eKt(e),e):TXo(e)}function Fol(e){try{return new RegExp(e),!0}catch{return!1}}function U8(e){return String(e).replace(/[A-Z]/g,t=>t.toLowerCase())}function jol(e,t,r){if(!/^\d+$/.test(e)||r==="strict"&&e.length>1&&e[0]==="0")throw new Zu(`Invalid semver: ${t}`);return parseInt(e,10)}function XS(e,t="strict"){let n=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new Zu(`Invalid semver: ${e}`);let i=n.split("."),o=s=>s===void 0||s===""?0:jol(s,e,t);return[o(i[0]),o(i[1]),o(i[2])]}function V8(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 Uch(e,t){let r=XS(e,t);return{lower:[r[0],r[1],r[2]],upper:[r[0],r[1]+1,0]}}function Vch(e,t){let[r,n,i]=XS(e,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 Gch(e,t){let n=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new Zu(`Invalid wildcard semver: ${e}`);let i=n.split("."),o=c=>{if(t==="legacy-permissive"){let u=parseInt(c,10);if(!isNaN(u))return u}else try{return jol(c,e,t)}catch{}throw new Zu(`Invalid wildcard semver: ${e}`)},s=o(i[0]);if(i.length===1)return{lower:[s,0,0],upper:[s+1,0,0]};let a=o(i[1]);return{lower:[s,a,0],upper:[s,a+1,0]}}function Nol(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 Zu(`${e} is in an invalid date format`)}throw new Zu(`The date provided ${e} must be a string, number, or date object`)}function OXo(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r||!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}function PXo(e,t,r={}){let n=e.key,i=e.value,o=e.operator||"exact",s=r.semverParsingPolicy??"strict";if(Object.prototype.hasOwnProperty.call(t,n)){if(o==="is_not_set")return!1;if(o==="is_set")return!0}else throw new Zu(`Property ${n} not found in propertyValues`);let c=t[n];if(c===void 0)return r.warnFunction?.(`Property ${n} cannot have a value of undefined with the ${o} operator`),o==="is_not";if(c===null&&!Mch.includes(o)&&o!=="exact"&&o!=="is_not")return r.warnFunction?.(`Property ${n} cannot have a value of null with the ${o} operator`),!1;let u=(p,d)=>{if(r.propertyMatchingVersion!==2&&wXo(p)||Array.isArray(p)&&p.length===0)return Oin(d),SXo(p)===SXo(d);if(r.propertyMatchingVersion===2&&typeof d=="number"&&wXo(p))return Oin(d),!1;if(Array.isArray(p)){let f=Tin(d).toLowerCase();return p.some(m=>Tin(m).toLowerCase()===f)}return Tin(p).toLowerCase()===Tin(d).toLowerCase()},l=(p,d,f)=>{if(f==="gt")return p>d;if(f==="gte")return p>=d;if(f==="lt")return p<d;if(f==="lte")return p<=d;throw new Error(`Invalid operator: ${f}`)};switch(o){case"exact":return u(i,c);case"is_not":return!u(i,c);case"is_set":return!0;case"icontains":return U8(c).includes(U8(i));case"not_icontains":return!U8(c).includes(U8(i));case"starts_with":return U8(c).startsWith(U8(i));case"not_starts_with":return!U8(c).startsWith(U8(i));case"ends_with":return U8(c).endsWith(U8(i));case"not_ends_with":return!U8(c).endsWith(U8(i));case"regex":return Fol(String(i))&&String(c).match(String(i))!==null;case"not_regex":return Fol(String(i))&&String(c).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let p=typeof i=="number"?i:parseFloat(String(i)),d=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(p)&&Number.isFinite(d)?l(d,p,o):l(String(c),String(i),o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Zu("Date operations cannot be performed on boolean values");let p=OXo(String(i));p==null&&(p=Nol(i));let d=Nol(c);return o==="is_date_before"?d<p:d>p}case"semver_eq":return V8(XS(String(c),s),XS(String(i),s))===0;case"semver_neq":return V8(XS(String(c),s),XS(String(i),s))!==0;case"semver_gt":return V8(XS(String(c),s),XS(String(i),s))>0;case"semver_gte":return V8(XS(String(c),s),XS(String(i),s))>=0;case"semver_lt":return V8(XS(String(c),s),XS(String(i),s))<0;case"semver_lte":return V8(XS(String(c),s),XS(String(i),s))<=0;case"semver_tilde":{let p=XS(String(c),s),{lower:d,upper:f}=Uch(String(i),s);return V8(p,d)>=0&&V8(p,f)<0}case"semver_caret":{let p=XS(String(c),s),{lower:d,upper:f}=Vch(String(i),s);return V8(p,d)>=0&&V8(p,f)<0}case"semver_wildcard":{let p=XS(String(c),s),{lower:d,upper:f}=Gch(String(i),s);return V8(p,d)>=0&&V8(p,f)<0}default:throw new Zu(`Unknown operator: ${o}`)}}async function zol(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(n=>n.toString(16).padStart(2,"0")).join("")}async function tKt(e,t,r="",n="."){let i=await zol(`${e}${n}${t}${r}`);return parseInt(i.slice(0,15),16)/Lch}async function BXo(e,t){if(e==null||e.id==null||e.exclusion_percentage==null)return;let r=Number(e.exclusion_percentage);if(!Number.isFinite(r))return;let n=Math.min(Math.max(r,0),100);if(!(n!==100&&await tKt("holdout",t,"","-")>n/100))return`holdout-${e.id}`}function Pin(e){let t=[],r=0;for(let n of e){let i=r+n.rollout_percentage/100;t.push({valueMin:r,valueMax:i,key:n.key}),r=i}return t}async function RXo(e,t,r){let n=await tKt(e,t,"variant");return Pin(r).find(i=>n>=i.valueMin&&n<i.valueMax)?.key}function DXo(e,t){if(t===!1||t==null||!e)return null;let r=typeof t=="boolean"?t.toString():t,n=e[r]||null;return n==null?null:xft(n)}var Qol=9223372036854776e3,qch="9223372036854775808",Wch=Object.prototype.propertyIsEnumerable;function Hch(){return{ancestors:new WeakSet,remainingNodes:1e4}}function gne(e,t){try{return Mol(e,t,Hch(),0)}catch{return[]}}function Kch(e,t){let r=e.toString(),n=BigInt(qch);return e>=n||e<-n?(t?.debug(`Attribute ${r} is outside the int64 range; encoding it as a string`),{stringValue:r}):{intValue:r}}function NXo(e,t,r,n){if(r.remainingNodes<=0)return{stringValue:yin};if(r.remainingNodes--,jil(e))return{boolValue:e};if(typeof e=="bigint")return Kch(e,t);if(typeof e=="number"){if(!Number.isFinite(e))return{stringValue:String(e)};if(Number.isInteger(e)){if(Number.isSafeInteger(e))return{intValue:String(e)};if("u"<typeof BigInt)return{stringValue:String(e)};let i=BigInt(e).toString();return e>=Qol||e<-Qol?(t?.debug(`Attribute ${i} is outside the int64 range; encoding it as a string`),{stringValue:i}):{intValue:i}}return{doubleValue:e}}if(typeof e=="string")return{stringValue:mne(e)};if(typeof e=="function")return{stringValue:iol};if(typeof e=="symbol")return{stringValue:String(e)};if(typeof e=="object"&&e!==null){if(r.ancestors.has(e))return{stringValue:Ain};if(n>=20)return{stringValue:yin};if(e instanceof Date){let i=e.getTime(),o=Number.isFinite(i)?e.toISOString():String(e);return{stringValue:typeof o=="string"?mne(o):String(o)}}r.ancestors.add(e);try{try{let i=e.toJSON;if(typeof i=="function")return NXo(i.call(e),t,r,n+1)}catch{}return V4(e)?{arrayValue:{values:Jch(e,t,r,n+1)}}:{kvlistValue:{values:Mol(e,t,r,n+1)}}}finally{r.ancestors.delete(e)}}return{stringValue:mne(String(e))}}function Jch(e,t,r,n){let i=[],o=Math.min(e.length,1e3),s=0;for(;s<o&&r.remainingNodes>0;s++)try{let a=s in e?e[s]:void 0;if(NJ(a))continue;i.push(NXo(a,t,r,n))}catch{i.push({stringValue:L8})}return e.length>s&&i.push({stringValue:yin}),i}function Mol(e,t,r,n){let i=[];for(let o in e)if(Wch.call(e,o)){if(!o){t?.debug("Dropping an attribute with an empty key");continue}if(i.length>=1e3||r.remainingNodes<=0){t?.debug("Attributes truncated: the value exceeds the OTLP encoder budget");break}try{let s=e[o];if(eXo(s)||Vhe(s))continue;i.push({key:mne(o),value:NXo(s,t,r,n)})}catch{i.push({key:mne(o),value:{stringValue:L8}})}}return i}function nKt(e,t,r){return{...Ghe({},e.resourceAttributes),"service.name":e.serviceName||"unknown_service",...e.environment&&{"deployment.environment":e.environment},...e.serviceVersion&&{"service.version":e.serviceVersion},"telemetry.sdk.name":t,"telemetry.sdk.version":r}}var Ych=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function iKt(e,t){let r=Ghe({},e),n={};for(let i of Ych)Object.prototype.hasOwnProperty.call(r,i)&&(n[i]=r[i],delete r[i]);return[...gne(r,t),...gne(n,t)]}var Lol={darwin:"macOS",win32:"Windows",cygwin:"Windows",linux:"Linux",android:"Android",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",sunos:"SunOS",aix:"AIX",haiku:"Haiku","Mac OS X":"macOS"};function Xch(e){if(e)return Object.prototype.hasOwnProperty.call(Lol,e)?Lol[e]:e}function jXo(e,t){let r=Xch(e);return{...r?{"os.name":r}:{},...t?{"os.version":t}:{}}}var Zch={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}},c7v=Zch.info;var A5e=class{constructor(t){this._onFire=t,this._firesAt=0}get pending(){return!!this._timer}arm(t){this.clear(),this._firesAt=Date.now()+t,this._timer=zN(()=>{this._timer=void 0,this._onFire()},t)}armNoEarlierThan(t){this._timer&&Date.now()+t<=this._firesAt||this.arm(t)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function oKt(){return 1-.25+Math.random()*.25*2}var G8=1;function sKt(e,t,r,n){let i=Math.min(Math.max(0,t-1),6),o=e*2**i,s=n===void 0?o:Math.min(o,Math.max(n,e));return Math.round(s*r)}var aKt=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function zXo(e){return String(e)+"000000"}function QXo(e,t,r,n){let i="";return n&&(i=Object.keys(n).sort().map(s=>`${JSON.stringify(s)}:${JSON.stringify(n[s])}`).join(",")),`${e}\0${t}\0${r??""}\0${i}`}function _ol(e,t){for(let r=0;r<t.length;r++)if(e<=t[r])return r;return t.length}function MXo(e,t,r){return nKt(e,t,r)}function LXo(e,t,r,n){return{resourceMetrics:[{resource:{attributes:iKt(t)},scopeMetrics:[{scope:{name:r,version:n},metrics:e}]}]}}function Rin(e){let t=e?.resourceAttributes;return{serviceName:t?.["service.name"]??e?.serviceName,serviceVersion:t?.["service.version"]??e?.serviceVersion,environment:t?.["deployment.environment"]??e?.environment,resourceAttributes:t,beforeSend:e?.beforeSend,flushIntervalMs:e?.flushIntervalMs??1e4,maxSeriesPerFlush:e?.maxSeriesPerFlush??1e3}}var Uol=1,cKt=class{constructor(t,r,n){this._instance=t,this._config=r,this._logger=n,this._series=new Map,this._flushTimer=new A5e(()=>this.flush().catch(i=>{this._logger.error("Metrics flush failed:",i)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new h5e,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._generation=0}count(t,r=1,n){this._capture({name:t,type:"count",value:r,unit:n?.unit,attributes:n?.attributes})}gauge(t,r,n){this._capture({name:t,type:"gauge",value:r,unit:n?.unit,attributes:n?.attributes})}histogram(t,r,n){this._capture({name:t,type:"histogram",value:r,unit:n?.unit,attributes:n?.attributes})}flush(){let t=this._flushPromise,n=(async()=>{t&&await t.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let t=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(t)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=G8,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(t){if(this._instance.isDisabled||this._instance.optedOut)return;let r=this._runBeforeSend(t);if(r===null)return;if(!r.name||typeof r.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof r.value!="number"||!Number.isFinite(r.value))return void this._logger.warn(`Dropping metric '${r.name}': value must be a finite number`);if(r.type==="count"&&r.value<0)return void this._logger.warn(`Dropping count '${r.name}': counters are monotonic, value must be >= 0`);let n,i;try{n=r.attributes?{...r.attributes}:void 0,i=QXo(r.type,r.name,r.unit,n)}catch(a){this._logger.warn(`Dropping metric '${r.name}': attributes could not be serialized`,a);return}let o=this._series.get(i);if(!o){if(!this._admitNewSeries())return;o={name:r.name,type:r.type,unit:r.unit,attributes:n,windowStartMs:Date.now()},this._series.set(i,o)}let s=this._typeByName.get(r.name);s===void 0?this._typeByName.set(r.name,r.type):s!==r.type&&!this._typeCollisionWarned.has(r.name)&&(this._typeCollisionWarned.add(r.name),this._logger.warn(`Metric name '${r.name}' is already used as a ${s}; recording it as a ${r.type} too will blend both series in charts. Use a distinct name.`)),this._fold(o,r.value),this._armFlushTimer()}_admitNewSeries(){return this._series.size<this._config.maxSeriesPerFlush?!0:(this._seriesCapWarned||(this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`)),!1)}_fold(t,r){switch(t.type){case"count":t.total=(t.total??0)+r;break;case"gauge":t.last=r;break;case"histogram":{t.hist||(t.hist={count:0,sum:0,min:r,max:r,bucketCounts:new Array(aKt.length+1).fill(0)});let n=t.hist;n.count+=1,n.sum+=r,n.min=Math.min(n.min,r),n.max=Math.max(n.max,r),n.bucketCounts[_ol(r,aKt)]+=1;break}}}_runBeforeSend(t){let r=this._config.beforeSend;if(!r)return t;let n=V4(r)?r:[r],i=t;for(let o of n)try{let s=o(i);if(!s)return this._logger.info("Metric was rejected in beforeSend function"),null;i=s}catch(s){return this._logger.error("Error in beforeSend function for metric:",s),null}return i}_armFlushTimer(){this._flushTimer.pending||this._flushTimer.arm(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(sKt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}async _doFlush(){if(this._flushTimer.clear(),this._series.size===0)return;let t=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let r=this._generation,n=await this._instance._sendMetricsBatch(this._buildPayload(t));if(r===this._generation)switch(this._retryAfter.record(n),n.kind==="retry-later"?(this._consecutiveFlushFailures++,this._flushJitter=oKt()):(this._consecutiveFlushFailures=0,this._flushJitter=G8),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(t),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(t){return LXo(this._buildMetrics(t),MXo(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(t){let r=zXo(Date.now()),n=new Map;for(let i of t.values()){let o=QXo(i.type,i.name,i.unit,void 0),s=n.get(o);s||(s={name:i.name,...i.unit&&{unit:i.unit}},i.type==="count"?s.sum={aggregationTemporality:Uol,isMonotonic:!0,dataPoints:[]}:i.type==="gauge"?s.gauge={dataPoints:[]}:s.histogram={aggregationTemporality:Uol,dataPoints:[]},n.set(o,s));let a=gne(i.attributes??{},this._logger),c=zXo(i.windowStartMs);if(i.type==="count"){let u={attributes:a,startTimeUnixNano:c,timeUnixNano:r,asDouble:i.total??0};s.sum.dataPoints.push(u)}else if(i.type==="gauge"){let u={attributes:a,timeUnixNano:r,asDouble:i.last??0};s.gauge.dataPoints.push(u)}else if(i.hist){let u={attributes:a,startTimeUnixNano:c,timeUnixNano:r,count:i.hist.count,sum:i.hist.sum,min:i.hist.min,max:i.hist.max,bucketCounts:i.hist.bucketCounts,explicitBounds:aKt};s.histogram.dataPoints.push(u)}}return Array.from(n.values())}_mergeWindowBack(t){for(let[r,n]of t){let i=this._series.get(r);if(!i){this._admitNewSeries()&&this._series.set(r,n);continue}switch(i.windowStartMs=Math.min(i.windowStartMs,n.windowStartMs),i.type){case"count":i.total=(i.total??0)+(n.total??0);break;case"gauge":break;case"histogram":if(n.hist)if(i.hist){i.hist.count+=n.hist.count,i.hist.sum+=n.hist.sum,i.hist.min=Math.min(i.hist.min,n.hist.min),i.hist.max=Math.max(i.hist.max,n.hist.max);for(let o=0;o<i.hist.bucketCounts.length;o++)i.hist.bucketCounts[o]+=n.hist.bucketCounts[o]}else i.hist=n.hist;break}}}};var ruh="0".repeat(32),nuh="0".repeat(16),iuh=/^[0-9a-f]+$/;function ouh(e){let t=new Uint8Array(e),r=globalThis.crypto;if(r&&typeof r.getRandomValues=="function")try{return r.getRandomValues(t),t}catch{}for(let n=0;n<e;n++)t[n]=Math.floor(256*Math.random());return t}function suh(e){let t="";for(let r=0;r<e.length;r++)t+=e[r].toString(16).padStart(2,"0");return t}function Vol(e){let t=suh(ouh(e));return/[^0]/.test(t)?t:t.slice(0,-1)+"1"}function Gol(){return Vol(16)}function qol(){return Vol(8)}function Wol(e,t,r){return typeof e=="string"&&e.length===t&&e!==r&&iuh.test(e)}function Hol(e){return Wol(e,32,ruh)}function Kol(e){return Wol(e,16,nuh)}var auh=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Jol(e){let t=Yol(e);return t&&{traceId:t.traceId,spanId:t.spanId,flags:cuh(t.flags)}}function cuh(e){return 1&parseInt(e,16)?kin:uuh}function Yol(e){if(typeof e!="string")return;let t=auh.exec(e.trim());if(!t)return;let[,r,n,i,o,s]=t;if(r!=="ff"&&!(r==="00"&&s)&&!(!Hol(n)||!Kol(i)))return{version:r,traceId:n,spanId:i,flags:o}}function Xol(e){return Yol(e)&&e.trim()}function Din(e){return Array.isArray(e)&&e.length===1?e[0]:e}var kin="01",uuh="00";function Zol(e,t,r=kin){return`00-${e}-${t}-${r}`}var luh=32,_Xo=512;function Fin(e){if(typeof e!="string")return;let t=e.trim();if(!t||/[^\x20-\x7e\t]/.test(t))return;let r=t.split(",");if(!(r.length>luh)){for(let n of r)if(n.trim()&&!n.includes("="))return;return t.length<=_Xo?t:fuh(r)}}var puh=128;function fuh(e){let t=[...e],r=()=>t.reduce((n,i)=>n+i.length,0)+t.length-1;for(let n=t.length-1;n>=0&&r()>_Xo;n--)t[n].length>puh&&t.splice(n,1);for(;t.length&&r()>_Xo;)t.pop();return t.length?t.join(","):void 0}var $ol="unknown";function y5e(e,t,r,n){return typeof e=="string"&&e.trim()?e.length>r?e.slice(0,r):e:(n?.debug(`${t} must be a non-empty string; using "${$ol}"`),$ol)}function Sft(e){if(e==null)return;let t=e;if(e instanceof Date)try{t=e.getTime()}catch{return}if(!(typeof t!="number"||!Number.isFinite(t))&&!(t<0||t>9223372036854))return t}function esl(e,t,r){let n=Sft(e);return n===void 0?(e!==void 0&&r?.debug("Span startTime is out of range or not a valid time; using the current time"),t):(t-n>864e5?r?.debug("Span startTime is more than 24 hours in the past; the server will clamp it to receive time and keep the original in $originalTimestamp"):n>t&&r?.debug("Span startTime is in the future; the span may export with a zero duration"),n)}function Nin(e,t){return e<t?t:e}function uKt(e,t,r,n){let i=Sft(e);return i===void 0?(e!==void 0&&n?.debug(`Span ${r} is out of range or not a valid time; using the derived time`),t):i}function zin(){let e=globalThis.performance;return typeof e?.now=="function"?e.now():void 0}var Tft=class{constructor(t,r,n){this._onEnd=r,this._logger=n,this._events=[],this._ended=!1,this._userAttributeCount=0,this._userEventCount=0,this._droppedAttributes=0,this._droppedEvents=0,this._traceId=t.traceId,this._spanId=t.spanId,this._parentSpanId=t.parentSpanId,this._traceState=t.traceState,this._traceFlags=t.traceFlags??kin,this._parentIsRemote=t.parentIsRemote??!1,this._name=t.name,this._kind=t.kind,this._autoKeys=new Set(t.autoAttributeKeys),this._maxAttributes=t.maxAttributes,this._maxEvents=t.maxEvents,this._maxAttributesPerEvent=t.maxAttributesPerEvent,this._maxAttributeValueLength=t.maxAttributeValueLength,this._attributes=Object.create(null);for(let i of Object.keys(t.attributes))this._writeAttribute(i,t.attributes[i]);this._startMono=t.backdated?void 0:zin(),this._startTime=t.clockAnchor&&this._startMono!==void 0?t.clockAnchor.wall+(this._startMono-t.clockAnchor.mono):t.startTime,this._startMono!==void 0&&(this._clockAnchor=t.clockAnchor??{wall:this._startTime,mono:this._startMono})}_now(){if(this._startMono!==void 0){let t=zin();if(t!==void 0)return this._startTime+Math.max(0,t-this._startMono)}return Date.now()}_mutable(t){return this._ended?(this._logger?.debug(`Ignoring ${t} on a span that has already ended`),!1):!0}_writeAttribute(t,r){if(NJ(r)){t in this._attributes&&!this._autoKeys.has(t)&&this._userAttributeCount--,delete this._attributes[t];return}if(!this._autoKeys.has(t)&&!(t in this._attributes)){if(this._userAttributeCount>=this._maxAttributes)return void this._droppedAttributes++;this._userAttributeCount++}this._attributes[t]=Min(r,this._maxAttributeValueLength)}setAttribute(t,r){return this._mutable("setAttribute")&&this._writeAttribute(t,r),this}setAttributes(t){if(this._mutable("setAttributes")){let r=Ghe({},t);for(let n of Object.keys(r))this._writeAttribute(n,r[n])}return this}addEvent(t,r,n){if(this._mutable("addEvent")){if(this._userEventCount>=this._maxEvents)return this._droppedEvents++,this;this._userEventCount++;let i=r&&isl(r,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:y5e(t,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:uKt(n,this._now(),"event timestamp",this._logger),...i&&{attributes:i.attributes,...i.dropped&&{droppedAttributesCount:i.dropped}}})}return this}setStatus(t,r){if(this._mutable("setStatus")){if(t!=="ok"&&t!=="error")return this._logger?.debug(`Ignoring unknown span status "${String(t)}"; expected "ok" or "error"`),this;this._status={code:t,...r&&{message:UXo(r,this._maxAttributeValueLength)}}}return this}get statusIsExplicitlyOk(){return this._status?.code==="ok"}recordException(t){if(!this._mutable("recordException"))return this;let{type:r,message:n,stack:i}=VXo(t);return this.addEvent(duh,{"exception.type":r,"exception.message":n,...i&&{"exception.stacktrace":i}}),this.setStatus("error",n)}updateName(t){return this._mutable("updateName")&&(this._name=y5e(t,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return Zol(this._traceId,this._spanId,this._traceFlags)}tracestate(){return this._traceState??null}childContext(){return{traceId:this._traceId,parentSpanId:this._spanId,traceState:this._traceState,traceFlags:this._traceFlags,clockAnchor:this._clockAnchor}}end(t){if(this._ended)return void this._logger?.debug("Ignoring end() on a span that has already ended");this._ended=!0;let r=this._now(),n=uKt(t,r,"end time",this._logger);this._onEnd({traceId:this._traceId,spanId:this._spanId,...this._parentSpanId&&{parentSpanId:this._parentSpanId},...this._traceState&&{traceState:this._traceState},traceFlags:this._traceFlags,parentIsRemote:this._parentIsRemote,name:this._name,kind:this._kind,...this._status&&{status:this._status},attributes:{...this._attributes},events:this._events,startTime:this._startTime,endTime:Nin(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},duh="exception",muh=4294967295;function huh(e){try{return typeof e=="string"?e:String(e)}catch{return L8}}function b5e(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?0:Math.min(Math.floor(e),muh)}function guh(e,t){if(!t.length)return Object.keys(e);let r=t.filter(i=>Object.prototype.propertyIsEnumerable.call(e,i)),n=new Set(r);return[...r,...Object.keys(e).filter(i=>!n.has(i))]}function rsl(e,t,r,n,i,o,s=[]){let a=0,c=0,u={};for(let f of guh(e.attributes,s)){let m=e.attributes[f];if(!NJ(m)){if(!t.has(f)){if(a>=r){c++;continue}a++}Object.defineProperty(u,f,{value:Min(m,o),enumerable:!0,writable:!0,configurable:!0})}}e.attributes=u,c&&(e.droppedAttributesCount=b5e(e.droppedAttributesCount)+c);let l=0,p=0,d=[];for(let f of e.events){if(l>=n){p++;continue}if(l++,f.attributes){let m=isl(f.attributes,i,o);f.attributes=m.attributes,m.dropped&&(f.droppedAttributesCount=b5e(f.droppedAttributesCount)+m.dropped)}d.push(f)}e.events=d,p&&(e.droppedEventsCount=b5e(e.droppedEventsCount)+p),e.status?.message&&(e.status={...e.status,message:UXo(huh(e.status.message),o)})}var Qin=class{setAttribute(){return this}setAttributes(){return this}addEvent(){return this}setStatus(){return this}recordException(){return this}updateName(){return this}traceparent(){return null}tracestate(){return null}end(){}},nsl=new Qin,lKt=class extends Qin{constructor(t,r){super(),this._traceparent=t,this._tracestate=r}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function Auh(e){try{let t=e.stack;return typeof t=="string"&&t?{stack:t}:{}}catch{return{}}}function f1e(e,t){let r=Din(e?.parent)??t,n=typeof r=="string"||r==null?r:tsl(r,"traceparent"),i=Xol(n);if(!i)return nsl;let o=typeof r=="string"||r==null?e?.tracestate:tsl(r,"tracestate");return new lKt(i,Fin(o))}function tsl(e,t){try{let r=e[t];return typeof r=="function"?r.call(e):void 0}catch{return}}function UXo(e,t){return e.length>t?e.slice(0,t):e}function Min(e,t){return jin(e,t,{ancestors:new WeakSet,remainingNodes:1e4},0)}function jin(e,t,r,n){if(e===null||typeof e!="object")return NJ(e)||r.remainingNodes<=0?e:(r.remainingNodes--,typeof e=="string"?UXo(e,t):e);if(r.ancestors.has(e))return Ain;if(r.remainingNodes<=0||n>=20)return e;r.remainingNodes--,r.ancestors.add(e);try{if(e instanceof Date)return e;let i=yuh(e);if(i.selfDescribed)return NJ(i.value)?String(i.value):jin(i.value,t,r,n+1);if(V4(e)){let a=Math.min(e.length,1e3),c=[];for(let u=0;u<a;u++)try{c.push(jin(e[u],t,r,n+1))}catch{c.push(L8)}return e.length>a&&(c.length=e.length),c}let o={},s=0;for(let a of Object.keys(e)){if(s>=1e3)break;let c;try{c=jin(e[a],t,r,n+1)}catch{c=L8}a&&!NJ(c)&&s++,Object.defineProperty(o,a,{value:c,enumerable:!0,writable:!0,configurable:!0})}return o}catch{return e}finally{r.ancestors.delete(e)}}function yuh(e){try{let t=e.toJSON;if(typeof t=="function")return{selfDescribed:!0,value:t.call(e)}}catch{}return{selfDescribed:!1}}function isl(e,t,r){let n;try{n=Object.keys(e)}catch{return{attributes:{},dropped:0}}let i={},o=0,s=0;for(let a of n){if(o>=t){s++;continue}let c;try{c=Min(e[a],r)}catch{c=L8}NJ(c)||(o++,Object.defineProperty(i,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:i,dropped:s}}function osl(e,t){for(let r of Object.keys(e))e[r]=Min(e[r],t);return e}function pKt(e,t,r){return t===nsl?r(t):e.with(t,()=>r(t))}function VXo(e){try{let t=Auh(e);if(l1e(e))return{type:e.name||"Error",message:e.message||"",...t};if(typeof e=="string")return{type:"string",message:e};if(e&&typeof e=="object"){let r=e;if(typeof r.message=="string")return{type:typeof r.name=="string"?r.name:"Object",message:r.message,...t}}return{type:typeof e,message:String(e)}}catch{return{type:typeof e,message:""}}}var GXo={internal:1,server:2,client:3,producer:4,consumer:5},buh={ok:1,error:2},Euh=1,Iuh=256,vuh=512;function Cuh(e){let t=parseInt(e.traceFlags,16);return(Number.isFinite(t)?255&t:Euh)|Iuh|(e.parentIsRemote?vuh:0)}function Lin(e){if(typeof e=="string")return mne(e);try{return mne(String(e))}catch{return L8}}function xuh(e){return e&&Object.prototype.hasOwnProperty.call(GXo,e)?GXo[e]:GXo.internal}function qXo(e){let t=Math.floor(e),r=Math.round((e-t)*1e6);return r>=1e6&&(t+=1,r=0),String(t)+String(r).padStart(6,"0")}function wuh(e,t){let r={name:Lin(e.name),timeUnixNano:qXo(e.timestamp)};if(e.attributes){let i=gne(e.attributes,t);i.length&&(r.attributes=i)}let n=b5e(e.droppedAttributesCount);return n&&(r.droppedAttributesCount=n),r}function ssl(e,t){let r={traceId:e.traceId,spanId:e.spanId,name:Lin(e.name),kind:xuh(e.kind),startTimeUnixNano:qXo(e.startTime),endTimeUnixNano:qXo(e.endTime),flags:Cuh(e)};e.parentSpanId&&(r.parentSpanId=e.parentSpanId),e.traceState&&(r.traceState=Lin(e.traceState));let n=gne(e.attributes,t);n.length&&(r.attributes=n),e.events.length&&(r.events=e.events.map(s=>wuh(s,t)));let i=b5e(e.droppedAttributesCount);i&&(r.droppedAttributesCount=i);let o=b5e(e.droppedEventsCount);return o&&(r.droppedEventsCount=o),e.status&&(r.status={code:buh[e.status.code],...e.status.message&&{message:Lin(e.status.message)}}),r}function asl(e,t,r){return nKt(e,t,r)}function csl(e,t,r,n,i){return{resourceSpans:[{resource:{attributes:iKt(t,i)},scopeSpans:[{scope:{name:r,version:n},spans:e}]}]}}var usl=8;function _in(){return zin()??Date.now()}function WXo(e){try{return e instanceof Tft}catch{return!1}}function lsl(e,t){let r=Jol(e);if(r)return{traceId:r.traceId,parentSpanId:r.spanId,traceState:Fin(t),traceFlags:r.flags,isRemote:!0}}function Suh(e){try{return typeof e.traceparent=="function"}catch{return!1}}function Tuh(e){return!!e.attributes&&typeof e.attributes=="object"&&!Array.isArray(e.attributes)&&Array.isArray(e.events)&&e.name!==void 0&&e.kind!==void 0&&e.startTime!==void 0&&e.endTime!==void 0}function Uin(e,t,r){e[t]!==r&&(e[t]=r)}function Ouh(e,t){try{let r=Object.getOwnPropertyDescriptors(e);for(let n of["traceId","spanId","parentSpanId","traceState"])r[n]={value:t[n],enumerable:!0,writable:!0,configurable:!0};return Object.create(Object.getPrototypeOf(e),r)}catch{return e}}var fKt=class{constructor(t,r,n,i,o,s){this._instance=t,this._config=r,this._logger=n,this._getContext=i,this._contextManager=o,this._onSpanQueued=s,this._queue=[],this._flushTimer=new A5e(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._retryAfter=new h5e,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=r.maxExportBatchSize}startSpan(t,r){if(this._instance.isDisabled||this._instance.optedOut)return f1e(r,this._contextManager.active());let n=Din(r?.parent);if(n&&typeof n!="string"&&!WXo(n)){if(Suh(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),f1e(r,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let i=this._resolveParent(n,r);if(this._liveSpans.size>=this._config.maxLiveSpans&&this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),f1e(r,this._contextManager.active());let o=Date.now(),s=esl(r?.startTime,o,this._logger),a=qol();this._liveSpans.set(a,_in());let c=this._autoContextAttributes();return new Tft({traceId:i?.traceId??Gol(),spanId:a,parentSpanId:i?.parentSpanId,traceState:i?.traceState,traceFlags:i?.traceFlags,parentIsRemote:i?.isRemote,name:y5e(t,"Span name",this._config.maxAttributeValueLength,this._logger),kind:r?.kind??"internal",attributes:Ghe({...c},r?.attributes),autoAttributeKeys:Object.keys(c),maxAttributes:this._config.maxAttributesPerSpan,maxEvents:this._config.maxEventsPerSpan,maxAttributesPerEvent:this._config.maxAttributesPerEvent,maxAttributeValueLength:this._config.maxAttributeValueLength,startTime:s,backdated:s!==o,clockAnchor:Sft(r?.startTime)===void 0?i?.clockAnchor:void 0},(u,l)=>this._onSpanEnd(u,l),this._logger)}withSpan(t,r,n){let i=typeof r=="function"?void 0:r,o=typeof r=="function"?r:n,s=this.startSpan(t,i);try{let a=pKt(this._contextManager,s,o);return col(a)?a.then(c=>(s.end(),c),c=>{throw this._recordCallbackError(s,c),s.end(),c}):(s.end(),a)}catch(a){throw this._recordCallbackError(s,a),s.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let t=this._generation,r=Promise.resolve().then(()=>t===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===r&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=r,r}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(t,r){if(typeof t=="string"){let i=lsl(t,r?.tracestate);return i||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),i}if(WXo(t))return t.childContext();let n=this._contextManager.active();if(WXo(n))return n.childContext();if(n instanceof lKt)return lsl(n.traceparent(),n.tracestate()??void 0)}_autoContextAttributes(){let t;try{t=this._getContext()}catch(n){return this._logger.debug("Failed to read tracing context; span will carry no PostHog attributes",n),{}}let r={};return t.distinctId&&(r.posthogDistinctId=t.distinctId),t.sessionId&&(r.sessionId=t.sessionId),t.currentUrl&&(r["url.full"]=t.currentUrl),t.screenName&&(r["screen.name"]=t.screenName),t.appState&&(r["app.state"]=t.appState),r}_recordCallbackError(t,r){if(!(t instanceof Tft))return;let{type:n,message:i,stack:o}=VXo(r);t.addEvent("exception",{"exception.type":n,"exception.message":i,...o&&{"exception.stacktrace":o}}),t.statusIsExplicitlyOk||t.setStatus("error",i)}_evictAgedSpans(){let t=_in()-this._config.maxSpanAgeMs,r=0;for(let[n,i]of this._liveSpans){if(i>t)break;this._liveSpans.delete(n),r++}r&&this._recordDrop(r,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(t,r){if(!this._liveSpans.delete(t.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(t,r);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(i){this._logger.debug("Span queue notification failed",i)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(t){let r=t.droppedAttributesCount??0,n=t.droppedEventsCount??0,i=0;for(let o of t.events)i+=o.droppedAttributesCount??0;(r||n||i)&&this._logger.debug(`Span limits discarded data from "${t.name}": ${r} attributes, ${n} events, ${i} event attributes`)}_runBeforeSpanSend(t,r){if(!this._config.beforeSpanSend.length)return t;let n={traceId:t.traceId,spanId:t.spanId,parentSpanId:t.parentSpanId,traceState:t.traceState},i={startTime:t.startTime,endTime:t.endTime},o={attributes:t.droppedAttributesCount,events:t.droppedEventsCount},s=Object.keys(t.attributes),a={traceFlags:t.traceFlags,parentIsRemote:t.parentIsRemote},c=t.status&&{...t.status},u=t,l=t;try{for(let f of this._config.beforeSpanSend){let m=f(u);if(!m)return this._recordDrop(1,"beforeSpanSend dropped it"),null;u=this._keepSpanIdentity(m,n)}if(l={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:u.name,kind:u.kind,status:u.status,attributes:u.attributes,events:u.events,startTime:u.startTime,endTime:u.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:o.attributes,droppedEventsCount:o.events},!Tuh(l))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;l.name=y5e(l.name,"Span name",this._config.maxAttributeValueLength,this._logger),l.status&&l.status.code!=="ok"&&l.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),l.status=c),l.startTime=Sft(l.startTime)??i.startTime,l.endTime=Nin(Sft(l.endTime)??i.endTime,l.startTime);let d=[];for(let f of l.events)try{d.push({...f,name:y5e(f.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:uKt(f.timestamp,l.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return l.events=d,rsl(l,r,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,s),l}catch(p){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",p),this._recordDrop(1,"beforeSpanSend failed"),null}}_keepSpanIdentity(t,r){(t.traceId!==r.traceId||t.spanId!==r.spanId||t.parentSpanId!==r.parentSpanId)&&this._logger.debug("beforeSpanSend changed a span identity field; keeping the original ids");try{Uin(t,"traceId",r.traceId),Uin(t,"spanId",r.spanId),Uin(t,"parentSpanId",r.parentSpanId),Uin(t,"traceState",r.traceState)}catch{return Ouh(t,r)}return t}_recordDrop(t,r){this._droppedSinceWarning+=t,this._dropReasons.add(r),Date.now()-this._lastDropWarningAt>=this._config.flushIntervalMs&&this._warnAboutDrops()}_warnAboutDrops(){this._droppedSinceWarning&&(this._lastDropWarningAt=Date.now(),this._logger.warn(`Dropping ${this._droppedSinceWarning} span(s): ${[...this._dropReasons].join("; ")}`),this._droppedSinceWarning=0,this._dropReasons.clear())}_encodeBatch(t){let r=[];for(let n of t)try{r.push(ssl(n,this._logger))}catch(i){this._logger.debug("Failed to encode a span; dropping it",i),this._recordDrop(1,"its attributes could not be encoded")}return r}_discardQueueIfConsentWithdrawn(){if(!this._instance.isDisabled&&!this._instance.optedOut)return 0;let t=this._queue.length;return this._queue=[],this._resetHeadBatchBudget(),this._recordDrop(t,"the user has opted out"),this._warnAboutDrops(),t}async _flushInner(){if(!this._queue.length)return 0;let t=this._discardQueueIfConsentWithdrawn();if(t)return t;let r=osl(asl(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._config.maxAttributeValueLength),n=this._instance.getLibraryId(),i=this._instance.getLibraryVersion(),o=this._queue.length,s=0,a=1/0,c=this._generation;try{for(;o>0&&this._queue.length>0;){let u=this._discardQueueIfConsentWithdrawn();if(u)return s+u;let l=this._headBatchFailures>0?Math.min(this._maxExportBatchSize,this._headBatchSize):this._maxExportBatchSize,p=Math.max(1,Math.min(l,a,o,this._queue.length)),d=this._queue.slice(0,p),f=this._encodeBatch(d);if(!f.length){this._queue.splice(0,p),o-=p,s+=p,this._resetHeadBatchBudget();continue}let m=_in()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),g=await this._instance._sendTracesBatch(csl(f,r,n,i,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(g),g.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget(),this._queue.splice(0,p),o-=p,s+=p,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(g.kind==="too-large"){if(p===1){this._queue.splice(0,1),o-=1,s+=1,this._recordDrop(1,"it is too large for the ingestion endpoint"),this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget();continue}let A=Math.max(1,Math.floor(p/2));g.measuredLocally?a=A:this._maxExportBatchSize=A,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${A}`);continue}if(g.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=oKt(),this._headBatchSize=p,m&&(this._headBatchFailures++,this._headBatchChargeableAt=_in()+this._nextFlushDelay()),this._headBatchFailures<usl)return this._logger.debug("Span export failed; retrying on the next flush",g.error),s;if(this._queue.splice(0,p),o-=p,s+=p,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget(),this._recordDrop(p,`the ingestion endpoint failed ${usl} times in a row`),this._retryAfter.isOpen())return s;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",g.error),this._queue.splice(0,p),o-=p,s+=p,this._consecutiveFlushFailures=0,this._flushJitter=G8,this._resetHeadBatchBudget(),this._recordDrop(p,"the ingestion endpoint rejected the batch")}return s}finally{this._warnAboutDrops()}}_flushInBackground(){this._backgroundFlush||(this._backgroundFlush=this.flush().catch(t=>{this._logger.debug("Background span flush failed",t)}).finally(()=>{this._backgroundFlush=void 0,this._armFlushTimerIfQueuedNoEarlierThan()}))}_armFlushTimerIfQueued(){this._flushTimer.pending||!this._queue.length||this._flushTimer.arm(this._nextFlushDelay())}_armFlushTimerIfQueuedNoEarlierThan(){this._queue.length&&this._flushTimer.armNoEarlierThan(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(sKt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var dKt=class{active(){return this._active}with(t,r){let n=this._active;this._active=t;try{return r()}finally{this._active=n}}};var Puh=5e3,Buh=512,Ruh=2048,Duh=128,kuh=128,Fuh=128,Nuh=8192,juh=1e4,zuh=36e5;function d1e(e,t){return typeof e=="number"&&Number.isInteger(e)&&e>=1?e:t}var psl=["service.name","service.version","deployment.environment"];function Quh(e){if(!(!e||typeof e!="object"||Array.isArray(e)))try{if(psl.every(r=>!(r in e)||typeof e[r]=="string"))return e;let t={...e};for(let r of psl)r in t&&typeof t[r]!="string"&&delete t[r];return t}catch{return}}function Muh(e,t){if(!e)return[];let r=[e].flat().filter(i=>!!i),n=r.filter(i=>typeof i=="function");return n.length!==r.length&&t?.critical(`beforeSpanSend: ignoring ${r.length-n.length} of ${r.length} entries that are not functions. Spans export without them, so whatever they were redacting is not redacted.`),n}function HXo(e,t,r){let n=Ghe({...t},Quh(e?.resourceAttributes)),i=d1e(e?.maxExportBatchSize,Buh);return{serviceName:n?.["service.name"]??e?.serviceName,serviceVersion:n?.["service.version"]??e?.serviceVersion,environment:n?.["deployment.environment"]??e?.environment,resourceAttributes:n,beforeSpanSend:Muh(e?.beforeSpanSend,r),maxAttributesPerSpan:d1e(e?.maxAttributesPerSpan,Duh),maxEventsPerSpan:d1e(e?.maxEventsPerSpan,kuh),maxAttributesPerEvent:Fuh,maxAttributeValueLength:d1e(e?.maxAttributeValueLength,Nuh),flushIntervalMs:d1e(e?.flushIntervalMs,Puh),maxExportBatchSize:i,maxQueueSize:Math.max(d1e(e?.maxQueueSize,Ruh),i),maxLiveSpans:d1e(e?.maxLiveSpans,juh),maxSpanAgeMs:d1e(e?.maxSpanAgeMs,zuh)}}var KXo=require("fs"),msl=require("fs/promises"),YXo=require("path"),hsl=require("readline"),Vin=new nO.ReduceableCache(25),mKt=new nO.ReduceableCache(20),XXo=7,Luh=1e3,_uh=1e4,JXo=10485760;async function gsl(e,t=msl.open,r){let n={},i;try{i=process.cwd()}catch{}for(let a=e.length-1;a>=0;a--){let c=e[a],u=c?.filename;if(!c||typeof u!="string"||typeof c.lineno!="number"||Wuh(u)||Huh(c)||!(0,YXo.isAbsolute)(u)&&i===void 0)continue;n[u]||(n[u]=[]),n[u].push(c.lineno)}let o=Object.keys(n);if(o.length==0)return e;let s=[];for(let a of o){let c=Asl(a,i);if(c===void 0||mKt.get(c))continue;let u=n[a];if(!u)continue;u.sort((d,f)=>d-f);let l=Juh(u);if(l.every(d=>Kuh(c,d)))continue;let p=Yuh(Vin,c,{});s.push(Vuh(a,l,p,c,t,r))}return await Promise.all(s).catch(()=>{}),e&&e.length>0&&Guh(e,Vin,i),Vin.reduce(),e}async function Uuh(e,t,r){let n,i=!1;try{n=await t(e,KXo.constants.O_RDONLY|KXo.constants.O_NONBLOCK);let o=await n.stat();return o.isFile()?o.size>JXo?void r?.debug(`Skipping source context for oversized file ${e}: ${o.size} bytes exceeds ${JXo}`):(i=!0,n):void 0}catch{return}finally{n&&!i&&await n.close().catch(()=>{})}}async function Vuh(e,t,r,n,i,o){let s=await Uuh(e,i,o);if(s===void 0)return void mKt.set(n,1);let a=s;return new Promise(c=>{let u=!1;function l(x){u||(u=!0,x?.destroy(),a.close().then(c,c))}let p;try{p=a.createReadStream({autoClose:!1,start:0,end:JXo-1})}catch{mKt.set(n,1),l();return}let d;try{d=(0,hsl.createInterface)({input:p})}catch{mKt.set(n,1),l(p);return}let f=0,m=0,g=t[m];if(g===void 0)return void l(p);let A=g[0],y=g[1];function I(){mKt.set(n,1),d.close(),d.removeAllListeners(),l(p)}p.on("error",I),d.on("error",I),d.on("close",()=>l(p)),d.on("line",x=>{if(f++,!(f<A)&&(r[f]=Xuh(x,0),f>=y)){if(m===t.length-1){d.close(),d.removeAllListeners();return}m++;let v=t[m];if(v===void 0){d.close(),d.removeAllListeners();return}A=v[0],y=v[1]}})})}function Guh(e,t,r){for(let n of e)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let i=Asl(n.filename,r),o=i===void 0?void 0:t.get(i);if(o===void 0)continue;quh(n.lineno,n,o)}}function quh(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=ysl(e);i<e;i++){let o=r[i];if(o===void 0)return void fsl(t);t.pre_context.push(o)}if(r[e]===void 0)return void fsl(t);t.context_line=r[e];let n=bsl(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 fsl(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Wuh(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Huh(e){return e.lineno!==void 0&&e.lineno>_uh||e.colno!==void 0&&e.colno>Luh}function Asl(e,t){return(0,YXo.isAbsolute)(e)?JSON.stringify([null,e]):t===void 0?void 0:JSON.stringify([t,e])}function Kuh(e,t){let r=Vin.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 Juh(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=dsl(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+XXo:(i.push(n),n=dsl(o)),t++}return i}function dsl(e){return[ysl(e),bsl(e)]}function ysl(e){return Math.max(1,e-XXo)}function bsl(e){return e+XXo}function Yuh(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function Xuh(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 Oft=require("path");function Esl(e=process.cwd()){let t=Oft.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,Oft.isAbsolute)(o.filename)&&(o.filename=r((0,Oft.relative)(n,r(o.filename))));return i}}var Isl="5.55.0";var Whe={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var m1e=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,r={}){let n=this._flags[t];return this._recordAccess(t),n?.enabled??r.defaultValue??!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?.hasExperiment!==void 0&&(i.$feature_flag_has_experiment=r.hasExperiment),r?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(i.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let o=[];this._errorsWhileComputing&&o.push(Whe.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(Whe.QUOTA_LIMITED),r===void 0&&o.push(Whe.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})}};var Zuh=6e4;function vsl(e){return e==="client"||e==="server"?e:"all"}function $uh(e,t){return e===t||e==="all"||t==="all"}var Pft=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}};function elh(e,t){e.name=t.name,Error.captureStackTrace(e,t),Object.setPrototypeOf(e,t.prototype)}var Ane=class e extends Error{constructor(t){super(t),elh(this,e)}},Gin=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.pollerStopped=!1,this.filteredOutFlagKeys=new Set,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.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}withEvaluationSnapshot(t){return t.definitions?t:{...t,evaluationCache:{},definitions:{featureFlagsByKey:this.featureFlagsByKey,groupTypeMapping:this.groupTypeMapping,cohorts:this.cohorts,filteredOutFlagKeys:this.filteredOutFlagKeys,propertyMatchingVersion:this.propertyMatchingVersion}}}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 Ane||u instanceof Zu?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=this.withEvaluationSnapshot({...t,definitions:void 0});return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a,{skipLoadCheck:!0});n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof Ane||u instanceof Zu?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(this.loadedSuccessfullyOnce&&(r=this.withEvaluationSnapshot(r)),o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};r=this.withEvaluationSnapshot(r),t=r.definitions.featureFlagsByKey[t.key]??t;let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=DXo(t.filters?.payloads,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 Zu("Flag has experience continuity enabled");let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=r.definitions.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Zu("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 Zu(`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}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!n.definitions.featureFlagsByKey)throw new Zu("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Zu(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Zu(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Zu(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=n.definitions.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Zu(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else if(n.definitions.filteredOutFlagKeys.has(c))i[c]=!1;else throw new Zu(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Zu(`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){i=this.withEvaluationSnapshot(i);let o=t.filters||{},s=await BXo(o.holdout,r);if(s!==void 0)return s;let a=o.groups||[],c=o.aggregation_group_type_index,u=o.early_exit??!1,{groups:l,groupProperties:p}=i,d=!1,f;for(let m of a)try{let g=m.aggregation_group_type_index!==void 0?m.aggregation_group_type_index:c,A=n,y=r;if(g!==c&&g!=null){let x=i.definitions.groupTypeMapping[String(g)];if(!x||!(x in l)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${t.key}': group type index ${g} not available`));continue}if(!(x in p)){d=!0;continue}A=p[x],y=l[x]}let I=await this.isConditionMatch(t,y,m,A,i);if(I==="match"){let x=m.variant,v=o.multivariate?.variants||[];f=x&&v.some(w=>w.key===x)?x:await this.getMatchingVariant(t,y)||!0;break}if(u&&I==="out_of_rollout_bound"){if(d)break;return!1}}catch(g){if(g instanceof Ane)throw g;if(g instanceof Zu)d=!0;else throw g}if(f!==void 0)return f;if(d)throw new Zu("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){o=this.withEvaluationSnapshot(o);let s=o.definitions,a=n.rollout_percentage,c=u=>{this.logMsgIfDebug(()=>console.warn(u))};if((n.properties||[]).length>0){for(let u of n.properties){let l=u.type,p=!1;if(l==="cohort"){let d=await xsl(u,i,s.cohorts,this.debugMode,f=>this.evaluateFlagDependency(f,i,o),s.propertyMatchingVersion);p=u.operator==="not_in"?!d:d}else p=l==="flag"?await this.evaluateFlagDependency(u,i,o):Csl(u,i,c,s.propertyMatchingVersion);if(!p)return"no_match"}if(a==null)return"match"}return a!=null&&await tKt(t.key,r)>a/100?"out_of_rollout_bound":"match"}async getMatchingVariant(t,r){return RXo(t.key,r,t.filters?.multivariate?.variants||[])}variantLookupTable(t){return Pin(t.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(t){if(!this.evaluationContexts||this.evaluationContexts.length===0)return t;let r=new Set(this.evaluationContexts);return t.filter(n=>{let i=n.evaluation_contexts??n.evaluation_tags;return!i||i.length===0?!0:i.some(o=>r.has(o))})}getEvaluationRuntimeForFlag(t){let r=this.featureFlagsByKey[t];return r?vsl(r.evaluation_runtime):void 0}getFlagKeysByEvaluationRuntime(t){return this.featureFlags.filter(r=>$uh(vsl(r.evaluation_runtime),t)).map(r=>r.key)}updateFlagState(t){let r=this.filterFlagsByEvaluationContexts(t.flags);this.featureFlags=r,this.featureFlagsByKey=r.reduce((i,o)=>(i[o.key]=o,i),{});let n=new Set(r.map(i=>i.key));this.filteredOutFlagKeys=new Set(t.flags.filter(i=>!n.has(i.key)).map(i=>i.key)),this.groupTypeMapping=t.group_type_mapping??t.groupTypeMapping??{},this.cohorts=t.cohorts,this.propertyMatchingVersion=t.property_matching_version??t.propertyMatchingVersion,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.((t.minimal_flag_called_events??t.minimalFlagCalledEvents)===!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(this.featureFlags),!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(){let t=this.pollingInterval??3e4;return this.shouldBeginExponentialBackoff?Math.min(Zuh,t*2**this.backOffCount):t}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);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 Pft(`Your project key or secret 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.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.propertyMatchingVersion=void 0,this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Pft(`Your secret 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 secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Pft(`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=n.group_type_mapping||{},o=n.minimal_flag_called_events===!0,s={flags:n.flags??[],group_type_mapping:i,cohorts:n.cohorts||{},minimal_flag_called_events:o,property_matching_version:n.property_matching_version,propertyMatchingVersion:n.property_matching_version,groupTypeMapping:i,minimalFlagCalledEvents:o};if(this.updateFlagState(s),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(s)}catch(a){this.onError?.(new Error(`Failed to store in cache: ${a}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(t){t instanceof Pft&&this.onError?.(t)}finally{!this.pollerStopped&&this.pollingInterval!==null&&(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}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}}async _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 o=new AbortController;n=zN(()=>{o.abort()},this.timeout),r.signal=o.signal}let i=()=>clearTimeout(n);try{let o=this.fetch,s=await o(t,r);return s.status!==200?(i(),s):{status:s.status,headers:s.headers,body:s.body,text:async()=>{try{return await s.text()}finally{i()}},json:async()=>{try{return await s.json()}finally{i()}}}}catch(o){throw i(),o}}async stopPoller(t=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await p1e(r,t,()=>{throw new Error(`Cache shutdown timeout after ${t}ms`)})}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};function Csl(e,t,r,n){return PXo(e,t,{warnFunction:r,propertyMatchingVersion:n})}function tlh(e,t){if(!(e in t))throw new Ane(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function xsl(e,t,r,n=!1,i,o){let s=String(e.value);tlh(s,r);let a=r[s];return wsl(a,t,r,n,i,o)}async function wsl(e,t,r,n=!1,i,o){if(!e)return!0;let s=e.type,a=e.values;if(!a||a.length===0)return!0;let c=!1;if("values"in a[0]){for(let u of a)try{let l=await wsl(u,t,r,n,i,o);if(s==="AND"){if(!l)return!1}else if(l)return!0}catch(l){if(l instanceof Ane)throw l;if(l instanceof Zu)n&&console.debug(`Failed to compute property ${u} locally: ${l}`),c=!0;else throw l}if(c)throw new Zu("Can't match cohort without a given cohort property value");return s==="AND"}for(let u of a)try{let l;if(u.type==="cohort")l=await xsl(u,t,r,n,i,o);else if(u.type==="flag"){if(!i)throw new Zu(`Flag dependency '${u.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);l=await i(u)}else l=Csl(u,t,void 0,o);let p=u.negation||!1;if(s==="AND"){if(!l&&!p||l&&p)return!1}else if(l&&!p||!l&&p)return!0}catch(l){if(l instanceof Ane)throw l;if(l instanceof Zu)n&&console.debug(`Failed to compute property ${u} locally: ${l}`),c=!0;else throw l}if(c)throw new Zu("can't match cohort without a given cohort property value");return s==="AND"}var rlh=["--unhandled-rejections","--unhandled_rejections"],nlh=new Set(["throw","strict","warn","warn-with-error-code","none"]),ilh=[...globalThis.process?.execArgv??[]],olh=globalThis.process?.env?.NODE_OPTIONS;function slh(e){let t=[],r="",n=!1;for(let i=0;i<e.length;i++){let o=e[i];o==="\\"&&n&&i+1<e.length?r+=e[++i]:o!==" "||n?o==='"'?n=!n:r+=o:r&&(t.push(r),r="")}return r&&t.push(r),t}function Ssl(e){let t;for(let r=0;r<e.length;r++){let n=e[r],i=rlh.find(s=>n===s||n.startsWith(`${s}=`));if(!i)continue;let o=n===i?e[++r]:n.slice(i.length+1);nlh.has(o)&&(t=o)}return t}function alh(e=ilh,t=olh){return Ssl(e)??Ssl(slh(t??""))??"throw"}var Tsl=alh();function Osl(e,t,r){e(t,{mechanism:{type:r==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function clh(e,t){let r=!1;return Object.assign((n,i)=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length;Osl(e,n,i),!r&&o===0&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function Psl(e,t,r=Tsl){let n=globalThis.process;if(n){if(r==="strict")return void n.on("uncaughtExceptionMonitor",(i,o)=>Osl(e,i,o));n.on("uncaughtException",clh(e,t))}}function Bsl(e,t=Tsl){let r=globalThis.process;!r||t==="throw"||t==="strict"||t==="warn-with-error-code"||r.on("unhandledRejection",n=>{e(n,{mechanism:{type:"onunhandledrejection",handled:!1}})})}var ulh=2e3,ZXo=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new uin({..._il(r),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return MHt(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i,o){let s={...o},a=t.buildFromUnknown(r,n);a.$exception_list=await t.modifyFrames(a.$exception_list);let c=nO.getInjectedReleaseId();return c&&(s.$release_id=c),{event:"$exception",distinctId:i,properties:{...a,...s},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(Psl(this.onException.bind(this),this.onFatalError.bind(this)),Bsl(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(this.client.getErrorPropertiesBuilder(),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._capturePreparedEvent(n,!1)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(ulh),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},E5e=ZXo;var qin=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};function llh(e){return e==="v0"||e==="v1"}function Rsl(){let e="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return llh(e)?e:"v0"}var plh="$ai_",hKt="analytics";function Dsl(e){return typeof e.event=="string"&&e.event.startsWith(plh)}var Bft=class e extends Error{constructor({requestId:t,drops:r,retryExhausted:n,cause:i}){super(e.buildMessage(t,r,n,i)),this.name="CaptureV1Error",this.requestId=t,this.drops=r,this.retryExhausted=n,this.cause=i}static buildMessage(t,r,n,i){let o=`Capture V1 batch ${t} did not fully deliver: ${r.length} dropped, ${n.length} undelivered`;return i instanceof Error&&(o+=` (${i.message})`),o}};function $Xo(e){if(typeof e=="boolean")return e;if(typeof e=="number")return e!==0;if(typeof e=="string"){let t=e.trim().toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1}}function flh(e){return typeof e=="string"?e:void 0}var dlh=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:$Xo},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:$Xo},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:$Xo},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:flh}],mlh=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function hlh(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function glh(e){if(typeof e=="string"){let r=new Date(e);if(Number.isNaN(r.getTime()))return new Date().toISOString();let n=r.toISOString(),i=e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1];return i&&i.length>3?n.replace(/\.\d{3}Z$/,`.${i}Z`):n}if(e instanceof Date)return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString();let t=e==null?new Date:new Date(e);return Number.isNaN(t.getTime())?new Date().toISOString():t.toISOString()}function ksl(e,t,r){r!==void 0&&!(t in e)&&(e[t]=r)}function Alh(e){let r={...hlh(e.properties)?e.properties:{}},n={};for(let{property:o,optionKey:s,coerce:a}of dlh)if(o in r){let c=a(r[o]);c!==void 0&&(n[s]=c),delete r[o]}let i={};for(let{property:o,field:s}of mlh)if(o in r){let a=r[o];typeof a=="string"&&(i[s]=a),delete r[o]}return delete r.$lib,delete r.$lib_version,ksl(r,"$set",e.$set),ksl(r,"$set_once",e.$set_once),{event:String(e.event??""),uuid:String(e.uuid??""),distinct_id:String(e.distinct_id??""),timestamp:glh(e.timestamp),...i,options:n,properties:r}}function Fsl(e,{createdAt:t,historicalMigration:r}){let n={created_at:t,batch:e.map(Alh)};return r&&(n.historical_migration=!0),n}var ylh="/i/v1/analytics/events",blh=3e4,Elh=new Set([408,500,502,503,504]),Win=class{constructor(t,r){this.config=t,this.maxBackoffMs=t.maxBackoffMs??blh,this.fetchFn=r.fetch,this.onError=r.onError,this.now=r.now??Date.now,this.sleep=r.sleep??(n=>new Promise(i=>zN(i,n))),this.generateRequestId=r.generateRequestId??jN,this.compress=r.compress??ZHt}async sendV1Batch(t){if(t.length===0)return;let r=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:i}=Fsl(t,{createdAt:n,historicalMigration:this.config.historicalMigration}),o=`${this.config.host}${ylh}`,s=[],a=i,c=Math.max(1,this.config.maxAttempts);for(let u=1;u<=c;u++){let l=u===c,p=u1e({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),d,f;try{d=await this.sendOnce(o,p,u,r);let{response:m,signal:g}=d,{status:A}=m;if(A<200||A>=300)if(!l&&Elh.has(A)){let y=this.parseRetryAfter(m);await d.waitFor(d.cancelBody()).catch(()=>{}),f=this.backoffDelay(u,y)}else{let y=await this.buildHttpError(m,A,d.waitFor);return this.surfaceBatchFailure(r,s,a,y)}else{let y;try{y=await d.waitFor(this.parseResponse(m))}catch(v){if(g.aborted)throw v;return this.surfaceBatchFailure(r,s,a,new Error(`Capture V1 returned an unparseable ${A} response body`))}let I=this.classify(a,y,s);if(I.length===0)return this.surfacePartialDrops(r,s);if(l)return void this.onError(new Bft({requestId:r,drops:s,retryExhausted:I.map(v=>v.uuid)}));a=I;let x=this.parseRetryAfter(m);f=this.backoffDelay(u,x)}}catch(m){if(d&&!d.signal.aborted)throw m;if(l)return this.surfaceBatchFailure(r,s,a,m);f=this.backoffDelay(u)}finally{d?.cleanup()}f!==void 0&&await this.sleep(f)}}async sendOnce(t,r,n,i){let o=this.buildHeaders(n,i),s=r;if(this.config.compressionEnabled){let p=await this.compress(r,this.config.isDebug);p!==null&&(s=p,o["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",u,l=new Promise((p,d)=>{u=zN(()=>{let f=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);f.name="AbortError",d(f),a.abort(f)},this.config.requestTimeoutMs)});try{let p=this.fetchFn(t,{method:"POST",headers:o,body:s,signal:a.signal}),d=!1;p.then(y=>{a.signal.aborted&&!d&&this.cancelBody(y)}).catch(()=>{});let f=await Promise.race([p,l]);d=!0,c="while reading the response body";let m=!1,g,A=()=>g??=this.cancelBody(f);return{response:f,signal:a.signal,waitFor:y=>Promise.race([y,l]),cancelBody:A,cleanup:()=>{m||(m=!0,clearTimeout(u),a.signal.aborted&&A())}}}catch(p){throw clearTimeout(u),p}}buildHeaders(t,r){let n=`${this.config.libraryId}/${this.config.libraryVersion}`,i={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":n,"PostHog-Attempt":String(t),"PostHog-Request-Id":r,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};return this.config.userAgent&&(i["User-Agent"]=this.config.userAgent),i}classify(t,r,n){let i=r.results??{},o=[];for(let s of t){let a=i[s.uuid];a&&(a.result==="drop"?n.push({uuid:s.uuid,details:a.details??void 0}):a.result==="retry"&&o.push(s))}return o}backoffDelay(t,r){let n=Math.min(this.config.initialRetryDelayMs*2**(t-1),this.maxBackoffMs);return r===void 0?n:Math.max(n,Math.min(r,this.maxBackoffMs))}parseRetryAfter(t){let r=t.headers?.get("Retry-After");if(!r)return;let n=r.trim();if(/^\d+$/.test(n)){let s=parseInt(n,10);return Number.isFinite(s)&&s>0?1e3*s:void 0}let i=Date.parse(n);if(Number.isNaN(i))return;let o=i-this.now();return o>0?o:void 0}async parseResponse(t){let r=await t.text(),n=JSON.parse(r);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("unexpected response shape");let i=n.results;if(i!==void 0&&(typeof i!="object"||i===null||Array.isArray(i)))throw new Error("unexpected results shape");return{results:i??{}}}async buildHttpError(t,r,n){let i="";try{i=(await n(t.text())).slice(0,512)}catch{}let o=i?`: ${i}`:"";return new Error(`Capture V1 request failed with HTTP ${r}${o}`)}surfaceBatchFailure(t,r,n,i){this.onError(new Bft({requestId:t,drops:r,retryExhausted:n.map(o=>o.uuid),cause:i}))}surfacePartialDrops(t,r){r.length>0&&this.onError(new Bft({requestId:t,drops:r,retryExhausted:[]}))}async cancelBody(t){try{await t.body?.cancel()}catch{}}};var I5e="ai-capture",Hin="/i/v0/ai/batch/";var vlh=new TextEncoder;function tZo(e){return vlh.encode(u1e(e)).length}function Nsl(e,t=8388608,r=5242880){let n=[],i=[],o=[],s=0;for(let a of e){if(a===void 0)continue;let c=tZo(a);if(c>t){i.push({event:typeof a.event=="string"?a.event:"unknown",bytes:c});continue}o.length>0&&s+c>r&&(n.push(o),o=[],s=0),o.push(a),s+=c}return o.length>0&&n.push(o),{batches:n,dropped:i}}var Clh=100,jsl=3e4,xlh=5e4,wlh=50,Slh=500,Tlh="https://us.i.posthog.com",zsl=new Set;function Jin(e,t){zsl.has(e)||(zsl.add(e),console.warn(`[PostHog] ${t}`))}function Olh(e){return typeof e=="string"?e.trim():""}function Plh(e){return(typeof e=="string"?e.trim():"")||void 0}function Blh(e){return(typeof e=="string"?e.trim():"")||Tlh}function Rlh(e){return(Array.isArray(e)?e:[e]).filter(r=>typeof r=="string"&&r.trim().length>0)}function Dlh(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 Yin=class extends $Ht{constructor(t,r={}){let n=Olh(t),i={...r,maxQueueSize:r.maxQueueSize??1e4,flushInterval:r.flushInterval??5e3,host:Blh(r.host),personalApiKey:Plh(r.secretKey??r.personalApiKey)};if(super(n,i),this._memoryStorage=new qin,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=i,this.captureMode=Rsl(),this.enableFullAiCapture=i.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,Clh):i.featureFlagsPollingInterval===null?null:jsl,typeof i.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(i.waitUntilDebounceMs,0)),typeof i.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(i.waitUntilMaxWaitMs,0)),!this.disabled&&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 Gin({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)},onMinimalFlagCalledEvents:s=>{this._minimalFlagCalledEvents=s},customHeaders:this.getCustomHeaders(),cacheProvider:i.flagDefinitionCacheProvider,strictLocalEvaluation:i.strictLocalEvaluation,evaluationContexts:i.evaluationContexts??i.evaluationEnvironments}))}this.errorTracking=new E5e(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||xlh}enqueue(t,r,n,i){super.enqueue(t,r,n,i),this.scheduleDebouncedFlush()}_flushEventsAndSpans(t=!1){let r=this.flushWithPendingPromises();return!this._traces||t&&this._traces.throttled?r:UHt([r,this._traces.flush().catch(()=>{})]).then(([n])=>{if(n.status==="rejected")throw n.reason})}flushAutomatic(){return this._flushKeepingRuntimeAlive(!0)}async flush(){return this._flushKeepingRuntimeAlive(!1)}_flushKeepingRuntimeAlive(t){let r=this._flushEventsAndSpans(t),n=this.options.waitUntil;if(n&&!this._waitUntilCycle)try{n(r.catch(()=>{}))}catch{}return r}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??Slh,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??wlh;this._waitUntilCycle.timer=zN(()=>{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 this._flushEventsAndSpans()}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)}getQueueRouteKey(t){return this.captureMode==="v1"&&Dsl(t)?"ai":hKt}persistedQueueKeyForRoute(t){return t===I5e?OM.AiCaptureQueue:t==="ai"?OM.AiQueue:OM.Queue}getActiveQueueRoutes(){let t=this.captureMode==="v1"?[hKt,"ai"]:[hKt];return this._aiCaptureRouteActive&&t.push(I5e),t}getBatchEndpointPath(t){return t===I5e?Hin:super.getBatchEndpointPath(t)}async sendBatch(t,r,n=hKt){if(n===I5e)return this.sendAiCaptureBatch(t,r);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(t,r,n);let i=t.filter(o=>o!==void 0);await this.getV1Sender().sendV1Batch(i)}async sendAiCaptureBatch(t,r){let{batches:n,dropped:i}=Nsl(t);for(let{event:o,bytes:s}of i){let a=`Event ${o} (${s} bytes) exceeds the ${8388608/1048576}MiB limit for ${Hin}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let o of n)await this.sendAiSubBatch(o,r)}async sendAiSubBatch(t,r){try{await super.sendBatch(t,r,I5e)}catch(n){if(!wft(n))throw n;if(t.length===1){let[o]=t,a=`Event ${typeof o.event=="string"?o.event:"unknown"} (${tZo(o)} bytes) was rejected with 413 by ${Hin} on its own, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a));return}let i=Math.ceil(t.length/2);await this.sendAiSubBatch(t.slice(0,i),r),await this.sendAiSubBatch(t.slice(i),r)}}getV1Sender(){return this._v1Sender||(this._v1Sender=new Win({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3e3,isDebug:this.isDebug},{fetch:(t,r)=>this.fetch(t,r),onError:t=>this._events.emit("error",t),compress:t=>this.compressPayload(t)})),this._v1Sender}getLibraryVersion(){return Isl}get metrics(){return this._metrics||(this._metrics=new cKt(this,Rin(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new dKt}hostResourceAttributes(){return{}}get _spanContextManager(){return this._spanContext||(this._spanContext=this.initializeSpanContextManager()),this._spanContext}get _tracesPipeline(){if(this.options.traces)return this._traces||(this._traces=new fKt(this,HXo(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let t=this.context?.get();return{distinctId:t?.distinctId,sessionId:t?.sessionId}}startSpan(t,r){return this._tracesPipeline?.startSpan(t,r)??f1e(r,this._spanContextManager.active())}withSpan(t,r,n){let i=typeof r=="function"?void 0:r,o=typeof r=="function"?r:n,s=this._tracesPipeline;return s?i?s.withSpan(t,i,o):s.withSpan(t,o):pKt(this._spanContextManager,f1e(i,this._spanContextManager.active()),o)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let t=super.getCommonEventProperties();return(this.options.isServer??!0)&&(t.$is_server=!0),t}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}_warnIfInvalidCapture(t,r,n){typeof t=="string"&&this._logger.warn(r),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(t,r,n,i,o){return this.addPendingPromise(this._prepareEventMessage(r,i).then(({distinctId:s,event:a,properties:c,options:u})=>{let l={timestamp:u.timestamp,disableGeoip:u.disableGeoip,uuid:u.uuid},p={distinctId:s,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(t,p,l,o):this.enqueue(t,p,l,o)}).catch(s=>{s&&console.error(s)}))}_capturePreparedEvent(t,r){return this._sendPreparedEvent("capture",t,r)}capture(t){this._warnIfInvalidCapture(t,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(t,!1)}async captureImmediate(t){return this._warnIfInvalidCapture(t,"Called captureImmediate() with a string as the first argument when an object was expected.","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._capturePreparedEvent(t,!0)}captureAi(t){if(this.disabled)return;let r=g5e(t.uuid,jN);return this._sendPreparedAiEvent({...t,uuid:r},!1),r}async captureAiImmediate(t){if(this.disabled)return;let r=g5e(t.uuid,jN);return await this._sendPreparedAiEvent({...t,uuid:r},!0),r}_sendPreparedAiEvent(t,r){return typeof t?.event=="string"&&!t.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${t.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",t,r,void 0,I5e)}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};this._sendPreparedEvent("identify",{distinctId:t,event:"$identify",properties:l,disableGeoip:n},!1,{includeContextProperties:!1})}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 this._sendPreparedEvent("identify",{distinctId:t,event:"$identify",properties:l,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:t,properties:r={},propertiesOnce:n={}}){if(Object.keys(r).length===0&&Object.keys(n).length===0)return;let i={};Object.keys(r).length>0&&(i.$set=r),Object.keys(n).length>0&&(i.$set_once=n),this.capture({distinctId:t,event:"$set",properties:i})}unsetPersonProperties({distinctId:t,properties:r}){let n=Rlh(r);n.length!==0&&this.capture({distinctId:t,event:"$set",properties:{$unset:n}})}alias(t){this._sendPreparedEvent("alias",{distinctId:t.distinctId,event:"$create_alias",properties:{distinct_id:t.distinctId,alias:t.alias},disableGeoip:t.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(t){await this._sendPreparedEvent("alias",{distinctId:t.distinctId,event:"$create_alias",properties:{distinct_id:t.distinctId,alias:t.alias},disableGeoip:t.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}getFeatureFlagEvaluationRuntime(t){return this.featureFlagsPoller?.getEvaluationRuntimeForFlag(t)}getFeatureFlagKeysByEvaluationRuntime(t){return this.featureFlagsPoller?.getFlagKeysByEvaluationRuntime(t)??[]}async waitForLocalEvaluationReady(t=jsl){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){if(this.disabled)return void this._logger.warn("The client is disabled");let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let R=this._flagOverrides[t];if(R===void 0)return;let D=this._payloadOverrides?.[t];return{key:t,enabled:R!==!1,variant:typeof R=="string"?R:void 0,payload:D}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,this.personPropertiesForLocalEvaluation(r,u),l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,g,A,y,I,x,v,w;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let R=this.featureFlagsPoller?.featureFlagsByKey[t];if(R)try{let D=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(R,d,{matchValue:i});if(D){m=!0;let O=D.value;I=R.id,v="Evaluated locally",w=R.has_experiment,f={key:t,enabled:O!==!1,variant:typeof O=="string"?O:void 0,payload:D.payload??void 0,reason:v,reasonCode:R.active===!1?"flag_disabled":void 0}}}catch(D){if(D instanceof Ane||D instanceof Zu)this._logger?.info(`${D.name} when computing flag locally: ${t}: ${D.message}`);else throw D}}if(!m&&!c){let R=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,u,l,a,[t]);if(R===void 0)y=Whe.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=R.minimalFlagCalledEvents===!0,g=R.requestId,A=R.evaluatedAt;let D=[];R.errorsWhileComputingFlags&&D.push(Whe.ERRORS_WHILE_COMPUTING),R.quotaLimited?.includes("feature_flags")&&D.push(Whe.QUOTA_LIMITED);let O=R.flags[t];if(O===void 0)D.push(Whe.FLAG_MISSING);else{I=O.metadata?.id,x=O.metadata?.version,v=O.reason?.description??O.reason?.code,w=O.metadata?.has_experiment;let z;if(O.metadata?.payload!==void 0)try{z=JSON.parse(O.metadata.payload)}catch{z=O.metadata.payload}f={key:t,enabled:O.enabled,variant:O.variant??void 0,payload:z,reason:v,reasonCode:O.reason?.code}}D.length>0&&(y=D.join(","))}}if(o){let R=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,D={$feature_flag:t,$feature_flag_response:R,$feature_flag_id:I,$feature_flag_version:x,$feature_flag_reason:v,locally_evaluated:m,[`$feature/${t}`]:R,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(w!==void 0&&(D.$feature_flag_has_experiment=w),m&&this.featureFlagsPoller){let O=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();O!==void 0&&(D.$feature_flag_definitions_loaded_at=O)}y&&(D.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:R,groups:s,disableGeoip:a,properties:D})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){Jin("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(Jin("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.disabled)return void this._logger.warn("The client is disabled");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){Jin("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:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{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,this.personPropertiesForLocalEvaluation(n,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,u,l,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 m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:o,disableGeoip:s}=i||{},a=i?.flagKeys??void 0;if(a?.length===0)return new m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:{}});let{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,this.personPropertiesForLocalEvaluation(n,u),l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=a?new Set(a):void 0,m={},g,A,y=!1,I=!1,x=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),v=new Set;if(x)for(let[R,D]of Object.entries(x.response)){let O=this.featureFlagsPoller?.featureFlagsByKey[R];m[R]={key:R,enabled:D!==!1,variant:typeof D=="string"?D:void 0,payload:x.payloads[R],id:O?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:O?.has_experiment},v.add(R)}let w=f!==void 0&&Array.from(f).some(R=>this.featureFlagsPoller?.featureFlagsByKey[R]===void 0);if((x?x.fallbackToFlags||w:!0)&&!c){let R=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,u,l,s,a);if(R){this._minimalFlagCalledEvents=R.minimalFlagCalledEvents===!0,g=R.requestId,A=R.evaluatedAt,y=!!R.errorsWhileComputingFlags,I=Array.isArray(R.quotaLimited)&&R.quotaLimited.includes("feature_flags");for(let[D,O]of Object.entries(R.flags)){if(v.has(D))continue;let z;if(O.metadata?.payload!==void 0)try{z=JSON.parse(O.metadata.payload)}catch{z=O.metadata.payload}m[D]={key:D,enabled:O.enabled,variant:O.variant,payload:z,id:O.metadata?.id,version:O.metadata?.version,reason:O.reason?.description??O.reason?.code,locallyEvaluated:!1,hasExperiment:O.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[R,D]of Object.entries(this._flagOverrides)){if(D===void 0){delete m[R];continue}let O=m[R];m[R]={key:R,enabled:D!==!1,variant:typeof D=="string"?D:void 0,payload:O?.payload,id:O?.id,version:O?.version,reason:O?.reason,locallyEvaluated:O?.locallyEvaluated??!1,hasExperiment:O?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[R,D]of Object.entries(this._payloadOverrides)){let O=m[R];O&&(m[R]={...O,payload:D})}if(f!==void 0)for(let R of Object.keys(m))f.has(R)||delete m[R];return new m1e({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:m,requestId:g,evaluatedAt:A,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:y,quotaLimited:I})}_shouldSendMinimalFlagCalledEvent(t,r){return t==="$feature_flag_called"&&this._minimalFlagCalledEvents&&r.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(t){let{distinctId:r,key:n,response:i,groups:o,disableGeoip:s,properties:a}=t,c=o&&Object.keys(o).length>0?`_${JSON.stringify(Object.entries(o).sort(([l],[p])=>l<p?-1:l>p?1:0))}`:"",u=`${n}_${i}${c}`;r in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[r].has(u)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),this.distinctIdHasSentFlagCalls[r]instanceof Set?this.distinctIdHasSentFlagCalls[r].add(u):this.distinctIdHasSentFlagCalls[r]=new Set([u]),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}){this._sendPreparedEvent("capture",{distinctId:i||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{}},disableGeoip:o},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){await this._sendPreparedEvent("capture",{distinctId:i||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{}},disableGeoip:o},!0,{includeContextProperties:!1})}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=Date.now()+(t??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown(),this._metrics&&(await p1e(this._metrics.flush().catch(()=>{}),Math.max(0,r-Date.now())),this._metrics.reset()),this._traces&&(await p1e(this._traces.flush().catch(()=>{}),Math.max(0,r-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,r-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},n?.()}}async _requestRemoteConfigPayload(t){if(this.disabled||!this.apiKey||!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=zN(()=>{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(Qil(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){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");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={...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}personPropertiesForLocalEvaluation(t,r){return{distinct_id:t,...r||{}}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i,o){if(!E5e.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise(E5e.buildEventMessage(this.getErrorPropertiesBuilder(),t,{syntheticException:s},r,n).then(a=>this._capturePreparedEvent({...a,uuid:i,flags:o},!1)))}}async captureExceptionImmediate(t,r,n,i){if(!E5e.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise(E5e.buildEventMessage(this.getErrorPropertiesBuilder(),t,{syntheticException:o},r,n).then(s=>this.captureImmediate({...s,flags:i})))}}async prepareEventMessage(t){return this._prepareEventMessage(t)}async _prepareEventMessage(t,r={}){let{distinctId:n,event:i,properties:o,groups:s,flags:a,sendFeatureFlags:c,timestamp:u,disableGeoip:l,uuid:p}=t,d=this.context?.get(),f=r.includeContextProperties??!0,m=n||d?.distinctId,g=f?{...this.props,...d?.properties||{},...o||{}}:{...o||{}};m||(m=jN(),g.$process_person_profile=!1),f&&d?.sessionId&&!g.$session_id&&(g.$session_id=d.sessionId);let A=this._shouldSendMinimalFlagCalledEvent(i,g)?YHt(g):g,y=this._runBeforeSend({distinctId:m,event:i,properties:A,groups:s,flags:a,sendFeatureFlags:c,timestamp:u,disableGeoip:l,uuid:p});if(!y)return Promise.reject(null);let I=await Promise.resolve().then(async()=>{if(a)return c&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),a._getEventProperties();if(c){Jin("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 x=typeof c=="object"?c:void 0,v=await this.getFeatureFlagsForEvent(y.distinctId,s,l,x);return Dlh(v)}return{}}).catch(()=>({})).then(x=>{let v=y.groups||s;return{...x,...y.properties||{},...v!==void 0&&Object.keys(v).length>0?{$groups:v}:{}}});return y.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof I.$raw_user_agent=="string"&&Lil(I.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(y.event="$bot_pageview",I.$browser_type="bot"),{distinctId:y.distinctId,event:y.event,properties:I,options:{timestamp:y.timestamp,disableGeoip:y.disableGeoip,uuid:y.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)try{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)}}catch(s){return this._logger.error(`Error in before_send function for event '${t.event}':`,s),null}return i}};var Qsl=require("async_hooks"),Xin=class{constructor(){this.storage=new Qsl.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 Msl=require("async_hooks"),Zin=class{active(){return this._storage.getStore()}with(t,r){return this._storage.run(t,r)}constructor(){this._storage=new Msl.AsyncLocalStorage}};var Lsl=require("zlib"),_sl=require("util"),klh=(0,_sl.promisify)(Lsl.gzip);async function Usl(e,t=!0){try{let r=await klh(e);return new Uint8Array(r)}catch(r){return t&&console.error("Failed to gzip compress data",r),null}}var $in=require("os");function Vsl(){let e,t;try{e=(0,$in.platform)(),t=(0,$in.release)()}catch{}return jXo(e,t)}var Gsl="posthog-node";function Flh(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[rZo.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(g=>({...g,stacktrace:g.stacktrace?{...g.stacktrace,type:"raw",frames:(g.stacktrace.frames||[]).map(A=>({...A,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},m=nO.getInjectedReleaseId();return m&&(f.$release_id=m),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 rZo=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(t,r,n,i,o){this.name=Gsl,this.name=Gsl,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(Flh(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};var yne=class extends Yin{getLibraryId(){return"posthog-node"}compressPayload(t){return Usl(t,this.isDebug)}initializeContext(){return new Xin}initializeSpanContextManager(){return new Zin}hostResourceAttributes(){return Vsl()}createErrorPropertiesBuilder(){return new nO.ErrorPropertiesBuilder([new nO.EventCoercer,new nO.ErrorCoercer,new nO.ObjectCoercer,new nO.StringCoercer,new nO.PrimitiveCoercer],nO.createStackParser("node:javascript",nO.nodeStackLineParser),[kil(),t=>gsl(t,void 0,this._logger),Esl()])}};function qsl(e){return e==null||!e.enabled?!1:e.variant==null||e.variant==="true"}var eon=class{isEnabled(){return Promise.resolve(!1)}getCachedValue(){}flush(){return Promise.resolve()}},Nlh="feature_flag_evaluated",jlh=3e3,zlh=3e3,ton=class{evaluator;environment;sendFeatureFlagEvents;pending=new Map;resolved=new Map;constructor({environment:t,sendFeatureFlagEvents:r,posthogApiKey:n,evaluator:i}){this.environment=t,this.sendFeatureFlagEvents=r,this.evaluator=i??new yne(n??"",{featureFlagsRequestTimeoutMs:jlh,isServer:!1})}isEnabled(t,r){let n=Wsl(t,r),i=this.pending.get(n);if(i!=null)return i;let o=this.evaluateAndRemember(t,r,n);return this.pending.set(n,o),o}async evaluateAndRemember(t,r,n){let i=await this.evaluate(t,r);return this.resolved.set(n,i),i}getCachedValue(t,r){return this.resolved.get(Wsl(t,r))}async flush(){if(!this.sendFeatureFlagEvents)return;let t;try{await Promise.race([this.flushAfterPendingEvaluations(),new Promise(r=>{t=setTimeout(r,zlh),t.unref()})])}catch{}finally{clearTimeout(t)}}async flushAfterPendingEvaluations(){await Promise.allSettled(this.pending.values()),await this.evaluator.flush()}async evaluate(t,r){let{org:n}=r,i=Mlh(r,this.environment),o;try{o=await this.evaluator.getFeatureFlagResult(t,nZo(n),{personProperties:i,groups:{organization:n},groupProperties:{organization:i},sendFeatureFlagEvents:!1})}catch{return!1}return this.sendFeatureFlagEvents&&this.captureFlagUsage({flag:t,org:n,result:o,properties:i}),qsl(o)}captureFlagUsage({flag:t,org:r,result:n,properties:i}){let o=Qlh(n),s={...i,...n?.reason!=null?{$feature_flag_reason:n.reason}:{},version:"5.168.0"};this.tryCapture({distinctId:nZo(r),event:"$feature_flag_called",groups:{organization:r},properties:{...s,$feature_flag:t,$feature_flag_response:o,[`$feature/${t}`]:o}}),this.tryCapture({distinctId:nZo(r),event:Nlh,groups:{organization:r},properties:{...s,flag:t,response:o,enabled:qsl(n)}})}tryCapture(t){try{this.evaluator.capture(t)}catch{}}};function Qlh(e){if(e!=null)return e.enabled?e.variant??!0:!1}function nZo(e){return`org:${e}`}function Mlh({org:e,generator:t,language:r},n){return{org:e,environment:n,...t!=null?{generator:t}:{},...r!=null?{language:r}:{}}}function Wsl(e,{org:t,generator:r,language:n}){return JSON.stringify([e,t,r??null,n??null])}var ron;function non(){return ron==null&&(ron=Llh()),ron}async function iZo(){await ron?.flush()}function Llh(){let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";return e==null||e.trim().length===0?new eon:new ton({posthogApiKey:e,environment:FJ(),sendFeatureFlagEvents:oin()})}var ion=class{posthog;constructor({posthogApiKey:t}){this.posthog=new yne(t,{isServer:!1})}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.168.0",usingAccessToken:!0,cliReleaseEnvironment:FJ(),...Ppe()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:{...t.properties,cliReleaseEnvironment:FJ()}})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var gKt=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};kd();er();var Rft=require("fs/promises"),Hsl=require("os"),Ksl=require("path");iVe();var _lh="id",Ulh=".fern",AKt=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new yne(r,{isServer:!1}),this.userId=t==null?void 0:J9o(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.168.0",...t,...t.properties,usingAccessToken:!1,cliReleaseEnvironment:FJ(),agent:oHr(),...r!=null?{userEmail:r}:{},...Ppe()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:{...t.properties,cliReleaseEnvironment:FJ()}})}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 Kf({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=WS(),r=De(_t.of((0,Hsl.homedir)()),be.of(Ulh),be.of(_lh));try{await Ut(r)?this.persistedDistinctId=(await(0,Rft.readFile)(r)).toString():(await(0,Rft.mkdir)((0,Ksl.dirname)(r),{recursive:!0}),await(0,Rft.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var oZo;async function yKt(){return oZo==null&&(oZo=await Vlh()),oZo}async function Vlh(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal";if(e==null||!oin())return new gKt;let t=await Ult();return t!=null?new AKt({token:t,posthogApiKey:e}):await EM()!=null?new ion({posthogApiKey:e}):new AKt({token:void 0,posthogApiKey:e})}catch{return new gKt}}On();Ct();kt();h8();var bKt=Ae(require("process"),1);sZe();var Xsl=Ae(w3o(),1),Zsl=Ae(Ysl(),1);function iO(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=uH(e),e.length===0))return 0;e=e.replace((0,Zsl.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(Xsl.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}On();function oon(e){let t=0;for(let r of e.split(`
|
|
3460
3460
|
`))t=Math.max(t,iO(r));return t}var yal=Ae(aZo(),1);var qlh=/[\p{Lu}]/u,Wlh=/[\p{Ll}]/u,tal=/^[\p{Lu}](?![\p{Lu}])/gu,ial=/([\p{Alpha}\p{N}_]|$)/u,cZo=/[_.\- ]+/,Hlh=new RegExp("^"+cZo.source),ral=new RegExp(cZo.source+ial.source,"gu"),nal=new RegExp("\\d+"+ial.source,"gu"),Klh=(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&&qlh.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&Wlh.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},Jlh=(e,t)=>(tal.lastIndex=0,e.replace(tal,r=>t(r))),Ylh=(e,t)=>(ral.lastIndex=0,nal.lastIndex=0,e.replace(ral,(r,n)=>t(n)).replace(nal,r=>t(r)));function uZo(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?cZo.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=Klh(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(Hlh,""),e=t.preserveConsecutiveUppercase?Jlh(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),Ylh(e,n))}var dZo=Ae(sal(),1);sZe();var aal=(e=0)=>t=>`\x1B[${t+e}m`,cal=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,ual=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,vE={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]}},$Jv=Object.keys(vE.modifier),eph=Object.keys(vE.color),tph=Object.keys(vE.bgColor),eYv=[...eph,...tph];function rph(){let e=new Map;for(let[t,r]of Object.entries(vE)){for(let[n,i]of Object.entries(r))vE[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=vE[n],e.set(i[0],i[1]);Object.defineProperty(vE,t,{value:r,enumerable:!1})}return Object.defineProperty(vE,"codes",{value:e,enumerable:!1}),vE.color.close="\x1B[39m",vE.bgColor.close="\x1B[49m",vE.color.ansi=aal(),vE.color.ansi256=cal(),vE.color.ansi16m=ual(),vE.bgColor.ansi=aal(10),vE.bgColor.ansi256=cal(10),vE.bgColor.ansi16m=ual(10),Object.defineProperties(vE,{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=>vE.rgbToAnsi256(...vE.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)=>vE.ansi256ToAnsi(vE.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>vE.ansi256ToAnsi(vE.hexToAnsi256(t)),enumerable:!1}}),vE}var nph=rph(),lal=nph;var son=new Set(["\x1B","\x9B"]),iph=39,pZo="\x07",dal="[",oph="]",mal="m",fZo=`${oph}8;;`,pal=e=>`${son.values().next().value}${dal}${e}${mal}`,fal=e=>`${son.values().next().value}${fZo}${e}${pZo}`,sph=e=>e.split(" ").map(t=>iO(t)),lZo=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=iO(uH(e[e.length-1]));for(let[a,c]of n.entries()){let u=iO(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),son.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(fZo)),i){o?c===pZo&&(i=!1,o=!1):c===mal&&(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())},aph=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(iO(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},cph=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=sph(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=iO(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(""),lZo(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){lZo(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){lZo(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>aph(u)));let c=[...a.join(`
|
|
3461
3461
|
`)];for(let[u,l]of c.entries()){if(n+=l,son.has(l)){let{groups:d}=new RegExp(`(?:\\${dal}(?<code>\\d+)m|\\${fZo}(?<uri>.*)${pZo})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===iph?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=lal.codes.get(Number(i));c[u+1]===`
|
|
3462
3462
|
`?(o&&(n+=fal("")),i&&p&&(n+=pal(p))):l===`
|
|
@@ -4116,7 +4116,7 @@ ${tt.stack}`),!1}};await D();let O=w.apiWorkspaces.flatMap(Be=>Be.getAbsoluteFil
|
|
|
4116
4116
|
`)},ue=[],Pe,Ce=!1;z.on("all",(Be,We)=>{n.logger.info(me.dim(`[${Be}] ${We}`)),!Ce&&(ue.push(_t.of(We)),Pe!=null&&clearTimeout(Pe),Pe=setTimeout(()=>{(async()=>{Ce=!0;try{let tt=R.getFilesToReload(ue);await D(tt)&&await ae()}finally{ue.length=0,Ce=!1}})()},q5g))}),n.logger.info(`Docs preview server (Astro) ready on http://localhost:${i}${g}`),await de}async function Y5g({bundlePath:e,forceDownload:t,cacheDir:r,context:n}){if(e!=null)return n.logger.info(`Using Astro bundle from path: ${e}`),await CEp(_t.of(e));if(t){let a=ZFe({astro:!0,cacheDir:r});await Ut(a)&&(n.logger.info("Force download requested. Deleting cached Astro bundle..."),await(0,Ewi.rm)(a,{recursive:!0}))}let i="https://prod-local-preview-astro-bundle.s3.amazonaws.com/";if(i==null)throw new T({message:"Failed to connect to the docs preview server. Please contact support@buildwithfern.com",code:T.Code.InternalError});let o=HGe({astro:!0,cacheDir:r});if((await _$t({bucketUrl:i,logger:n.logger,preferCached:!0,astro:!0,tryTar:!0,cacheDir:r})).type==="failure")if(await Ut(o))n.logger.warn("Falling back to cached Astro bundle...");else throw new T({message:"Failed to download the Astro docs preview bundle. Please reach out to support@buildwithfern.com.",code:T.Code.NetworkError});return await CEp(o)}async function CEp(e){let t=De(e,be.of(H5g)),r=K5g;if(await Ut(t)){let i=JSON.parse(await(0,Ewi.readFile)(t,"utf-8"));typeof i.entry=="string"&&(r=i.entry)}let n=De(e,be.of(r));if(!await Ut(n))throw new T({message:`${e} does not contain the Astro preview server (missing ${r}).`,code:T.Code.UserError});return{root:e,entry:n}}var X5g="_fern-files";function Z5g({rendererPort:e,rendererHost:t,mirrorPort:r,basepath:n,reloadClients:i}){let o=`${n}/${X5g}/`;return Y2s.default.createServer((s,a)=>{if(s.url===wEp){a.writeHead(200,{"content-type":"text/event-stream","cache-control":"no-store",connection:"keep-alive"}),a.write(`: connected
|
|
4117
4117
|
|
|
4118
4118
|
`),i.add(a),s.on("close",()=>i.delete(a));return}let c=s.url!=null&&s.url.startsWith(o),u=Y2s.default.request(c?{host:"127.0.0.1",port:r,method:s.method,path:`/files/${s.url?.slice(o.length)??""}`,headers:s.headers}:{host:"127.0.0.1",port:e,method:s.method,path:s.url,headers:{...s.headers,[xEp]:t}},l=>{let p={...l.headers};if(!((p["content-type"]??"").includes("text/html")&&p["content-encoding"]==null)){a.writeHead(l.statusCode??502,p),l.pipe(a);return}let f=[];l.on("data",m=>f.push(m)),l.on("end",()=>{let m=Buffer.concat(f).toString("utf-8"),g=m.lastIndexOf("</body>"),A=g>=0?`${m.slice(0,g)}${vEp}${m.slice(g)}`:`${m}${vEp}`,y=Buffer.from(A,"utf-8");delete p["transfer-encoding"],p["content-length"]=y.byteLength.toString(),a.writeHead(l.statusCode??502,p),a.end(y)}),l.on("error",()=>a.destroy())});u.on("error",l=>{a.headersSent||a.writeHead(502,{"content-type":"text/plain"}),a.end(`Astro preview server unavailable: ${l.message}
|
|
4119
|
-
`)}),s.pipe(u)})}function $5g(){return new Promise((e,t)=>{let r=X2s.default.createServer();r.once("error",t),r.listen(0,"127.0.0.1",()=>{let n=r.address(),i=typeof n=="object"&&n!=null?n.port:void 0;r.close(()=>i!=null?e(i):t(new Error("could not allocate a port")))})})}function e8g(e,t,r){let n=Date.now()+r;return new Promise((i,o)=>{let s=!1;t.on("exit",c=>{s=!0,o(new Error(`Astro preview server exited with code ${c} before becoming ready`))});let a=()=>{if(s)return;if(Date.now()>n){o(new Error("timed out waiting for the Astro preview server to become ready"));return}let c=X2s.default.connect(e,"127.0.0.1");c.once("connect",()=>{c.destroy(),i()}),c.once("error",()=>{c.destroy(),setTimeout(a,200)})};a()})}kt();var OEp=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,SEp="docs.buildwithfern.com",TEp=62;function gWe(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)),OEp.test(t)}function PEp(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function cir({orgId:e,previewId:t}){let r=PEp(t),n=`${e}-preview-${r}.${SEp}`;if(n.length<=TEp)return n;let i=`${e}-preview-`,o=TEp-i.length;if(o<8)throw new T({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:T.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${SEp}`}Ct();LI();Ah();er();d0();kt();On();var SNs=require("child_process"),UIp=Ae(REp(),1),TNs=Ae(ywi(),1),ONs=Ae(require("fs"),1),BNs=require("fs/promises"),VIp=Ae(require("http"),1),GIp=Ae(require("os"),1),jwi=Ae(require("path"),1);INs();LI();er();var vNs=require("fs/promises");async function CNs(e,t){let r=new Map,{docsDefinition:n,translationPages:i,translationNavigationOverlays:o,translatedApiDefinitions:s,collectedFileIds:a,docsWorkspacePath:c,markdownFilesToPathName:u}=e,l=i!=null&&Object.keys(i).length>0,p=s!=null&&Object.keys(s).length>0;if(!l&&!p)return r;let d=n.config.translations?.defaultLocale,f=new Set([...Object.keys(i??{}),...Object.keys(s??{})]);for(let m of f){if(m===d)continue;let g=i?.[m]??{};try{let A=async fe=>{let ie=Io(c,fe),de=Yn(c,be.of(`translations/${m}/${ie}`));return await Ut(de)?de:fe},y=async fe=>{let ie=await A(fe),de=await(0,vNs.readFile)(ie,"utf-8"),Se=de.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Se!=null?de.slice(Se[0].length):de},I=async fe=>{let ie=await A(fe);return(0,vNs.readFile)(ie,"utf-8")},x={};for(let[fe,ie]of Object.entries(n.pages))ie!=null&&(x[fe]=ie);for(let[fe,ie]of Object.entries(g))try{let de=x[fe],Se=Yn(c,be.of(fe)),{markdown:Fe}=await IF({markdown:ie,absolutePathToFernFolder:c,absolutePathToMarkdownFile:Se,context:t,markdownLoader:y}),ae=await c_({markdown:Fe,absolutePathToFernFolder:c,absolutePathToMarkdownFile:Se,context:t,fileLoader:I}),ue=u_({markdown:ae,absolutePathToFernFolder:c,absolutePathToMarkdownFile:Se,context:t}),Pe=JO(ue);Pe=n_(Pe,a,u,{absolutePathToMarkdownFile:Se,absolutePathToFernFolder:c},t),x[fe]={markdown:Pe,rawMarkdown:Pe,editThisPageUrl:de?.editThisPageUrl,editThisPageLaunch:de?.editThisPageLaunch}}catch(de){t.logger.warn(`Failed to process translated page "${fe}" for locale "${m}": ${String(de)}. Falling back to base page.`)}let v=aGe(n.config.root,g,t),w=o?.[m],B=n.config.announcement,R=n.config.navbarLinks;w!=null&&(v=uGe(v,w),B=lGe(w)??B,w.navbarLinks!=null&&(R=w.navbarLinks));let D=n.apis,O=s?.[m],z=O,Y;if(O!=null&&v!=null){let fe=oGe(v,D,O);fe.size>0&&(t.logger.warn(`Translated API definition(s) [${Array.from(fe).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.`),z=Object.fromEntries(Object.entries(O).filter(([ie])=>!fe.has(ie)))),Y=new Set(Object.keys(O).filter(ie=>!fe.has(ie)))}let ee=z!=null&&Object.keys(z).length>0?{...n.apis,...z}:n.apis;O!=null&&Object.keys(O).length>0&&v!=null&&(v=sGe(v,D,O,{rewritableApiIds:Y}));let ce={...n,apis:ee,pages:x,config:{...n.config,root:v,announcement:B,navbarLinks:R}};r.set(m,ce),t.logger.debug(`Computed translated definition for locale "${m}"`+(O!=null?` (with ${Object.keys(O).length} translated API(s))`:""))}catch(A){t.logger.warn(`Failed to compute translation for locale "${m}": ${String(A)}`)}}return r}er();var qW=require("fs/promises"),jIp=require("os"),wNs=Ae(require("path"),1),TGg=".fern",OGg="logs",xNs=100*1024*1024;function PGg(){return"cli@5.
|
|
4119
|
+
`)}),s.pipe(u)})}function $5g(){return new Promise((e,t)=>{let r=X2s.default.createServer();r.once("error",t),r.listen(0,"127.0.0.1",()=>{let n=r.address(),i=typeof n=="object"&&n!=null?n.port:void 0;r.close(()=>i!=null?e(i):t(new Error("could not allocate a port")))})})}function e8g(e,t,r){let n=Date.now()+r;return new Promise((i,o)=>{let s=!1;t.on("exit",c=>{s=!0,o(new Error(`Astro preview server exited with code ${c} before becoming ready`))});let a=()=>{if(s)return;if(Date.now()>n){o(new Error("timed out waiting for the Astro preview server to become ready"));return}let c=X2s.default.connect(e,"127.0.0.1");c.once("connect",()=>{c.destroy(),i()}),c.once("error",()=>{c.destroy(),setTimeout(a,200)})};a()})}kt();var OEp=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,SEp="docs.buildwithfern.com",TEp=62;function gWe(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)),OEp.test(t)}function PEp(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function cir({orgId:e,previewId:t}){let r=PEp(t),n=`${e}-preview-${r}.${SEp}`;if(n.length<=TEp)return n;let i=`${e}-preview-`,o=TEp-i.length;if(o<8)throw new T({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:T.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${SEp}`}Ct();LI();Ah();er();d0();kt();On();var SNs=require("child_process"),UIp=Ae(REp(),1),TNs=Ae(ywi(),1),ONs=Ae(require("fs"),1),BNs=require("fs/promises"),VIp=Ae(require("http"),1),GIp=Ae(require("os"),1),jwi=Ae(require("path"),1);INs();LI();er();var vNs=require("fs/promises");async function CNs(e,t){let r=new Map,{docsDefinition:n,translationPages:i,translationNavigationOverlays:o,translatedApiDefinitions:s,collectedFileIds:a,docsWorkspacePath:c,markdownFilesToPathName:u}=e,l=i!=null&&Object.keys(i).length>0,p=s!=null&&Object.keys(s).length>0;if(!l&&!p)return r;let d=n.config.translations?.defaultLocale,f=new Set([...Object.keys(i??{}),...Object.keys(s??{})]);for(let m of f){if(m===d)continue;let g=i?.[m]??{};try{let A=async fe=>{let ie=Io(c,fe),de=Yn(c,be.of(`translations/${m}/${ie}`));return await Ut(de)?de:fe},y=async fe=>{let ie=await A(fe),de=await(0,vNs.readFile)(ie,"utf-8"),Se=de.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Se!=null?de.slice(Se[0].length):de},I=async fe=>{let ie=await A(fe);return(0,vNs.readFile)(ie,"utf-8")},x={};for(let[fe,ie]of Object.entries(n.pages))ie!=null&&(x[fe]=ie);for(let[fe,ie]of Object.entries(g))try{let de=x[fe],Se=Yn(c,be.of(fe)),{markdown:Fe}=await IF({markdown:ie,absolutePathToFernFolder:c,absolutePathToMarkdownFile:Se,context:t,markdownLoader:y}),ae=await c_({markdown:Fe,absolutePathToFernFolder:c,absolutePathToMarkdownFile:Se,context:t,fileLoader:I}),ue=u_({markdown:ae,absolutePathToFernFolder:c,absolutePathToMarkdownFile:Se,context:t}),Pe=JO(ue);Pe=n_(Pe,a,u,{absolutePathToMarkdownFile:Se,absolutePathToFernFolder:c},t),x[fe]={markdown:Pe,rawMarkdown:Pe,editThisPageUrl:de?.editThisPageUrl,editThisPageLaunch:de?.editThisPageLaunch}}catch(de){t.logger.warn(`Failed to process translated page "${fe}" for locale "${m}": ${String(de)}. Falling back to base page.`)}let v=aGe(n.config.root,g,t),w=o?.[m],B=n.config.announcement,R=n.config.navbarLinks;w!=null&&(v=uGe(v,w),B=lGe(w)??B,w.navbarLinks!=null&&(R=w.navbarLinks));let D=n.apis,O=s?.[m],z=O,Y;if(O!=null&&v!=null){let fe=oGe(v,D,O);fe.size>0&&(t.logger.warn(`Translated API definition(s) [${Array.from(fe).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.`),z=Object.fromEntries(Object.entries(O).filter(([ie])=>!fe.has(ie)))),Y=new Set(Object.keys(O).filter(ie=>!fe.has(ie)))}let ee=z!=null&&Object.keys(z).length>0?{...n.apis,...z}:n.apis;O!=null&&Object.keys(O).length>0&&v!=null&&(v=sGe(v,D,O,{rewritableApiIds:Y}));let ce={...n,apis:ee,pages:x,config:{...n.config,root:v,announcement:B,navbarLinks:R}};r.set(m,ce),t.logger.debug(`Computed translated definition for locale "${m}"`+(O!=null?` (with ${Object.keys(O).length} translated API(s))`:""))}catch(A){t.logger.warn(`Failed to compute translation for locale "${m}": ${String(A)}`)}}return r}er();var qW=require("fs/promises"),jIp=require("os"),wNs=Ae(require("path"),1),TGg=".fern",OGg="logs",xNs=100*1024*1024;function PGg(){return"cli@5.168.0"}var vWe=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??De(De(_t.of((0,jIp.homedir)()),be.of(TGg)),be.of(OGg));await Ut(n)||await(0,qW.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=De(n,be.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${wNs.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
4120
4120
|
`);await(0,qW.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)+`
|
|
4121
4121
|
`;try{await(0,qW.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:PGg(),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,qW.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=wNs.default.join(t,c);try{let l=await(0,qW.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=xNs/1024/1024;if(o<=xNs){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<=xNs)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,qW.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 Nwi={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function zIp(e){let t=BGg();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:Nwi});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",...Nwi}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...Nwi}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:Nwi}):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 vWe.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 BGg(){return globalThis.Bun}var QIp=require("fs"),MIp=Ae(require("path"),1),RGg=`"use strict";
|
|
4122
4122
|
|
|
@@ -4429,15 +4429,15 @@ ${n}
|
|
|
4429
4429
|
|
|
4430
4430
|
Available libraries: ${Object.keys(e).join(", ")}`,code:T.Code.ConfigError});let u=t!=null?{[t]:e[t]}:e,l;if(!a){if(i==null)throw new T({message:`Authentication is required for remote library docs generation.
|
|
4431
4431
|
|
|
4432
|
-
Run 'fern login', or
|
|
4433
|
-
`),code:T.Code.InternalError})}return{successful:p.length-d.length}}async function ylA({client:e,context:t,name:r,config:n,docsDirectoryPath:i,orgId:o,wrapStep:s,local:a,docsConfig:c}){let u=Yn(i,n.output.path);if(n.config?.doxyfile!=null&&n.lang!=="cpp")throw new T({message:`Library '${r}': 'doxyfile' config is only valid for lang: cpp`,code:T.Code.ConfigError});if(n.config?.includeUndocumentedMacros!=null&&n.lang!=="cpp")throw new T({message:`Library '${r}': 'include-undocumented-macros' config is only valid for lang: cpp`,code:T.Code.ConfigError});let l=n.lang==="cpp"?n.config?.includeUndocumentedMacros:void 0,p;if(n.lang==="cpp"&&n.config?.doxyfile!=null){let m=Yn(i,n.config.doxyfile);try{p=await(0,D2p.readFile)(m,"utf-8")}catch{throw new T({message:`Library '${r}': Could not read Doxyfile at '${n.config.doxyfile}' (resolved to ${m})`,code:T.Code.ConfigError})}}let d=glA(n.lang);if(d==null)throw new T({message:`Library '${r}': unsupported language '${n.lang}'`,code:T.Code.ConfigError});let f;if(a)f=await ElA({context:t,name:r,config:n,docsDirectoryPath:i,language:d,doxyfileContent:p,includeUndocumentedMacros:l,wrapStep:s});else if(e!=null)f=await blA({client:e,name:r,config:n,language:d,orgId:o,doxyfileContent:p,includeUndocumentedMacros:l,wrapStep:s,context:t});else throw new T({message:`Library '${r}': authentication is required for remote generation. Re-run
|
|
4432
|
+
Run 'fern login', or drop --remote to parse libraries locally with Docker.`,code:T.Code.AuthError});l=k2p({token:i})}let p=await Promise.allSettled(Object.entries(u).map(async([f,m])=>{if(m==null)throw new T({message:`Library '${f}': missing configuration`,code:T.Code.ConfigError});await ylA({client:l,context:o,name:f,config:m,docsDirectoryPath:r,orgId:n,wrapStep:s,local:a,docsConfig:c})})),d=p.filter(f=>f.status==="rejected");if(d.length>0){let f=d.length===1?d[0]?.reason:void 0;throw f instanceof T?f:new T({message:d.map(m=>Sn(m.reason)).join(`
|
|
4433
|
+
`),code:T.Code.InternalError})}return{successful:p.length-d.length}}async function ylA({client:e,context:t,name:r,config:n,docsDirectoryPath:i,orgId:o,wrapStep:s,local:a,docsConfig:c}){let u=Yn(i,n.output.path);if(n.config?.doxyfile!=null&&n.lang!=="cpp")throw new T({message:`Library '${r}': 'doxyfile' config is only valid for lang: cpp`,code:T.Code.ConfigError});if(n.config?.includeUndocumentedMacros!=null&&n.lang!=="cpp")throw new T({message:`Library '${r}': 'include-undocumented-macros' config is only valid for lang: cpp`,code:T.Code.ConfigError});let l=n.lang==="cpp"?n.config?.includeUndocumentedMacros:void 0,p;if(n.lang==="cpp"&&n.config?.doxyfile!=null){let m=Yn(i,n.config.doxyfile);try{p=await(0,D2p.readFile)(m,"utf-8")}catch{throw new T({message:`Library '${r}': Could not read Doxyfile at '${n.config.doxyfile}' (resolved to ${m})`,code:T.Code.ConfigError})}}let d=glA(n.lang);if(d==null)throw new T({message:`Library '${r}': unsupported language '${n.lang}'`,code:T.Code.ConfigError});let f;if(a)f=await ElA({context:t,name:r,config:n,docsDirectoryPath:i,language:d,doxyfileContent:p,includeUndocumentedMacros:l,wrapStep:s});else if(e!=null)f=await blA({client:e,name:r,config:n,language:d,orgId:o,doxyfileContent:p,includeUndocumentedMacros:l,wrapStep:s,context:t});else throw new T({message:`Library '${r}': authentication is required for remote generation. Re-run without --remote or run 'fern login'.`,code:T.Code.AuthError});if(d==="CPP"){let g=KFp({ir:f,outputDir:u,slug:r});t.logger.info(me.green(`Library '${r}': generated ${g.pageCount} pages at ${u}`)),t.logger.info(`
|
|
4434
4434
|
To include in your docs navigation, add to docs.yml:
|
|
4435
4435
|
navigation:
|
|
4436
|
-
- folder: ${n.output.path}`)}else{let m=f,{slugPrefix:g,conflictingPrefixes:A}=c!=null?B2p({docsConfig:c,docsDirectoryPath:i,outputDir:u}):{slugPrefix:void 0,conflictingPrefixes:void 0};A!=null&&t.logger.warn(`Library '${r}': pages are listed under tabs with different slugs (${A.join(", ")}); generated page slugs are not prefixed with a tab.`);let y=T2p({ir:m,outputDir:u,slug:r,title:r,slugPrefix:g});t.logger.info(me.green(`Library '${r}': generated ${y.pageCount} pages at ${u}`))}}async function blA({client:e,name:t,config:r,language:n,orgId:i,doxyfileContent:o,includeUndocumentedMacros:s,wrapStep:a,context:c}){if(!F2p(r.input))throw new T({message:`Library '${t}': 'path' input requires
|
|
4436
|
+
- folder: ${n.output.path}`)}else{let m=f,{slugPrefix:g,conflictingPrefixes:A}=c!=null?B2p({docsConfig:c,docsDirectoryPath:i,outputDir:u}):{slugPrefix:void 0,conflictingPrefixes:void 0};A!=null&&t.logger.warn(`Library '${r}': pages are listed under tabs with different slugs (${A.join(", ")}); generated page slugs are not prefixed with a tab.`);let y=T2p({ir:m,outputDir:u,slug:r,title:r,slugPrefix:g});t.logger.info(me.green(`Library '${r}': generated ${y.pageCount} pages at ${u}`))}}async function blA({client:e,name:t,config:r,language:n,orgId:i,doxyfileContent:o,includeUndocumentedMacros:s,wrapStep:a,context:c}){if(!F2p(r.input))throw new T({message:`Library '${t}': 'path' input requires local generation. Drop --remote, or use 'git' input for remote generation.`,code:T.Code.ConfigError});let u=r.input,l=await a({message:`Library '${t}': starting generation from ${u.git}${u.ref!=null?` (ref: ${u.ref})`:""}`,operation:()=>IlA(e,{name:t,orgId:i,githubUrl:u.git,language:n,packagePath:u.subpath,ref:u.ref,doxyfileContent:o,includeUndocumentedMacros:s})});return await a({message:`Library '${t}': generating documentation`,operation:()=>vlA(e,l,t)}),a({message:`Library '${t}': downloading generated IR`,operation:()=>ClA(e,l,t,n,c)})}async function ElA({context:e,name:t,config:r,docsDirectoryPath:n,language:i,doxyfileContent:o,includeUndocumentedMacros:s,wrapStep:a}){let c,u;if(F2p(r.input)){let d=r.input,f=await a({message:`Library '${t}': cloning ${d.git}${d.ref!=null?` (ref: ${d.ref})`:""}`,operation:()=>snt({repositoryUrl:d.git,ref:d.ref})});d.subpath!=null&&u6e({repositoryRoot:f,subpath:d.subpath,description:`subpath for library '${t}'`}),c=_t.of(f),u={packagePath:d.subpath,sourceUrl:d.git,branch:d.ref,doxyfileContent:o,includeUndocumentedMacros:s}}else c=Yn(n,r.input.path),u={doxyfileContent:o,includeUndocumentedMacros:s};let l=await a({message:`Library '${t}': parsing library source locally`,operation:()=>i2p({context:e,sourcePath:c,language:i,config:u})}),p=N2p(l,t,e);return j2p(p,i,t),p}async function IlA(e,t){try{return(await e.startLibraryDocsGeneration({orgId:t.orgId,githubUrl:t.githubUrl,language:t.language,config:{branch:t.ref,packagePath:t.packagePath,title:t.name,slug:t.name,doxyfileContent:t.doxyfileContent,includeUndocumentedMacros:t.includeUndocumentedMacros}})).jobId}catch(r){throw new T({message:`Failed to start generation for library '${t.name}': ${Sn(r)}`,code:T.Code.NetworkError})}}async function vlA(e,t,r){let n=Date.now()+R2p;for(;Date.now()<n;){await new Promise(o=>setTimeout(o,hlA));let i;try{i=await e.getLibraryDocsGenerationStatus({jobId:t})}catch(o){throw new T({message:`Failed to check generation status for library '${r}': `+Sn(o),code:T.Code.NetworkError})}switch(i.status){case"PENDING":case"PARSING":break;case"COMPLETED":return;case"FAILED":throw new T({message:`Generation failed for library '${r}': ${i.error?.message??"Unknown error"} (${i.error?.code??"UNKNOWN"})`,code:T.Code.InternalError});default:throw new T({message:`Unexpected generation status for library '${r}': ${i.status}`,code:T.Code.InternalError})}}throw new T({message:`Generation timed out for library '${r}' after ${R2p/1e3}s`,code:T.Code.NetworkError})}async function ClA(e,t,r,n,i){let o;try{o=(await e.getLibraryDocsResult({jobId:t})).resultUrl}catch(c){throw new T({message:`Failed to fetch generation result for library '${r}': `+Sn(c),code:T.Code.NetworkError})}let s=await fetch(o);if(!s.ok)throw new T({message:`Failed to download IR for library '${r}': HTTP ${s.status}`,code:T.Code.NetworkError});let a=N2p(await s.json(),r,i);return j2p(a,n,r),a}function N2p(e,t,r){if(!(e==null||typeof e!="object")){if(xlA(e))for(let n of e.warnings)typeof n=="string"&&r.logger.warn(`Library '${t}': ${n}`);return"ir"in e?e.ir:void 0}}function xlA(e){return"warnings"in e&&Array.isArray(e.warnings)}function j2p(e,t,r){if(e==null)throw new T({message:`IR is empty for library '${r}'`,code:T.Code.InternalError});if(t==="CPP"){if(e.rootNamespace==null)throw new T({message:`IR has no rootNamespace for C++ library '${r}'`,code:T.Code.InternalError})}else if(e.rootModule==null)throw new T({message:`IR has no rootModule for library '${r}'`,code:T.Code.InternalError})}Uy();kt();l4o();async function EP({message:e,operation:t,indent:r}){let n=yqt({text:e,indent:r??0,color:"cyan"}).start();try{let i=await t();return n.stop(),i}catch(i){throw n.stop(),i}}var R_s=class{async handle(t,r){let n=await t.loadWorkspaceOrThrow();if(n.docs==null)throw new T({message:`No docs configuration found in fern.yml.
|
|
4437
4437
|
|
|
4438
4438
|
Add a 'docs:' section to your fern.yml to get started.`,code:T.Code.ConfigError});let i=n.docs.raw.libraries;if(i==null)throw new T({message:`No libraries configured in docs.yml.
|
|
4439
4439
|
|
|
4440
|
-
Add a 'libraries' section to configure library documentation.`,code:T.Code.ConfigError});let o=await t.getTokenOrPrompt();await t.verifyOrgAccess({organization:n.org,token:o});let s=n.docs.absoluteFilePath??n.absoluteFilePath??t.cwd,a=_t.of(un(s)),c=new zd({context:t,logLevel:Xn.Info});await Csr({libraries:i,library:r.library,docsDirectoryPath:a,orgId:n.org,tokenValue:o.value,context:c,wrapStep:EP,docsConfig:n.docs.raw})}};function D_s(e){let t=new R_s;li(e,"generate","[Beta] Generate MDX documentation from library source code. Requires 'libraries' config in docs.yml.",(r,n)=>t.handle(r,n),r=>r.option("library",{type:"string",description:"Name of a specific library defined in docs.yml to generate docs for"}))}function k_s(e){DA({cli:e,name:"md",subcommands:[D_s,t_s]})}kt();function tRi(e,t,r,n,i,o){e.command(t,r,s=>{for(let a of o)a(s);return s.command("$0",!1,a=>{let c=a.version(!1);return i!=null?i(c):c},Dsn(n)),s.version(!1).usage(r)})}Ct();LI();kt();On();Ct();kt();var rRi=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 zd({context:this.context,task:this.task});try{let s=await znr({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.
|
|
4440
|
+
Add a 'libraries' section to configure library documentation.`,code:T.Code.ConfigError});let o=await t.getTokenOrPrompt();await t.verifyOrgAccess({organization:n.org,token:o});let s=n.docs.absoluteFilePath??n.absoluteFilePath??t.cwd,a=_t.of(un(s)),c=new zd({context:t,logLevel:Xn.Info});await Csr({libraries:i,library:r.library,docsDirectoryPath:a,orgId:n.org,tokenValue:o.value,context:c,wrapStep:EP,docsConfig:n.docs.raw})}};function D_s(e){let t=new R_s;li(e,"generate","[Beta] Generate MDX documentation from library source code. Requires 'libraries' config in docs.yml.",(r,n)=>t.handle(r,n),r=>r.option("library",{type:"string",description:"Name of a specific library defined in docs.yml to generate docs for"}))}function k_s(e){DA({cli:e,name:"md",subcommands:[D_s,t_s]})}kt();function tRi(e,t,r,n,i,o){e.command(t,r,s=>{for(let a of o)a(s);return s.command("$0",!1,a=>{let c=a.version(!1);return i!=null?i(c):c},Dsn(n)),s.version(!1).usage(r)})}Ct();LI();kt();On();Ct();kt();var rRi=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 zd({context:this.context,task:this.task});try{let s=await znr({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.168.0",loginCommand:"fern auth login"});return o.getResult()===Sf.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Sn(s)}}}};Ct();On();var NRt=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(`
|
|
4441
4441
|
`),this.stream.write(`${me.cyan("\u25C6")} ${me.bold(t.title)}
|
|
4442
4442
|
`),t.subtitle!=null&&this.stream.write(` ${me.dim(t.subtitle)}
|
|
4443
4443
|
`),this.stream.write(`
|
|
@@ -5131,7 +5131,7 @@ ${r}`}function jNi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
|
|
|
5131
5131
|
`),g="";return c&&(g=l.style.error(c)),[`${p} ${f} ${s}`,[m,g].filter(Boolean).join(`
|
|
5132
5132
|
`)]});var Aty=Px((e,t)=>{let{validate:r=()=>!0}=e,n=sv(e.theme),[i,o]=yu("idle"),[s,a]=yu(),[c,u]=yu(""),l=Tx({status:i,theme:n});Ox(async(g,A)=>{if(i==="idle")if(Sx(g)){let y=c;o("loading");let I=await r(y);I===!0?(u(y),o("done"),t(y)):(A.write(c),a(I||"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]")}${RFt}`),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 UKe=Ae(JS(),1);var yty={icon:{cursor:bw.pointer},style:{disabled:e=>UKe.default.dim(`- ${e}`),searchTerm:e=>UKe.default.cyan(e),description:e=>UKe.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${UKe.default.bold(t)} ${UKe.default.dim(r)}`).join(UKe.default.dim(" \u2022 "))},helpMode:"always"};function ura(e){return!qd.isSeparator(e)&&!e.disabled}function bty(e){return e.map(t=>{if(qd.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 Ety=Px((e,t)=>{let{pageSize:r=7,validate:n=()=>!0}=e,i=sv(yty,e.theme),[o,s]=yu("loading"),[a,c]=yu(""),[u,l]=yu([]),[p,d]=yu(),f=Tx({status:o,theme:i}),m=q6(()=>{let z=u.findIndex(ura),Y=u.findLastIndex(ura);return{first:z,last:Y}},[u]),[g=m.first,A]=yu();mU(()=>{let z=new AbortController;return s("loading"),d(void 0),(async()=>{try{let $=await e.source(a||void 0,{signal:z.signal});z.signal.aborted||(A(void 0),d(void 0),l(bty($)),s("idle"))}catch($){!z.signal.aborted&&$ instanceof Error&&d($.message)}})(),()=>{z.abort()}},[a]);let y=u[g];Ox(async(z,Y)=>{if(Sx(z))if(y){s("loading");let $=await n(y.value);s("idle"),$===!0?(s("done"),t(y.value)):y.name===a?d($||"You must provide a valid value"):(Y.write(y.name),c(y.name))}else Y.write(a);else if(Xbe(z)&&y)Y.clearLine(0),Y.write(y.name),c(y.name);else if(o!=="loading"&&(QR(z)||G6(z))){if(Y.clearLine(0),QR(z)&&g!==m.first||G6(z)&&g!==m.last){let $=QR(z)?-1:1,ee=g;do ee=(ee+$+u.length)%u.length;while(!ura(u[ee]));A(ee)}}else c(Y.line)});let I=i.style.message(e.message,o),x;if(i.helpMode!=="never")if(e.instructions){let{pager:z,navigation:Y}=e.instructions;x=i.style.help(u.length>r?z:Y)}else x=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let v=QKe({items:u,active:g,renderItem({item:z,isActive:Y}){if(qd.isSeparator(z))return` ${z.separator}`;if(z.disabled){let ce=typeof z.disabled=="string"?z.disabled:"(disabled)";return i.style.disabled(`${z.name} ${ce}`)}let $=Y?i.style.highlight:ce=>ce,ee=Y?i.icon.cursor:" ";return $(`${ee} ${z.name}`)},pageSize:r,loop:!1}),w;p?w=i.style.error(p):u.length===0&&a!==""&&o==="idle"&&(w=i.style.error("No results found"));let B;if(o==="done"&&y)return[f,I,i.style.answer(y.short)].filter(Boolean).join(" ").trimEnd();B=i.style.searchTerm(a);let R=y?.description,D=[f,I,B].filter(Boolean).join(" ").trimEnd(),O=[w??v," ",R?i.style.description(R):"",x].filter(Boolean).join(`
|
|
5133
5133
|
`).trimEnd();return[D,O]});var kFt=Ae(JS(),1);var Ity={icon:{cursor:bw.pointer},style:{disabled:e=>kFt.default.dim(`- ${e}`),description:e=>kFt.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${kFt.default.bold(t)} ${kFt.default.dim(r)}`).join(kFt.default.dim(" \u2022 "))},helpMode:"always",indexMode:"hidden",keybindings:[]};function DFt(e){return!qd.isSeparator(e)&&!e.disabled}function vty(e){return e.map(t=>{if(qd.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 lra=Px((e,t)=>{let{loop:r=!0,pageSize:n=7}=e,i=sv(Ity,e.theme),{keybindings:o}=i,[s,a]=yu("idle"),c=Tx({status:s,theme:i}),u=zKe(),l=!o.includes("vim"),p=q6(()=>vty(e.choices),[e.choices]),d=q6(()=>{let R=p.findIndex(DFt),D=p.findLastIndex(DFt);if(R===-1)throw new qle("[select prompt] No selectable choices. All choices are disabled.");return{first:R,last:D}},[p]),f=q6(()=>"default"in e?p.findIndex(R=>DFt(R)&&R.value===e.default):-1,[e.default,p]),[m,g]=yu(f===-1?d.first:f),A=p[m];Ox((R,D)=>{if(clearTimeout(u.current),Sx(R))a("done"),t(A.value);else if(QR(R,o)||G6(R,o)){if(D.clearLine(0),r||QR(R,o)&&m!==d.first||G6(R,o)&&m!==d.last){let O=QR(R,o)?-1:1,z=m;do z=(z+O+p.length)%p.length;while(!DFt(p[z]));g(z)}}else if(Our(R)&&!Number.isNaN(Number(D.line))){let O=Number(D.line)-1,z=-1,Y=p.findIndex(ee=>qd.isSeparator(ee)?!1:(z++,z===O)),$=p[Y];$!=null&&DFt($)&&g(Y),u.current=setTimeout(()=>{D.clearLine(0)},700)}else if(FKe(R))D.clearLine(0);else if(l){let O=D.line.toLowerCase(),z=p.findIndex(Y=>qd.isSeparator(Y)||!DFt(Y)?!1:Y.name.toLowerCase().startsWith(O));z!==-1&&g(z),u.current=setTimeout(()=>{D.clearLine(0)},700)}}),mU(()=>()=>{clearTimeout(u.current)},[]);let y=i.style.message(e.message,s),I;if(i.helpMode!=="never")if(e.instructions){let{pager:R,navigation:D}=e.instructions;I=i.style.help(p.length>n?R:D)}else I=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let x=0,v=QKe({items:p,active:m,renderItem({item:R,isActive:D,index:O}){if(qd.isSeparator(R))return x++,` ${R.separator}`;let z=i.indexMode==="number"?`${O+1-x}. `:"";if(R.disabled){let ee=typeof R.disabled=="string"?R.disabled:"(disabled)";return i.style.disabled(`${z}${R.name} ${ee}`)}let Y=D?i.style.highlight:ee=>ee,$=D?i.icon.cursor:" ";return Y(`${$} ${z}${R.name}`)},pageSize:n,loop:r});if(s==="done")return[c,y,i.style.answer(A.short)].filter(Boolean).join(" ");let{description:w}=A;return`${[[c,y].filter(Boolean).join(" "),v," ",w?i.style.description(w):"",I].filter(Boolean).join(`
|
|
5134
|
-
`).trimEnd()}${RFt}`});On();Ui();var Wle={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"},Cty={[Wle.GENERATION_STARTED]:!1,[Wle.GENERATION_COMPLETED]:!1,[Wle.GENERATION_FAILED]:!0,[Wle.VERIFICATION_FAILED]:!0,[Wle.SDK_PR_CREATED]:!1,[Wle.UPGRADE_APPLIED]:!1,[Wle.MAJOR_VERSION_BUMP]:!1};function s7p(e){return Cty[e]}function a7p(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 c7p(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 u7p(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 l7p(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 p7p(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?Wle.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?Wle.VERIFICATION_FAILED:Wle.GENERATION_FAILED}var xty="",wty="FERN_AUTOMATION_EVENTS_ORIGIN",Sty=3e3,yji=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[wty]??xty)),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(),Sty);try{let s={"content-type":"application/json"},a=await EM();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(l7p(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function f7p(){let{fern_run_id:e,github_run_id:t}=Ppe();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.
|
|
5134
|
+
`).trimEnd()}${RFt}`});On();Ui();var Wle={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"},Cty={[Wle.GENERATION_STARTED]:!1,[Wle.GENERATION_COMPLETED]:!1,[Wle.GENERATION_FAILED]:!0,[Wle.VERIFICATION_FAILED]:!0,[Wle.SDK_PR_CREATED]:!1,[Wle.UPGRADE_APPLIED]:!1,[Wle.MAJOR_VERSION_BUMP]:!1};function s7p(e){return Cty[e]}function a7p(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 c7p(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 u7p(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 l7p(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 p7p(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?Wle.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?Wle.VERIFICATION_FAILED:Wle.GENERATION_FAILED}var xty="",wty="FERN_AUTOMATION_EVENTS_ORIGIN",Sty=3e3,yji=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[wty]??xty)),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(),Sty);try{let s={"content-type":"application/json"},a=await EM();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(l7p(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function f7p(){let{fern_run_id:e,github_run_id:t}=Ppe();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.168.0"}}function d7p(){return process.env.FERN_AUTOMATION==="true"}var Tty=3e3,bji=class{constructor(t,r=yji.getInstance()){this.reporter=t;this.automationEventApiClient=r;this.context=f7p()}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(){let t;try{await Promise.race([this.automationEventApiClient.shutdown(),new Promise(r=>{t=setTimeout(r,Tty)})])}finally{clearTimeout(t)}}capturePostHogEvent({event:t,context:r}){this.reporter.instrumentPostHogAutomationEvent({distinctId:r.run_id??void 0,event:t.event,properties:a7p(t,r)})}captureSentryForFailure({event:t,context:r,error:n}){if(!(!s7p(t.event)||t.errorCode==null))return this.reporter.captureException(n,{tags:c7p(t,r),context:{automation:u7p(t,r)}})}captureAutomationEventApiEvent(t,r){this.automationEventApiClient.post(t,r)}};kt();function Eji(e,t,r){if(t instanceof hc)return;let n=FMe(t,r?.code),i=r?.argv??process.argv,o=i.join(" "),s=r?.message??(t instanceof Error?t.message:void 0)??"",a=t??new T({message:s,code:n});d7p()?Pty(i,e,n,s,a):Oty(e,o,n,a)}function Oty(e,t,r,n){e.instrumentPostHogEvent({command:t,properties:{failed:!0,errorCode:r}}),uQt(r)&&e.captureException(n,{tags:{"error.code":r}})}function Pty(e,t,r,n,i){let o=p7p(e);t.emitAutomationTelemetryEvent({event:o,errorCode:r,attributes:{error_message:n}},{error:i})}kt();function VKe(){return process.env.FERN_DISABLE_TELEMETRY==="true"}function Iji({cliName:e,packageVersion:t,isLocal:r}){return VKe()||r?!1:!(t==="0.0.0")&&(e==="fern"&&!0)}var vji=class{sentry;constructor({release:t,telemetry:r}){let n="https://84f58b5e457f06999d92f11ce4b79158@o4509504076185600.ingest.us.sentry.io/4511021546602496";if(Iji(r)&&n!=null&&n.length>0){let i="production";if(i==null||i.length===0)throw new T({message:"SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured",code:T.Code.ConfigError});this.sentry=tQt({dsn:n,release:t,environment:i,defaultIntegrations:!1,integrations:[_Ye(),oEe(),sEe(),V0e(),iEe()],tracesSampleRate:0,attachStacktrace:!0,sendClientReports:!1}),rQt()}}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):_P(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(()=>{})}};kt();var Cji=class{originalWrite;redirected=!1;redirect(){if(this.redirected)throw new T({message:"StdoutRedirector: already redirected \u2014 did you forget to restore()?",code:T.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()}}};Gme();Ct();Uy();kt();On();var Dur=class{result=Sf.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 hc(t??(r instanceof hc?r.failureMessage:this.lastFailureMessage))}failWithoutThrowing(t,r,n){this.result=Sf.Failure,!(r instanceof hc)&&(t!=null&&(this.lastFailureMessage=t),nqt({message:t,error:r,logger:this.logger}),Eji(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=oI(this.logAtLevel.bind(this));addInteractiveTask({name:t,subtitle:r}){let n=new pra({name:t,subtitle:r,logImmediately:i=>this.logImmediately(i),logPrefix:`${this.logPrefix}${me.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(o){n.failWithoutThrowing(void 0,o)}finally{n.finish()}let i=n.getResult()===Sf.Success;return i||(this.lastFailureMessage=n.getLastFailureMessage()??this.lastFailureMessage),i}printInteractiveTasks({spinner:t}){return this.subtasks.map(r=>r.print({spinner:t})).join(`
|
|
5135
5135
|
`)}},pra=class extends Dur{name;subtitle;constructor({name:t,subtitle:r,...n}){super(n),this.name=t,this.subtitle=r}start(){return super.start(),this.logAtLevelWithOverrides(Xn.Info,["Started."],{omitOnTTY:!0}),this.flushLogs(),this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.result===Sf.Success?this.logAtLevelWithOverrides(Xn.Info,["Finished."],{omitOnTTY:!0}):this.logAtLevelWithOverrides(Xn.Error,["Failed."],{omitOnTTY:!0}),super.finish())}setSubtitle(t){this.subtitle=t}print({spinner:t}){let r=[this.name];return this.subtitle!=null&&r.push(me.dim(this.subtitle)),r.push(...this.subtasks.map(n=>n.print({spinner:t}))),Gz({prefix:this.getIcon({spinner:t}),content:r.join(`
|
|
5136
5136
|
`)})}printInteractiveTasks({spinner:t}){return this.print({spinner:t})}getIcon({spinner:t}){let r=this.subtasks.length>0;switch(this.status){case"notStarted":return r?me.dim("\u25B8 "):me.dim("\u25E6 ");case"running":return r?me.cyan("\u25BE "):t;case"finished":switch(this.getResult()){case Sf.Success:return r?me.green("\u25BE "):me.green("\u2713 ");case Sf.Failure:return r?me.red("\u25BE "):me.red("x ")}}}getResult(){if(this.result===Sf.Failure)return Sf.Failure;for(let t of this.subtasks)if(t.getResult()===Sf.Failure)return Sf.Failure;return Sf.Success}};kt();var m7p=Ae(F_e(),1);On();function h7p(e){return e.filter(t=>t.isUpgradeAvailable).length>0}function Bty(e){return(e.cliUpgradeInfo?.isUpgradeAvailable??!1)||h7p(e.generatorUpgradeInfo)}async function g7p({cliEnvironment:e,upgradeInfo:t}){if(!Bty(t)||e.packageVersion==t.cliUpgradeInfo?.latestVersion)return;let r=`${me.underline("Upgrades available")}
|
|
5137
5137
|
|
|
@@ -5140,7 +5140,7 @@ ${r}`}function jNi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
|
|
|
5140
5140
|
Run ${me.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
5141
5141
|
Run ${me.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),Dft(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function fra({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!h7p(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+=`
|
|
5142
5142
|
${await Rty(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+me.dim(a.currentVersion)+me.reset(" \u2192 ")+me.green(a.latestVersion);return i+=`
|
|
5143
|
-
`,n?Dft(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function Rty(e){let r=await new m7p.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new T({message:`Generator ${e} not found`,code:T.Code.ConfigError});return r.body.displayName}Fi();ehe();kt();var kur=Ae(_y(),1);function FFt(e){let t;return()=>(t??=e.runTask(r=>pd(r)),t)}function xji({generatorId:e,candidateVersion:t,currentVersion:r}){if(!A7p(t)||!A7p(r))throw new T({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:T.Code.VersionError});try{return t===r?0:GS(t,r)?1:GS(r,t)?-1:0}catch{let n=kur.default.valid(t),i=kur.default.valid(r);if(n!=null&&i!=null)return Math.sign(kur.default.compare(n,i));throw new T({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:T.Code.VersionError})}}function A7p(e){if(e==="latest"||kur.default.valid(e)!=null)return!0;try{return rJ(e),!0}catch{return!1}}async function wji({generatorId:e,currentVersion:t,includeMajor:r,channel:n,organization:i,getToken:o,context:s}){if(n!=null)throw new Error(`SDK Gen API generator version discovery does not support the requested upgrade channel "${n}". Remove --channel to use executable index versions; FDR channel metadata is used only when the ${Brr} feature flag is off for this organization.`);let a=BTt();if(a==null)throw new Error("FERN_SDK_GEN_API_ORIGIN is required when sdk-gen-api generation is enabled");let c=Gv(e);if(c==null)return s.logger.error(`SDK Gen API cannot discover versions for unsupported generator ${e}. Use a canonical first-party SDK generator name.`),{};let u=await o(),l=await Vvs({origin:a,organization:i,token:u,generatorId:e,language:c,currentVersion:t,includeMajor:r});return l.state==="UNAVAILABLE"?(s.logger.error(`SDK Gen API cannot resolve an executable version for ${e}@${t} (${l.reason}). Publish the coordinate to this environment or choose a supported generator version.`),{}):{compatibleVersion:l.compatibleVersion,withheldMajorVersion:l.withheldMajorVersion}}async function Dty({cliContext:e,project:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o,skipFeatureFlagRequest:s}){let{apiWorkspaces:a}=t,c=FFt(e);if(a.length===1){let l={type:"singleApi",versions:{}};return await y7p({cliContext:e,apiWorkspaces:a,perGeneratorAction:async(p,d,f,m)=>{l.versions[d]==null&&(l.versions[d]={});let g=x_e(f.name);if(g==null){m.logger.debug(`Skipping unknown generator: ${f.name}`);return}let A=await E7p({generatorName:f.name,normalizedGeneratorName:g,cliVersion:e.environment.packageVersion,currentGeneratorVersion:f.version,channel:i,includeMajor:o,organization:t.config.organization,skipFeatureFlagRequest:s,getSdkGenApiToken:c,context:m});A!=null&&(l.versions[d][f.name]={previousVersion:f.version,latestVersion:A})},generatorFilter:r,groupFilter:n}),l}let u={type:"multiApi",versions:{}};return await y7p({cliContext:e,apiWorkspaces:a,perGeneratorAction:async(l,p,d,f)=>{if(l==null)return;u.versions[l]==null&&(u.versions[l]={}),u.versions[l][p]==null&&(u.versions[l][p]={});let m=x_e(d.name);if(m==null){f.logger.debug(`Skipping unknown generator: ${d.name}`);return}let g=await E7p({generatorName:d.name,normalizedGeneratorName:m,cliVersion:e.environment.packageVersion,currentGeneratorVersion:d.version,channel:i,includeMajor:o,organization:t.config.organization,skipFeatureFlagRequest:s,getSdkGenApiToken:c,context:f});g!=null&&(u.versions[l][p][d.name]={previousVersion:d.version,latestVersion:g})},generatorFilter:r,groupFilter:n}),u}async function y7p({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 m4({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?$h(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 b7p(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=xji({generatorId:s,candidateVersion:a.latestVersion,currentVersion:a.previousVersion})===1;r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function E7p({generatorName:e,normalizedGeneratorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,organization:s,skipFeatureFlagRequest:a,getSdkGenApiToken:c,context:u}){return n==="latest"?"latest":await kty({organization:s,generatorName:$h(e),skipFeatureFlagRequest:a})?(await wji({generatorId:$h(e),currentVersion:n,includeMajor:o??!1,channel:i,organization:s,getToken:c,context:u})).compatibleVersion:LB({generatorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,context:u})}async function Sji({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o,skipFeatureFlagRequest:s}){let a=[];if(e!=null){let c=await Dty({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o,skipFeatureFlagRequest:s});if(c.type==="multiApi")for(let[u,l]of Object.entries(c.versions))a.push(...b7p(l,u,t.logger));else a.push(...b7p(c.versions,void 0,t.logger))}return a}async function kty({organization:e,generatorName:t,skipFeatureFlagRequest:r}){return r===!0?vPs({organization:e,generatorName:t})??!1:OTt({organization:e,generatorName:t})}kt();Ljr();async function Zbe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await S6e(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new T({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:T.Code.NetworkError})}}var I7p=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Tji=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Xn.Info;isLocal;stdoutRedirector=new Cji;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await yKt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new bqt(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 vji({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new bji(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.
|
|
5143
|
+
`,n?Dft(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function Rty(e){let r=await new m7p.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new T({message:`Generator ${e} not found`,code:T.Code.ConfigError});return r.body.displayName}Fi();ehe();kt();var kur=Ae(_y(),1);function FFt(e){let t;return()=>(t??=e.runTask(r=>pd(r)),t)}function xji({generatorId:e,candidateVersion:t,currentVersion:r}){if(!A7p(t)||!A7p(r))throw new T({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:T.Code.VersionError});try{return t===r?0:GS(t,r)?1:GS(r,t)?-1:0}catch{let n=kur.default.valid(t),i=kur.default.valid(r);if(n!=null&&i!=null)return Math.sign(kur.default.compare(n,i));throw new T({message:`Cannot compare versions for generator "${e}": configured version "${r}", candidate version "${t}". Use valid semantic versions such as 1.2.3.`,code:T.Code.VersionError})}}function A7p(e){if(e==="latest"||kur.default.valid(e)!=null)return!0;try{return rJ(e),!0}catch{return!1}}async function wji({generatorId:e,currentVersion:t,includeMajor:r,channel:n,organization:i,getToken:o,context:s}){if(n!=null)throw new Error(`SDK Gen API generator version discovery does not support the requested upgrade channel "${n}". Remove --channel to use executable index versions; FDR channel metadata is used only when the ${Brr} feature flag is off for this organization.`);let a=BTt();if(a==null)throw new Error("FERN_SDK_GEN_API_ORIGIN is required when sdk-gen-api generation is enabled");let c=Gv(e);if(c==null)return s.logger.error(`SDK Gen API cannot discover versions for unsupported generator ${e}. Use a canonical first-party SDK generator name.`),{};let u=await o(),l=await Vvs({origin:a,organization:i,token:u,generatorId:e,language:c,currentVersion:t,includeMajor:r});return l.state==="UNAVAILABLE"?(s.logger.error(`SDK Gen API cannot resolve an executable version for ${e}@${t} (${l.reason}). Publish the coordinate to this environment or choose a supported generator version.`),{}):{compatibleVersion:l.compatibleVersion,withheldMajorVersion:l.withheldMajorVersion}}async function Dty({cliContext:e,project:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o,skipFeatureFlagRequest:s}){let{apiWorkspaces:a}=t,c=FFt(e);if(a.length===1){let l={type:"singleApi",versions:{}};return await y7p({cliContext:e,apiWorkspaces:a,perGeneratorAction:async(p,d,f,m)=>{l.versions[d]==null&&(l.versions[d]={});let g=x_e(f.name);if(g==null){m.logger.debug(`Skipping unknown generator: ${f.name}`);return}let A=await E7p({generatorName:f.name,normalizedGeneratorName:g,cliVersion:e.environment.packageVersion,currentGeneratorVersion:f.version,channel:i,includeMajor:o,organization:t.config.organization,skipFeatureFlagRequest:s,getSdkGenApiToken:c,context:m});A!=null&&(l.versions[d][f.name]={previousVersion:f.version,latestVersion:A})},generatorFilter:r,groupFilter:n}),l}let u={type:"multiApi",versions:{}};return await y7p({cliContext:e,apiWorkspaces:a,perGeneratorAction:async(l,p,d,f)=>{if(l==null)return;u.versions[l]==null&&(u.versions[l]={}),u.versions[l][p]==null&&(u.versions[l][p]={});let m=x_e(d.name);if(m==null){f.logger.debug(`Skipping unknown generator: ${d.name}`);return}let g=await E7p({generatorName:d.name,normalizedGeneratorName:m,cliVersion:e.environment.packageVersion,currentGeneratorVersion:d.version,channel:i,includeMajor:o,organization:t.config.organization,skipFeatureFlagRequest:s,getSdkGenApiToken:c,context:f});g!=null&&(u.versions[l][p][d.name]={previousVersion:d.version,latestVersion:g})},generatorFilter:r,groupFilter:n}),u}async function y7p({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 m4({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?$h(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 b7p(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=xji({generatorId:s,candidateVersion:a.latestVersion,currentVersion:a.previousVersion})===1;r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function E7p({generatorName:e,normalizedGeneratorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,organization:s,skipFeatureFlagRequest:a,getSdkGenApiToken:c,context:u}){return n==="latest"?"latest":await kty({organization:s,generatorName:$h(e),skipFeatureFlagRequest:a})?(await wji({generatorId:$h(e),currentVersion:n,includeMajor:o??!1,channel:i,organization:s,getToken:c,context:u})).compatibleVersion:LB({generatorName:t,cliVersion:r,currentGeneratorVersion:n,channel:i,includeMajor:o,context:u})}async function Sji({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o,skipFeatureFlagRequest:s}){let a=[];if(e!=null){let c=await Dty({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o,skipFeatureFlagRequest:s});if(c.type==="multiApi")for(let[u,l]of Object.entries(c.versions))a.push(...b7p(l,u,t.logger));else a.push(...b7p(c.versions,void 0,t.logger))}return a}async function kty({organization:e,generatorName:t,skipFeatureFlagRequest:r}){return r===!0?vPs({organization:e,generatorName:t})??!1:OTt({organization:e,generatorName:t})}kt();Ljr();async function Zbe({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await S6e(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new T({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:T.Code.NetworkError})}}var I7p=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Tji=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Xn.Info;isLocal;stdoutRedirector=new Cji;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await yKt();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new bqt(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 vji({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new bji(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.168.0"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${me.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new hc(t??(r instanceof hc?r.failureMessage:r!=null?Sn(r):void 0))}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof hc)&&(nqt({message:t,error:r,logger:this.logger}),Eji(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)+`
|
|
5144
5144
|
`)}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 Promise.all([this.posthogManager.flush(),iZo()])}catch{}await this.sentryClient.flush(),await this.automationTelemetryManager.flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable({skipFeatureFlagRequest:!0}),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await g7p({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
5145
5145
|
`)||(r+=`
|
|
5146
5146
|
`),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=Nqi(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 Dur(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){let s=o instanceof hc?o.failureMessage??n.getLastFailureMessage():Sn(o);throw n.failWithoutThrowing(void 0,o),new hc(s)}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=oI((t,...r)=>this.log(t,...r));stderr=oI((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=v7p(r),i=1+(this.longestWorkspaceName!=null?v7p(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=I7p[this.numTasks++%I7p.length],a=me.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:me.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===Sf.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=>mS.indexOf(i.level)>=mS.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===Xn.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1,skipFeatureFlagRequest:r=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let n=await Zbe({cliEnvironment:this.environment,includePreReleases:t}),i=GS(n,this.environment.packageVersion);this.logger.debug(`Latest version: ${n}. `+(i?"Upgrade available.":"No upgrade available."));let o={isUpgradeAvailable:i,latestVersion:n},s=await Sji({project:this.project,cliContext:this,skipFeatureFlagRequest:r});this._isUpgradeAvailable={cliUpgradeInfo:o,generatorUpgradeInfo:s}}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 lra({message:t,choices:r,default:n,theme:{prefix:me.yellow("?"),style:{answer:i=>me.cyan(i),message:i=>me.bold(i),highlight:i=>me.cyan(i)}}})}catch(i){throw i?.name==="ExitPromptError"?(this.logger.info(`
|
|
@@ -5384,7 +5384,7 @@ To update the schema from its defined origin, please ensure the origin either:
|
|
|
5384
5384
|
\u2713 All ${t} MDX files are valid`));return}for(let n of e)r.logger.error(n.toString())}Fi();LI();er();Nd();kt();function rof({apiResults:e,docsResult:t,hasErrors:r,showApiNames:n}){let i=[];for(let a of e)for(let c of a.violations){let u={severity:c.severity,message:c.message};n&&(u.api=a.apiName),c.name!=null&&(u.rule=c.name),i.push(u)}let o=[];if(t!=null)for(let a of t.violations){let c={severity:a.severity,message:a.message};a.name!=null&&(c.rule=a.name),o.push(c)}let s={};return i.length>0&&(s.apis=i),o.length>0&&(s.docs=o),{success:!r,results:s}}Ct();On();function oof({apiResults:e,docsResult:t,logWarnings:r,context:n}){let i=performance.now(),o=!1;if(e.filter(l=>{let p=blr(l.violations);return p.numErrors>0||r&&p.numWarnings>0}).length>0){let l=smy(e.map(d=>d.violations).flat());if(e.length>1){n.logger.info(me.cyan(me.bold("[sdk]")));for(let d of e){let f=blr(d.violations);(f.numErrors>0||r&&f.numWarnings>0)&&(o=o||f.numErrors>0,rmy({apiName:d.apiName,violations:d.violations,stats:f,logWarnings:r,context:n,indent:" "}))}}else o=o||l.numErrors>0,tmy({violations:e[0]?.violations??[],stats:l,logWarnings:r,context:n})}if(t!=null){let l=blr(t.violations);(l.numErrors>0||r&&l.numWarnings>0)&&(o=o||l.numErrors>0,nmy({violations:t.violations,stats:l,logWarnings:r,context:n}))}let a=performance.now()-i,c=[...e.map(l=>l.violations).flat(),...t?.violations??[]],u=blr(c);return amy({stats:u,logWarnings:r,elapsedMillis:a,context:n}),{hasErrors:o}}function tmy({violations:e,stats:t,logWarnings:r,context:n}){let i=noa(t,r);n.logger.info(me.cyan(me.bold("[sdk]"))+` ${i}`),roa({violations:e,logWarnings:r,context:n,indent:" "})}function rmy({apiName:e,violations:t,stats:r,logWarnings:n,context:i,indent:o}){let s=noa(r,n);i.logger.info(`${o}${me.bold(`[${e}]`)} ${s}`),roa({violations:t,logWarnings:n,context:i,indent:o+" "})}function nmy({violations:e,stats:t,logWarnings:r,context:n}){let i=noa(t,r);n.logger.info(me.magenta(me.bold("[docs]"))+` ${i}`),roa({violations:e,logWarnings:r,context:n,indent:" "})}function roa({violations:e,logWarnings:t,context:r,indent:n}){let i=e.filter(s=>s.severity==="fatal"||s.severity==="error"),o=e.filter(s=>s.severity==="warning");if(t)for(let s of o.sort(iof))nof({violation:s,context:r,indent:n});for(let s of i.sort(iof))nof({violation:s,context:r,indent:n})}function nof({violation:e,context:t,indent:r}){let n=omy(e.severity),i=imy(e);i===""?t.logger.info(`${r}${n} ${e.message}`):(t.logger.info(`${r}${n}`),t.logger.info(`${r} path: ${me.blue(i)}`),t.logger.info(`${r} issue: ${e.message}`)),t.logger.info("")}function imy(e){let t=[];e.relativeFilepath!==""&&t.push(e.relativeFilepath);for(let r of e.nodePath){let n=typeof r=="string"?r:r.key;typeof r!="string"&&r.arrayIndex!=null&&(n+=`[${r.arrayIndex}]`),t.push(n)}return t.join(" -> ")}function omy(e){switch(e){case"fatal":return me.red("[error]");case"error":return me.red("[error]");case"warning":return me.yellow("[warning]");default:Ee(e)}}function noa(e,t){let r=[];return e.numErrors>0&&r.push(`${e.numErrors} error${e.numErrors!==1?"s":""}`),t&&e.numWarnings>0&&r.push(`${e.numWarnings} warning${e.numWarnings!==1?"s":""}`),r.join(", ")}function blr(e){let t=0,r=0;for(let n of e)switch(n.severity){case"fatal":case"error":t+=1;break;case"warning":r+=1;break;default:Ee(n.severity)}return{numErrors:t,numWarnings:r}}function smy(e){return blr(e)}function iof(e,t){let r=e.relativeFilepath.localeCompare(t.relativeFilepath);return r!==0?r:JSON.stringify(e.nodePath).localeCompare(JSON.stringify(t.nodePath))}function amy({stats:e,logWarnings:t,elapsedMillis:r,context:n}){let i=r>0?` in ${(r/1e3).toFixed(3)} seconds.`:".",o=`Found ${e.numErrors} error${e.numErrors!==1?"s":""} and ${e.numWarnings} warning${e.numWarnings!==1?"s":""}`+i;!t&&e.numWarnings>0&&(o+=" Run fern check --warnings to print out the warnings not shown."),e.numErrors>0?n.logger.error(o):e.numWarnings>0?n.logger.warn(o):n.logger.info(me.green("All checks passed"))}async function sof({project:e,cliContext:t,logWarnings:r,brokenLinks:n,errorOnBrokenLinks:i,isLocal:o,directFromOpenapi:s,commandLineApiWorkspace:a}){let c=await umy({project:e,cliContext:t,commandLineApiWorkspace:a}),u={...e,apiWorkspaces:[...e.apiWorkspaces,...c.map(({workspace:A})=>A)]},l=[],p,d=!1,f,m=a!=null?u.apiWorkspaces.filter(A=>A.workspaceName===a):u.apiWorkspaces,g=!1;try{let A=u.docsWorkspaces;if(A!=null){let I=n||i?[]:["valid-markdown-links"],x=await zw(u),v;await t.runTaskForWorkspace(A,async w=>{v=await srf({workspace:A,context:w,apiWorkspaces:u.apiWorkspaces,ossWorkspaces:x,errorOnBrokenLinks:i,excludeRules:I})}),v!=null&&(p={violations:v.violations,elapsedMillis:v.elapsedMillis},v.hasErrors&&(d=!0))}if(await Promise.all(m.map(async I=>{if(I.generatorsConfiguration?.groups.length===0&&I.type!=="fern")return;if(I instanceof Lu&&s){await t.runTaskForWorkspace(I,async v=>{await I.getIntermediateRepresentation({context:v,audiences:{type:"all"},enableUniqueErrorsPerEndpoint:!1,generateV1Examples:!1,logWarnings:r})});return}if(I instanceof $D){let v=De(I.absoluteFilePath,be.of(ly),be.of(mv));if(!await Ut(v)){f="missing api.yml",await t.runTask(async B=>(B.logger.error(`Missing file: ${mv}`),B.failAndThrow(void 0,void 0,{code:T.Code.ValidationError})));return}}let x;await t.runTaskForWorkspace(I,async v=>{let w=await I.toFernWorkspace({context:v});x=await ERs({workspace:w,context:v,ossWorkspace:I instanceof Lu?I:void 0})}),x!=null&&(l.push({apiName:x.apiName,violations:x.violations,elapsedMillis:x.elapsedMillis}),x.hasErrors&&(d=!0))})),g=(await t.runTask(I=>oof({apiResults:l,docsResult:p,logWarnings:r,context:I}))).hasErrors,t.isJsonMode){let I=l.length>1;t.writeJsonToStdout(rof({apiResults:l,docsResult:p,hasErrors:g||d,showApiNames:I}))}(g||d)&&(f="validation errors",t.failAndThrow(void 0,void 0,{code:T.Code.ValidationError}))}catch(A){throw f==null&&(f=A instanceof Error?A.message.slice(0,100):"unexpected error"),A}finally{await Promise.all(c.map(({cleanup:v})=>v()));let A=[...l.flatMap(v=>v.violations),...p?.violations??[]],y=[...new Set(A.map(v=>v.name).filter(v=>v!=null))],I=A.filter(v=>v.severity==="fatal"||v.severity==="error").length,x=A.filter(v=>v.severity==="warning").length;t.instrumentPostHogEvent({command:"fern check",properties:{validationRules:y,numErrors:I,numWarnings:x,passed:!g&&!d,abortReason:f}})}}async function cmy(e){for(let t of e){let r=De(t.absoluteFilePath,be.of(vd));await Ut(r)&&mra(await GKe(r,!0))}}async function umy({project:e,cliContext:t,commandLineApiWorkspace:r}){await cmy(r!=null?e.apiWorkspaces.filter(i=>i.workspaceName===r):e.apiWorkspaces);let n=[];try{for(let i of e.sdkConfigWorkspaces??[]){let o=De(i.absoluteFilePath,be.of(vd)),s=await GKe(o,!0);mra(s),n.push(await t.runTask(a=>Jji({sdkConfig:s.config,absolutePathToConfig:s.absolutePath,cliVersion:t.environment.packageVersion,workspaceName:i.workspaceName,context:a})))}return n}catch(i){throw await Promise.all(n.map(({cleanup:o})=>o())),i}}Fi();er();xY();On();var hpe=require("fs/promises");es();var ioa=Ae(require("path"),1);async function aof({project:e,cliContext:t,sdkLanguage:r,preserveSchemaIds:n}){await Promise.all(e.apiWorkspaces.map(async i=>{await t.runTaskForWorkspace(i,async o=>{i instanceof bD?await lmy({workspace:i,context:o}):await pmy({workspace:await i.toFernWorkspace({context:o},{preserveSchemaIds:n}),context:o})})}))}async function lmy({workspace:e,context:t}){for(let[r,n]of Object.entries(e.definition.importedDefinitions)){let i=De(e.absoluteFilePath,be.of(ly),be.of(r),be.of(`.${ly}`));await cof({definition:n.definition,absolutePathToOutputDirectory:i}),t.logger.info(me.green(`Wrote imported definition at ${ioa.default.relative(process.cwd(),i)}`))}}async function pmy({workspace:e,context:t}){let r=De(e.absoluteFilePath,be.of(`.${ly}`));await cof({definition:e.definition,absolutePathToOutputDirectory:r}),t.logger.info(me.green(`Wrote definition to ${ioa.default.relative(process.cwd(),r)}`))}async function cof({definition:e,absolutePathToOutputDirectory:t}){let r=(n,i)=>{let o={imports:0,types:1,services:2},s=n in o?o[n]:Object.keys(o).length,a=i in o?o[i]:Object.keys(o).length;return s==null?-1:a==null?1:s!==a?s-a:n.localeCompare(i)};await Ut(t)&&await(0,hpe.rm)(t,{recursive:!0}),await(0,hpe.mkdir)(t,{recursive:!0}),await(0,hpe.writeFile)(De(t,be.of(mv)),vr.dump(e.rootApiFile.contents,{sortKeys:r}));for(let[n,i]of Object.entries(e.packageMarkers)){let o=De(t,be.of(n));await(0,hpe.mkdir)(un(o),{recursive:!0}),await(0,hpe.writeFile)(o,vr.dump(i.contents,{sortKeys:r}))}for(let[n,i]of Object.entries(e.namedDefinitionFiles)){let o=De(t,be.of(n));await(0,hpe.mkdir)(un(o),{recursive:!0}),await(0,hpe.writeFile)(o,vr.dump(i.contents,{sortKeys:r}))}}LI();er();On();var uof=require("fs/promises");async function lof({project:e,outputPath:t,cliContext:r}){let n=e.docsWorkspaces;n!=null&&await r.runTaskForWorkspace(n,async i=>{let o=await zw(e),s=await Promise.all(e.apiWorkspaces.map(async u=>u.toFernWorkspace({context:i},{enableUniqueErrorsPerEndpoint:!0,detectGlobalHeaders:!1}))),c=await new p_({domain:n.config.instances[0]?.url??"http://localhost:8080",docsWorkspace:n,ossWorkspaces:o,apiWorkspaces:s,taskContext:i,editThisPage:void 0,uploadFiles:void 0,registerApi:void 0,targetAudiences:n.config.instances[0]?.audiences?Array.isArray(n.config.instances[0].audiences)?n.config.instances[0].audiences:[n.config.instances[0].audiences]:void 0,buildRefVersions:!1}).resolve();await(0,uof.writeFile)(_t.of(t),JSON.stringify(c,null,2)),i.logger.info(me.green(`Docs definition written to ${t}`))})}Fi();Ct();kt();async function pof(e,t,r){let i=(await Ha(e,{commandLineApiWorkspace:r,defaultToAllApiWorkspaces:!1})).apiWorkspaces[0];if(i==null)return e.failAndThrow("No API workspace found.",void 0,{code:T.Code.ConfigError});let o=i.generatorsConfiguration;if(o==null)return e.failAndThrow("No generators.yml found in workspace.",void 0,{code:T.Code.ConfigError});let s=o.groups.find(l=>l.groupName===t);if(s==null){let l=o.groups.map(p=>p.groupName).join(", ");return e.failAndThrow(`Group "${t}" not found. Available groups: ${l}`,void 0,{code:T.Code.ConfigError})}let a=l=>Cf(l,{onError:p=>e.failAndThrow(p,void 0,{code:T.Code.ConfigError})}),c=s.generators.find(l=>l.raw?.github!=null&&lwe(l.raw.github));if(c?.raw?.github!=null&&lwe(c.raw.github)){let l=a(c.raw.github);return e.logger.info(`Using github config from group "${t}" generator "${c.name}" (mode: ${l.mode??"pull-request"})`),{githubRepo:l.uri,token:l.token,mode:l.mode==="push"?"push":"pull-request",branch:l.branch}}let u=s.generators.find(l=>l.raw?.github!=null&&"repository"in l.raw.github);if(u?.raw?.github!=null&&"repository"in u.raw.github){let l=a(u.raw.github),p=process.env.GITHUB_TOKEN;return e.logger.info(`Using repository config from group "${t}" generator "${u.name}"`+(p!=null?". Using GITHUB_TOKEN from environment.":".")),{githubRepo:l.repository,token:p,mode:l.mode==="push"?"push":"pull-request",branch:"branch"in l?l.branch:void 0}}return e.failAndThrow(`No generator in group "${t}" has a github configuration.`,void 0,{code:T.Code.ConfigError})}var hMi=fmy();function fmy(){return typeof window<"u"&&typeof window.document<"u"?{type:"browser",version:window.navigator.userAgent}:typeof globalThis<"u"&&globalThis?.navigator?.userAgent==="Cloudflare-Workers"?{type:"workerd"}:typeof EdgeRuntime=="string"?{type:"edge-runtime"}:typeof self=="object"&&typeof self?.importScripts=="function"&&(self.constructor?.name==="DedicatedWorkerGlobalScope"||self.constructor?.name==="ServiceWorkerGlobalScope"||self.constructor?.name==="SharedWorkerGlobalScope")?{type:"web-worker"}:typeof Deno<"u"&&typeof Deno.version<"u"&&typeof Deno.version.deno<"u"?{type:"deno",version:Deno.version.deno}:typeof Bun<"u"&&typeof Bun.version<"u"?{type:"bun",version:Bun.version}:typeof process<"u"&&"version"in process&&!!process.version&&"versions"in process&&!!process.versions?.node?{type:"node",version:process.versions.node,parsedVersion:Number(process.versions.node.split(".")[0])}:typeof navigator<"u"&&navigator?.product==="ReactNative"?{type:"react-native"}:{type:"unknown"}}kt();function fof(e,{isLocal:t}){if(!Iji({cliName:e.environment.cliName,packageVersion:e.environment.packageVersion,isLocal:t}))return;let r=!1,n=async(i,o)=>{r&&process.exit(1),r=!0;try{e.failWithoutThrowing(i,o,{code:T.Code.InternalError})}catch{}try{await e.exit({code:1})}catch{process.exit(1)}};process.on("uncaughtException",i=>{n("uncaught exception",i)}),process.on("unhandledRejection",i=>{n("unhandled promise rejection",i)})}function ooa(){return(process.env.FERN_USE_SDK_CONFIG??"true"??"true").trim().toLowerCase()==="true"}cQt();var dmy=new Set(["org"]);function dof(e){let t=soa(e);return t!=null&&dmy.has(t)}function soa(e){let t=TEe(e);for(let r=0;r<t.length;r++){let n=t[r];if(n!=null){if(n.startsWith("-")){n==="--log-level"&&r++;continue}return n}}}if(process.platform==="linux"&&parseInt(process.versions.node.split(".")[0]??"0",10)>=26&&process.env.UV_USE_IO_URING!=="0"){let e=(0,Udf.spawnSync)(process.execPath,process.argv.slice(1),{env:{...process.env,UV_USE_IO_URING:"0"},stdio:"inherit"});e.signal&&process.kill(process.pid,e.signal),process.exit(e.status??1)}process.env.UV_THREADPOOL_SIZE==null&&(process.env.UV_THREADPOOL_SIZE="8");qvs()?Wvs():(Gvs(typeof __filename=="string"?__filename:void 0),bSy());async function bSy(){let e=process.argv.includes("--get-yargs-completions");e||INt();let t=process.argv.includes("--local"),r=await Tji.create(process.stdout,process.stderr,{isLocal:t});e&&r.suppressUpgradeMessage(),fof(r,{isLocal:t});let n=async()=>{await r.exit()};if(hMi.type==="node"&&hMi.parsedVersion!=null&&hMi.parsedVersion>=18){let{setGlobalDispatcher:i,Agent:o}=await Promise.resolve().then(()=>Ae(Bca(),1));i(new o({connect:{timeout:2147483647},bodyTimeout:0,headersTimeout:2147483647}))}if(process.env.HTTP_PROXY!=null){let{setGlobalDispatcher:i,ProxyAgent:o}=await Promise.resolve().then(()=>Ae(Bca(),1)),s=new o(process.env.HTTP_PROXY);i(s)}process.on("SIGINT",async()=>{r.suppressUpgradeMessage(),await n()});try{let i=process.env[clr];if(i!=null&&process.chdir(i),e||dof(process.argv))await Ldf(r);else{let o=await ESy(r);r.environment.packageVersion===o?await Ldf(r):await llr({version:o,cliContext:r})}}catch(i){r.failWithoutThrowing(void 0,i)}await n()}async function Ldf(e){let t=TEe(process.argv);if(t[0]==="completion"){Vta(t).scriptName(e.environment.cliName).completion("completion","Generate shell completion script").parse();return}let r=Vta(t).scriptName(e.environment.cliName).version(!1).completion("completion","Generate shell completion script").fail((n,i,o)=>{i==null&&(o.showHelp(),e.logger.error(n))}).strict().exitProcess(!1).command("$0",!1,n=>n.option("version",{describe:"Print current version",alias:"v"}).version(!1),n=>{n.version!=null?e.logger.info(e.environment.packageVersion):(r.showHelp(),e.failAndThrow(void 0,void 0,{code:T.Code.ConfigError}))}).option("log-level",{default:Xn.Info,choices:mS}).demandCommand().recommendCommands();vSy(r,e),CSy(r,e),ISy(r,e),xSy(r,e),wSy(r,e),SSy(r,e),TSy(r,e),RSy(r,e),OSy(r,e),PSy(r,e),BSy(r,e),FSy(r,e),DSy(r,e),kSy(r,e),LSy(r,e),USy(r,e),_Sy(r,e),VSy(r,e),YSy(r,e),XSy(r,e),qSy(r,e),WSy(r,e),JSy(r,e),GSy(r,e),zSy(r,e),MSy(r,e),NSy({cli:r,cliContext:e,onRun:()=>{e.suppressUpgradeMessage()}}),jSy(r,e),g1y(r,e),A1y(r,e),y1y(r,e),k1y(r,e),O1y(r,e),E1y(r,e),v1y(r,e),Y7p(r,e),X7p(r,e),Q1y(r,e),P1y(r,e),D1y(r,e),r.middleware(async n=>{e.setLogLevel(n["log-level"]);let i=n._[0]==="sdk"&&n._[1]==="migrate"&&n.output==="-";(n.json===!0||i)&&e.enableJsonMode(),e.logFernVersionDebug()}),await r.parse()}async function ESy(e){if(process.env.FERN_NO_VERSION_REDIRECTION==="true"){let r=await Rca(e);return r!=null&&soa(process.argv)!=="upgrade"&&await Jtf({cliContext:e,orgId:r,currentVersion:e.environment.packageVersion}),e.environment.packageVersion}let t=await sd();if(t!=null){let r=await e.runTask(i=>aw({directory:t,context:i})),n;return r.version==="*"?n=e.environment.packageVersion:r.version==="latest"?n=await Zbe({cliEnvironment:e.environment}):n=r.version,await Ktf({cliContext:e,orgId:r.organization,intendedVersion:n})}return Zbe({cliEnvironment:e.environment})}async function Rca(e){let t=await sd();if(t!=null)return(await e.runTask(n=>aw({directory:t,context:n}))).organization}function ISy(e,t){e.command("init","Initialize a Fern API",r=>r.option("api",{boolean:!0,description:"Initialize an api."}).option("docs",{boolean:!0,description:"Initialize a docs website."}).option("organization",{alias:"org",type:"string",description:"Organization name"}).option("openapi",{type:"string",description:"Filepath or url to an existing OpenAPI spec"}).option("fern-definition",{boolean:!0,description:"Initialize with a sample Fern Definition instead of an OpenAPI spec"}).option("mintlify",{type:"string",description:"Migrate docs from Mintlify provided a path to a mint.json file"}).option("readme",{type:"string",description:"Migrate docs from Readme provided a URL to a Readme generated docs site"}),async r=>{if(r.organization==null){let n=await Rca(t);n!=null?r.organization=n:r.organization=await t.getInput({message:"Please enter your organization"})}if(r.api!=null&&r.docs!=null)return t.failWithoutThrowing("Cannot specify both --api and --docs. Please choose one.",void 0,{code:T.Code.ConfigError});if(r.readme!=null&&r.mintlify!=null)return t.failWithoutThrowing("Cannot specify both --readme and --mintlify. Please choose one.",void 0,{code:T.Code.ConfigError});if(r.openapi!=null&&r["fern-definition"]===!0)return t.failWithoutThrowing("Cannot specify both --openapi and --fern-definition. Please choose one.",void 0,{code:T.Code.ConfigError});if(r.readme!=null)await t.runTask(async n=>{await ota({readmeUrl:r.readme,organization:r.organization??"fern",taskContext:n,versionOfCli:await Zbe({cliEnvironment:t.environment})})});else if(r.docs!=null)await t.runTask(async n=>{await aur({organization:r.organization,versionOfCli:await Zbe({cliEnvironment:t.environment}),taskContext:n,openApi:r.openapi,useSdkConfig:ooa()})});else if(r.mintlify!=null)await t.runTask(async n=>{await Uea({pathToMintJson:r.mintlify,organization:r.organization??"fern",taskContext:n,versionOfCli:await Zbe({cliEnvironment:t.environment})})});else{let n=r["fern-definition"]===!0,i=ooa()&&!n,o,s;if(r.openapi!=null){if(P2(r.openapi)){if(s=r.openapi,!i){let a=await sur({url:r.openapi,logger:t.logger});a.status===Kbe.Failure&&t.failAndThrow(a.errorMessage,void 0,{code:T.Code.NetworkError}),o=_t.of(a.filePath)}}else o=_t.of(Yn(Za(),r.openapi));o!=null&&!await Ut(o)&&t.failAndThrow(`${o} does not exist`,void 0,{code:T.Code.ConfigError})}await t.runTask(async a=>{await zea({organization:r.organization,versionOfCli:await Zbe({cliEnvironment:t.environment}),context:a,openApiPath:o,openApiUrl:s,useFernDefinition:n,useSdkConfig:i,includeDocs:r.api==null})})}})}function vSy(e,t){e.command("diff","Diff two versions of an API",r=>r.option("from",{string:!0,demandOption:!0,description:"The previous version of the API"}).option("to",{string:!0,demandOption:!0,description:"The next version of the API"}).option("from-version",{string:!0,description:"The previous version of the API (e.g. 1.1.0)"}).option("from-generator-version",{string:!0,description:"The previous version of the generator (e.g. 1.1.0)"}).option("to-generator-version",{string:!0,description:"The next version of the generator (e.g. 1.1.0)"}).option("quiet",{boolean:!0,default:!1,alias:"q",description:"Whether to suppress output written to stderr"}).middleware(n=>{if(!wyr(n.fromGeneratorVersion,n.toGeneratorVersion))throw new T({message:"Both --from-generator-version and --to-generator-version must be provided together, or neither should be provided",code:T.Code.ValidationError})}),async r=>{if(process.env.__FERN_DIFF_HEAP_RESPAWNED==null){let a=await import("fs"),c=1024*1024*1024,u=Yn(Za(),r.from),l=Yn(Za(),r.to),p=a.statSync(u,{throwIfNoEntry:!1})?.size??0,d=a.statSync(l,{throwIfNoEntry:!1})?.size??0;if(p>c||d>c){let{spawnSync:f}=await import("child_process"),g=f(process.execPath,["--max-old-space-size=8192",...process.execArgv,...process.argv.slice(1)],{env:{...process.env,__FERN_DIFF_HEAP_RESPAWNED:"1"},stdio:"inherit"});await t.exit({code:g.status??1});return}}let n=Cyr(r.fromVersion),i=xyr({from:r.fromGeneratorVersion,to:r.toGeneratorVersion}),o=await orf({context:t,from:r.from,to:r.to,fromVersion:n,generatorVersions:i});if(n!=null){let{errors:a,...c}=o;t.logger.info(JSON.stringify(c))}!r.quiet&&o.errors.length>0&&t.stderr.info(o.errors.join(`
|
|
5385
5385
|
`));let s=o.bump==="major"?1:0;await t.exit({code:s})})}function CSy(e,t){e.command("sdk-diff <from-dir> <to-dir>",!1,r=>r.positional("from-dir",{type:"string",demandOption:!0,description:"Path to the directory containing the previous version of the SDK"}).positional("to-dir",{type:"string",demandOption:!0,description:"Path to the directory containing the next version of the SDK"}).option("json",{boolean:!0,default:!1,description:"Output result as JSON"}),async r=>{t.instrumentPostHogEvent({command:"fern sdk-diff"});let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),i=await _nf({context:t,project:n,fromDir:r.fromDir,toDir:r.toDir});r.json?t.logger.info(JSON.stringify(i,null,2)):(t.logger.info(`
|
|
5386
5386
|
`+i.message),t.logger.info(`
|
|
5387
|
-
Version Bump: ${i.version_bump}`))})}function xSy(e,t){e.command("token","Generate a Fern Token",r=>r.option("organization",{alias:"org",type:"string",description:"The organization to create a token for. Defaults to the one in `fern.config.json`"}),async r=>{await t.runTask(async n=>{await Uif({orgId:r.organization??(await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0})).config.organization,taskContext:n})})})}function wSy(e,t){e.command("add <generator>",`Add a code generator to ${zu}`,r=>r.positional("generator",{type:"string",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("group",{string:!0,description:"Add the generator to the specified group"}),async r=>{let n=Dca(r.generator,t);await $7p({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),generatorName:n,groupName:r.group,cliContext:t})})}function SSy(e,t){e.command(["generate"],"Generate SDKs or docs from legacy generator groups and SDK Config targets",r=>r.option("api",{type:"string",array:!0,description:"If multiple APIs, specify the name with --api <name>. Pass --api multiple times to generate for several APIs at once."}).option("docs",{string:!0,description:"If multiple docs sites, specify the name with --docs <name>. Otherwise just --docs."}).option("instance",{string:!0,description:"The url for the instance of docs (e.g. --instance acme.docs.buildwithfern.com)"}).option("preview",{boolean:!0,default:!1,description:"Whether to generate a preview link for the docs"}).option("id",{type:"string",description:"A stable identifier for the preview. Reusing the same ID overwrites the previous preview, keeping the URL stable."}).option("group",{type:"string",array:!0,description:"A legacy group from generators.yml or generators.legacy.yml. Pass --group multiple times to generate several groups."}).option("target",{type:"string",array:!0,description:"A target language from sdk-config.yml or --sdk-config. Pass --target multiple times to generate several targets."}).option("generator",{type:"string",description:"A specific generator within selected legacy groups. With --sdk-config and no --target, filters the explicit SDK Config for backward compatibility."}).option("mode",{choices:Object.values(SJp),description:"Defaults to the mode specified in generators.yml"}).option("version",{type:"string",description:"The version for the generated packages"}).option("printZipUrl",{boolean:!0,hidden:!0,default:!1}).option("local",{boolean:!0,default:!1,description:"Run the generator(s) locally using Docker. SDK Config targets run on the on-prem generator."}).option("keepDocker",{boolean:!0,default:!1,description:"Prevent auto-deletion of the Docker containers."}).option("force",{boolean:!0,default:!1,description:"Ignore prompts to confirm generation, defaults to false"}).option("broken-links",{boolean:!0,description:"Log a warning if there are broken links in the docs.",default:!1}).option("strict-broken-links",{boolean:!0,description:"Throw an error (rather than logging a warning) if there are broken links in the docs.",default:!1}).option("disable-snippets",{boolean:!0,description:"Disable snippets in docs generation.",default:!1}).option("runner",{choices:["docker","podman"],description:"Choose the container runtime to use for local generation.",default:void 0}).option("lfs-override",{type:"string",hidden:!0,description:"Override output mode to local-file-system with the specified path"}).option("sdk-config",{type:"string",description:"Path to the SDK Config v1 YAML or JSON file to use instead of sdk-config.yml discovered for the selected API"}).option("disable-dynamic-snippets",{boolean:!0,description:"Disable dynamic SDK snippets in docs generation",default:!1}).option("prompt",{boolean:!0,description:"Prompt for confirmation before generating (use --no-prompt to skip)",default:!0}).option("skip-upload",{boolean:!0,description:"Skip asset upload step and generate fake links for preview",default:!1}).option("fernignore",{type:"string",description:"Path to a custom .fernignore file. For generators with local file system output, the .fernignore in the output directory is used automatically if not specified"}).option("dynamic-ir-only",{boolean:!0,description:"Only upload dynamic IR for specified version, skip SDK generation (remote generation only)",default:!1}).option("output",{type:"string",description:"Custom output directory (currently only supported with --preview for SDK generation)"}).option("replay",{boolean:!0,default:!0,hidden:!0,description:"Run replay after generation (use --no-replay to skip)"}).option("verify",{boolean:!0,default:!1,hidden:!0,description:"Run the generator's verify.sh script in a validator container after generation (local generation only)"}).option("retry-rate-limited",{boolean:!0,default:!1,description:"Automatically retry with exponential backoff when receiving 429 Too Many Requests responses"}).option("require-env-vars",{boolean:!0,default:!0,description:"Require all referenced environment variables to be defined (use --no-require-env-vars to substitute empty strings for missing variables)"}).option("skip-fernignore",{boolean:!0,default:!1,description:"Skip the .fernignore file and generate all files. For remote generation, uploads an empty .fernignore. For local generation, skips reading .fernignore from the output directory."}).option("skip-if-no-diff",{boolean:!0,default:!1,description:"Skip opening a PR / pushing when the generated output has no diff from the base branch."}).option("generate-tests",{boolean:!0,default:!1,description:"Generate test files even when generating to a local file system (tests are normally only generated for GitHub output modes)"}).option("package",{boolean:!0,default:!1,description:"After generating to the local file system, build distributable package artifacts (npm tarball, wheel, JAR, NuGet package, gem, etc.) into a fern-dist/ folder inside the output directory."}).option("package-mode",{choices:["host","docker"],default:"host",description:"Where --package runs the packaging toolchain: 'host' uses toolchains installed on this machine; 'docker' runs each toolchain inside an official Docker image (node, python, gradle, dotnet/sdk, ruby, composer, rust) with the output directory mounted, so no local toolchains are needed. Docker mode forwards HTTP(S)_PROXY/NO_PROXY and, for Java, gives Gradle a persistent cache under ~/.fern/gradle-docker-home plus the host's gradle.properties and init.d (from GRADLE_USER_HOME or ~/.gradle)."}).option("package-only",{boolean:!0,default:!1,description:"Like --package, but only the fern-dist/ artifact is kept in the output directory \u2014 the generated SDK source is removed after the package is built."}).option("private",{boolean:!0,default:!1,description:"Include OpenAPI elements marked `x-twilio.libraryVisibility: private` (SDKs) or `x-twilio.docsVisibility: private` (--docs) in the output. By default only `public` elements are generated; `hidden` elements are always excluded."}).example("$0 generate --api my-api","Generate the legacy default group and every target in the API's default sdk-config.yml").example("$0 generate --api my-api --group python-sdk","Generate one legacy group").example("$0 generate --api my-api --target typescript","Generate one SDK Config target").example("$0 generate --api my-api --group python-sdk --target typescript","Generate legacy and SDK Config selections together").example("$0 generate --api my-api --sdk-config ./internal-sdk-config.yml --target typescript","Generate a target from an alternate SDK Config file"),async r=>{if(r.api!=null&&r.api.length>0&&r.docs!=null)return t.failWithoutThrowing("Cannot specify both --api and --docs. Please choose one.",void 0,{code:T.Code.ConfigError});if(r.id!=null&&!r.preview)return t.failWithoutThrowing("The --id flag can only be used with --preview.",void 0,{code:T.Code.ConfigError});if(r.id!=null&&r.docs==null)return t.failWithoutThrowing("The --id flag can only be used with --docs.",void 0,{code:T.Code.ConfigError});if(r.skipUpload&&!r.preview)return t.failWithoutThrowing("The --skip-upload flag can only be used with --preview.",void 0,{code:T.Code.ConfigError});if(r.skipUpload&&r.docs==null)return t.failWithoutThrowing("The --skip-upload flag can only be used with --docs.",void 0,{code:T.Code.ConfigError});if(r.fernignore!=null&&(r.local||r.runner!=null))return t.failWithoutThrowing("The --fernignore flag is not supported with local generation (--local or --runner). It can only be used with remote generation.",void 0,{code:T.Code.ConfigError});if(r["skip-fernignore"]&&r.fernignore!=null)return t.failWithoutThrowing("The --skip-fernignore and --fernignore flags cannot be used together.",void 0,{code:T.Code.ConfigError});if(r["dynamic-ir-only"]&&(r.local||r.runner!=null))return t.failWithoutThrowing("The --dynamic-ir-only flag is not supported with local generation (--local or --runner). It can only be used with remote generation.",void 0,{code:T.Code.ConfigError});if(r["dynamic-ir-only"]&&r.version==null)return t.failWithoutThrowing("The --dynamic-ir-only flag requires a version to be specified with --version.",void 0,{code:T.Code.ConfigError});if(r["dynamic-ir-only"]&&r.docs!=null)return t.failWithoutThrowing("The --dynamic-ir-only flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});if(r.output!=null&&!r.preview)return t.failWithoutThrowing("The --output flag currently only works with --preview.",void 0,{code:T.Code.ConfigError});let n=r.package||r.packageOnly;if(n&&r.preview)return t.failWithoutThrowing("The --package flag cannot be used with --preview.",void 0,{code:T.Code.ConfigError});if(n&&r.docs!=null)return t.failWithoutThrowing("The --package flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});if(r.packageMode!=="host"&&!n)return t.failWithoutThrowing("The --package-mode flag can only be used with --package.",void 0,{code:T.Code.ConfigError});if(r.output!=null&&r.docs!=null)return t.failWithoutThrowing("The --output flag is not supported for docs generation.",void 0,{code:T.Code.ConfigError});if(r.sdkConfig!=null&&r.docs!=null)return t.failWithoutThrowing("The --sdk-config flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});if(r.target!=null&&r.target.length>0&&r.docs!=null)return t.failWithoutThrowing("The --target flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});let i=r.generator!=null?Dca(r.generator,t):void 0,{generatorName:o,generatorIndex:s}=Dji(i);return r.api!=null&&r.api.length>0?await Wur({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,skipApiWorkspaces:r.sdkConfig!=null&&r.group==null}),cliContext:t,version:r.version,groupNames:r.group,targetNames:r.target,generatorName:o,generatorIndex:s,shouldLogS3Url:r.printZipUrl,keepDocker:r.keepDocker,useLocalDocker:r.local||r.runner!=null,preview:r.preview,mode:r.mode,force:r.force,runner:r.runner,inspect:!1,lfsOverride:r.lfsOverride,sdkConfigPath:r.sdkConfig,fernignorePath:r.fernignore,skipFernignore:r["skip-fernignore"],dynamicIrOnly:r["dynamic-ir-only"],outputDir:r.output,noReplay:!r.replay,verify:r.verify,retryRateLimited:r["retry-rate-limited"],requireEnvVars:r["require-env-vars"],skipIfNoDiff:r["skip-if-no-diff"],generateTests:r["generate-tests"],pack:n,packMode:r.packageMode,packOnly:r.packageOnly,includePrivate:r.private}):r.docs!=null?(r.group!=null&&r.group.length>0&&t.logger.warn("--group is ignored when generating docs"),r.generator!=null&&t.logger.warn("--generator is ignored when generating docs"),r.version!=null&&t.logger.warn("--version is ignored when generating docs"),await _rf({project:await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0},!0),cliContext:t,instance:r.instance,preview:r.preview,previewId:r.id,force:r.force,brokenLinks:r.brokenLinks,strictBrokenLinks:r.strictBrokenLinks,disableTemplates:r.disableSnippets,noPrompt:!r.prompt,skipUpload:r.skipUpload,includePrivate:r.private})):await Wur({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,skipApiWorkspaces:r.sdkConfig!=null&&r.group==null}),cliContext:t,version:r.version,groupNames:r.group,targetNames:r.target,generatorName:o,generatorIndex:s,shouldLogS3Url:r.printZipUrl,keepDocker:r.keepDocker,useLocalDocker:r.local,preview:r.preview,mode:r.mode,force:r.force,runner:r.runner,inspect:!1,lfsOverride:r.lfsOverride,sdkConfigPath:r.sdkConfig,fernignorePath:r.fernignore,skipFernignore:r["skip-fernignore"],dynamicIrOnly:r["dynamic-ir-only"],outputDir:r.output,noReplay:!r.replay,verify:r.verify,retryRateLimited:r["retry-rate-limited"],requireEnvVars:r["require-env-vars"],skipIfNoDiff:r["skip-if-no-diff"],generateTests:r["generate-tests"],pack:n,packMode:r.packageMode,packOnly:r.packageOnly,includePrivate:r.private})})}function TSy(e,t){e.command("ir <path-to-output>","Generate IR (Intermediate Representation)",r=>r.positional("path-to-output",{type:"string",description:"Path to write intermediate representation (IR)",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("version",{string:!0,description:"The version of IR to produce"}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Generate IR for a particular language"}).option("audience",{type:"array",string:!0,default:[],description:"Filter the IR for certain audiences"}).option("smart-casing",{boolean:!0,description:"Whether to use smart casing"}).option("from-openapi",{boolean:!0,description:"Whether to use the new parser and go directly from OpenAPI to IR",default:!1}).option("disable-examples",{boolean:!0,description:"Whether to disable automatic example generation in the IR",default:!1}),async r=>{await Hrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,sdkLanguage:r.language}),irFilepath:Yn(Za(),r.pathToOutput),cliContext:t,generationLanguage:r.language,audiences:r.audience.length>0?{type:"select",audiences:r.audience}:{type:"all"},version:r.version,keywords:void 0,smartCasing:r.smartCasing??!1,readme:void 0,directFromOpenapi:r.fromOpenapi,disableExamples:r.disableExamples})})}function OSy(e,t){e.command("openapi-ir <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write intermediate representation (IR)",demandOption:!0}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Generate IR for a particular language"}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{await Xrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,sdkLanguage:r.language}),irFilepath:Yn(Za(),r.pathToOutput),cliContext:t,sdkLanguage:r.language})})}function PSy(e,t){e.command("resolve-specs <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write resolved specs",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{await Qnf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),outputDir:_t.of(Yn(Za(),r.pathToOutput)),cliContext:t})})}function BSy(e,t){e.command("dynamic-ir <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write intermediate representation (IR)",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("version",{string:!0,description:"The version of IR to produce"}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Generate IR for a particular language"}).option("audience",{type:"array",string:!0,default:[],description:"Filter the IR for certain audiences"}).option("smart-casing",{boolean:!0,description:"Whether to use smart casing"}).option("disable-examples",{boolean:!0,description:"Whether to suppress examples from being included in the IR"}),async r=>{await Vrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,sdkLanguage:r.language}),irFilepath:Yn(Za(),r.pathToOutput),cliContext:t,generationLanguage:r.language,audiences:{type:"all"},version:r.version,keywords:void 0,smartCasing:r.smartCasing??!1,disableDynamicExamples:r.disableExamples??!1})})}function RSy(e,t){e.command("fdr <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write FDR API definition",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("audience",{type:"array",string:!0,default:[],description:"Filter the FDR API definition for certain audiences"}).option("from-openapi",{boolean:!0,description:"Whether to use the new parser and go directly from OpenAPI to IR",default:!1}),async r=>{r.fromOpenapi?await Jrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),outputFilepath:Yn(Za(),r.pathToOutput),cliContext:t,audiences:r.audience.length>0?{type:"select",audiences:r.audience}:{type:"all"}}):await qrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),outputFilepath:Yn(Za(),r.pathToOutput),cliContext:t,audiences:r.audience.length>0?{type:"select",audiences:r.audience}:{type:"all"}})})}function DSy(e,t){e.command(["register"],!1,r=>r.option("version",{type:"string",description:"The version for the registered api"}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{let n=await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),i=await t.runTask(o=>pd(o));await jnf({project:n,cliContext:t,token:i,version:r.version})})}function kSy(e,t){e.command(["register-v2"],!1,r=>r.option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{let n=await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),i=await t.runTask(o=>pd(o));await znf({project:n,cliContext:t,token:i})})}function FSy(e,t){e.command("check","Validates your Fern Definition. Logs errors.",r=>r.option("api",{string:!0,description:"Only run the command on the provided API"}).option("warnings",{boolean:!0,description:"Log warnings in addition to errors.",default:!1}).option("broken-links",{boolean:!0,description:"Log a warning if there are broken links in the docs.",default:!1,deprecated:"Use docs.yml `check.rules.broken-links: warn` instead."}).option("strict-broken-links",{boolean:!0,description:"Throw an error (rather than logging a warning) if there are broken links in the docs.",default:!1,deprecated:"Use docs.yml `check.rules.broken-links: error` instead."}).option("local",{boolean:!0,description:"Run validation locally without sending data to Fern API.",default:!1}).option("from-openapi",{boolean:!0,description:"Whether to use the new parser and go directly from OpenAPI to IR",default:!1}).option("json",{boolean:!0,description:"Output results as JSON to stdout.",default:!1}),async r=>{let n;try{n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),r.api!=null&&!n.apiWorkspaces.some(i=>i.workspaceName===r.api)&&!n.sdkConfigWorkspaces?.some(i=>i.workspaceName===r.api)&&(t.instrumentPostHogEvent({command:"fern check",properties:{passed:!1,abortReason:`API does not exist: ${r.api}`}}),t.failAndThrow(`API does not exist: ${r.api}`,void 0,{code:T.Code.ConfigError})),await sof({project:n,cliContext:t,logWarnings:r.warnings,brokenLinks:r.brokenLinks,errorOnBrokenLinks:r.strictBrokenLinks,directFromOpenapi:r.fromOpenapi,commandLineApiWorkspace:r.api})}catch(i){if(n==null){let o=i instanceof Error?i.message.slice(0,100):"project load failed";t.instrumentPostHogEvent({command:"fern check",properties:{passed:!1,abortReason:o}})}throw i}})}function NSy({cli:e,cliContext:t,onRun:r}){e.command("upgrade",`Upgrades Fern CLI version in ${pI}`,n=>n.option("rc",{boolean:!0,hidden:!0,default:!1}).option("version",{string:!0,description:"The version to upgrade to. Defaults to the latest release."}).option("to",{string:!0,hidden:!0}).option("from",{string:!0,description:"The version to migrate from. Use this to manually run migrations when upgrading from an older CLI version."}).option("from-git",{boolean:!0,hidden:!0}).option("yes",{alias:"y",boolean:!0,default:!1,description:"Automatically answer yes to migration prompts."}),async n=>{await GQi({cliContext:t,includePreReleases:n.rc,targetVersion:n.to??n.version,fromVersion:n.from,fromGit:n["from-git"],yes:n.yes}),r()})}function jSy(e,t){e.command("downgrade <version>",`Downgrades Fern CLI version in ${pI}`,r=>r.positional("version",{type:"string",description:"The version to downgrade to",demandOption:!0}),async r=>{await Prf({cliContext:t,targetVersion:r.version})})}function zSy(e,t){e.command("api","Commands for managing your API specs",r=>(QSy(r,t),b1y(r,t),r))}function QSy(e,t){e.command("update",`Pulls the latest OpenAPI spec from the specified origin in ${zu} and updates the local spec.`,r=>r.option("api",{string:!0,description:"The API to update the spec for. If not specified, all APIs with a declared origin will be updated."}).option("indent",{type:"number",description:"Indentation width in spaces (default: 2)",default:2}),async r=>{t.instrumentPostHogEvent({command:"fern api update"}),await Jif({cliContext:t,project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),indent:r.indent})})}function MSy(e,t){e.command("self-update [version]","Updates the globally installed Fern CLI to the latest version or the specified version",r=>r.positional("version",{type:"string",description:"The version to update to (e.g., 0.85.0, 10). Defaults to latest."}).option("dry-run",{type:"boolean",description:"Show what would be executed without actually running the update",default:!1}),async r=>{t.instrumentPostHogEvent({command:"fern self-update"}),await Lif({cliContext:t,version:r.version,dryRun:r.dryRun})})}function LSy(e,t){e.command("login","Log in to Fern via GitHub",r=>r.option("device-code",{boolean:!0,default:!1,description:"Use device code authorization"}).option("email",{string:!0,description:"Log in via enterprise SSO using your email address"}),async r=>{await t.runTask(async n=>{t.instrumentPostHogEvent({command:"fern login"}),await xKt(n,{useDeviceCodeFlow:r.deviceCode,email:r.email})})})}function _Sy(e,t){e.command("mcp","Manage the Fern MCP server",r=>{r.command("install","Connect your coding agent to the Fern MCP server using your Fern login",n=>n.option("client",{type:"string",array:!0,choices:iMi,description:"The coding agent(s) to configure. Defaults to every one found on this machine."}).option("organization",{alias:"org",type:"string",description:"The organization to connect to. Defaults to the one in `fern.config.json`."}),async n=>{t.instrumentPostHogEvent({command:"fern mcp install"}),await t.runTask(async i=>{await Enf({clients:n.client,organization:n.organization??await Rca(t),context:i})})}).demandCommand(1,"Specify a subcommand, e.g. `fern mcp install`.")})}function USy(e,t){e.command("logout","Log out of Fern",r=>r,async()=>{await t.runTask(async r=>{t.instrumentPostHogEvent({command:"fern logout"}),await zZo(r)})})}function VSy(e,t){e.command("format","Formats your Fern Definition",r=>r.option("ci",{boolean:!0,default:!1,description:"Fail with non-zero exit status if files are not formatted correctly."}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{t.instrumentPostHogEvent({command:"fern format"}),await Qrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),cliContext:t,shouldFix:!r.ci})})}function GSy(e,t){e.command("test",!1,r=>r.option("api",{string:!0,description:"The API to mock."}).option("command",{string:!0,description:"The command to run to test your SDK."}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Run the tests configured to a specific language"}),async r=>{t.instrumentPostHogEvent({command:"fern test"}),await _if({cliContext:t,project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,nameOverride:".mock",sdkLanguage:r.language}),testCommand:r.command,generationLanguage:r.language})})}function qSy(e,t){e.command("mock",!1,r=>r.option("port",{number:!0,description:"The port the server binds to."}).option("api",{string:!0,description:"The API to mock."}),async r=>{t.instrumentPostHogEvent({command:"fern mock"}),await Dnf({cliContext:t,project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),port:r.port})})}function WSy(e,t){e.command("overrides","Commands for managing OpenAPI overrides",r=>(HSy(r,t),KSy(r,t),r))}function HSy(e,t){e.command("compare <original> <modified>","Compare two OpenAPI specs and generate an overrides file from the differences.",r=>r.positional("original",{type:"string",description:"Path to the original OpenAPI spec",demandOption:!0}).positional("modified",{type:"string",description:"Path to the modified OpenAPI spec",demandOption:!0}).option("output",{type:"string",alias:"o",description:"Path to write the overrides file (defaults to <original>-overrides.yml)"}),async r=>{t.instrumentPostHogEvent({command:"fern overrides compare"});let n=Yn(Za(),r.original),i=Yn(Za(),r.modified),o=r.output!=null?Yn(Za(),r.output):void 0;await $rf({originalPath:_t.of(n),modifiedPath:_t.of(i),outputPath:o!=null?_t.of(o):void 0,cliContext:t})})}function KSy(e,t){e.command("write","Generate a basic openapi overrides file.",r=>[r.option("api",{string:!0,description:"Only run the command on the provided API"}),r.option("exclude-models",{boolean:!0,description:"When generating the initial overrides, also stub the models (in addition to the endpoints)",default:!1})],async r=>{t.instrumentPostHogEvent({command:"fern overrides write"}),await Oia({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),includeModels:!r.excludeModels,cliContext:t})})}function JSy(e,t){e.command("write-overrides",!1,r=>[r.option("api",{string:!0,description:"Only run the command on the provided API"}),r.option("exclude-models",{boolean:!0,description:"When generating the initial overrides, also stub the models (in addition to the endpoints)",default:!1})],async r=>{t.logger.warn("The 'write-overrides' command is deprecated. Use 'fern overrides write' instead."),t.instrumentPostHogEvent({command:"fern write-overrides"}),await Oia({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),includeModels:!r.excludeModels,cliContext:t})})}function YSy(e,t){e.command("write-definition","Write underlying Fern Definition for OpenAPI specs and API Dependencies.",r=>r.option("api",{string:!0,description:"Only run the command on the provided API"}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Write the definition for a particular SDK language"}).option("preserve-schemas",{string:!0,description:"Preserve potentially unsafe schema Ids in the generated fern definition"}),async r=>{let n=r.preserveSchemas!=null;t.instrumentPostHogEvent({command:"fern write-definition"}),await aof({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0,sdkLanguage:r.language,preserveSchemaIds:n}),cliContext:t,sdkLanguage:r.language,preserveSchemaIds:n})})}function XSy(e,t){e.command("docs","Commands for managing your docs",r=>(l1y(r,t),p1y(r,t),f1y(r,t),a1y(r,t),s1y(r,t),i1y(r,t),ZSy(r,t),r))}function ZSy(e,t){e.command("theme","Manage org-level themes for your documentation",r=>($Sy(r,t),e1y(r,t),t1y(r,t),r1y(r,t),n1y(r,t),r))}function $Sy(e,t){e.command("delete","Delete a theme from Fern's cloud",r=>r.option("name",{alias:"n",type:"string",description:"Name of the theme to delete",demandOption:!0}).option("force",{alias:"f",type:"boolean",description:"Skip the confirmation prompt"}).example("$0 docs theme delete --name dark","Delete the theme named 'dark'").example("$0 docs theme delete --name dark --force","Delete without confirmation"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme delete"}),await yrf({cliContext:t,name:r.name,force:r.force})})}function e1y(e,t){e.command("download","Download a theme from Fern's cloud into a local theme directory (theme.yml + assets)",r=>r.option("name",{alias:"n",type:"string",description:'Theme name (default: "default")',default:"default"}).option("org",{type:"string",description:"Override the org ID from fern.config.json"}).option("output",{alias:"o",type:"string",description:"Directory to write the theme into (default: ./fern/theme)"}).example("$0 docs theme download --name dark","Download the theme named 'dark' to ./fern/theme").example("$0 docs theme download --name dark --output ./themes/dark","Download to a custom directory, e.g. to vendor into a self-hosted image"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme download"}),await brf({cliContext:t,name:r.name,org:r.org,output:r.output})})}function t1y(e,t){e.command("export","Export theme-eligible fields from docs.yml into a standalone theme directory",r=>r.option("output",{alias:"o",type:"string",description:"Directory to export the theme into (default: ./fern/theme)"}).example("$0 docs theme export","Export theme from docs.yml to ./fern/theme").example("$0 docs theme export --output ./my-theme","Export to a custom directory"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme export"}),await Erf({cliContext:t,output:r.output})})}function r1y(e,t){e.command("list","List all themes for an org",r=>r.option("org",{type:"string",description:"Override the org ID from fern.config.json"}).option("json",{type:"boolean",description:"Output themes as a JSON array (includes updatedAt)"}).example("$0 docs theme list","List all themes for the current org").example("$0 docs theme list --json","Output themes as JSON"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme list"}),await Irf({cliContext:t,org:r.org,json:r.json})})}function n1y(e,t){e.command("upload","Upload a theme to Fern's cloud (creates or updates)",r=>r.option("name",{alias:"n",type:"string",description:'Theme name (default: "default")',default:"default"}).option("org",{type:"string",description:"Override the org ID from fern.config.json"}).example("$0 docs theme upload",'Upload theme from ./fern/theme as "default"').example("$0 docs theme upload --name dark","Upload a named theme variant"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme upload"}),await Trf({cliContext:t,name:r.name,org:r.org})})}function i1y(e,t){e.command("md",!1,r=>(o1y(r,t),h1y(r,t),r))}function o1y(e,t){e.command("generate","[Beta] Generate MDX documentation from library source code. Requires 'libraries' config in docs.yml.",r=>r.option("library",{type:"string",description:"Name of a specific library defined in docs.yml to generate docs for"}).option("local",{boolean:!0,default:!1,description:"Run the library parser(s) locally using Docker instead of Fern's servers"}),async r=>{t.instrumentPostHogEvent({command:"fern docs md generate"});let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0});await mrf({project:n,cliContext:t,library:r.library,local:r.local})})}function s1y(e,t){e.command("diff <preview-url> <files..>","Generate visual diffs between preview and production docs pages",r=>r.positional("preview-url",{type:"string",description:"The preview deployment URL (e.g. acme-preview-abc123.docs.buildwithfern.com)",demandOption:!0}).positional("files",{type:"string",array:!0,description:"File paths to generate diffs for (e.g. fern/pages/intro.mdx)",demandOption:!0}).option("output",{type:"string",default:".fern/diff",description:"Output directory for diff images"}),async r=>{t.instrumentPostHogEvent({command:"fern docs diff"});let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),i=await drf({cliContext:t,project:n,previewUrl:r.previewUrl,files:r.files??[],outputDir:r.output});t.logger.info(JSON.stringify(i,null,2))})}function a1y(e,t){e.command("preview","Commands for managing preview deployments",r=>(c1y(r,t),u1y(r,t),r))}function c1y(e,t){e.command("list","List all preview deployments",r=>r.option("limit",{type:"number",description:"Maximum number of preview deployments to display"}).option("page",{type:"number",description:"Page number for pagination (starts at 1)"}),async r=>{t.instrumentPostHogEvent({command:"fern docs preview list"}),await grf({cliContext:t,limit:r.limit,page:r.page})})}function u1y(e,t){e.command("delete [target]","Delete a preview deployment",r=>r.positional("target",{type:"string",description:"A preview URL or ID (auto-detected)"}).option("url",{type:"string",description:"The FQDN of the preview deployment to delete (e.g. acme-preview-abc123.docs.buildwithfern.com)"}).option("id",{type:"string",description:"The preview ID to delete. Resolves the URL from the organization in fern.config.json and the instance basepaths in docs.yml."}).check(n=>{let i=[n.target,n.url,n.id].filter(Boolean);if(i.length===0)throw new T({message:"Must provide a preview URL or --id.",code:T.Code.ConfigError});if(i.length>1)throw new T({message:"Provide only one of: [target], --url, or --id.",code:T.Code.ConfigError});return!0}),async r=>{t.instrumentPostHogEvent({command:"fern docs preview delete"}),await hrf({cliContext:t,target:r.target,previewUrl:r.url,previewId:r.id})})}function l1y(e,t){e.command("dev","Run a local development server to preview your docs",r=>r.option("port",{number:!0,description:"Run the development server on the following port"}).option("bundle-path",{string:!0,hidden:!0,description:"Path of the local docs bundle to use"}).option("broken-links",{boolean:!0,default:!1,description:"Check for broken links in your docs"}).option("beta",{boolean:!0,default:!1,hidden:!0,description:"Deprecated alias for --legacy"}).option("legacy",{boolean:!0,default:!1,description:"Run the legacy Next.js docs preview server instead of the default Astro one"}).option("astro",{boolean:!0,default:!1,hidden:!0,description:"No-op: Astro is now the default docs preview server"}).option("backend-port",{number:!0,description:"Run the development backend server on the following port"}).option("force-download",{boolean:!0,default:!1,description:"Force re-download of the docs preview bundle by deleting the cached bundle"}).option("private",{boolean:!0,default:!1,description:"Include OpenAPI elements marked `x-twilio.docsVisibility: private` in the previewed API reference. By default only `public` elements are shown; `hidden` elements are always excluded."}).option("skip-api",{boolean:!0,default:!1,description:"Skip building API reference sections for a much faster preview. Endpoint and schema pages are left out; overview and hand-written pages in API sections are kept."}).option("skip-validation",{boolean:!0,default:!1,description:"Skip validating the docs while previewing, so the preview is ready sooner on large sites. Docs errors will not be reported."}),async r=>{r.beta&&t.logger.warn("--beta is deprecated and is now an alias for --legacy (the Next.js docs preview server). Use --legacy instead.");let n=r.legacy||r.beta;if(n&&r.astro)throw new T({message:"--astro and --legacy cannot be used together. Astro is the default; pass --legacy for Next.js.",code:T.Code.ConfigError});let i,o;try{r.port!=null?i=r.port:i=await _Fe({port:[3e3,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010]}),r.backendPort!=null?o=r.backendPort:o=await _Fe({port:[3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011]})}catch(a){throw new T({message:`Failed to find an available port: ${a instanceof Error?a.message:String(a)}`,code:T.Code.EnvironmentError})}let s=r.bundlePath;await urf({loadProject:()=>Ha(t,{defaultToAllApiWorkspaces:!0,commandLineApiWorkspace:void 0}),cliContext:t,port:i,bundlePath:s,brokenLinks:r.brokenLinks,legacy:n,backendPort:o,forceDownload:r.forceDownload,includePrivate:r.private,skipApi:r.skipApi,skipValidation:r.skipValidation})})}function p1y(e,t){e.command("broken-links","Check for broken links in your docs",r=>r.option("strict",{boolean:!0,default:!1,description:"Fail with non-zero exit status"}),async r=>{let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0});await Yif({project:n,cliContext:t,errorOnBrokenLinks:r.strict})})}function f1y(e,t){e.command("link","Manage and validate links on live docs sites",r=>(d1y(r,t),r))}function d1y(e,t){e.command("check","Check for broken links on a live docs site",r=>r.option("url",{type:"string",description:"Docs site URL to check (e.g. buildwithfern.com/learn)"}).option("output",{type:"string",description:"Output format: text, json, or csv",choices:["text","json","csv"],default:"text"}),async r=>{t.instrumentPostHogEvent({command:"fern docs link check"});let{domain:n,docsConfigDir:i}=await m1y(t,r.url),o=bne(),s=await t.runTask(l=>pd(l));t.stderr.info(`${me.cyan("\u25C6")} Checking links on ${me.cyan(n)}...`),t.stderr.info("");let a=new E7e({dashboardUrl:o,token:s.value}),c=new v7e(process.stderr),u=!1;try{let l=await a.run(n,{onSitemapFetched:g=>{c.onSitemapFetched(g.totalPages)},onPageScraped:g=>{c.onPageScraped(g.pageIndex,g.totalPages)},onLinkChecked:g=>{c.onLinkChecked(g.linksChecked,g.totalLinks)},onStreamInterrupted:g=>{u=!0,c.finish(),t.stderr.warn(`\u26A0 Connection lost while ${g.phase} (${g.pagesScraped} pages scraped, ${g.linksChecked}/${g.totalLinks} links checked). Showing partial results.`)}}),d=new C7e(i).resolve(l);c.finish();let m=new I7e(n).format(d,r.output,{interrupted:u});r.output==="json"||r.output==="csv"?await _df(process.stdout,m+`
|
|
5387
|
+
Version Bump: ${i.version_bump}`))})}function xSy(e,t){e.command("token","Generate a Fern Token",r=>r.option("organization",{alias:"org",type:"string",description:"The organization to create a token for. Defaults to the one in `fern.config.json`"}),async r=>{await t.runTask(async n=>{await Uif({orgId:r.organization??(await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0})).config.organization,taskContext:n})})})}function wSy(e,t){e.command("add <generator>",`Add a code generator to ${zu}`,r=>r.positional("generator",{type:"string",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("group",{string:!0,description:"Add the generator to the specified group"}),async r=>{let n=Dca(r.generator,t);await $7p({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),generatorName:n,groupName:r.group,cliContext:t})})}function SSy(e,t){e.command(["generate"],"Generate SDKs or docs from legacy generator groups and SDK Config targets",r=>r.option("api",{type:"string",array:!0,description:"If multiple APIs, specify the name with --api <name>. Pass --api multiple times to generate for several APIs at once."}).option("docs",{string:!0,description:"If multiple docs sites, specify the name with --docs <name>. Otherwise just --docs."}).option("instance",{string:!0,description:"The url for the instance of docs (e.g. --instance acme.docs.buildwithfern.com)"}).option("preview",{boolean:!0,default:!1,description:"Whether to generate a preview link for the docs"}).option("id",{type:"string",description:"A stable identifier for the preview. Reusing the same ID overwrites the previous preview, keeping the URL stable."}).option("group",{type:"string",array:!0,description:"A legacy group from generators.yml or generators.legacy.yml. Pass --group multiple times to generate several groups."}).option("target",{type:"string",array:!0,description:"A target language from sdk-config.yml or --sdk-config. Pass --target multiple times to generate several targets."}).option("generator",{type:"string",description:"A specific generator within selected legacy groups. With --sdk-config and no --target, filters the explicit SDK Config for backward compatibility."}).option("mode",{choices:Object.values(SJp),description:"Defaults to the mode specified in generators.yml"}).option("version",{type:"string",description:"The version for the generated packages"}).option("printZipUrl",{boolean:!0,hidden:!0,default:!1}).option("local",{boolean:!0,default:!1,description:"Run the generator(s) locally using Docker. SDK Config targets run on the on-prem generator."}).option("keepDocker",{boolean:!0,default:!1,description:"Prevent auto-deletion of the Docker containers."}).option("force",{boolean:!0,default:!1,description:"Ignore prompts to confirm generation, defaults to false"}).option("broken-links",{boolean:!0,description:"Log a warning if there are broken links in the docs.",default:!1}).option("strict-broken-links",{boolean:!0,description:"Throw an error (rather than logging a warning) if there are broken links in the docs.",default:!1}).option("disable-snippets",{boolean:!0,description:"Disable snippets in docs generation.",default:!1}).option("runner",{choices:["docker","podman"],description:"Choose the container runtime to use for local generation.",default:void 0}).option("lfs-override",{type:"string",hidden:!0,description:"Override output mode to local-file-system with the specified path"}).option("sdk-config",{type:"string",description:"Path to the SDK Config v1 YAML or JSON file to use instead of sdk-config.yml discovered for the selected API"}).option("disable-dynamic-snippets",{boolean:!0,description:"Disable dynamic SDK snippets in docs generation",default:!1}).option("prompt",{boolean:!0,description:"Prompt for confirmation before generating (use --no-prompt to skip)",default:!0}).option("skip-upload",{boolean:!0,description:"Skip asset upload step and generate fake links for preview",default:!1}).option("fernignore",{type:"string",description:"Path to a custom .fernignore file. For generators with local file system output, the .fernignore in the output directory is used automatically if not specified"}).option("dynamic-ir-only",{boolean:!0,description:"Only upload dynamic IR for specified version, skip SDK generation (remote generation only)",default:!1}).option("output",{type:"string",description:"Custom output directory (currently only supported with --preview for SDK generation)"}).option("replay",{boolean:!0,default:!0,hidden:!0,description:"Run replay after generation (use --no-replay to skip)"}).option("verify",{boolean:!0,default:!1,hidden:!0,description:"Run the generator's verify.sh script in a validator container after generation (local generation only)"}).option("retry-rate-limited",{boolean:!0,default:!1,description:"Automatically retry with exponential backoff when receiving 429 Too Many Requests responses"}).option("require-env-vars",{boolean:!0,default:!0,description:"Require all referenced environment variables to be defined (use --no-require-env-vars to substitute empty strings for missing variables)"}).option("skip-fernignore",{boolean:!0,default:!1,description:"Skip the .fernignore file and generate all files. For remote generation, uploads an empty .fernignore. For local generation, skips reading .fernignore from the output directory."}).option("skip-if-no-diff",{boolean:!0,default:!1,description:"Skip opening a PR / pushing when the generated output has no diff from the base branch."}).option("generate-tests",{boolean:!0,default:!1,description:"Generate test files even when generating to a local file system (tests are normally only generated for GitHub output modes)"}).option("package",{boolean:!0,default:!1,description:"After generating to the local file system, build distributable package artifacts (npm tarball, wheel, JAR, NuGet package, gem, etc.) into a fern-dist/ folder inside the output directory."}).option("package-mode",{choices:["host","docker"],default:"host",description:"Where --package runs the packaging toolchain: 'host' uses toolchains installed on this machine; 'docker' runs each toolchain inside an official Docker image (node, python, gradle, dotnet/sdk, ruby, composer, rust) with the output directory mounted, so no local toolchains are needed. Docker mode forwards HTTP(S)_PROXY/NO_PROXY and, for Java, gives Gradle a persistent cache under ~/.fern/gradle-docker-home plus the host's gradle.properties and init.d (from GRADLE_USER_HOME or ~/.gradle)."}).option("package-only",{boolean:!0,default:!1,description:"Like --package, but only the fern-dist/ artifact is kept in the output directory \u2014 the generated SDK source is removed after the package is built."}).option("private",{boolean:!0,default:!1,description:"Include OpenAPI elements marked `x-twilio.libraryVisibility: private` (SDKs) or `x-twilio.docsVisibility: private` (--docs) in the output. By default only `public` elements are generated; `hidden` elements are always excluded."}).example("$0 generate --api my-api","Generate the legacy default group and every target in the API's default sdk-config.yml").example("$0 generate --api my-api --group python-sdk","Generate one legacy group").example("$0 generate --api my-api --target typescript","Generate one SDK Config target").example("$0 generate --api my-api --group python-sdk --target typescript","Generate legacy and SDK Config selections together").example("$0 generate --api my-api --sdk-config ./internal-sdk-config.yml --target typescript","Generate a target from an alternate SDK Config file"),async r=>{if(r.api!=null&&r.api.length>0&&r.docs!=null)return t.failWithoutThrowing("Cannot specify both --api and --docs. Please choose one.",void 0,{code:T.Code.ConfigError});if(r.id!=null&&!r.preview)return t.failWithoutThrowing("The --id flag can only be used with --preview.",void 0,{code:T.Code.ConfigError});if(r.id!=null&&r.docs==null)return t.failWithoutThrowing("The --id flag can only be used with --docs.",void 0,{code:T.Code.ConfigError});if(r.skipUpload&&!r.preview)return t.failWithoutThrowing("The --skip-upload flag can only be used with --preview.",void 0,{code:T.Code.ConfigError});if(r.skipUpload&&r.docs==null)return t.failWithoutThrowing("The --skip-upload flag can only be used with --docs.",void 0,{code:T.Code.ConfigError});if(r.fernignore!=null&&(r.local||r.runner!=null))return t.failWithoutThrowing("The --fernignore flag is not supported with local generation (--local or --runner). It can only be used with remote generation.",void 0,{code:T.Code.ConfigError});if(r["skip-fernignore"]&&r.fernignore!=null)return t.failWithoutThrowing("The --skip-fernignore and --fernignore flags cannot be used together.",void 0,{code:T.Code.ConfigError});if(r["dynamic-ir-only"]&&(r.local||r.runner!=null))return t.failWithoutThrowing("The --dynamic-ir-only flag is not supported with local generation (--local or --runner). It can only be used with remote generation.",void 0,{code:T.Code.ConfigError});if(r["dynamic-ir-only"]&&r.version==null)return t.failWithoutThrowing("The --dynamic-ir-only flag requires a version to be specified with --version.",void 0,{code:T.Code.ConfigError});if(r["dynamic-ir-only"]&&r.docs!=null)return t.failWithoutThrowing("The --dynamic-ir-only flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});if(r.output!=null&&!r.preview)return t.failWithoutThrowing("The --output flag currently only works with --preview.",void 0,{code:T.Code.ConfigError});let n=r.package||r.packageOnly;if(n&&r.preview)return t.failWithoutThrowing("The --package flag cannot be used with --preview.",void 0,{code:T.Code.ConfigError});if(n&&r.docs!=null)return t.failWithoutThrowing("The --package flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});if(r.packageMode!=="host"&&!n)return t.failWithoutThrowing("The --package-mode flag can only be used with --package.",void 0,{code:T.Code.ConfigError});if(r.output!=null&&r.docs!=null)return t.failWithoutThrowing("The --output flag is not supported for docs generation.",void 0,{code:T.Code.ConfigError});if(r.sdkConfig!=null&&r.docs!=null)return t.failWithoutThrowing("The --sdk-config flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});if(r.target!=null&&r.target.length>0&&r.docs!=null)return t.failWithoutThrowing("The --target flag can only be used for API generation, not docs generation.",void 0,{code:T.Code.ConfigError});let i=r.generator!=null?Dca(r.generator,t):void 0,{generatorName:o,generatorIndex:s}=Dji(i);return r.api!=null&&r.api.length>0?await Wur({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,skipApiWorkspaces:r.sdkConfig!=null&&r.group==null}),cliContext:t,version:r.version,groupNames:r.group,targetNames:r.target,generatorName:o,generatorIndex:s,shouldLogS3Url:r.printZipUrl,keepDocker:r.keepDocker,useLocalDocker:r.local||r.runner!=null,preview:r.preview,mode:r.mode,force:r.force,runner:r.runner,inspect:!1,lfsOverride:r.lfsOverride,sdkConfigPath:r.sdkConfig,fernignorePath:r.fernignore,skipFernignore:r["skip-fernignore"],dynamicIrOnly:r["dynamic-ir-only"],outputDir:r.output,noReplay:!r.replay,verify:r.verify,retryRateLimited:r["retry-rate-limited"],requireEnvVars:r["require-env-vars"],skipIfNoDiff:r["skip-if-no-diff"],generateTests:r["generate-tests"],pack:n,packMode:r.packageMode,packOnly:r.packageOnly,includePrivate:r.private}):r.docs!=null?(r.group!=null&&r.group.length>0&&t.logger.warn("--group is ignored when generating docs"),r.generator!=null&&t.logger.warn("--generator is ignored when generating docs"),r.version!=null&&t.logger.warn("--version is ignored when generating docs"),await _rf({project:await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0},!0),cliContext:t,instance:r.instance,preview:r.preview,previewId:r.id,force:r.force,brokenLinks:r.brokenLinks,strictBrokenLinks:r.strictBrokenLinks,disableTemplates:r.disableSnippets,noPrompt:!r.prompt,skipUpload:r.skipUpload,includePrivate:r.private})):await Wur({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,skipApiWorkspaces:r.sdkConfig!=null&&r.group==null}),cliContext:t,version:r.version,groupNames:r.group,targetNames:r.target,generatorName:o,generatorIndex:s,shouldLogS3Url:r.printZipUrl,keepDocker:r.keepDocker,useLocalDocker:r.local,preview:r.preview,mode:r.mode,force:r.force,runner:r.runner,inspect:!1,lfsOverride:r.lfsOverride,sdkConfigPath:r.sdkConfig,fernignorePath:r.fernignore,skipFernignore:r["skip-fernignore"],dynamicIrOnly:r["dynamic-ir-only"],outputDir:r.output,noReplay:!r.replay,verify:r.verify,retryRateLimited:r["retry-rate-limited"],requireEnvVars:r["require-env-vars"],skipIfNoDiff:r["skip-if-no-diff"],generateTests:r["generate-tests"],pack:n,packMode:r.packageMode,packOnly:r.packageOnly,includePrivate:r.private})})}function TSy(e,t){e.command("ir <path-to-output>","Generate IR (Intermediate Representation)",r=>r.positional("path-to-output",{type:"string",description:"Path to write intermediate representation (IR)",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("version",{string:!0,description:"The version of IR to produce"}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Generate IR for a particular language"}).option("audience",{type:"array",string:!0,default:[],description:"Filter the IR for certain audiences"}).option("smart-casing",{boolean:!0,description:"Whether to use smart casing"}).option("from-openapi",{boolean:!0,description:"Whether to use the new parser and go directly from OpenAPI to IR",default:!1}).option("disable-examples",{boolean:!0,description:"Whether to disable automatic example generation in the IR",default:!1}),async r=>{await Hrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,sdkLanguage:r.language}),irFilepath:Yn(Za(),r.pathToOutput),cliContext:t,generationLanguage:r.language,audiences:r.audience.length>0?{type:"select",audiences:r.audience}:{type:"all"},version:r.version,keywords:void 0,smartCasing:r.smartCasing??!1,readme:void 0,directFromOpenapi:r.fromOpenapi,disableExamples:r.disableExamples})})}function OSy(e,t){e.command("openapi-ir <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write intermediate representation (IR)",demandOption:!0}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Generate IR for a particular language"}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{await Xrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,sdkLanguage:r.language}),irFilepath:Yn(Za(),r.pathToOutput),cliContext:t,sdkLanguage:r.language})})}function PSy(e,t){e.command("resolve-specs <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write resolved specs",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{await Qnf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),outputDir:_t.of(Yn(Za(),r.pathToOutput)),cliContext:t})})}function BSy(e,t){e.command("dynamic-ir <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write intermediate representation (IR)",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("version",{string:!0,description:"The version of IR to produce"}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Generate IR for a particular language"}).option("audience",{type:"array",string:!0,default:[],description:"Filter the IR for certain audiences"}).option("smart-casing",{boolean:!0,description:"Whether to use smart casing"}).option("disable-examples",{boolean:!0,description:"Whether to suppress examples from being included in the IR"}),async r=>{await Vrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,sdkLanguage:r.language}),irFilepath:Yn(Za(),r.pathToOutput),cliContext:t,generationLanguage:r.language,audiences:{type:"all"},version:r.version,keywords:void 0,smartCasing:r.smartCasing??!1,disableDynamicExamples:r.disableExamples??!1})})}function RSy(e,t){e.command("fdr <path-to-output>",!1,r=>r.positional("path-to-output",{type:"string",description:"Path to write FDR API definition",demandOption:!0}).option("api",{string:!0,description:"Only run the command on the provided API"}).option("audience",{type:"array",string:!0,default:[],description:"Filter the FDR API definition for certain audiences"}).option("from-openapi",{boolean:!0,description:"Whether to use the new parser and go directly from OpenAPI to IR",default:!1}),async r=>{r.fromOpenapi?await Jrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),outputFilepath:Yn(Za(),r.pathToOutput),cliContext:t,audiences:r.audience.length>0?{type:"select",audiences:r.audience}:{type:"all"}}):await qrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),outputFilepath:Yn(Za(),r.pathToOutput),cliContext:t,audiences:r.audience.length>0?{type:"select",audiences:r.audience}:{type:"all"}})})}function DSy(e,t){e.command(["register"],!1,r=>r.option("version",{type:"string",description:"The version for the registered api"}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{let n=await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),i=await t.runTask(o=>pd(o));await jnf({project:n,cliContext:t,token:i,version:r.version})})}function kSy(e,t){e.command(["register-v2"],!1,r=>r.option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{let n=await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),i=await t.runTask(o=>pd(o));await znf({project:n,cliContext:t,token:i})})}function FSy(e,t){e.command("check","Validates your Fern Definition. Logs errors.",r=>r.option("api",{string:!0,description:"Only run the command on the provided API"}).option("warnings",{boolean:!0,description:"Log warnings in addition to errors.",default:!1}).option("broken-links",{boolean:!0,description:"Log a warning if there are broken links in the docs.",default:!1,deprecated:"Use docs.yml `check.rules.broken-links: warn` instead."}).option("strict-broken-links",{boolean:!0,description:"Throw an error (rather than logging a warning) if there are broken links in the docs.",default:!1,deprecated:"Use docs.yml `check.rules.broken-links: error` instead."}).option("local",{boolean:!0,description:"Run validation locally without sending data to Fern API.",default:!1}).option("from-openapi",{boolean:!0,description:"Whether to use the new parser and go directly from OpenAPI to IR",default:!1}).option("json",{boolean:!0,description:"Output results as JSON to stdout.",default:!1}),async r=>{let n;try{n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),r.api!=null&&!n.apiWorkspaces.some(i=>i.workspaceName===r.api)&&!n.sdkConfigWorkspaces?.some(i=>i.workspaceName===r.api)&&(t.instrumentPostHogEvent({command:"fern check",properties:{passed:!1,abortReason:`API does not exist: ${r.api}`}}),t.failAndThrow(`API does not exist: ${r.api}`,void 0,{code:T.Code.ConfigError})),await sof({project:n,cliContext:t,logWarnings:r.warnings,brokenLinks:r.brokenLinks,errorOnBrokenLinks:r.strictBrokenLinks,directFromOpenapi:r.fromOpenapi,commandLineApiWorkspace:r.api})}catch(i){if(n==null){let o=i instanceof Error?i.message.slice(0,100):"project load failed";t.instrumentPostHogEvent({command:"fern check",properties:{passed:!1,abortReason:o}})}throw i}})}function NSy({cli:e,cliContext:t,onRun:r}){e.command("upgrade",`Upgrades Fern CLI version in ${pI}`,n=>n.option("rc",{boolean:!0,hidden:!0,default:!1}).option("version",{string:!0,description:"The version to upgrade to. Defaults to the latest release."}).option("to",{string:!0,hidden:!0}).option("from",{string:!0,description:"The version to migrate from. Use this to manually run migrations when upgrading from an older CLI version."}).option("from-git",{boolean:!0,hidden:!0}).option("yes",{alias:"y",boolean:!0,default:!1,description:"Automatically answer yes to migration prompts."}),async n=>{await GQi({cliContext:t,includePreReleases:n.rc,targetVersion:n.to??n.version,fromVersion:n.from,fromGit:n["from-git"],yes:n.yes}),r()})}function jSy(e,t){e.command("downgrade <version>",`Downgrades Fern CLI version in ${pI}`,r=>r.positional("version",{type:"string",description:"The version to downgrade to",demandOption:!0}),async r=>{await Prf({cliContext:t,targetVersion:r.version})})}function zSy(e,t){e.command("api","Commands for managing your API specs",r=>(QSy(r,t),b1y(r,t),r))}function QSy(e,t){e.command("update",`Pulls the latest OpenAPI spec from the specified origin in ${zu} and updates the local spec.`,r=>r.option("api",{string:!0,description:"The API to update the spec for. If not specified, all APIs with a declared origin will be updated."}).option("indent",{type:"number",description:"Indentation width in spaces (default: 2)",default:2}),async r=>{t.instrumentPostHogEvent({command:"fern api update"}),await Jif({cliContext:t,project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),indent:r.indent})})}function MSy(e,t){e.command("self-update [version]","Updates the globally installed Fern CLI to the latest version or the specified version",r=>r.positional("version",{type:"string",description:"The version to update to (e.g., 0.85.0, 10). Defaults to latest."}).option("dry-run",{type:"boolean",description:"Show what would be executed without actually running the update",default:!1}),async r=>{t.instrumentPostHogEvent({command:"fern self-update"}),await Lif({cliContext:t,version:r.version,dryRun:r.dryRun})})}function LSy(e,t){e.command("login","Log in to Fern via GitHub",r=>r.option("device-code",{boolean:!0,default:!1,description:"Use device code authorization"}).option("email",{string:!0,description:"Log in via enterprise SSO using your email address"}),async r=>{await t.runTask(async n=>{t.instrumentPostHogEvent({command:"fern login"}),await xKt(n,{useDeviceCodeFlow:r.deviceCode,email:r.email})})})}function _Sy(e,t){e.command("mcp","Manage the Fern MCP server",r=>{r.command("install","Connect your coding agent to the Fern MCP server using your Fern login",n=>n.option("client",{type:"string",array:!0,choices:iMi,description:"The coding agent(s) to configure. Defaults to every one found on this machine."}).option("organization",{alias:"org",type:"string",description:"The organization to connect to. Defaults to the one in `fern.config.json`."}),async n=>{t.instrumentPostHogEvent({command:"fern mcp install"}),await t.runTask(async i=>{await Enf({clients:n.client,organization:n.organization??await Rca(t),context:i})})}).demandCommand(1,"Specify a subcommand, e.g. `fern mcp install`.")})}function USy(e,t){e.command("logout","Log out of Fern",r=>r,async()=>{await t.runTask(async r=>{t.instrumentPostHogEvent({command:"fern logout"}),await zZo(r)})})}function VSy(e,t){e.command("format","Formats your Fern Definition",r=>r.option("ci",{boolean:!0,default:!1,description:"Fail with non-zero exit status if files are not formatted correctly."}).option("api",{string:!0,description:"Only run the command on the provided API"}),async r=>{t.instrumentPostHogEvent({command:"fern format"}),await Qrf({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),cliContext:t,shouldFix:!r.ci})})}function GSy(e,t){e.command("test",!1,r=>r.option("api",{string:!0,description:"The API to mock."}).option("command",{string:!0,description:"The command to run to test your SDK."}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Run the tests configured to a specific language"}),async r=>{t.instrumentPostHogEvent({command:"fern test"}),await _if({cliContext:t,project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1,nameOverride:".mock",sdkLanguage:r.language}),testCommand:r.command,generationLanguage:r.language})})}function qSy(e,t){e.command("mock",!1,r=>r.option("port",{number:!0,description:"The port the server binds to."}).option("api",{string:!0,description:"The API to mock."}),async r=>{t.instrumentPostHogEvent({command:"fern mock"}),await Dnf({cliContext:t,project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!1}),port:r.port})})}function WSy(e,t){e.command("overrides","Commands for managing OpenAPI overrides",r=>(HSy(r,t),KSy(r,t),r))}function HSy(e,t){e.command("compare <original> <modified>","Compare two OpenAPI specs and generate an overrides file from the differences.",r=>r.positional("original",{type:"string",description:"Path to the original OpenAPI spec",demandOption:!0}).positional("modified",{type:"string",description:"Path to the modified OpenAPI spec",demandOption:!0}).option("output",{type:"string",alias:"o",description:"Path to write the overrides file (defaults to <original>-overrides.yml)"}),async r=>{t.instrumentPostHogEvent({command:"fern overrides compare"});let n=Yn(Za(),r.original),i=Yn(Za(),r.modified),o=r.output!=null?Yn(Za(),r.output):void 0;await $rf({originalPath:_t.of(n),modifiedPath:_t.of(i),outputPath:o!=null?_t.of(o):void 0,cliContext:t})})}function KSy(e,t){e.command("write","Generate a basic openapi overrides file.",r=>[r.option("api",{string:!0,description:"Only run the command on the provided API"}),r.option("exclude-models",{boolean:!0,description:"When generating the initial overrides, also stub the models (in addition to the endpoints)",default:!1})],async r=>{t.instrumentPostHogEvent({command:"fern overrides write"}),await Oia({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),includeModels:!r.excludeModels,cliContext:t})})}function JSy(e,t){e.command("write-overrides",!1,r=>[r.option("api",{string:!0,description:"Only run the command on the provided API"}),r.option("exclude-models",{boolean:!0,description:"When generating the initial overrides, also stub the models (in addition to the endpoints)",default:!1})],async r=>{t.logger.warn("The 'write-overrides' command is deprecated. Use 'fern overrides write' instead."),t.instrumentPostHogEvent({command:"fern write-overrides"}),await Oia({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0}),includeModels:!r.excludeModels,cliContext:t})})}function YSy(e,t){e.command("write-definition","Write underlying Fern Definition for OpenAPI specs and API Dependencies.",r=>r.option("api",{string:!0,description:"Only run the command on the provided API"}).option("language",{choices:Object.values(Hr.GenerationLanguage),description:"Write the definition for a particular SDK language"}).option("preserve-schemas",{string:!0,description:"Preserve potentially unsafe schema Ids in the generated fern definition"}),async r=>{let n=r.preserveSchemas!=null;t.instrumentPostHogEvent({command:"fern write-definition"}),await aof({project:await Ha(t,{commandLineApiWorkspace:r.api,defaultToAllApiWorkspaces:!0,sdkLanguage:r.language,preserveSchemaIds:n}),cliContext:t,sdkLanguage:r.language,preserveSchemaIds:n})})}function XSy(e,t){e.command("docs","Commands for managing your docs",r=>(l1y(r,t),p1y(r,t),f1y(r,t),a1y(r,t),s1y(r,t),i1y(r,t),ZSy(r,t),r))}function ZSy(e,t){e.command("theme","Manage org-level themes for your documentation",r=>($Sy(r,t),e1y(r,t),t1y(r,t),r1y(r,t),n1y(r,t),r))}function $Sy(e,t){e.command("delete","Delete a theme from Fern's cloud",r=>r.option("name",{alias:"n",type:"string",description:"Name of the theme to delete",demandOption:!0}).option("force",{alias:"f",type:"boolean",description:"Skip the confirmation prompt"}).example("$0 docs theme delete --name dark","Delete the theme named 'dark'").example("$0 docs theme delete --name dark --force","Delete without confirmation"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme delete"}),await yrf({cliContext:t,name:r.name,force:r.force})})}function e1y(e,t){e.command("download","Download a theme from Fern's cloud into a local theme directory (theme.yml + assets)",r=>r.option("name",{alias:"n",type:"string",description:'Theme name (default: "default")',default:"default"}).option("org",{type:"string",description:"Override the org ID from fern.config.json"}).option("output",{alias:"o",type:"string",description:"Directory to write the theme into (default: ./fern/theme)"}).example("$0 docs theme download --name dark","Download the theme named 'dark' to ./fern/theme").example("$0 docs theme download --name dark --output ./themes/dark","Download to a custom directory, e.g. to vendor into a self-hosted image"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme download"}),await brf({cliContext:t,name:r.name,org:r.org,output:r.output})})}function t1y(e,t){e.command("export","Export theme-eligible fields from docs.yml into a standalone theme directory",r=>r.option("output",{alias:"o",type:"string",description:"Directory to export the theme into (default: ./fern/theme)"}).example("$0 docs theme export","Export theme from docs.yml to ./fern/theme").example("$0 docs theme export --output ./my-theme","Export to a custom directory"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme export"}),await Erf({cliContext:t,output:r.output})})}function r1y(e,t){e.command("list","List all themes for an org",r=>r.option("org",{type:"string",description:"Override the org ID from fern.config.json"}).option("json",{type:"boolean",description:"Output themes as a JSON array (includes updatedAt)"}).example("$0 docs theme list","List all themes for the current org").example("$0 docs theme list --json","Output themes as JSON"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme list"}),await Irf({cliContext:t,org:r.org,json:r.json})})}function n1y(e,t){e.command("upload","Upload a theme to Fern's cloud (creates or updates)",r=>r.option("name",{alias:"n",type:"string",description:'Theme name (default: "default")',default:"default"}).option("org",{type:"string",description:"Override the org ID from fern.config.json"}).example("$0 docs theme upload",'Upload theme from ./fern/theme as "default"').example("$0 docs theme upload --name dark","Upload a named theme variant"),async r=>{t.instrumentPostHogEvent({command:"fern docs theme upload"}),await Trf({cliContext:t,name:r.name,org:r.org})})}function i1y(e,t){e.command("md",!1,r=>(o1y(r,t),h1y(r,t),r))}function o1y(e,t){e.command("generate","[Beta] Generate MDX documentation from library source code. Requires 'libraries' config in docs.yml.",r=>r.option("library",{type:"string",description:"Name of a specific library defined in docs.yml to generate docs for"}).option("remote",{boolean:!0,default:!1,description:"Run the library parser(s) on Fern's servers instead of locally using Docker"}).option("local",{boolean:!0,hidden:!0,description:"Deprecated: local generation is the default"}),async r=>{t.instrumentPostHogEvent({command:"fern docs md generate"});let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0});await mrf({project:n,cliContext:t,library:r.library,local:!r.remote})})}function s1y(e,t){e.command("diff <preview-url> <files..>","Generate visual diffs between preview and production docs pages",r=>r.positional("preview-url",{type:"string",description:"The preview deployment URL (e.g. acme-preview-abc123.docs.buildwithfern.com)",demandOption:!0}).positional("files",{type:"string",array:!0,description:"File paths to generate diffs for (e.g. fern/pages/intro.mdx)",demandOption:!0}).option("output",{type:"string",default:".fern/diff",description:"Output directory for diff images"}),async r=>{t.instrumentPostHogEvent({command:"fern docs diff"});let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0}),i=await drf({cliContext:t,project:n,previewUrl:r.previewUrl,files:r.files??[],outputDir:r.output});t.logger.info(JSON.stringify(i,null,2))})}function a1y(e,t){e.command("preview","Commands for managing preview deployments",r=>(c1y(r,t),u1y(r,t),r))}function c1y(e,t){e.command("list","List all preview deployments",r=>r.option("limit",{type:"number",description:"Maximum number of preview deployments to display"}).option("page",{type:"number",description:"Page number for pagination (starts at 1)"}),async r=>{t.instrumentPostHogEvent({command:"fern docs preview list"}),await grf({cliContext:t,limit:r.limit,page:r.page})})}function u1y(e,t){e.command("delete [target]","Delete a preview deployment",r=>r.positional("target",{type:"string",description:"A preview URL or ID (auto-detected)"}).option("url",{type:"string",description:"The FQDN of the preview deployment to delete (e.g. acme-preview-abc123.docs.buildwithfern.com)"}).option("id",{type:"string",description:"The preview ID to delete. Resolves the URL from the organization in fern.config.json and the instance basepaths in docs.yml."}).check(n=>{let i=[n.target,n.url,n.id].filter(Boolean);if(i.length===0)throw new T({message:"Must provide a preview URL or --id.",code:T.Code.ConfigError});if(i.length>1)throw new T({message:"Provide only one of: [target], --url, or --id.",code:T.Code.ConfigError});return!0}),async r=>{t.instrumentPostHogEvent({command:"fern docs preview delete"}),await hrf({cliContext:t,target:r.target,previewUrl:r.url,previewId:r.id})})}function l1y(e,t){e.command("dev","Run a local development server to preview your docs",r=>r.option("port",{number:!0,description:"Run the development server on the following port"}).option("bundle-path",{string:!0,hidden:!0,description:"Path of the local docs bundle to use"}).option("broken-links",{boolean:!0,default:!1,description:"Check for broken links in your docs"}).option("beta",{boolean:!0,default:!1,hidden:!0,description:"Deprecated alias for --legacy"}).option("legacy",{boolean:!0,default:!1,description:"Run the legacy Next.js docs preview server instead of the default Astro one"}).option("astro",{boolean:!0,default:!1,hidden:!0,description:"No-op: Astro is now the default docs preview server"}).option("backend-port",{number:!0,description:"Run the development backend server on the following port"}).option("force-download",{boolean:!0,default:!1,description:"Force re-download of the docs preview bundle by deleting the cached bundle"}).option("private",{boolean:!0,default:!1,description:"Include OpenAPI elements marked `x-twilio.docsVisibility: private` in the previewed API reference. By default only `public` elements are shown; `hidden` elements are always excluded."}).option("skip-api",{boolean:!0,default:!1,description:"Skip building API reference sections for a much faster preview. Endpoint and schema pages are left out; overview and hand-written pages in API sections are kept."}).option("skip-validation",{boolean:!0,default:!1,description:"Skip validating the docs while previewing, so the preview is ready sooner on large sites. Docs errors will not be reported."}),async r=>{r.beta&&t.logger.warn("--beta is deprecated and is now an alias for --legacy (the Next.js docs preview server). Use --legacy instead.");let n=r.legacy||r.beta;if(n&&r.astro)throw new T({message:"--astro and --legacy cannot be used together. Astro is the default; pass --legacy for Next.js.",code:T.Code.ConfigError});let i,o;try{r.port!=null?i=r.port:i=await _Fe({port:[3e3,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010]}),r.backendPort!=null?o=r.backendPort:o=await _Fe({port:[3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011]})}catch(a){throw new T({message:`Failed to find an available port: ${a instanceof Error?a.message:String(a)}`,code:T.Code.EnvironmentError})}let s=r.bundlePath;await urf({loadProject:()=>Ha(t,{defaultToAllApiWorkspaces:!0,commandLineApiWorkspace:void 0}),cliContext:t,port:i,bundlePath:s,brokenLinks:r.brokenLinks,legacy:n,backendPort:o,forceDownload:r.forceDownload,includePrivate:r.private,skipApi:r.skipApi,skipValidation:r.skipValidation})})}function p1y(e,t){e.command("broken-links","Check for broken links in your docs",r=>r.option("strict",{boolean:!0,default:!1,description:"Fail with non-zero exit status"}),async r=>{let n=await Ha(t,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0});await Yif({project:n,cliContext:t,errorOnBrokenLinks:r.strict})})}function f1y(e,t){e.command("link","Manage and validate links on live docs sites",r=>(d1y(r,t),r))}function d1y(e,t){e.command("check","Check for broken links on a live docs site",r=>r.option("url",{type:"string",description:"Docs site URL to check (e.g. buildwithfern.com/learn)"}).option("output",{type:"string",description:"Output format: text, json, or csv",choices:["text","json","csv"],default:"text"}),async r=>{t.instrumentPostHogEvent({command:"fern docs link check"});let{domain:n,docsConfigDir:i}=await m1y(t,r.url),o=bne(),s=await t.runTask(l=>pd(l));t.stderr.info(`${me.cyan("\u25C6")} Checking links on ${me.cyan(n)}...`),t.stderr.info("");let a=new E7e({dashboardUrl:o,token:s.value}),c=new v7e(process.stderr),u=!1;try{let l=await a.run(n,{onSitemapFetched:g=>{c.onSitemapFetched(g.totalPages)},onPageScraped:g=>{c.onPageScraped(g.pageIndex,g.totalPages)},onLinkChecked:g=>{c.onLinkChecked(g.linksChecked,g.totalLinks)},onStreamInterrupted:g=>{u=!0,c.finish(),t.stderr.warn(`\u26A0 Connection lost while ${g.phase} (${g.pagesScraped} pages scraped, ${g.linksChecked}/${g.totalLinks} links checked). Showing partial results.`)}}),d=new C7e(i).resolve(l);c.finish();let m=new I7e(n).format(d,r.output,{interrupted:u});r.output==="json"||r.output==="csv"?await _df(process.stdout,m+`
|
|
5388
5388
|
`):await _df(process.stderr,m+`
|
|
5389
5389
|
`),d.brokenLinks.length>0?t.failWithoutThrowing(void 0,void 0,{code:T.Code.ValidationError}):d.blockedLinks.length===0&&!u&&t.stderr.info(`${me.green("\u2713")} ${me.green("All links valid")}`)}catch(l){if(c.finish(),l instanceof D6){let p;l.statusCode===401||l.statusCode===403?p=T.Code.AuthError:l.statusCode===404?p=T.Code.ConfigError:p=T.Code.InternalError;let d=p===T.Code.InternalError?`Link check failed: ${l.message}`:l.message;t.stderr.error(d),t.failAndThrow(void 0,void 0,{code:p})}throw l}finally{c.finish()}})}async function m1y(e,t){let r=a=>a.replace(/^https?:\/\//i,"").replace(/\/$/,"");if(t!=null){let a;try{a=(await Ha(e,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0})).docsWorkspaces?.absoluteFilePath}catch{}return{domain:r(t),docsConfigDir:a}}let n=await Ha(e,{commandLineApiWorkspace:void 0,defaultToAllApiWorkspaces:!0});if(n.docsWorkspaces==null)return e.stderr.error(`No docs configuration found.
|
|
5390
5390
|
|