fern-api 5.50.5 → 5.50.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.cjs +7 -7
- package/package.json +1 -1
package/cli.cjs
CHANGED
|
@@ -3022,7 +3022,7 @@ ${G1u.default.cursorShow}`)}releaseCursor(){this.extraLinesUnderPrompt>0&&pFo(th
|
|
|
3022
3022
|
`+z6e.default.red(">> ")+t),this.screen.render(r,n)}getMaskedValue(t){return this.status==="answered"?this.opt.mask?z6e.default.cyan(eTu(t,this.opt.mask)):z6e.default.italic(z6e.default.dim("[hidden]")):this.opt.mask?eTu(t,this.opt.mask):z6e.default.italic(z6e.default.dim("[input is hidden] "))}getSpinningValue(t){return this.getMaskedValue(t)}filterInput(t){return t||(this.opt.default==null?"":this.opt.default)}onEnd(t){this.status="answered",this.answer=t.value,this.render(),this.screen.done(),this.done(t.value)}onError(t){this.render(t.isValid)}onKeypress(){this.opt.default&&=void 0,this.render()}};var q8r=be(Rw(),1);var $Tu=be(WFo(),1),V8r=require("child_process"),Tnt=require("fs"),U8r=be(require("path"),1),eOu=be(require("os"),1),tOu=require("crypto"),Pko=be(XTu(),1);var z8r=class extends Error{originalError;constructor(t){super(`Failed to create temporary file. ${t.message}`),this.originalError=t}};var N4t=class extends Error{originalError;constructor(t){super(`Failed to launch editor. ${t.message}`),this.originalError=t}};var M8r=class extends Error{originalError;constructor(t){super(`Failed to read temporary file. ${t.message}`),this.originalError=t}};var L8r=class extends Error{originalError;constructor(t){super(`Failed to remove temporary file. ${t.message}`),this.originalError=t}};function _8r(e="",t,r){let n=new Dko(e,r);n.runAsync((i,o)=>{if(i)setImmediate(t,i,void 0);else try{n.cleanup(),setImmediate(t,void 0,o)}catch(s){setImmediate(t,s,void 0)}})}function ZTu(e){return e?e.replace(/[^a-zA-Z0-9_.-]/g,"_"):""}function Icm(e){let t=[],r="";for(let n=0;n<e.length;n++){let i=e.charAt(n);n>0&&i===" "&&e[n-1]!=="\\"&&r.length>0?(t.push(r),r=""):r=`${r}${i}`}return r.length>0&&t.push(r),t}var Dko=class{text="";tempFile;editor;lastExitStatus=0;fileOptions={};get temp_file(){return console.log("DEPRECATED: temp_file. Use tempFile moving forward."),this.tempFile}get last_exit_status(){return console.log("DEPRECATED: last_exit_status. Use lastExitStatus moving forward."),this.lastExitStatus}constructor(t="",r){this.text=t,r&&(this.fileOptions=r),this.determineEditor(),this.createTemporaryFile()}run(){return this.launchEditor(),this.readTemporaryFile(),this.text}runAsync(t){try{this.launchEditorAsync(()=>{try{this.readTemporaryFile(),setImmediate(t,void 0,this.text)}catch(r){setImmediate(t,r,void 0)}})}catch(r){setImmediate(t,r,void 0)}}cleanup(){this.removeTemporaryFile()}determineEditor(){let t=process.env.VISUAL?process.env.VISUAL:process.env.EDITOR?process.env.EDITOR:process.platform.startsWith("win")?"notepad":"vim",r=Icm(t).map(i=>i.replace("\\ "," ")),n=r.shift();this.editor={args:r,bin:n}}createTemporaryFile(){try{let t=this.fileOptions.dir??eOu.default.tmpdir(),r=(0,tOu.randomUUID)(),n=ZTu(this.fileOptions.prefix),i=ZTu(this.fileOptions.postfix),o=`${n}${r}${i}`,s=U8r.default.resolve(t,o),a=U8r.default.resolve(t)+U8r.default.sep;if(!s.startsWith(a))throw new Error("Resolved temporary file escaped the base directory");this.tempFile=s;let c={encoding:"utf8",flag:"wx"};Object.prototype.hasOwnProperty.call(this.fileOptions,"mode")&&(c.mode=this.fileOptions.mode),(0,Tnt.writeFileSync)(this.tempFile,this.text,c)}catch(t){throw new z8r(t)}}readTemporaryFile(){try{let t=(0,Tnt.readFileSync)(this.tempFile);if(t.length===0)this.text="";else{let r=(0,$Tu.detect)(t)??"utf8";Pko.default.encodingExists(r)||(r="utf8"),this.text=Pko.default.decode(t,r)}}catch(t){throw new M8r(t)}}removeTemporaryFile(){try{(0,Tnt.unlinkSync)(this.tempFile)}catch(t){throw new L8r(t)}}launchEditor(){try{let t=(0,V8r.spawnSync)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"});this.lastExitStatus=t.status??0}catch(t){throw new N4t(t)}}launchEditorAsync(t){try{(0,V8r.spawn)(this.editor.bin,this.editor.args.concat([this.tempFile]),{stdio:"inherit"}).on("exit",n=>{this.lastExitStatus=n,setImmediate(t)})}catch(r){throw new N4t(r)}}};var rOu=be(HL(),1);var j4t=class extends Fw{_run(t){this.done=t,this.editorResult=new rOu.Subject;let r=EB(this.rl);this.lineSubscription=r.line.subscribe(this.startExternalEditor.bind(this));let n=this.opt.waitUserInput===void 0?!0:this.opt.waitUserInput,i=this.handleSubmitEvents(this.editorResult);return i.success.forEach(this.onEnd.bind(this)),i.error.forEach(this.onError.bind(this)),this.currentText=this.opt.default,this.opt.default=null,n?this.render():this.startExternalEditor(),this}render(t){let r="",n=this.getQuestion();n+=this.status==="answered"?q8r.default.dim("Received"):q8r.default.dim("Press <enter> to launch your preferred editor."),t&&(r=q8r.default.red(">> ")+t),this.screen.render(n,r)}startExternalEditor(){this.rl.pause(),_8r(this.currentText,this.endExternalEditor.bind(this),{postfix:this.opt.postfix??".txt"})}endExternalEditor(t,r){this.rl.resume(),t?this.editorResult.error(t):this.editorResult.next(r)}onEnd(t){this.editorResult.unsubscribe(),this.lineSubscription.unsubscribe(),this.answer=t.value,this.status="answered",this.render(),this.screen.done(),this.done(this.answer)}onError(t){this.render(t.isValid)}};var aOu=require("stream");var oOu=be(require("readline"),1),sOu=be(iOu(),1),V6e=class{constructor(t){this.rl||=oOu.default.createInterface(xcm(t)),this.rl.resume(),this.onForceClose=this.onForceClose.bind(this),process.on("exit",this.onForceClose),this.rl.on("SIGINT",this.onForceClose)}onForceClose(){this.close(),process.kill(process.pid,"SIGINT"),console.log("")}close(){this.rl.removeListener("SIGINT",this.onForceClose),process.removeListener("exit",this.onForceClose),this.rl.output.unmute(),this.activePrompt&&typeof this.activePrompt.close=="function"&&this.activePrompt.close(),this.rl.output.end(),this.rl.pause(),this.rl.close()}};function xcm(e={}){e.skipTTYChecks=e.skipTTYChecks===void 0?!0:e.skipTTYChecks;let t=e.input||process.stdin;if(!e.skipTTYChecks&&!t.isTTY){let i=new Error("Prompts can not be meaningfully rendered in non-TTY environments");throw i.isTtyError=!0,i}let r=new sOu.default;return r.pipe(e.output||process.stdout),{terminal:!0,...e,input:t,output:r}}var Q4t=class extends V6e{constructor(t={}){super(t),this.log=new aOu.Writable({write:(r,n,i)=>{this.writeLog(r),i()}}),this.bottomBar=t.bottomBar||"",this.render()}render(){return this.write(this.bottomBar),this}clean(){return E4t(this.rl,this.bottomBar.split(`
|
|
3023
3023
|
`).length),this}updateBottomBar(t){return E4t(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+`
|
|
3024
3024
|
`}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&&f8r(this.rl,t.length+this.rl.line.length),this.rl.output.write(t)}};var wd=be(HL(),1),lOu=be(X3t(),1);var G8r=be(HL(),1),cOu=be(X3t(),1),W8r=function(e,t,r){return typeof e[t]!="function"?(0,G8r.of)(e):(0,G8r.from)((0,cOu.default)(e[t])(r).then(n=>(e[t]=n,e)))};var uOu={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}},Ont=class extends V6e{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,wd.from)(t):(0,wd.isObservable)(t)?n=t:Object.values(t).every(i=>typeof i=="object"&&!Array.isArray(i)&&i!=null)?n=(0,wd.from)(Object.entries(t).map(([i,o])=>({name:i,...o}))):n=(0,wd.from)([t]),this.process=n.pipe((0,wd.concatMap)(this.processQuestion.bind(this)),(0,wd.publish)()),this.process.connect(),this.process.pipe((0,wd.reduce)((i,o)=>(uOu.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,wd.defer)(()=>(0,wd.of)(t).pipe((0,wd.concatMap)(this.setDefaultType.bind(this)),(0,wd.concatMap)(this.filterIfRunnable.bind(this)),(0,wd.concatMap)(()=>W8r(t,"message",this.answers)),(0,wd.concatMap)(()=>W8r(t,"default",this.answers)),(0,wd.concatMap)(()=>W8r(t,"choices",this.answers)),(0,wd.concatMap)(this.fetchAnswer.bind(this))))}fetchAnswer(t){let r=this.prompts[t.type];return this.activePrompt=new r(t,this.rl,this.answers),(0,wd.defer)(()=>(0,wd.from)(this.activePrompt.run().then(n=>({name:t.name,answer:n}))))}setDefaultType(t){return this.prompts[t.type]||(t.type="input"),(0,wd.defer)(()=>(0,wd.of)(t))}filterIfRunnable(t){if(t.askAnswered!==!0&&uOu.get(this.answers,t.name)!==void 0)return wd.EMPTY;if(t.when===!1)return wd.EMPTY;if(typeof t.when!="function")return(0,wd.of)(t);let{answers:r}=this;return(0,wd.defer)(()=>(0,wd.from)((0,lOu.default)(t.when)(r).then(n=>{if(n)return t})).pipe((0,wd.filter)(n=>n!=null)))}};function pOu(e){let t=function(r,n){let i;try{i=new Ont(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",v4t),this.registerPrompt("input",Q6e),this.registerPrompt("number",x4t),this.registerPrompt("confirm",C4t),this.registerPrompt("rawlist",w4t),this.registerPrompt("expand",S4t),this.registerPrompt("checkbox",T4t),this.registerPrompt("password",O4t),this.registerPrompt("editor",j4t)},t.restoreDefaultPrompts(),t}var Fko=pOu();function wcm(e,t){Fko.registerPrompt(e,t)}function Scm(){Fko.restoreDefaultPrompts()}var Tcm={prompt:Fko,ui:{BottomBar:Q4t,Prompt:Ont},createPromptModule:pOu,registerPrompt:wcm,restoreDefaultPrompts:Scm,Separator:NQ},cu=Tcm;var Bnt=require("path");function dOu(){let e=Ocm();return async t=>{for(let r of t)r.module=e(r.filename);return t}}function Ocm(e=process.argv[1]?(0,Bnt.dirname)(process.argv[1]):process.cwd(),t=Bnt.sep==="\\"){let r=t?fOu(e):e;return n=>{if(!n)return;let i=t?fOu(n):n,{dir:o,base:s,ext:a}=Bnt.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 fOu(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var kko=e=>{if("flags"in e){let t=mOu(e.flags),r=hOu(e.flags);return{...e,featureFlags:t,featureFlagPayloads:r}}{let t=e.featureFlags??{},r=Object.fromEntries(Object.entries(e.featureFlagPayloads||{}).map(([i,o])=>[i,Nko(o)])),n=Object.fromEntries(Object.entries(t).map(([i,o])=>[i,Bcm(i,o,r[i])]));return{...e,featureFlags:t,featureFlagPayloads:r,flags:n}}};function Bcm(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 mOu=e=>Object.fromEntries(Object.entries(e??{}).map(([t,r])=>[t,z4t(r)]).filter(([,t])=>t!==void 0)),hOu=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?Nko(n):void 0]}))};var z4t=e=>e===void 0?void 0:e.variant??e.enabled,Nko=e=>{if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}};var Wk=(function(e){return e.AnonymousId="anonymous_id",e.DistinctId="distinct_id",e.Props="props",e.EnablePersonProcessing="enable_person_processing",e.PersonMode="person_mode",e.FeatureFlagDetails="feature_flag_details",e.FeatureFlags="feature_flags",e.FeatureFlagPayloads="feature_flag_payloads",e.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",e.BootstrapFeatureFlags="bootstrap_feature_flags",e.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",e.OverrideFeatureFlags="override_feature_flags",e.Queue="queue",e.LogsQueue="logs_queue",e.OptedOut="opted_out",e.SessionId="session_id",e.SessionStartTimestamp="session_start_timestamp",e.SessionLastTimestamp="session_timestamp",e.PersonProperties="person_properties",e.GroupProperties="group_properties",e.InstalledAppBuild="installed_app_build",e.InstalledAppVersion="installed_app_version",e.SessionReplay="session_replay",e.SurveyLastSeenDate="survey_last_seen_date",e.SurveysSeen="surveys_seen",e.Surveys="surveys",e.RemoteConfig="remote_config",e.FlagsEndpointWasHit="flags_endpoint_was_hit",e.DeviceId="device_id",e})({});function jko(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var Dcm="NativeGzipValidationError",Rcm=31,Fcm=139,kcm=8,Ncm=e=>e.length>=2&&e[0]===Rcm&&e[1]===Fcm;var M4t,jcm=()=>{if(M4t)return M4t;M4t=[];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;M4t[e]=t>>>0}return M4t},Qcm=e=>{let t=jcm(),r=4294967295;for(let n=0;n<e.length;n++)r=t[(r^e[n])&255]^r>>>8;return(4294967295^r)>>>0},H8r=e=>{let t=new Error(`Native gzip produced invalid output: ${e}`);throw t.name=Dcm,t},zcm=async(e,t)=>{e.size<18&&H8r("too-short");let r=new Uint8Array(await e.slice(0,10).arrayBuffer());(!Ncm(r)||r[2]!==kcm)&&H8r("invalid-header");let n=new DataView(await e.slice(e.size-8).arrayBuffer());n.getUint32(0,!0)!==Qcm(t)&&H8r("invalid-crc");let i=t.length>>>0;n.getUint32(4,!0)!==i&&H8r("invalid-size")};async function L4t(e,t=!0,r){try{let n=new TextEncoder().encode(e),i=new CompressionStream("gzip"),o=i.writable.getWriter(),s=o.write(n).then(()=>o.close()).catch(async u=>{try{await o.abort(u)}catch{}throw u}),a=new Response(i.readable).blob(),[c]=await Promise.all([a,s]);return await zcm(c,n),c}catch(n){if(r?.rethrow)throw n;return t&&console.error("Failed to gzip compress data",n),null}}var Mcm=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterest","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],gOu=function(e,t=[]){if(!e)return!1;let r=e.toLowerCase();return Mcm.concat(t).some(n=>{let i=n.toLowerCase();return r.indexOf(i)!==-1})};var Ucm=Array.isArray,AOu=Object.prototype,$lI=AOu.hasOwnProperty,Qko=AOu.toString,Pnt=Ucm||function(e){return Qko.call(e)==="[object Array]"};var U4t=e=>e===Object(e)&&!Pnt(e);var Dnt=e=>e===void 0,hve=e=>Qko.call(e)=="[object String]",yOu=e=>hve(e)&&e.trim().length===0;var V4t=e=>Qko.call(e)=="[object Number]"&&e===e;var zko=e=>e instanceof Error;function K8r(e){return e===null||typeof e!="object"}function _6e(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function bOu(e){return _6e(e,"ErrorEvent")}function Rnt(e){return typeof Event<"u"&&Vcm(e,Event)}function EOu(e){return _6e(e,"Object")}function Vcm(e,t){try{return e instanceof t}catch{return!1}}function _4t(e,t,r,n,i){return t>r&&(n.warn("min cannot be greater than max."),t=r),V4t(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),_4t(i||r,t,r,n))}var _cm=864e5,J8r=class{constructor(t){this._buckets={},this._onBucketRateLimited=t._onBucketRateLimited,this._bucketSize=_4t(t.bucketSize,0,100,t._logger),this._refillRate=_4t(t.refillRate,0,this._bucketSize,t._logger),this._refillInterval=_4t(t.refillInterval,0,_cm,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 Y8r="0123456789abcdef",X8r=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+=Y8r.charAt(this.bytes[r]>>>4),t+=Y8r.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+=Y8r.charAt(this.bytes[r]>>>4),t+=Y8r.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}},Mko=class{constructor(t){this.timestamp=0,this.counter=0,this.random=t??qcm()}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 X8r.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,X8r.ofInner(t)}},qcm=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())}),IOu,cee=()=>Gcm().toString(),Gcm=()=>(IOu||(IOu=new Mko)).generate();var Z8r=class{add(t){let r=cee();return this.promiseByIds[r]=t,t.catch(()=>{}).finally(()=>{delete this.promiseByIds[r]}),t}async join(){let t=Object.values(this.promiseByIds),r=t.length;for(;r>0;)await Promise.all(t),t=Object.values(this.promiseByIds),r=t.length}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={}}};function Wcm(e=console){return{log:e.log.bind(e),warn:e.warn.bind(e),error:e.error.bind(e),debug:e.debug.bind(e)}}var vOu=(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=>vOu(`${e} ${o}`,t,r)}},Hcm=e=>e();function xOu(e,t=Hcm){return vOu(e,t,Wcm())}var knt="Mobile",e9r="iOS",Fnt="Android",COu="Tablet",ppI=Fnt+" "+COu;var Jcm="Apple",fpI=Jcm+" Watch",wOu="Safari",t9r="BlackBerry",SOu="Samsung",Ycm=SOu+"Browser",Xcm=SOu+" Internet",r9r="Chrome",Zcm=r9r+" OS",$cm=r9r+" "+e9r,TOu="Internet Explorer",eum=TOu+" "+knt,Uko="Opera",dpI=Uko+" Mini",OOu="Edge",tum="Microsoft "+OOu,Vko="Firefox",rum=Vko+" "+e9r,_ko="Nintendo",qko="PlayStation",$8r="Xbox",num=Fnt+" "+knt,ium=knt+" "+wOu,q4t="Windows",oum=q4t+" Phone";var BOu="Generic",mpI=BOu+" "+knt.toLowerCase(),hpI=BOu+" "+COu.toLowerCase(),sum="Konqueror",aum="Oculus Browser",SD="(\\d+(\\.\\d+)?)",Lko=new RegExp("Version/"+SD),gpI=new RegExp($8r,"i"),ApI=new RegExp(qko+" \\w+","i"),ypI=new RegExp(_ko+" \\w+","i"),cum=new RegExp(t9r+"|PlayBook|BB10","i"),uum={"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 bpI={[eum]:[new RegExp("rv:"+SD)],[tum]:[new RegExp(OOu+"?\\/"+SD)],[r9r]:[new RegExp("("+r9r+"|CrMo)\\/"+SD)],[$cm]:[new RegExp("CriOS\\/"+SD)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+SD)],[wOu]:[Lko],[ium]:[Lko],[Uko]:[new RegExp("("+Uko+"|OPR)\\/"+SD)],[Vko]:[new RegExp(Vko+"\\/"+SD)],[rum]:[new RegExp("FxiOS\\/"+SD)],[sum]:[new RegExp("Konqueror[:/]?"+SD,"i")],[t9r]:[new RegExp(t9r+" "+SD),Lko],[num]:[new RegExp("android\\s"+SD,"i")],[Xcm]:[new RegExp(Ycm+"\\/"+SD)],[aum]:[new RegExp("OculusBrowser\\/"+SD)],[TOu]:[new RegExp("(rv:|MSIE )"+SD)],Mozilla:[new RegExp("rv:"+SD)]};var EpI=[[new RegExp($8r+"; "+$8r+" (.*?)[);]","i"),e=>[$8r,e&&e[1]||""]],[new RegExp(_ko,"i"),[_ko,""]],[new RegExp(qko,"i"),[qko,""]],[cum,[t9r,""]],[new RegExp(q4t,"i"),(e,t)=>{if(/Phone/.test(t)||/WPDesktop/.test(t))return[oum,""];if(new RegExp(knt).test(t)&&!/IEMobile\b/.test(t))return[q4t+" "+knt,""];let r=/Windows NT ([0-9.]+)/i.exec(t);if(r&&r[1]){let n=r[1],i=uum[n]||"";return/arm/i.test(t)&&(i="RT"),[q4t,i]}return[q4t,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,e=>{if(e&&e[3]){let t=[e[3],e[4],e[5]||"0"];return[e9r,t.join(".")]}return[e9r,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,e=>{let t="";return e&&e.length>=3&&(t=Dnt(e[2])?e[3]:e[2]),["watchOS",t]}],[new RegExp("("+Fnt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Fnt+")","i"),e=>{if(e&&e[2]){let t=[e[2],e[3],e[4]||"0"];return[Fnt,t.join(".")]}return[Fnt,""]}],[/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/,[Zcm,""]],[/Linux|debian/i,["Linux",""]]];var POu="utf8";function DOu(e){return e?.replace(/\/+$/,"")}async function ROu(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 n9r(){return new Date().toISOString()}function uee(e,t){let r=setTimeout(e,t);return r?.unref&&r?.unref(),r}var FOu=e=>e instanceof Error;function Gko(e){return Promise.all(e.map(t=>(t??Promise.resolve()).then(r=>({status:"fulfilled",value:r}),r=>({status:"rejected",reason:r}))))}var lum={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}},kpI=lum.info;var i9r=class{constructor(){this.events={},this.events={}}on(t,r){return this.events[t]||(this.events[t]=[]),this.events[t].push(r),()=>{this.events[t]=this.events[t].filter(n=>n!==r)}}emit(t,r){for(let n of this.events[t]||[])n(r);for(let n of this.events["*"]||[])n(t,r)}};var G6e=class extends Error{constructor(t,r){super("HTTP error while fetching PostHog: status="+t.status+", reqByteLength="+r),this.response=t,this.reqByteLength=r,this.name="PostHogFetchHttpError"}get status(){return this.response.status}get text(){return this.response.text()}get json(){return this.response.json()}},q6e=class extends Error{constructor(t){super("Network error while fetching PostHog",t instanceof Error?{cause:t}:{}),this.error=t,this.name="PostHogFetchNetworkError"}};async function kOu(e){if(e instanceof G6e){let t="";try{t=await e.text}catch{}console.error(`Error while flushing PostHog: message=${e.message}, response body=${t}`,e)}else console.error("Error while flushing PostHog",e);return Promise.resolve()}function o9r(e){return typeof e=="object"&&(e instanceof G6e||e instanceof q6e)}function s9r(e){return typeof e=="object"&&e instanceof G6e&&e.status===413}var G4t=class{constructor(t,r={}){this.flushPromise=null,this.shutdownPromise=null,this.promiseQueue=new Z8r,this._events=new i9r,this._isInitialized=!1;let n=typeof t=="string"?t.trim():"",i=typeof r.host=="string"?r.host.trim():"",o=!n;this._logger=xOu("[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=DOu(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:o9r},this.requestTimeout=r.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=r.featureFlagsRequestTimeoutMs??3e3,this.remoteConfigRequestTimeoutMs=r.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=r.disableGeoip??!0,this.disabled=(r.disabled??!1)||o,this.historicalMigration=r?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=r?.evaluationContexts??r?.evaluationEnvironments,r?.evaluationEnvironments&&!r?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!jko()||(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(Wk.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(Wk.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(Wk.OptedOut,!0)})}on(t,r){return this._events.on(t,r)}debug(t=!0){if(this.removeDebugCallback?.(),t){let r=this.on("*",(n,i)=>this._logger.info(n,i));this.removeDebugCallback=()=>{r(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(t){return{distinct_id:t.distinct_id,event:t.event,properties:{...t.properties||{},...this.getCommonEventProperties()}}}addPendingPromise(t){return this.promiseQueue.add(t)}identifyStateless(t,r,n){this.wrap(()=>{let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};this.enqueue("identify",i,n)})}async identifyStatelessImmediate(t,r,n){let i={...this.buildPayload({distinct_id:t,event:"$identify",properties:r})};await this.sendImmediate("identify",i,n)}captureStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({distinct_id:t,event:r,properties:n});this.enqueue("capture",o,i)})}async captureStatelessImmediate(t,r,n,i){let o=this.buildPayload({distinct_id:t,event:r,properties:n});await this.sendImmediate("capture",o,i)}aliasStateless(t,r,n,i){this.wrap(()=>{let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});this.enqueue("alias",o,i)})}async aliasStatelessImmediate(t,r,n,i){let o=this.buildPayload({event:"$create_alias",distinct_id:r,properties:{...n||{},distinct_id:r,alias:t}});await this.sendImmediate("alias",o,i)}groupIdentifyStateless(t,r,n,i,o,s){this.wrap(()=>{let a=this.buildPayload({distinct_id:o||`$${t}_${r}`,event:"$groupidentify",properties:{$group_type:t,$group_key:r,$group_set:n||{},...s||{}}});this.enqueue("capture",a,i)})}async getRemoteConfig(){await this._initPromise;let t=this.host;t==="https://us.i.posthog.com"?t="https://us-assets.i.posthog.com":t==="https://eu.i.posthog.com"&&(t="https://eu-assets.i.posthog.com");let r=`${t}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(r,n,{retryCount:0},this.remoteConfigRequestTimeoutMs).then(i=>i.json()).catch(i=>{this._logger.error("Remote config could not be loaded",i),this._events.emit("error",i)})}async getFlags(t,r={},n={},i={},o={},s=!1){await this._initPromise;let a=s?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,u={token:this.apiKey,distinct_id:t,groups:r,person_properties:n,group_properties:i,...o};n.$device_id&&(u.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(u.evaluation_contexts=this.evaluationContexts);let l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(u)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,l,{retryCount:0},this.featureFlagsRequestTimeoutMs).then(p=>p.json()).then(p=>({success:!0,response:kko(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(t){if(t instanceof G6e)return{type:"api_error",statusCode:t.status};if(t instanceof q6e){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=z4t(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(r,n,i,o,s,[t]);return a===void 0?void 0:{response:a.flags[t],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(t,r,n={},i={},o={},s){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(r,n,i,o,s,[t]);if(!a)return;let c=a[t];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(t,r={},n={},i={},o,s){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)).payloads}async getFeatureFlagsStateless(t,r={},n={},i={},o,s){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(t,r,n,i,o,s)}async getFeatureFlagsAndPayloadsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,r,n,i,o,s);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(t,r={},n={},i={},o,s){await this._initPromise;let a={};(o??this.disableGeoip)&&(a.geoip_disable=!0),s&&(a.flag_keys_to_evaluate=s);let c=await this.getFlags(t,r,n,i,a);if(!c.success)return;let u=c.response;return u.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),u.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:u?.requestId,quotaLimited:u.quotaLimited}):u}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let t=`${this.host}/api/surveys/?token=${this.apiKey}`,r={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},i=(await this.fetchWithRetry(t,r).then(o=>{if(o.status!==200||!o.json){let s=`Surveys API could not be loaded: ${o.status}`,a=new Error(s);this._logger.error(a),this._events.emit("error",new Error(s));return}return o.json()}).catch(o=>{this._logger.error("Surveys API could not be loaded",o),this._events.emit("error",o)}))?.surveys;return i&&this._logger.info("Surveys fetched from API: ",JSON.stringify(i)),i??[]}get props(){return this._props||(this._props=this.getPersistedProperty(Wk.Props)),this._props||{}}set props(t){this._props=t}async register(t){this.wrap(()=>{this.props={...this.props,...t},this.setPersistedProperty(Wk.Props,this.props)})}async unregister(t){this.wrap(()=>{delete this.props[t],this.setPersistedProperty(Wk.Props,this.props)})}processBeforeEnqueue(t){return t}async flushStorage(){}enqueue(t,r,n){this.wrap(()=>{if(this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o=this.getPersistedProperty(Wk.Queue)||[];o.length>=this.maxQueueSize&&(o.shift(),this._logger.info("Queue is full, the oldest event is dropped.")),o.push({message:i}),this.setPersistedProperty(Wk.Queue,o),this._events.emit(t,i),o.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=uee(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(t,r,n){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(t,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,r,n);if(i=this.processBeforeEnqueue(i),i===null)return;let o={api_key:this.apiKey,batch:[i],sent_at:n9r()};this.historicalMigration&&(o.historical_migration=!0);let s=JSON.stringify(o),a=`${this.host}/batch/`,c=this.disableCompression?null:await L4t(s,this.isDebug),u={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...c!==null&&{"Content-Encoding":"gzip"}},body:c||s};try{await(await this.fetchWithRetry(a,u)).body?.cancel()?.catch(()=>{})}catch(l){this._events.emit("error",l)}}prepareMessage(t,r,n){let i={...r,type:t,library:this.getLibraryId(),library_version:this.getLibraryVersion(),timestamp:n?.timestamp?n?.timestamp:n9r(),uuid:n?.uuid?n.uuid:cee()};return(n?.disableGeoip??this.disableGeoip)&&(i.properties||(i.properties={}),i.properties.$geoip_disable=!0),i.distinctId&&(i.distinct_id=i.distinctId,delete i.distinctId),i}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.flush().catch(async t=>{await kOu(t)})}async flush(){if(this.disabled)return;let t=Gko([this.flushPromise]).then(()=>this._flush());return this.flushPromise=t,this.addPendingPromise(t),Gko([t]).then(()=>{this.flushPromise===t&&(this.flushPromise=null)}),t}getCustomHeaders(){let t=this.getCustomUserAgent(),r={};return t&&t!==""&&(r["User-Agent"]=t),r}async _flush(){this.clearFlushTimer(),await this._initPromise;let t=this.getPersistedProperty(Wk.Queue)||[];if(!t.length)return;let r=[],n=t.length;for(;t.length>0&&r.length<n;){let i=t.slice(0,this.maxBatchSize),o=i.map(f=>f.message),s=async()=>{let m=(this.getPersistedProperty(Wk.Queue)||[]).slice(i.length);this.setPersistedProperty(Wk.Queue,m),t=m,await this.flushStorage()},a={api_key:this.apiKey,batch:o,sent_at:n9r()};this.historicalMigration&&(a.historical_migration=!0);let c=JSON.stringify(a),u=`${this.host}/batch/`,l=this.disableCompression?null:await L4t(c,this.isDebug),p={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...l!==null&&{"Content-Encoding":"gzip"}},body:l||c},d={retryCheck:f=>s9r(f)?!1:o9r(f)};try{await(await this.fetchWithRetry(u,p,d)).body?.cancel()?.catch(()=>{})}catch(f){if(s9r(f)&&o.length>1){this.maxBatchSize=Math.max(1,Math.floor(o.length/2)),this._logger.warn(`Received 413 when sending batch of size ${o.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw f instanceof q6e||await s(),this._events.emit("error",f),f}await s(),r.push(...o)}this._events.emit("flush",r)}async _sendLogsBatch(t){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let r=JSON.stringify(t),n=`${this.host}/i/v1/logs?token=${encodeURIComponent(this.apiKey)}`,i=this.disableCompression?null:await L4t(r,this.isDebug),o={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...i!==null&&{"Content-Encoding":"gzip"}},body:i||r};try{return await this.fetchWithRetry(n,o,{retryCheck:s=>s9r(s)?!1:o9r(s)}),{kind:"ok"}}catch(s){return s9r(s)?{kind:"too-large"}:s instanceof q6e?{kind:"retry-later",error:s}:{kind:"fatal",error:s}}}async fetchWithRetry(t,r,n,i){let o=r.body?r.body:"",s=-1;try{s=o instanceof Blob?o.size:Buffer.byteLength(o,POu)}catch{o instanceof Blob?s=o.size:s=new TextEncoder().encode(o).length}return await ROu(async()=>{let a=new AbortController,c=i??this.requestTimeout,u=uee(()=>a.abort(),c),l=null;try{l=await this.fetch(t,{signal:a.signal,...r})}catch(d){throw new q6e(d)}finally{clearTimeout(u)}if(!(r.mode==="no-cors")&&(l.status<200||l.status>=400))throw new G6e(l,s);return l},{...this._retryOptions,...n})}async _shutdown(t=3e4){await this._initPromise;let r=!1;if(this.clearFlushTimer(),this.disabled)return;let n=async()=>{try{for(await this.promiseQueue.join();!((this.getPersistedProperty(Wk.Queue)||[]).length===0||(await this.flush(),r)););}catch(o){if(!o9r(o))throw o;await kOu(o)}},i;try{return await Promise.race([new Promise((o,s)=>{i=uee(()=>{this._logger.error("Timed out while shutting down PostHog"),r=!0,s("Timeout while shutting down PostHog. Some events may not have been sent.")},t)}),n()])}finally{clearTimeout(i)}}async shutdown(t=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(t).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var QQ={};X(QQ,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>p9r,DOMExceptionCoercer:()=>Jko,EXCEPTION_STEP_INTERNAL_FIELDS:()=>W4t,ErrorCoercer:()=>Yko,ErrorEventCoercer:()=>Xko,ErrorPropertiesBuilder:()=>Wko,EventCoercer:()=>e2o,ExceptionStepsBuffer:()=>o2o,ObjectCoercer:()=>$ko,PrimitiveCoercer:()=>t2o,PromiseRejectionEventCoercer:()=>r2o,ReduceableCache:()=>n2o,StringCoercer:()=>Zko,chromeStackLineParser:()=>Hko,createDefaultStackParser:()=>Tum,createStackParser:()=>GOu,geckoStackLineParser:()=>Kko,getUtf8ByteLength:()=>HOu,nodeStackLineParser:()=>UOu,opera10StackLineParser:()=>zOu,opera11StackLineParser:()=>MOu,resolveExceptionStepsConfig:()=>i2o,reverseAndStripFrames:()=>qOu,stripReservedExceptionStepFields:()=>Pum,winjsStackLineParser:()=>QOu});var a9r,NOu,c9r;function jOu(e){let t=globalThis._posthogChunkIds;if(!t)return;let r=Object.keys(t);return c9r&&r.length===NOu||(NOu=r.length,c9r=r.reduce((n,i)=>{a9r||(a9r={});let o=a9r[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,a9r[i]=[u,l];break}}}return n},{})),c9r}var mum=4,Wko=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&&Pnt(r.stacktrace.frames)&&(r.stacktrace.frames=await this.applyModifiers(r.stacktrace.frames));return t}coerceFallback(t){return{type:"Error",value:"Unknown error",stack:t.syntheticException?.stack,synthetic:!0}}parseStacktrace(t,r){let n;t.cause!=null&&(n=this.parseStacktrace(t.cause,r));let i;return t.stack!=""&&t.stack!=null&&(i=this.applyChunkIds(this.stackParser(t.stack,t.synthetic?r.skipFirstLines:0),r.chunkIdMap)),{...t,cause:n,stack:i}}applyChunkIds(t,r){return t.map(n=>(n.filename&&r&&(n.chunk_id=r[n.filename]),n))}applyCoercers(t,r){for(let n of this.coercers)if(n.match(t))return n.coerce(t,r);return this.coerceFallback(r)}async applyModifiers(t){let r=t;for(let n of this.modifiers)r=await n(r);return r}convertToExceptionList(t,r){let n={type:t.type,value:t.value,mechanism:{type:r.type??"generic",handled:r.handled??!0,synthetic:t.synthetic??!1}};t.stack&&(n.stacktrace={type:"raw",frames:t.stack});let i=[n];return t.cause!=null&&i.push(...this.convertToExceptionList(t.cause,{...r,handled:!0})),i}buildParsingContext(t){return{chunkIdMap:jOu(this.stackParser),skipFirstLines:t.skipFirstLines??1}}buildCoercingContext(t,r,n=0){let i=(s,a)=>{if(a<=mum){let c=this.buildCoercingContext(t,r,a);return this.applyCoercers(s,c)}};return{...r,syntheticException:n==0?r.syntheticException:void 0,mechanism:t,apply:s=>i(s,n),next:s=>i(s,n+1)}}};var vB="?";function lee(e,t,r,n,i){let o={platform:e,filename:t,function:r==="<anonymous>"?vB:r,in_app:!0};return Dnt(n)||(o.lineno=n),Dnt(i)||(o.colno=i),o}var u9r=(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]:vB,r?`safari-extension:${t}`:`safari-web-extension:${t}`]:[e,t]};var hum=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,gum=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Aum=/\((\S*)(?::(\d+))(?::(\d+))\)/,Hko=(e,t)=>{let r=hum.exec(e);if(r){let[,i,o,s]=r;return lee(t,i,vB,+o,+s)}let n=gum.exec(e);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Aum.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[o,s]=u9r(n[1]||vB,n[2]);return lee(t,s,o,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var yum=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,bum=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Kko=(e,t)=>{let r=yum.exec(e);if(r){if(r[3]&&r[3].indexOf(" > eval")>-1){let s=bum.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]||vB;return[o,i]=u9r(o,i),lee(t,i,o,r[4]?+r[4]:void 0,r[5]?+r[5]:void 0)}};var Eum=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,QOu=(e,t)=>{let r=Eum.exec(e);return r?lee(t,r[2],r[1]||vB,+r[3],r[4]?+r[4]:void 0):void 0};var Ium=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,zOu=(e,t)=>{let r=Ium.exec(e);return r?lee(t,r[2],r[3]||vB,+r[1]):void 0},vum=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,MOu=(e,t)=>{let r=vum.exec(e);return r?lee(t,r[5],r[3]||r[4]||vB,+r[1],+r[2]):void 0};var xum=/^\s*[-]{4,}$/,Cum=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,UOu=(e,t)=>{let r=e.match(Cum);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||vB,o=s?`${s}.${a}`:a);let c=r[2]?.startsWith("file://")?r[2].slice(7):r[2],u=r[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&r[5]&&!u&&(c=r[5]),{filename:c?decodeURI(c):void 0,module:void 0,function:o,lineno:LOu(r[3]),colno:LOu(r[4]),in_app:wum(c||"",u),platform:t}}if(e.match(xum))return{filename:e,platform:t}};function wum(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 LOu(e){return parseInt(e||"",10)||void 0}var VOu=/\(error: (.*)\)/,_Ou=50;function qOu(e){if(!e.length)return[];let t=Array.from(e);return t.reverse(),t.slice(0,_Ou).map(r=>({...r,filename:r.filename||Sum(t).filename,function:r.function||vB}))}function Sum(e){return e[e.length-1]||{}}function Tum(){return GOu("web:javascript",Hko,Kko)}function GOu(e,...t){return(r,n=0)=>{let i=[],o=r.split(`
|
|
3025
|
-
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=VOu.test(a)?a.replace(VOu,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=_Ou)break}}return qOu(i)}}var Jko=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=hve(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 _6e(t,"DOMException")}isDOMError(t){return _6e(t,"DOMError")}};var Yko=class{match(t){return zko(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var Xko=class{constructor(){}match(t){return bOu(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var Oum=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,Zko=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(Oum);return i&&(r=i[1],n=i[2]),[r,n]}};var WOu=["fatal","error","warning","log","info","debug"];function l9r(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 $ko=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return Rnt(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=l9r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return hve(t)&&!yOu(t)&&WOu.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(FOu(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var e2o=class{match(t){return Rnt(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${l9r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var t2o=class{match(t){return K8r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var r2o=class{match(t){return _6e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Rnt(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 K8r(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 n2o=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 W4t={MESSAGE:"$message",TIMESTAMP:"$timestamp"},Bum=new Set([W4t.MESSAGE,W4t.TIMESTAMP]),p9r={enabled:!0,max_bytes:32768};function i2o(e){return e?{enabled:e.enabled??p9r.enabled,max_bytes:Dum(e.max_bytes,p9r.max_bytes)}:{...p9r}}function Pum(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>Bum.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var o2o=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=i2o(t)}setConfig(t){this._config=i2o(t),this._trimToMaxBytes()}add(t){let r=Rum(t);if(!r)return;let n=HOu(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 Dum(e,t){if(!V4t(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function Rum(e){let t=Fum(e);if(t)try{let r=JSON.parse(t);if(!U4t(r))return;let n=r,i=n[W4t.MESSAGE],o=n[W4t.TIMESTAMP];return!hve(i)||i.trim().length===0||!hve(o)&&!V4t(o)?void 0:{step:n,json:t}}catch{return}}function Fum(e){let t=new WeakSet;try{return JSON.stringify(e,(r,n)=>{if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Date)return n.toISOString();if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){if(t.has(n))return"[Circular]";t.add(n)}return n}})}catch{return}}function HOu(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e).length;let t=encodeURIComponent(e),r=0;for(let n=0;n<t.length;n++)t[n]==="%"?(r+=1,n+=2):r+=1;return r}var YOu=require("fs"),XOu=require("readline"),f9r=new QQ.ReduceableCache(25),ZOu=new QQ.ReduceableCache(20),s2o=7,kum=1e3,Num=1e4;async function $Ou(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||Mum(s)||Lum(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(ZOu.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=Vum(o);if(s.every(c=>Uum(i,c)))continue;let a=_um(f9r,i,{});n.push(jum(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&Qum(e,f9r),f9r.reduce(),e}function jum(e,t,r){return new Promise(n=>{let i=(0,YOu.createReadStream)(e),o=(0,XOu.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){ZOu.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=qum(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function Qum(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;zum(r.lineno,r,n)}}function zum(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=eBu(e);i<e;i++){let o=r[i];if(o===void 0)return void KOu(t);t.pre_context.push(o)}if(r[e]===void 0)return void KOu(t);t.context_line=r[e];let n=tBu(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 KOu(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Mum(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Lum(e){return e.lineno!==void 0&&e.lineno>Num||e.colno!==void 0&&e.colno>kum}function Uum(e,t){let r=f9r.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 Vum(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=JOu(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+s2o:(i.push(n),n=JOu(o)),t++}return i}function JOu(e){return[eBu(e),tBu(e)]}function eBu(e){return Math.max(1,e-s2o)}function tBu(e){return e+s2o}function _um(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function qum(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 Nnt=require("path");function rBu(e=process.cwd()){let t=Nnt.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,Nnt.isAbsolute)(o.filename)&&(o.filename=r((0,Nnt.relative)(n,r(o.filename))));return i}}function Gum(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function nBu(e,t){globalThis.process?.on("uncaughtException",Gum(e,t))}function iBu(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Wum=2e3,tH=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new J8r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return U4t(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(nBu(this.onException.bind(this),this.onFatalError.bind(this)),iBu(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(Wum),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var oBu="5.35.1";var ife={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var jnt=class e{constructor(t){this._host=t.host,this._distinctId=t.distinctId,this._groups=t.groups,this._disableGeoip=t.disableGeoip,this._flags=t.flags,this._requestId=t.requestId,this._evaluatedAt=t.evaluatedAt,this._flagDefinitionsLoadedAt=t.flagDefinitionsLoadedAt,this._errorsWhileComputing=t.errorsWhileComputing??!1,this._quotaLimited=t.quotaLimited??!1,this._accessed=t.accessed??new Set,this._isSlice=t.isSlice??!1}isEnabled(t){let r=this._flags[t];return this._recordAccess(t),r?.enabled??!1}getFlag(t){let r=this._flags[t];if(this._recordAccess(t),!!r)return r.enabled?r.variant??!0:!1}getFlagPayload(t){return this._flags[t]?.payload}onlyAccessed(){let t={};for(let r of this._accessed){let n=this._flags[r];n&&(t[r]=n)}return this._cloneWith(t)}only(t){let r={},n=[];for(let i of t){let o=this._flags[i];o?r[i]=o:n.push(i)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(r)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let t={},r=[];for(let[n,i]of Object.entries(this._flags)){let o=i.enabled===!1?!1:i.variant??!0;t[`$feature/${n}`]=o,i.enabled&&r.push(n)}return r.length>0&&(r.sort(),t.$active_feature_flags=r),t}_cloneWith(t){return new e({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:t,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(t){if(this._accessed.add(t),this._distinctId===""||this._isSlice&&!(t in this._flags))return;let r=this._flags[t],n=r===void 0?void 0:r.enabled===!1?!1:r.variant??!0,i={$feature_flag:t,$feature_flag_response:n,$feature_flag_id:r?.id,$feature_flag_version:r?.version,$feature_flag_reason:r?.reason,locally_evaluated:r?.locallyEvaluated??!1,[`$feature/${t}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:r?.locallyEvaluated?Date.now():this._evaluatedAt};r?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(i.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let o=[];this._errorsWhileComputing&&o.push(ife.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(ife.QUOTA_LIMITED),r===void 0&&o.push(ife.FLAG_MISSING),o.length>0&&(i.$feature_flag_error=o.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:t,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:i})}};async function sBu(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var Hum=6e4,Kum=1152921504606847e3,Jum=["is_not","is_set"],Qnt=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Sd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},pee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},d9r=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof pee||u instanceof Sd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof pee||u instanceof Sd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(!t.active)return!1;if(t.ensure_experience_continuity)throw new Sd("Flag has experience continuity enabled");let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Sd("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 Sd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Sd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Sd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Sd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Sd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Sd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Sd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Sd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=o.aggregation_group_type_index,{groups:c,groupProperties:u}=i,l=!1,p;for(let d of s)try{let f=d.aggregation_group_type_index!==void 0?d.aggregation_group_type_index:a,m=n,g=r;if(f!==a&&f!=null){let A=this.groupTypeMapping[String(f)];if(!A||!(A in c)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${t.key}': group type index ${f} not available`));continue}if(!(A in u)){l=!0;continue}m=u[A],g=c[A]}if(await this.isConditionMatch(t,g,d,m,i)){let A=d.variant,y=o.multivariate?.variants||[];p=A&&y.some(E=>E.key===A)?A:await this.getMatchingVariant(t,g)||!0;break}}catch(f){if(f instanceof pee)throw f;if(f instanceof Sd)l=!0;else throw f}if(p!==void 0)return p;if(l)throw new Sd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?await pBu(c,i,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,i,o)):u==="flag"?await this.evaluateFlagDependency(c,i,o):lBu(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await aBu(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await aBu(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(Hum,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Qnt(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new Qnt(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Qnt(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof Qnt&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=uee(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function aBu(e,t,r=""){let n=await sBu(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/Kum}function lBu(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")return!1}else{if(o==="is_not_set")return!0;throw new Sd(`Property ${n} not found in propertyValues`)}let s=t[n];if(s==null&&!Jum.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return cBu(String(i))&&String(s).match(String(i))!==null;case"not_regex":return cBu(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:parseFloat(String(i)),l;return l=typeof s=="number"?s:s!=null?parseFloat(String(s)):NaN,Number.isFinite(u)&&Number.isFinite(l)?c(l,u,o):c(String(s),String(i),o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Sd("Date operations cannot be performed on boolean values");let u=elm(String(i));if(u==null&&(u=uBu(i)),u==null)throw new Sd(`Invalid date: ${i}`);let l=uBu(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return I_(xB(String(s)),xB(String(i)))===0;case"semver_neq":return I_(xB(String(s)),xB(String(i)))!==0;case"semver_gt":return I_(xB(String(s)),xB(String(i)))>0;case"semver_gte":return I_(xB(String(s)),xB(String(i)))>=0;case"semver_lt":return I_(xB(String(s)),xB(String(i)))<0;case"semver_lte":return I_(xB(String(s)),xB(String(i)))<=0;case"semver_tilde":{let u=xB(String(s)),{lower:l,upper:p}=Xum(String(i));return I_(u,l)>=0&&I_(u,p)<0}case"semver_caret":{let u=xB(String(s)),{lower:l,upper:p}=Zum(String(i));return I_(u,l)>=0&&I_(u,p)<0}case"semver_wildcard":{let u=xB(String(s)),{lower:l,upper:p}=$um(String(i));return I_(u,l)>=0&&I_(u,p)<0}default:throw new Sd(`Unknown operator: ${o}`)}}function Yum(e,t){if(!(e in t))throw new pee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function pBu(e,t,r,n=!1,i){let o=String(e.value);Yum(o,r);let s=r[o];return fBu(s,t,r,n,i)}async function fBu(e,t,r,n=!1,i){if(!e)return!0;let o=e.type,s=e.values;if(!s||s.length===0)return!0;let a=!1;if("values"in s[0]){for(let c of s)try{let u=await fBu(c,t,r,n,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof pee)throw u;if(u instanceof Sd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Sd("Can't match cohort without a given cohort property value");return o==="AND"}for(let c of s)try{let u;if(c.type==="cohort")u=await pBu(c,t,r,n,i);else if(c.type==="flag"){if(!i)throw new Sd(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await i(c)}else u=lBu(c,t);let l=c.negation||!1;if(o==="AND"){if(!u&&!l||u&&l)return!1}else if(u&&!l||!u&&l)return!0}catch(u){if(u instanceof pee)throw u;if(u instanceof Sd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Sd("can't match cohort without a given cohort property value");return o==="AND"}function cBu(e){try{return new RegExp(e),!0}catch{return!1}}function dBu(e,t){if(!/^\d+$/.test(e))throw new Sd(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new Sd(`Invalid semver: ${t}`);return parseInt(e,10)}function xB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Sd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>c===void 0||c===""?0:dBu(c,e),o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function I_(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 Xum(e){let t=xB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Zum(e){let t=xB(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function $um(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Sd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=c=>{try{return dBu(c,e)}catch{throw new Sd(`Invalid wildcard semver: ${e}`)}},o=i(n[0]),s,a;if(n.length===1)s=[o,0,0],a=[o+1,0,0];else{let c=i(n[1]);s=[o,c,0],a=[o,c+1,0]}return{lower:s,upper:a}}function uBu(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 Sd(`${e} is in an invalid date format`)}throw new Sd(`The date provided ${e} must be a string, number, or date object`)}function elm(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var m9r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var tlm=100,mBu=3e4,rlm=5e4,nlm=50,ilm=500,olm="https://us.i.posthog.com",hBu=new Set;function h9r(e,t){hBu.has(e)||(hBu.add(e),console.warn(`[PostHog] ${t}`))}function slm(e){return typeof e=="string"?e.trim():""}function alm(e){return(typeof e=="string"?e.trim():"")||void 0}function clm(e){return(typeof e=="string"?e.trim():"")||olm}function ulm(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 g9r=class extends G4t{constructor(t,r={}){let n=slm(t),i={...r,host:clm(r.host),personalApiKey:alm(r.personalApiKey)};if(super(n,i),this._memoryStorage=new m9r,this.options=i,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,tlm):mBu,typeof i.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(i.waitUntilDebounceMs,0)),typeof i.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(i.waitUntilMaxWaitMs,0)),i.personalApiKey){if(i.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');i.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new d9r({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:i.personalApiKey,projectApiKey:n,timeout:i.requestTimeout??1e4,host:this.host,fetch:i.fetch,onError:s=>{this._events.emit("error",s)},onLoad:s=>{this._events.emit("localEvaluationFlagsLoaded",s)},customHeaders:this.getCustomHeaders(),cacheProvider:i.flagDefinitionCacheProvider,strictLocalEvaluation:i.strictLocalEvaluation}))}this.errorTracking=new tH(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||rlm}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??ilm,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??nlm;this._waitUntilCycle.timer=uee(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return oBu}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};await super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=mBu){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let T=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:T}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,g,A,y,E,v,I;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let T=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(T){m=!0;let P=T.value;E=w.id,I="Evaluated locally",f={key:t,enabled:P!==!1,variant:typeof P=="string"?P:void 0,payload:T.payload??void 0}}}catch(T){if(T instanceof pee||T instanceof Sd)this._logger?.info(`${T.name} when computing flag locally: ${t}: ${T.message}`);else throw T}}if(!m&&!c){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)y=ife.UNKNOWN_ERROR;else{g=w.requestId,A=w.evaluatedAt;let T=[];w.errorsWhileComputingFlags&&T.push(ife.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&T.push(ife.QUOTA_LIMITED);let P=w.flags[t];if(P===void 0)T.push(ife.FLAG_MISSING);else{E=P.metadata?.id,v=P.metadata?.version,I=P.reason?.description??P.reason?.code;let O;if(P.metadata?.payload!==void 0)try{O=JSON.parse(P.metadata.payload)}catch{O=P.metadata.payload}f={key:t,enabled:P.enabled,variant:P.variant,payload:O}}T.length>0&&(y=T.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,T={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:I,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(T.$feature_flag_definitions_loaded_at=P)}y&&(T.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:w,groups:s,disableGeoip:a,properties:T})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){h9r("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(h9r("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){h9r("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return i===void 0?void 0:i.enabled===!1?!1:!!(i.variant??!0)||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},g={},A=!0;if(f&&(m=f.response,g=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},g={...g,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(g={...g,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:g}}async evaluateFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new jnt({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f={},m,g,A=!1,y=!1,E=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),v=new Set;if(E)for(let[C,w]of Object.entries(E.response)){let T=this.featureFlagsPoller?.featureFlagsByKey[C];f[C]={key:C,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:E.payloads[C],id:T?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0},v.add(C)}if((E?E.fallbackToFlags:!0)&&!c){let C=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);if(C){m=C.requestId,g=C.evaluatedAt,A=!!C.errorsWhileComputingFlags,y=Array.isArray(C.quotaLimited)&&C.quotaLimited.includes("feature_flags");for(let[w,T]of Object.entries(C.flags)){if(v.has(w))continue;let P;if(T.metadata?.payload!==void 0)try{P=JSON.parse(T.metadata.payload)}catch{P=T.metadata.payload}f[w]={key:w,enabled:T.enabled,variant:T.variant,payload:P,id:T.metadata?.id,version:T.metadata?.version,reason:T.reason?.description??T.reason?.code,locallyEvaluated:!1}}}}if(this._flagOverrides!==void 0)for(let[C,w]of Object.entries(this._flagOverrides)){if(w===void 0){delete f[C];continue}let T=f[C];f[C]={key:C,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:T?.payload,id:T?.id,version:T?.version,reason:T?.reason,locallyEvaluated:T?.locallyEvaluated??!1}}if(this._payloadOverrides!==void 0)for(let[C,w]of Object.entries(this._payloadOverrides)){let T=f[C];T&&(f[C]={...T,payload:w})}return new jnt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:f,requestId:m,evaluatedAt:g,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:A,quotaLimited:y})}_captureFlagCalledEventIfNeeded(t){let{distinctId:r,key:n,response:i,groups:o,disableGeoip:s,properties:a}=t,c=`${n}_${i}`;r in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[r].includes(c)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(c):this.distinctIdHasSentFlagCalls[r]=[c],this.capture({distinctId:r,event:"$feature_flag_called",properties:a,groups:o,disableGeoip:s}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:t=>this._captureFlagCalledEventIfNeeded(t),logWarning:t=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${t}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=uee(()=>{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(EOu(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i,o){if(!tH.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise(tH.buildEventMessage(t,{syntheticException:s},r,n).then(a=>this.capture({...a,uuid:i,flags:o})))}}async captureExceptionImmediate(t,r,n,i){if(!tH.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise(tH.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.captureImmediate({...s,flags:i})))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l}=t,p=this.context?.get(),d=r||p?.distinctId,f={...this.props,...p?.properties||{},...i||{}};d||(d=cee(),f.$process_person_profile=!1),p?.sessionId&&!f.$session_id&&(f.$session_id=p.sessionId);let m=this._runBeforeSend({distinctId:d,event:n,properties:f,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l});if(!m)return Promise.reject(null);let g=await Promise.resolve().then(async()=>{if(s)return a&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),s._getEventProperties();if(a){h9r("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let A=typeof a=="object"?a:void 0,y=await this.getFeatureFlagsForEvent(m.distinctId,o,u,A);return ulm(y)}return{}}).catch(()=>({})).then(A=>({...A,...m.properties||{},$groups:m.groups||o}));return m.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof g.$raw_user_agent=="string"&&gOu(g.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(m.event="$bot_pageview",g.$browser_type="bot"),{distinctId:m.distinctId,event:m.event,properties:g,options:{timestamp:m.timestamp,disableGeoip:m.disableGeoip,uuid:m.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var gBu=require("async_hooks"),A9r=class{constructor(){this.storage=new gBu.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 ABu="posthog-node";function llm(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[a2o.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(g=>({...g,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var a2o=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=ABu,this.name=ABu,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(llm(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};tH.errorPropertiesBuilder=new QQ.ErrorPropertiesBuilder([new QQ.EventCoercer,new QQ.ErrorCoercer,new QQ.ObjectCoercer,new QQ.StringCoercer,new QQ.PrimitiveCoercer],QQ.createStackParser("node:javascript",QQ.nodeStackLineParser),[dOu(),$Ou,rBu()]);var gve=class extends g9r{getLibraryId(){return"posthog-node"}initializeContext(){return new A9r}};var y9r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new gve(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.50.5",usingAccessToken:!0,...Kae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var H4t=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};nm();Zt();var znt=require("fs/promises"),yBu=require("os"),bBu=require("path");xtt();var plm="id",flm=".fern",K4t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new gve(r),this.userId=t==null?void 0:POo(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.50.5",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...Kae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await vf({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=ID(),r=Ge(qt.of((0,yBu.homedir)()),Se.of(flm),Se.of(plm));try{await $t(r)?this.persistedDistinctId=(await(0,znt.readFile)(r)).toString():(await(0,znt.mkdir)((0,bBu.dirname)(r),{recursive:!0}),await(0,znt.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var c2o;async function J4t(){return c2o==null&&(c2o=await dlm()),c2o}async function dlm(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new H4t;let r=await $tt();return r!=null?new K4t({token:r,posthogApiKey:e}):await o_()!=null?new y9r({posthogApiKey:e}):new K4t({token:void 0,posthogApiKey:e})}catch{return new H4t}}bn();Dt();jt();xW();var Y4t=be(require("process"),1);Wqe();var vBu=be(nEo(),1),xBu=be(IBu(),1);function k1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=FG(e),e.length===0))return 0;e=e.replace((0,xBu.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(vBu.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}bn();function b9r(e){let t=0;for(let r of e.split(`
|
|
3025
|
+
`);for(let s=n;s<o.length;s++){let a=o[s];if(a.length>1024)continue;let c=VOu.test(a)?a.replace(VOu,"$1"):a;if(!c.match(/\S*Error: /)){for(let u of t){let l=u(c,e);if(l){i.push(l);break}}if(i.length>=_Ou)break}}return qOu(i)}}var Jko=class{match(t){return this.isDOMException(t)||this.isDOMError(t)}coerce(t,r){let n=hve(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 _6e(t,"DOMException")}isDOMError(t){return _6e(t,"DOMError")}};var Yko=class{match(t){return zko(t)}coerce(t,r){return{type:this.getType(t),value:this.getMessage(t,r),stack:this.getStack(t),cause:t.cause?r.next(t.cause):void 0,synthetic:!1}}getType(t){return t.name||t.constructor.name}getMessage(t,r){let n=t.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(t){return t.stacktrace||t.stack||void 0}};var Xko=class{constructor(){}match(t){return bOu(t)&&t.error!=null}coerce(t,r){let n=r.apply(t.error);return n||{type:"ErrorEvent",value:t.message,stack:r.syntheticException?.stack,synthetic:!0}}};var Oum=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,Zko=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(Oum);return i&&(r=i[1],n=i[2]),[r,n]}};var WOu=["fatal","error","warning","log","info","debug"];function l9r(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 $ko=class{match(t){return typeof t=="object"&&t!==null}coerce(t,r){let n=this.getErrorPropertyFromObject(t);return n?r.apply(n):{type:this.getType(t),value:this.getValue(t),stack:r.syntheticException?.stack,level:this.isSeverityLevel(t.level)?t.level:"error",synthetic:!0}}getType(t){return Rnt(t)?t.constructor.name:"Error"}getValue(t){if("name"in t&&typeof t.name=="string"){let i=`'${t.name}' captured as exception`;return"message"in t&&typeof t.message=="string"&&(i+=` with message: '${t.message}'`),i}if("message"in t&&typeof t.message=="string")return t.message;let r=this.getObjectClassName(t),n=l9r(t);return`${r&&r!=="Object"?`'${r}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(t){return hve(t)&&!yOu(t)&&WOu.indexOf(t)>=0}getErrorPropertyFromObject(t){for(let r in t)if(Object.prototype.hasOwnProperty.call(t,r)){let n=t[r];if(FOu(n))return n}}getObjectClassName(t){try{let r=Object.getPrototypeOf(t);return r?r.constructor.name:void 0}catch{return}}};var e2o=class{match(t){return Rnt(t)}coerce(t,r){let n=t.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${l9r(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var t2o=class{match(t){return K8r(t)}coerce(t,r){return{type:"Error",value:`Primitive value captured as exception: ${String(t)}`,stack:r.syntheticException?.stack,synthetic:!0}}};var r2o=class{match(t){return _6e(t,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(t)}isCustomEventWrappingRejection(t){if(!Rnt(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 K8r(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 n2o=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 W4t={MESSAGE:"$message",TIMESTAMP:"$timestamp"},Bum=new Set([W4t.MESSAGE,W4t.TIMESTAMP]),p9r={enabled:!0,max_bytes:32768};function i2o(e){return e?{enabled:e.enabled??p9r.enabled,max_bytes:Dum(e.max_bytes,p9r.max_bytes)}:{...p9r}}function Pum(e){if(!e)return{sanitizedProperties:{},droppedKeys:[]};let t=[];return{sanitizedProperties:Object.keys(e).reduce((n,i)=>Bum.has(i)?(t.push(i),n):(n[i]=e[i],n),{}),droppedKeys:t}}var o2o=class{constructor(t){this._entries=[],this._totalBytes=0,this._config=i2o(t)}setConfig(t){this._config=i2o(t),this._trimToMaxBytes()}add(t){let r=Rum(t);if(!r)return;let n=HOu(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 Dum(e,t){if(!V4t(e)||e===1/0||e===-1/0)return t;let r=Math.floor(e);return r<0?t:r}function Rum(e){let t=Fum(e);if(t)try{let r=JSON.parse(t);if(!U4t(r))return;let n=r,i=n[W4t.MESSAGE],o=n[W4t.TIMESTAMP];return!hve(i)||i.trim().length===0||!hve(o)&&!V4t(o)?void 0:{step:n,json:t}}catch{return}}function Fum(e){let t=new WeakSet;try{return JSON.stringify(e,(r,n)=>{if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Date)return n.toISOString();if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){if(t.has(n))return"[Circular]";t.add(n)}return n}})}catch{return}}function HOu(e){if(typeof TextEncoder<"u")return new TextEncoder().encode(e).length;let t=encodeURIComponent(e),r=0;for(let n=0;n<t.length;n++)t[n]==="%"?(r+=1,n+=2):r+=1;return r}var YOu=require("fs"),XOu=require("readline"),f9r=new QQ.ReduceableCache(25),ZOu=new QQ.ReduceableCache(20),s2o=7,kum=1e3,Num=1e4;async function $Ou(e){let t={};for(let i=e.length-1;i>=0;i--){let o=e[i],s=o?.filename;if(!o||typeof s!="string"||typeof o.lineno!="number"||Mum(s)||Lum(o))continue;t[s]||(t[s]=[]),t[s].push(o.lineno)}let r=Object.keys(t);if(r.length==0)return e;let n=[];for(let i of r){if(ZOu.get(i))continue;let o=t[i];if(!o)continue;o.sort((c,u)=>c-u);let s=Vum(o);if(s.every(c=>Uum(i,c)))continue;let a=_um(f9r,i,{});n.push(jum(i,s,a))}return await Promise.all(n).catch(()=>{}),e&&e.length>0&&Qum(e,f9r),f9r.reduce(),e}function jum(e,t,r){return new Promise(n=>{let i=(0,YOu.createReadStream)(e),o=(0,XOu.createInterface)({input:i});function s(){i.destroy(),n()}let a=0,c=0,u=t[c];if(u===void 0)return void s();let l=u[0],p=u[1];function d(){ZOu.set(e,1),o.close(),o.removeAllListeners(),s()}i.on("error",d),o.on("error",d),o.on("close",s),o.on("line",f=>{if(a++,!(a<l)&&(r[a]=qum(f,0),a>=p)){if(c===t.length-1){o.close(),o.removeAllListeners();return}c++;let m=t[c];if(m===void 0){o.close(),o.removeAllListeners();return}l=m[0],p=m[1]}})})}function Qum(e,t){for(let r of e)if(r.filename&&r.context_line===void 0&&typeof r.lineno=="number"){let n=t.get(r.filename);if(n===void 0)continue;zum(r.lineno,r,n)}}function zum(e,t,r){if(t.lineno===void 0||r===void 0)return;t.pre_context=[];for(let i=eBu(e);i<e;i++){let o=r[i];if(o===void 0)return void KOu(t);t.pre_context.push(o)}if(r[e]===void 0)return void KOu(t);t.context_line=r[e];let n=tBu(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 KOu(e){delete e.pre_context,delete e.context_line,delete e.post_context}function Mum(e){return e.startsWith("node:")||e.endsWith(".min.js")||e.endsWith(".min.cjs")||e.endsWith(".min.mjs")||e.startsWith("data:")}function Lum(e){return e.lineno!==void 0&&e.lineno>Num||e.colno!==void 0&&e.colno>kum}function Uum(e,t){let r=f9r.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 Vum(e){if(!e.length)return[];let t=0,r=e[0];if(typeof r!="number")return[];let n=JOu(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+s2o:(i.push(n),n=JOu(o)),t++}return i}function JOu(e){return[eBu(e),tBu(e)]}function eBu(e){return Math.max(1,e-s2o)}function tBu(e){return e+s2o}function _um(e,t,r){let n=e.get(t);return n===void 0?(e.set(t,r),r):n}function qum(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 Nnt=require("path");function rBu(e=process.cwd()){let t=Nnt.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,Nnt.isAbsolute)(o.filename)&&(o.filename=r((0,Nnt.relative)(n,r(o.filename))));return i}}function Gum(e,t){let r=!1;return Object.assign(n=>{let o=global.process.listeners("uncaughtException").filter(s=>s.name!=="domainUncaughtExceptionClear"&&s._posthogErrorHandler!==!0).length===0;e(n,{mechanism:{type:"onuncaughtexception",handled:!1}}),!r&&o&&(r=!0,t(n))},{_posthogErrorHandler:!0})}function nBu(e,t){globalThis.process?.on("uncaughtException",Gum(e,t))}function iBu(e){globalThis.process?.on("unhandledRejection",t=>e(t,{mechanism:{type:"onunhandledrejection",handled:!1}}))}var Wum=2e3,tH=class e{constructor(t,r,n){this.client=t,this._exceptionAutocaptureEnabled=r.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new J8r({refillRate:1,bucketSize:10,refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(t){return U4t(t)&&"__posthog_previously_captured_error"in t&&t.__posthog_previously_captured_error===!0}static async buildEventMessage(t,r,n,i){let o={...i},s=this.errorPropertiesBuilder.buildFromUnknown(t,r);return s.$exception_list=await this.errorPropertiesBuilder.modifyFrames(s.$exception_list),{event:"$exception",distinctId:n,properties:{...s,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(nBu(this.onException.bind(this),this.onFatalError.bind(this)),iBu(this.onException.bind(this)))}onException(t,r){this.client.addPendingPromise((async()=>{if(!e.isPreviouslyCapturedError(t)){let n=await e.buildEventMessage(t,r),o=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(o)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:o}):this.client.capture(n)}})())}async onFatalError(t){console.error(t),await this.client.shutdown(Wum),process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}};var oBu="5.35.1";var ife={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var jnt=class e{constructor(t){this._host=t.host,this._distinctId=t.distinctId,this._groups=t.groups,this._disableGeoip=t.disableGeoip,this._flags=t.flags,this._requestId=t.requestId,this._evaluatedAt=t.evaluatedAt,this._flagDefinitionsLoadedAt=t.flagDefinitionsLoadedAt,this._errorsWhileComputing=t.errorsWhileComputing??!1,this._quotaLimited=t.quotaLimited??!1,this._accessed=t.accessed??new Set,this._isSlice=t.isSlice??!1}isEnabled(t){let r=this._flags[t];return this._recordAccess(t),r?.enabled??!1}getFlag(t){let r=this._flags[t];if(this._recordAccess(t),!!r)return r.enabled?r.variant??!0:!1}getFlagPayload(t){return this._flags[t]?.payload}onlyAccessed(){let t={};for(let r of this._accessed){let n=this._flags[r];n&&(t[r]=n)}return this._cloneWith(t)}only(t){let r={},n=[];for(let i of t){let o=this._flags[i];o?r[i]=o:n.push(i)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(r)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let t={},r=[];for(let[n,i]of Object.entries(this._flags)){let o=i.enabled===!1?!1:i.variant??!0;t[`$feature/${n}`]=o,i.enabled&&r.push(n)}return r.length>0&&(r.sort(),t.$active_feature_flags=r),t}_cloneWith(t){return new e({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:t,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(t){if(this._accessed.add(t),this._distinctId===""||this._isSlice&&!(t in this._flags))return;let r=this._flags[t],n=r===void 0?void 0:r.enabled===!1?!1:r.variant??!0,i={$feature_flag:t,$feature_flag_response:n,$feature_flag_id:r?.id,$feature_flag_version:r?.version,$feature_flag_reason:r?.reason,locally_evaluated:r?.locallyEvaluated??!1,[`$feature/${t}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:r?.locallyEvaluated?Date.now():this._evaluatedAt};r?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(i.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let o=[];this._errorsWhileComputing&&o.push(ife.ERRORS_WHILE_COMPUTING),this._quotaLimited&&o.push(ife.QUOTA_LIMITED),r===void 0&&o.push(ife.FLAG_MISSING),o.length>0&&(i.$feature_flag_error=o.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:t,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:i})}};async function sBu(e){let t=globalThis.crypto?.subtle;if(!t)throw new Error("SubtleCrypto API not available");let r=await t.digest("SHA-1",new TextEncoder().encode(e));return Array.from(new Uint8Array(r)).map(i=>i.toString(16).padStart(2,"0")).join("")}var Hum=6e4,Kum=1152921504606847e3,Jum=["is_not","is_set"],Qnt=class e extends Error{constructor(t){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=t,Object.setPrototypeOf(this,e.prototype)}},Sd=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},pee=class e extends Error{constructor(t){super(t),this.name=this.constructor.name,Error.captureStackTrace(this,this.constructor),Object.setPrototypeOf(this,e.prototype)}},d9r=class{constructor({pollingInterval:t,personalApiKey:r,projectApiKey:n,timeout:i,host:o,customHeaders:s,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollingInterval=t,this.personalApiKey=r,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=i,this.projectApiKey=n,this.host=o,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=s,this.onLoad=a.onLoad,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.loadFeatureFlags()}debug(t=!0){this.debugMode=t}logMsgIfDebug(t){this.debugMode&&t()}createEvaluationContext(t,r={},n={},i={},o={}){return{distinctId:t,groups:r,personProperties:n,groupProperties:i,evaluationCache:o}}async getFeatureFlag(t,r,n={},i={},o={}){await this.loadFeatureFlags();let s,a;if(!this.loadedSuccessfullyOnce)return s;if(a=this.featureFlagsByKey[t],a!==void 0){let c=this.createEvaluationContext(r,n,i,o);try{s=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${t} -> ${s}`))}catch(u){u instanceof pee||u instanceof Sd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${t}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${t}: ${u}`))}}return s}async getAllFlagsAndPayloads(t,r){await this.loadFeatureFlags();let n={},i={},o=this.featureFlags.length==0,s=r?r.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...t,evaluationCache:t.evaluationCache??{}};return await Promise.all(s.map(async c=>{try{let{value:u,payload:l}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=u,l&&(i[c.key]=l)}catch(u){u instanceof pee||u instanceof Sd?this.logMsgIfDebug(()=>console.debug(`${u.name} when computing flag locally: ${c.key}: ${u.message}`)):u instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${u}`)),o=!0}})),{response:n,payloads:i,fallbackToFlags:o}}async computeFlagAndPayloadLocally(t,r,n={}){let{matchValue:i,skipLoadCheck:o=!1}=n;if(o||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let s;s=i!==void 0?i:await this.computeFlagValueLocally(t,r);let a=this.getFeatureFlagPayload(t.key,s);return{value:s,payload:a}}async computeFlagValueLocally(t,r){let{distinctId:n,groups:i,personProperties:o,groupProperties:s}=r;if(!t.active)return!1;if(t.ensure_experience_continuity)throw new Sd("Flag has experience continuity enabled");let c=(t.filters||{}).aggregation_group_type_index;if(c!=null){let u=this.groupTypeMapping[String(c)];if(!u)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${t.key}`)),new Sd("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 Sd(`Can't compute feature flag: ${t.key} without $device_id`);return await this.matchFeatureFlagProperties(t,u,o,r)}}getBucketingValueForFlag(t,r,n){if(t.filters?.aggregation_group_type_index!=null)return r;if(t.bucketing_identifier==="device_id"){let i=n?.$device_id;return i==null||i===""?void 0:i}return r}getFeatureFlagPayload(t,r){let n=null;if(r!==!1&&r!=null&&(typeof r=="boolean"?n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r.toString()]||null:typeof r=="string"&&(n=this.featureFlagsByKey?.[t]?.filters?.payloads?.[r]||null),n!=null)){if(typeof n=="object")return n;if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}return null}async evaluateFlagDependency(t,r,n){let{evaluationCache:i}=n,o=t.key;if(!this.featureFlagsByKey)throw new Sd("Feature flags not available for dependency evaluation");if(!("dependency_chain"in t))throw new Sd(`Flag dependency property for '${o}' is missing required 'dependency_chain' field`);let s=t.dependency_chain;if(!Array.isArray(s))throw new Sd(`Flag dependency property for '${o}' has an invalid 'dependency_chain' (expected array, got ${typeof s})`);if(s.length===0)throw new Sd(`Circular dependency detected for flag '${o}' (empty dependency chain)`);for(let c of s){if(!(c in i)){let l=this.featureFlagsByKey[c];if(l)if(l.active)try{let p=await this.computeFlagValueLocally(l,n);i[c]=p}catch(p){throw new Sd(`Error evaluating flag dependency '${c}' for flag '${o}': ${p}`)}else i[c]=!1;else throw new Sd(`Missing flag dependency '${c}' for flag '${o}'`)}if(i[c]==null)throw new Sd(`Dependency '${c}' could not be evaluated`)}let a=i[o];return this.flagEvaluatesToExpectedValue(t.value,a)}flagEvaluatesToExpectedValue(t,r){return typeof t=="boolean"?t===r||typeof r=="string"&&r!==""&&t===!0:typeof t=="string"?r===t:!1}async matchFeatureFlagProperties(t,r,n,i){let o=t.filters||{},s=o.groups||[],a=o.aggregation_group_type_index,{groups:c,groupProperties:u}=i,l=!1,p;for(let d of s)try{let f=d.aggregation_group_type_index!==void 0?d.aggregation_group_type_index:a,m=n,g=r;if(f!==a&&f!=null){let A=this.groupTypeMapping[String(f)];if(!A||!(A in c)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${t.key}': group type index ${f} not available`));continue}if(!(A in u)){l=!0;continue}m=u[A],g=c[A]}if(await this.isConditionMatch(t,g,d,m,i)){let A=d.variant,y=o.multivariate?.variants||[];p=A&&y.some(E=>E.key===A)?A:await this.getMatchingVariant(t,g)||!0;break}}catch(f){if(f instanceof pee)throw f;if(f instanceof Sd)l=!0;else throw f}if(p!==void 0)return p;if(l)throw new Sd("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(t,r,n,i,o){let s=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let u=c.type,l=!1;if(l=u==="cohort"?await pBu(c,i,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,i,o)):u==="flag"?await this.evaluateFlagDependency(c,i,o):lBu(c,i,a),!l)return!1}if(s==null)return!0}return!(s!=null&&await aBu(t.key,r)>s/100)}async getMatchingVariant(t,r){let n=await aBu(t.key,r,"variant"),i=this.variantLookupTable(t).find(o=>n>=o.valueMin&&n<o.valueMax);if(i)return i.key}variantLookupTable(t){let r=[],n=0,i=0;return((t.filters||{}).multivariate?.variants||[]).forEach(a=>{i=n+a.rollout_percentage/100,r.push({valueMin:n,valueMax:i,key:a.key}),n=i}),r}updateFlagState(t){this.featureFlags=t.flags,this.featureFlagsByKey=t.flags.reduce((r,n)=>(r[n.key]=n,r),{}),this.groupTypeMapping=t.groupTypeMapping,this.cohorts=t.cohorts,this.loadedSuccessfullyOnce=!0}warnAboutExperienceContinuityFlags(t){if(this.strictLocalEvaluation)return;let r=t.filter(n=>n.ensure_experience_continuity);r.length>0&&console.warn(`[PostHog] You are using local evaluation but ${r.length} flag(s) have experience continuity enabled: ${r.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(t){if(!this.cacheProvider)return!1;try{let r=await this.cacheProvider.getFlagDefinitions();return r?(this.updateFlagState(r),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${t} (${r.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(r.flags),!0):!1}catch(r){return this.onError?.(new Error(`Failed to load from cache: ${r}`)),!1}}async loadFeatureFlags(t=!1){if(!(this.loadedSuccessfullyOnce&&!t))return!t&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(r=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${r}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){return this.shouldBeginExponentialBackoff?Math.min(Hum,this.pollingInterval*2**this.backOffCount):this.pollingInterval}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0),this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval());try{let t=!0;if(this.cacheProvider)try{t=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!t&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let r=await this._requestFeatureFlagDefinitions();if(!r)return;switch(r.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=r.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Qnt(`Your project key or personal API key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={};return;case 403:throw this.beginBackoff(),new Qnt(`Your personal API key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct personal and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Qnt(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await r.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=r.headers?.get("ETag")??void 0;let i={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{}};if(this.updateFlagState(i),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&t)try{await this.cacheProvider.onFlagDefinitionsReceived(i)}catch(o){this.onError?.(new Error(`Failed to store in cache: ${o}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(i.flags);break}default:return}}catch(t){t instanceof Qnt&&this.onError?.(t)}}getPersonalApiKeyRequestOptions(t="GET",r){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return r&&(n["If-None-Match"]=r),{method:t,headers:n}}_requestFeatureFlagDefinitions(){let t=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,r=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=uee(()=>{i.abort()},this.timeout),r.signal=i.signal}try{let i=this.fetch;return i(t,r)}finally{clearTimeout(n)}}async stopPoller(t=3e4){if(clearTimeout(this.poller),this.cacheProvider)try{let r=this.cacheProvider.shutdown();r instanceof Promise&&await Promise.race([r,new Promise((n,i)=>setTimeout(()=>i(new Error(`Cache shutdown timeout after ${t}ms`)),t))])}catch(r){this.onError?.(new Error(`Error during cache shutdown: ${r}`))}}};async function aBu(e,t,r=""){let n=await sBu(`${e}.${t}${r}`);return parseInt(n.slice(0,15),16)/Kum}function lBu(e,t,r){let n=e.key,i=e.value,o=e.operator||"exact";if(n in t){if(o==="is_not_set")return!1}else{if(o==="is_not_set")return!0;throw new Sd(`Property ${n} not found in propertyValues`)}let s=t[n];if(s==null&&!Jum.includes(o))return r&&r(`Property ${n} cannot have a value of null/undefined with the ${o} operator`),!1;function a(u,l){return Array.isArray(u)?u.map(p=>String(p).toLowerCase()).includes(String(l).toLowerCase()):String(u).toLowerCase()===String(l).toLowerCase()}function c(u,l,p){if(p==="gt")return u>l;if(p==="gte")return u>=l;if(p==="lt")return u<l;if(p==="lte")return u<=l;throw new Error(`Invalid operator: ${p}`)}switch(o){case"exact":return a(i,s);case"is_not":return!a(i,s);case"is_set":return n in t;case"icontains":return String(s).toLowerCase().includes(String(i).toLowerCase());case"not_icontains":return!String(s).toLowerCase().includes(String(i).toLowerCase());case"regex":return cBu(String(i))&&String(s).match(String(i))!==null;case"not_regex":return cBu(String(i))&&String(s).match(String(i))===null;case"gt":case"gte":case"lt":case"lte":{let u=typeof i=="number"?i:parseFloat(String(i)),l;return l=typeof s=="number"?s:s!=null?parseFloat(String(s)):NaN,Number.isFinite(u)&&Number.isFinite(l)?c(l,u,o):c(String(s),String(i),o)}case"is_date_after":case"is_date_before":{if(typeof i=="boolean")throw new Sd("Date operations cannot be performed on boolean values");let u=elm(String(i));if(u==null&&(u=uBu(i)),u==null)throw new Sd(`Invalid date: ${i}`);let l=uBu(s);return["is_date_before"].includes(o)?l<u:l>u}case"semver_eq":return I_(xB(String(s)),xB(String(i)))===0;case"semver_neq":return I_(xB(String(s)),xB(String(i)))!==0;case"semver_gt":return I_(xB(String(s)),xB(String(i)))>0;case"semver_gte":return I_(xB(String(s)),xB(String(i)))>=0;case"semver_lt":return I_(xB(String(s)),xB(String(i)))<0;case"semver_lte":return I_(xB(String(s)),xB(String(i)))<=0;case"semver_tilde":{let u=xB(String(s)),{lower:l,upper:p}=Xum(String(i));return I_(u,l)>=0&&I_(u,p)<0}case"semver_caret":{let u=xB(String(s)),{lower:l,upper:p}=Zum(String(i));return I_(u,l)>=0&&I_(u,p)<0}case"semver_wildcard":{let u=xB(String(s)),{lower:l,upper:p}=$um(String(i));return I_(u,l)>=0&&I_(u,p)<0}default:throw new Sd(`Unknown operator: ${o}`)}}function Yum(e,t){if(!(e in t))throw new pee(`cohort ${e} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function pBu(e,t,r,n=!1,i){let o=String(e.value);Yum(o,r);let s=r[o];return fBu(s,t,r,n,i)}async function fBu(e,t,r,n=!1,i){if(!e)return!0;let o=e.type,s=e.values;if(!s||s.length===0)return!0;let a=!1;if("values"in s[0]){for(let c of s)try{let u=await fBu(c,t,r,n,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof pee)throw u;if(u instanceof Sd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Sd("Can't match cohort without a given cohort property value");return o==="AND"}for(let c of s)try{let u;if(c.type==="cohort")u=await pBu(c,t,r,n,i);else if(c.type==="flag"){if(!i)throw new Sd(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await i(c)}else u=lBu(c,t);let l=c.negation||!1;if(o==="AND"){if(!u&&!l||u&&l)return!1}else if(u&&!l||!u&&l)return!0}catch(u){if(u instanceof pee)throw u;if(u instanceof Sd)n&&console.debug(`Failed to compute property ${c} locally: ${u}`),a=!0;else throw u}if(a)throw new Sd("can't match cohort without a given cohort property value");return o==="AND"}function cBu(e){try{return new RegExp(e),!0}catch{return!1}}function dBu(e,t){if(!/^\d+$/.test(e))throw new Sd(`Invalid semver: ${t}`);if(e.length>1&&e[0]==="0")throw new Sd(`Invalid semver: ${t}`);return parseInt(e,10)}function xB(e){let r=String(e).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!r||r.startsWith("."))throw new Sd(`Invalid semver: ${e}`);let n=r.split("."),i=c=>c===void 0||c===""?0:dBu(c,e),o=i(n[0]),s=i(n[1]),a=i(n[2]);return[o,s,a]}function I_(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 Xum(e){let t=xB(e),r=[t[0],t[1],t[2]],n=[t[0],t[1]+1,0];return{lower:r,upper:n}}function Zum(e){let t=xB(e),[r,n,i]=t,o=[r,n,i],s;return s=r>0?[r+1,0,0]:n>0?[0,n+1,0]:[0,0,i+1],{lower:o,upper:s}}function $um(e){let r=String(e).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!r)throw new Sd(`Invalid wildcard semver: ${e}`);let n=r.split("."),i=c=>{try{return dBu(c,e)}catch{throw new Sd(`Invalid wildcard semver: ${e}`)}},o=i(n[0]),s,a;if(n.length===1)s=[o,0,0],a=[o+1,0,0];else{let c=i(n[1]);s=[o,c,0],a=[o,c+1,0]}return{lower:s,upper:a}}function uBu(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 Sd(`${e} is in an invalid date format`)}throw new Sd(`The date provided ${e} must be a string, number, or date object`)}function elm(e){let t=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,r=e.match(t),n=new Date(new Date().toISOString());if(!r)return null;{if(!r.groups)return null;let i=parseInt(r.groups.number);if(i>=1e4)return null;let o=r.groups.interval;if(o=="h")n.setUTCHours(n.getUTCHours()-i);else if(o=="d")n.setUTCDate(n.getUTCDate()-i);else if(o=="w")n.setUTCDate(n.getUTCDate()-7*i);else if(o=="m")n.setUTCMonth(n.getUTCMonth()-i);else{if(o!="y")return null;n.setUTCFullYear(n.getUTCFullYear()-i)}return n}}var m9r=class{getProperty(t){return this._memoryStorage[t]}setProperty(t,r){this._memoryStorage[t]=r!==null?r:void 0}constructor(){this._memoryStorage={}}};var tlm=100,mBu=3e4,rlm=5e4,nlm=50,ilm=500,olm="https://us.i.posthog.com",hBu=new Set;function h9r(e,t){hBu.has(e)||(hBu.add(e),console.warn(`[PostHog] ${t}`))}function slm(e){return typeof e=="string"?e.trim():""}function alm(e){return(typeof e=="string"?e.trim():"")||void 0}function clm(e){return(typeof e=="string"?e.trim():"")||olm}function ulm(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 g9r=class extends G4t{constructor(t,r={}){let n=slm(t),i={...r,host:clm(r.host),personalApiKey:alm(r.personalApiKey)};if(super(n,i),this._memoryStorage=new m9r,this.options=i,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof i.featureFlagsPollingInterval=="number"?Math.max(i.featureFlagsPollingInterval,tlm):mBu,typeof i.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(i.waitUntilDebounceMs,0)),typeof i.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(i.waitUntilMaxWaitMs,0)),i.personalApiKey){if(i.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');i.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new d9r({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:i.personalApiKey,projectApiKey:n,timeout:i.requestTimeout??1e4,host:this.host,fetch:i.fetch,onError:s=>{this._events.emit("error",s)},onLoad:s=>{this._events.emit("localEvaluationFlagsLoaded",s)},customHeaders:this.getCustomHeaders(),cacheProvider:i.flagDefinitionCacheProvider,strictLocalEvaluation:i.strictLocalEvaluation}))}this.errorTracking=new tH(this,i,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=i.maxCacheSize||rlm}enqueue(t,r,n){super.enqueue(t,r,n),this.scheduleDebouncedFlush()}async flush(){let t=super.flush(),r=this.options.waitUntil;if(r&&!this._waitUntilCycle)try{r(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let t=this.options.waitUntil;if(!t||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let s,a=new Promise(c=>{s=c});try{t(a)}catch{return}this._waitUntilCycle={resolve:s,startedAt:Date.now(),timer:void 0}}let r=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??ilm,i=r>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),i)return void this.resolveWaitUntilFlush();let o=this.options.waitUntilDebounceMs??nlm;this._waitUntilCycle.timer=uee(()=>{this.resolveWaitUntilFlush()},o)}_consumeWaitUntilCycle(){let t=this._waitUntilCycle;return t&&(clearTimeout(t.timer),this._waitUntilCycle=void 0),t?.resolve}async resolveWaitUntilFlush(){let t=this._consumeWaitUntilCycle();try{await super.flush()}catch{}finally{t?.()}}getPersistedProperty(t){return this._memoryStorage.getProperty(t)}setPersistedProperty(t,r){return this._memoryStorage.setProperty(t,r)}fetch(t,r){return this.options.fetch?this.options.fetch(t,r):fetch(t,r)}getLibraryVersion(){return oBu}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}enable(){return super.optIn()}disable(){return super.optOut()}debug(t=!0){super.debug(t),this.featureFlagsPoller?.debug(t)}capture(t){typeof t=="string"&&this._logger.warn("Called capture() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStateless(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}async captureImmediate(t){return typeof t=="string"&&this._logger.warn("Called captureImmediate() with a string as the first argument when an object was expected."),t.event==="$exception"&&!t._originatedFromCaptureException&&this._logger.warn("Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this.addPendingPromise(this.prepareEventMessage(t).then(({distinctId:r,event:n,properties:i,options:o})=>super.captureStatelessImmediate(r,n,i,{timestamp:o.timestamp,disableGeoip:o.disableGeoip,uuid:o.uuid})).catch(r=>{r&&console.error(r)}))}identify({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};super.identifyStateless(t,l,{disableGeoip:n})}async identifyImmediate({distinctId:t,properties:r={},disableGeoip:n}){let{$set:i,$set_once:o,$anon_distinct_id:s,...a}=r,l={$set:i||a,$set_once:o||{},$anon_distinct_id:s??void 0};await super.identifyStatelessImmediate(t,l,{disableGeoip:n})}alias(t){super.aliasStateless(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}async aliasImmediate(t){await super.aliasStatelessImmediate(t.alias,t.distinctId,void 0,{disableGeoip:t.disableGeoip})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(t=mBu){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(r=>{let n=setTimeout(()=>{i(),r(!1)},t),i=this._events.on("localEvaluationFlagsLoaded",o=>{clearTimeout(n),i(),r(o>0)})})}_resolveDistinctId(t,r){return typeof t=="string"?{distinctId:t,options:r}:{distinctId:this.context?.get()?.distinctId,options:t}}async _getFeatureFlagResult(t,r,n={},i){let o=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&t in this._flagOverrides){let w=this._flagOverrides[t];if(w===void 0)return;let T=this._payloadOverrides?.[t];return{key:t,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:T}}let{groups:s,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=n,p=this.addLocalPersonAndGroupProperties(r,s,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(r,s,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f,m=!1,g,A,y,E,v,I;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let w=this.featureFlagsPoller?.featureFlagsByKey[t];if(w)try{let T=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(w,d,{matchValue:i});if(T){m=!0;let P=T.value;E=w.id,I="Evaluated locally",f={key:t,enabled:P!==!1,variant:typeof P=="string"?P:void 0,payload:T.payload??void 0}}}catch(T){if(T instanceof pee||T instanceof Sd)this._logger?.info(`${T.name} when computing flag locally: ${t}: ${T.message}`);else throw T}}if(!m&&!c){let w=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,a,[t]);if(w===void 0)y=ife.UNKNOWN_ERROR;else{g=w.requestId,A=w.evaluatedAt;let T=[];w.errorsWhileComputingFlags&&T.push(ife.ERRORS_WHILE_COMPUTING),w.quotaLimited?.includes("feature_flags")&&T.push(ife.QUOTA_LIMITED);let P=w.flags[t];if(P===void 0)T.push(ife.FLAG_MISSING);else{E=P.metadata?.id,v=P.metadata?.version,I=P.reason?.description??P.reason?.code;let O;if(P.metadata?.payload!==void 0)try{O=JSON.parse(P.metadata.payload)}catch{O=P.metadata.payload}f={key:t,enabled:P.enabled,variant:P.variant,payload:O}}T.length>0&&(y=T.join(","))}}if(o){let w=f===void 0?void 0:f.enabled===!1?!1:f.variant??!0,T={$feature_flag:t,$feature_flag_response:w,$feature_flag_id:E,$feature_flag_version:v,$feature_flag_reason:I,locally_evaluated:m,[`$feature/${t}`]:w,$feature_flag_request_id:g,$feature_flag_evaluated_at:m?Date.now():A};if(m&&this.featureFlagsPoller){let P=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();P!==void 0&&(T.$feature_flag_definitions_loaded_at=P)}y&&(T.$feature_flag_error=y),this._captureFlagCalledEventIfNeeded({distinctId:r,key:t,response:w,groups:s,disableGeoip:a,properties:T})}return f!==void 0&&this._payloadOverrides!==void 0&&t in this._payloadOverrides&&(f={...f,payload:this._payloadOverrides[t]}),f}async getFeatureFlag(t,r,n){h9r("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(h9r("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&t in this._payloadOverrides)return this._payloadOverrides[t];let o=await this._getFeatureFlagResult(t,r,{...i,sendFeatureFlagEvents:!1},n);if(o!==void 0)return o.payload??null}async getFeatureFlagResult(t,r,n){let{distinctId:i,options:o}=this._resolveDistinctId(r,n);return i?this._getFeatureFlagResult(t,i,{...o,sendFeatureFlagEvents:o?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(t){if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let r=await this._requestRemoteConfigPayload(t);if(!r)return;let n=await r.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(t,r,n){h9r("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let i=await this._getFeatureFlagResult(t,r,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return i===void 0?void 0:i.enabled===!1?!1:!!(i.variant??!0)||!1}async getAllFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);return n?(await this.getAllFlagsAndPayloads(n,i)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),m={},g={},A=!0;if(f&&(m=f.response,g=f.payloads,A=f.fallbackToFlags),A&&!c){let y=await super.getFeatureFlagsAndPayloadsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);m={...m,...y.flags||{}},g={...g,...y.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(g={...g,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:g}}async evaluateFlags(t,r){let{distinctId:n,options:i}=this._resolveDistinctId(t,r);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new jnt({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});let{groups:o,disableGeoip:s,flagKeys:a}=i||{},{onlyEvaluateLocally:c,personProperties:u,groupProperties:l}=i||{},p=this.addLocalPersonAndGroupProperties(n,o,u,l);u=p.allPersonProperties,l=p.allGroupProperties;let d=this.createFeatureFlagEvaluationContext(n,o,u,l);c==null&&(c=this.options.strictLocalEvaluation??!1);let f={},m,g,A=!1,y=!1,E=await this.featureFlagsPoller?.getAllFlagsAndPayloads(d,a),v=new Set;if(E)for(let[C,w]of Object.entries(E.response)){let T=this.featureFlagsPoller?.featureFlagsByKey[C];f[C]={key:C,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:E.payloads[C],id:T?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0},v.add(C)}if((E?E.fallbackToFlags:!0)&&!c){let C=await super.getFeatureFlagDetailsStateless(d.distinctId,d.groups,d.personProperties,d.groupProperties,s,a);if(C){m=C.requestId,g=C.evaluatedAt,A=!!C.errorsWhileComputingFlags,y=Array.isArray(C.quotaLimited)&&C.quotaLimited.includes("feature_flags");for(let[w,T]of Object.entries(C.flags)){if(v.has(w))continue;let P;if(T.metadata?.payload!==void 0)try{P=JSON.parse(T.metadata.payload)}catch{P=T.metadata.payload}f[w]={key:w,enabled:T.enabled,variant:T.variant,payload:P,id:T.metadata?.id,version:T.metadata?.version,reason:T.reason?.description??T.reason?.code,locallyEvaluated:!1}}}}if(this._flagOverrides!==void 0)for(let[C,w]of Object.entries(this._flagOverrides)){if(w===void 0){delete f[C];continue}let T=f[C];f[C]={key:C,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:T?.payload,id:T?.id,version:T?.version,reason:T?.reason,locallyEvaluated:T?.locallyEvaluated??!1}}if(this._payloadOverrides!==void 0)for(let[C,w]of Object.entries(this._payloadOverrides)){let T=f[C];T&&(f[C]={...T,payload:w})}return new jnt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:o,disableGeoip:s,flags:f,requestId:m,evaluatedAt:g,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:A,quotaLimited:y})}_captureFlagCalledEventIfNeeded(t){let{distinctId:r,key:n,response:i,groups:o,disableGeoip:s,properties:a}=t,c=`${n}_${i}`;r in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[r].includes(c)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),Array.isArray(this.distinctIdHasSentFlagCalls[r])?this.distinctIdHasSentFlagCalls[r].push(c):this.distinctIdHasSentFlagCalls[r]=[c],this.capture({distinctId:r,event:"$feature_flag_called",properties:a,groups:o,disableGeoip:s}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:t=>this._captureFlagCalledEventIfNeeded(t),logWarning:t=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${t}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:t,groupKey:r,properties:n,distinctId:i,disableGeoip:o}){super.groupIdentifyStateless(t,r,n,{disableGeoip:o},i)}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(t){let r=n=>Object.fromEntries(n.map(i=>[i,!0]));if(t===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(t)){this._flagOverrides=r(t);return}if(this._isFeatureFlagOverrideOptions(t)){"flags"in t&&(t.flags===!1?this._flagOverrides=void 0:Array.isArray(t.flags)?this._flagOverrides=r(t.flags):t.flags!==void 0&&(this._flagOverrides={...t.flags})),"payloads"in t&&(t.payloads===!1?this._payloadOverrides=void 0:t.payloads!==void 0&&(this._payloadOverrides={...t.payloads}));return}this._flagOverrides={...t}}_isFeatureFlagOverrideOptions(t){if(typeof t!="object"||t===null||Array.isArray(t))return!1;let r=t;if("flags"in r){let n=r.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in r){let n=r.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(t,r,n){return this.context?this.context.run(t,r,n):r()}getContext(){return this.context?.get()}enterContext(t,r){this.context?.enter(t,r)}async _shutdown(t){let r=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(t),this.errorTracking.shutdown();try{return await super._shutdown(t)}finally{r?.()}}async _requestRemoteConfigPayload(t){if(!this.options.personalApiKey)return;let r=`${this.host}/api/projects/@current/feature_flags/${t}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},i=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let o=new AbortController;i=uee(()=>{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(EOu(s)&&r&&o in r){let a={};for(let[c,u]of Object.entries(s))a[String(c)]=String(u);i[String(o)]=a}else n[String(o)]=String(s);return{personProperties:n,groupProperties:i}}async getFeatureFlagsForEvent(t,r,n,i){let o=i?.personProperties||{},s=i?.groupProperties||{},a=i?.flagKeys;if(i?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let u={};for(let[l,p]of Object.entries(r||{}))u[l]=String(p);return await this.getAllFlags(t,{groups:u,personProperties:o,groupProperties:s,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(t,r,o,s,n)).flags}addLocalPersonAndGroupProperties(t,r,n,i){let o={distinct_id:t,...n||{}},s={};if(r)for(let a of Object.keys(r))s[a]={$group_key:r[a],...i?.[a]||{}};return{allPersonProperties:o,allGroupProperties:s}}createFeatureFlagEvaluationContext(t,r,n,i){return{distinctId:t,groups:r||{},personProperties:n||{},groupProperties:i||{},evaluationCache:{}}}captureException(t,r,n,i,o){if(!tH.isPreviouslyCapturedError(t)){let s=new Error("PostHog syntheticException");this.addPendingPromise(tH.buildEventMessage(t,{syntheticException:s},r,n).then(a=>this.capture({...a,uuid:i,flags:o})))}}async captureExceptionImmediate(t,r,n,i){if(!tH.isPreviouslyCapturedError(t)){let o=new Error("PostHog syntheticException");return this.addPendingPromise(tH.buildEventMessage(t,{syntheticException:o},r,n).then(s=>this.captureImmediate({...s,flags:i})))}}async prepareEventMessage(t){let{distinctId:r,event:n,properties:i,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l}=t,p=this.context?.get(),d=r||p?.distinctId,f={...this.props,...p?.properties||{},...i||{}};d||(d=cee(),f.$process_person_profile=!1),p?.sessionId&&!f.$session_id&&(f.$session_id=p.sessionId);let m=this._runBeforeSend({distinctId:d,event:n,properties:f,groups:o,flags:s,sendFeatureFlags:a,timestamp:c,disableGeoip:u,uuid:l});if(!m)return Promise.reject(null);let g=await Promise.resolve().then(async()=>{if(s)return a&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),s._getEventProperties();if(a){h9r("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let A=typeof a=="object"?a:void 0,y=await this.getFeatureFlagsForEvent(m.distinctId,o,u,A);return ulm(y)}return{}}).catch(()=>({})).then(A=>({...A,...m.properties||{},$groups:m.groups||o}));return m.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof g.$raw_user_agent=="string"&&gOu(g.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(m.event="$bot_pageview",g.$browser_type="bot"),{distinctId:m.distinctId,event:m.event,properties:g,options:{timestamp:m.timestamp,disableGeoip:m.disableGeoip,uuid:m.uuid}}}_runBeforeSend(t){let r=this.options.before_send;if(!r)return t;let n=Array.isArray(r)?r:[r],i=t;for(let o of n){if(i=o(i),!i)return this._logger.info(`Event '${t.event}' was rejected in beforeSend function`),null;if(!i.properties||Object.keys(i.properties).length===0){let s=`Event '${i.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(s)}}return i}};var gBu=require("async_hooks"),A9r=class{constructor(){this.storage=new gBu.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 ABu="posthog-node";function llm(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[a2o.POSTHOG_ID_TAG];if(c===void 0)return s;let u=e.options.host??"https://us.i.posthog.com",l=new URL(`/project/${e.apiKey}/person/${c}`,u).toString();s.tags["PostHog Person URL"]=l;let p=s.exception?.values||[],d=p.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(g=>({...g,platform:"node:javascript"}))}:void 0})),f={$exception_message:p[0]?.value||s.message,$exception_type:p[0]?.type,$exception_level:s.level,$exception_list:d,$sentry_event_id:s.event_id,$sentry_exception:s.exception,$sentry_exception_message:p[0]?.value||s.message,$sentry_exception_type:p[0]?.type,$sentry_tags:s.tags};return t&&r&&(f.$sentry_url=(n||"https://sentry.io/organizations/")+t+"/issues/?project="+r+"&query="+s.event_id),o&&e.capture({event:"$exception",distinctId:c,properties:f}),s}}var a2o=class{static#e=this.POSTHOG_ID_TAG="posthog_distinct_id";constructor(t,r,n,i,o){this.name=ABu,this.name=ABu,this.setupOnce=function(s,a){let c=a()?.getClient()?.getDsn()?.projectId;s(llm(t,{organization:r,projectId:c,prefix:n,severityAllowList:i,sendExceptionsToPostHog:o??!0}))}}};tH.errorPropertiesBuilder=new QQ.ErrorPropertiesBuilder([new QQ.EventCoercer,new QQ.ErrorCoercer,new QQ.ObjectCoercer,new QQ.StringCoercer,new QQ.PrimitiveCoercer],QQ.createStackParser("node:javascript",QQ.nodeStackLineParser),[dOu(),$Ou,rBu()]);var gve=class extends g9r{getLibraryId(){return"posthog-node"}initializeContext(){return new A9r}};var y9r=class{posthog;constructor({posthogApiKey:t}){this.posthog=new gve(t)}async identify(){}async sendEvent(t){t.orgId!=null&&this.posthog.capture({distinctId:t.orgId,event:"CLI",properties:{...t,...t.properties,version:"5.50.6",usingAccessToken:!0,...Kae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}};var H4t=class{async sendEvent(){}async sendAutomationEvent(){}async identify(){}async flush(){}};nm();Zt();var znt=require("fs/promises"),yBu=require("os"),bBu=require("path");xtt();var plm="id",flm=".fern",K4t=class{posthog;userId;token;constructor({token:t,posthogApiKey:r}){this.posthog=new gve(r),this.userId=t==null?void 0:POo(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.50.6",...t,...t.properties,usingAccessToken:!1,...r!=null?{userEmail:r}:{},...Kae()}})}sendAutomationEvent(t){this.posthog.capture({distinctId:t.distinctId,event:t.event,properties:t.properties})}async flush(){try{await Promise.race([this.posthog.flush(),new Promise(t=>setTimeout(t,3e3))])}catch{}}userEmail;async getUserEmail(){if(this.userEmail!==null){if(this.userEmail!=null)return this.userEmail;if(this.token==null){this.userEmail=null;return}try{let t=await vf({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=ID(),r=Ge(qt.of((0,yBu.homedir)()),Se.of(flm),Se.of(plm));try{await $t(r)?this.persistedDistinctId=(await(0,znt.readFile)(r)).toString():(await(0,znt.mkdir)((0,bBu.dirname)(r),{recursive:!0}),await(0,znt.writeFile)(r,t),this.persistedDistinctId=t)}catch{this.persistedDistinctId=t}}return this.persistedDistinctId}};var c2o;async function J4t(){return c2o==null&&(c2o=await dlm()),c2o}async function dlm(){try{let e="phc_yQgAEdJJkVpI24NdSRID2mor1x1leRpDoC9yZ9mfXal",t=process.env.FERN_DISABLE_TELEMETRY==="true";if(e==null||t)return new H4t;let r=await $tt();return r!=null?new K4t({token:r,posthogApiKey:e}):await o_()!=null?new y9r({posthogApiKey:e}):new K4t({token:void 0,posthogApiKey:e})}catch{return new H4t}}bn();Dt();jt();xW();var Y4t=be(require("process"),1);Wqe();var vBu=be(nEo(),1),xBu=be(IBu(),1);function k1(e,t={}){if(typeof e!="string"||e.length===0||(t={ambiguousIsNarrow:!0,...t},e=FG(e),e.length===0))return 0;e=e.replace((0,xBu.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(vBu.default.eastAsianWidth(i)){case"F":case"W":n+=2;break;case"A":n+=r;break;default:n+=1}}return n}bn();function b9r(e){let t=0;for(let r of e.split(`
|
|
3026
3026
|
`))t=Math.max(t,k1(r));return t}var _Bu=be(l2o(),1);var hlm=/[\p{Lu}]/u,glm=/[\p{Ll}]/u,SBu=/^[\p{Lu}](?![\p{Lu}])/gu,BBu=/([\p{Alpha}\p{N}_]|$)/u,p2o=/[_.\- ]+/,Alm=new RegExp("^"+p2o.source),TBu=new RegExp(p2o.source+BBu.source,"gu"),OBu=new RegExp("\\d+"+BBu.source,"gu"),ylm=(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&&hlm.test(u)?(e=e.slice(0,c)+"-"+e.slice(c),i=!1,s=o,o=!0,c++):o&&s&&glm.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},blm=(e,t)=>(SBu.lastIndex=0,e.replace(SBu,r=>t(r))),Elm=(e,t)=>(TBu.lastIndex=0,OBu.lastIndex=0,e.replace(TBu,(r,n)=>t(n)).replace(OBu,r=>t(r)));function f2o(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?p2o.test(e)?"":t.pascalCase?n(e):r(e):(e!==r(e)&&(e=ylm(e,r,n,t.preserveConsecutiveUppercase)),e=e.replace(Alm,""),e=t.preserveConsecutiveUppercase?blm(e,r):r(e),t.pascalCase&&(e=n(e.charAt(0))+e.slice(1)),Elm(e,n))}var g2o=be(DBu(),1);Wqe();var RBu=(e=0)=>t=>`\x1B[${t+e}m`,FBu=(e=0)=>t=>`\x1B[${38+e};5;${t}m`,kBu=(e=0)=>(t,r,n)=>`\x1B[${38+e};2;${t};${r};${n}m`,B0={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]}},ShI=Object.keys(B0.modifier),Clm=Object.keys(B0.color),wlm=Object.keys(B0.bgColor),ThI=[...Clm,...wlm];function Slm(){let e=new Map;for(let[t,r]of Object.entries(B0)){for(let[n,i]of Object.entries(r))B0[n]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},r[n]=B0[n],e.set(i[0],i[1]);Object.defineProperty(B0,t,{value:r,enumerable:!1})}return Object.defineProperty(B0,"codes",{value:e,enumerable:!1}),B0.color.close="\x1B[39m",B0.bgColor.close="\x1B[49m",B0.color.ansi=RBu(),B0.color.ansi256=FBu(),B0.color.ansi16m=kBu(),B0.bgColor.ansi=RBu(10),B0.bgColor.ansi256=FBu(10),B0.bgColor.ansi16m=kBu(10),Object.defineProperties(B0,{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=>B0.rgbToAnsi256(...B0.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)=>B0.ansi256ToAnsi(B0.rgbToAnsi256(t,r,n)),enumerable:!1},hexToAnsi:{value:t=>B0.ansi256ToAnsi(B0.hexToAnsi256(t)),enumerable:!1}}),B0}var Tlm=Slm(),NBu=Tlm;var E9r=new Set(["\x1B","\x9B"]),Olm=39,m2o="\x07",zBu="[",Blm="]",MBu="m",h2o=`${Blm}8;;`,jBu=e=>`${E9r.values().next().value}${zBu}${e}${MBu}`,QBu=e=>`${E9r.values().next().value}${h2o}${e}${m2o}`,Plm=e=>e.split(" ").map(t=>k1(t)),d2o=(e,t,r)=>{let n=[...t],i=!1,o=!1,s=k1(FG(e[e.length-1]));for(let[a,c]of n.entries()){let u=k1(c);if(s+u<=r?e[e.length-1]+=c:(e.push(c),s=0),E9r.has(c)&&(i=!0,o=n.slice(a+1).join("").startsWith(h2o)),i){o?c===m2o&&(i=!1,o=!1):c===MBu&&(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())},Dlm=e=>{let t=e.split(" "),r=t.length;for(;r>0&&!(k1(t[r-1])>0);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},Rlm=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",i,o,s=Plm(e),a=[""];for(let[u,l]of e.split(" ").entries()){r.trim!==!1&&(a[a.length-1]=a[a.length-1].trimStart());let p=k1(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(""),d2o(a,l,t);continue}if(p+s[u]>t&&p>0&&s[u]>0){if(r.wordWrap===!1&&p<t){d2o(a,l,t);continue}a.push("")}if(p+s[u]>t&&r.wordWrap===!1){d2o(a,l,t);continue}a[a.length-1]+=l}r.trim!==!1&&(a=a.map(u=>Dlm(u)));let c=[...a.join(`
|
|
3027
3027
|
`)];for(let[u,l]of c.entries()){if(n+=l,E9r.has(l)){let{groups:d}=new RegExp(`(?:\\${zBu}(?<code>\\d+)m|\\${h2o}(?<uri>.*)${m2o})`).exec(c.slice(u).join(""))||{groups:{}};if(d.code!==void 0){let f=Number.parseFloat(d.code);i=f===Olm?void 0:f}else d.uri!==void 0&&(o=d.uri.length===0?void 0:d.uri)}let p=NBu.codes.get(Number(i));c[u+1]===`
|
|
3028
3028
|
`?(o&&(n+=QBu("")),i&&p&&(n+=jBu(p))):l===`
|
|
@@ -3594,7 +3594,7 @@ Hint: Values starting with "@" (such as scoped npm packages) must be wrapped in
|
|
|
3594
3594
|
Add a 'docs:' section to your fern.yml to get started.`,code:B.Code.ConfigError});let o=await new UBe({context:t}).check({workspace:n,strict:r.strict}),s=new Set(o.mdxParseErrors.map(p=>p.displayRelativeFilepath)),a=new Set(o.mdxParseErrors.map(p=>p.rawMessage)),c=o.violations.filter(p=>!(s.size>0&&JKm(p,s,a))),u=o.hasErrors||r.strict&&o.hasWarnings;if(r.json){let p=this.buildJsonResponse({result:o,filteredViolations:c,hasErrors:u});if(t.stdout.info(JSON.stringify(p,null,2)),u)throw new B({code:B.Code.ValidationError});return}if(c.length>0)for(let p of c){let d=p.severity==="warning"?fe.yellow:fe.red;process.stderr.write(`${d(`${p.displayRelativeFilepath}:${p.line}:${p.column}: ${p.message}`)}
|
|
3595
3595
|
`)}let l=0;if(o.mdxParseErrors.length>0){for(let p of o.mdxParseErrors)t.stderr.info(`
|
|
3596
3596
|
${p.toString()}
|
|
3597
|
-
`);r.fix?l+=await D$n(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!lYn()&&await R$n(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new Vyt({context:t}).fix({workspace:n,violations:c});l+=d.fixedCount}if(u&&(!r.fix||l===0))throw new B({code:B.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Pr.warning} ${fe.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(fe.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Pr.success} ${fe.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>gee(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function JKm(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function EKo(e){let t=new bKo;Xn(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}).option("fix",{type:"boolean",description:"Automatically fix issues that have a known resolution",default:!1}))}db();jt();var Ctl=be(require("net"),1),wtl=be(require("os"),1),N$n=class extends Error{constructor(t){super(`${t} is locked`)}},Wyt={old:new Set,young:new Set},YKm=1e3*15,Stl=new Set;var M8t,XKm=()=>{let e=wtl.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},vtl=e=>new Promise((t,r)=>{let n=Ctl.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),xtl=async(e,t)=>{if(e.host||e.port===0)return vtl(e);for(let r of t)try{await vtl({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},ZKm=e=>Wyt.old.has(e)||Wyt.young.has(e)||Stl.has(e),$Km=function*(e){e&&(yield*e),yield 0};async function _Be(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};M8t===void 0&&(M8t=setTimeout(()=>{M8t=void 0,Wyt.old=Wyt.young,Wyt.young=new Set},YKm),M8t.unref&&M8t.unref());let o=XKm();for(let s of $Km(t))try{if(r.has(s))continue;let a=await xtl({...i,port:s},o);for(;ZKm(a);){if(s!==0)throw new N$n(s);a=await xtl({...i,port:s},o)}return n?Stl.add(a):Wyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof N$n))throw a}throw new Error("No available ports found")}jt();var Btl=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Ttl="docs.buildwithfern.com",Otl=62;function Y3e(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)),Btl.test(t)}function Ptl(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function L8t({orgId:e,previewId:t}){let r=Ptl(t),n=`${e}-preview-${r}.${Ttl}`;if(n.length<=Otl)return n;let i=`${e}-preview-`,o=Otl-i.length;if(o<8)throw new B({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:B.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Ttl}`}Dt();CC();Qm();Zt();Ow();jt();bn();var sZo=require("child_process"),Zdl=be(xKo(),1),aZo=be(Iei(),1),cZo=be(require("fs"),1),v4e=require("fs/promises"),$dl=be(require("http"),1),pZo=be(require("path"),1);jei();Zt();var T9=require("fs/promises"),mal=require("os"),lYo=be(require("path"),1),Lnh=".fern",Unh="logs",uYo=100*1024*1024;function Vnh(){return"cli@5.50.
|
|
3597
|
+
`);r.fix?l+=await D$n(t,o.mdxParseErrors):process.stdout.isTTY===!0&&!lYn()&&await R$n(t,o.mdxParseErrors)}if(r.fix&&c.length>0){let d=await new Vyt({context:t}).fix({workspace:n,violations:c});l+=d.fixedCount}if(u&&(!r.fix||l===0))throw new B({code:B.Code.ValidationError});if(o.warningCount>0){t.stderr.info(`${Pr.warning} ${fe.yellow(`Found ${o.warningCount} warnings`)}`),t.stderr.info(fe.dim(" Run 'fern docs check --strict' to treat warnings as errors"));return}t.stderr.info(`${Pr.success} ${fe.green("All checks passed")}`)}buildJsonResponse({result:t,filteredViolations:r,hasErrors:n}){let i={};return(r.length>0||t.mdxParseErrors.length>0)&&(i.docs=[...r.map(o=>gee(o)),...t.mdxParseErrors.map(o=>({severity:"error",rule:o.code.code,filepath:o.displayRelativeFilepath,...o.line!=null?{line:o.line}:{},...o.column!=null?{column:o.column}:{},message:`[${o.code.code}] ${o.code.title}: ${o.rawMessage}`}))]),{success:!n,results:i}}};function JKm(e,t,r){if(!/failed to parse|failed to initialize/i.test(e.message))return!1;for(let n of r)if(n.length>0&&e.message.includes(n))return!0;for(let n of t){if(e.message.includes(n))return!0;let i=n.split("/").filter(Boolean);for(let o=i.length;o>=2;o--){let s=i.slice(i.length-o).join("/");if(e.message.includes(s))return!0}if(i.length===1){let o=i[0];if(o!=null&&e.message.includes(o))return!0}}return!1}function EKo(e){let t=new bKo;Xn(e,"check","Validate docs configuration",(r,n)=>t.handle(r,n),r=>r.option("strict",{type:"boolean",description:"Treat warnings as errors",default:!1}).option("json",{type:"boolean",description:"Output results as JSON to stdout",default:!1}).option("fix",{type:"boolean",description:"Automatically fix issues that have a known resolution",default:!1}))}db();jt();var Ctl=be(require("net"),1),wtl=be(require("os"),1),N$n=class extends Error{constructor(t){super(`${t} is locked`)}},Wyt={old:new Set,young:new Set},YKm=1e3*15,Stl=new Set;var M8t,XKm=()=>{let e=wtl.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},vtl=e=>new Promise((t,r)=>{let n=Ctl.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:i}=n.address();n.close(()=>{t(i)})})}),xtl=async(e,t)=>{if(e.host||e.port===0)return vtl(e);for(let r of t)try{await vtl({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},ZKm=e=>Wyt.old.has(e)||Wyt.young.has(e)||Stl.has(e),$Km=function*(e){e&&(yield*e),yield 0};async function _Be(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let s=e.exclude;if(typeof s[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let a of s){if(typeof a!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(a))throw new TypeError(`Number ${a} in the exclude option is not a safe integer and can't be used`)}r=new Set(s)}let{reserve:n,...i}=e??{};M8t===void 0&&(M8t=setTimeout(()=>{M8t=void 0,Wyt.old=Wyt.young,Wyt.young=new Set},YKm),M8t.unref&&M8t.unref());let o=XKm();for(let s of $Km(t))try{if(r.has(s))continue;let a=await xtl({...i,port:s},o);for(;ZKm(a);){if(s!==0)throw new N$n(s);a=await xtl({...i,port:s},o)}return n?Stl.add(a):Wyt.young.add(a),a}catch(a){if(!["EADDRINUSE","EACCES"].includes(a.code)&&!(a instanceof N$n))throw a}throw new Error("No available ports found")}jt();var Btl=/^[a-z0-9-]+-preview-[a-z0-9-]+\.docs\.buildwithfern\.com$/i,Ttl="docs.buildwithfern.com",Otl=62;function Y3e(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)),Btl.test(t)}function Ptl(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}function L8t({orgId:e,previewId:t}){let r=Ptl(t),n=`${e}-preview-${r}.${Ttl}`;if(n.length<=Otl)return n;let i=`${e}-preview-`,o=Otl-i.length;if(o<8)throw new B({message:`Organization name "${e}" is too long to generate a valid preview URL`,code:B.Code.ValidationError});let a=r.slice(0,o).replace(/-+$/,"");return`${i}${a}.${Ttl}`}Dt();CC();Qm();Zt();Ow();jt();bn();var sZo=require("child_process"),Zdl=be(xKo(),1),aZo=be(Iei(),1),cZo=be(require("fs"),1),v4e=require("fs/promises"),$dl=be(require("http"),1),pZo=be(require("path"),1);jei();Zt();var T9=require("fs/promises"),mal=require("os"),lYo=be(require("path"),1),Lnh=".fern",Unh="logs",uYo=100*1024*1024;function Vnh(){return"cli@5.50.6"}var l4e=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??Ge(Ge(qt.of((0,mal.homedir)()),Se.of(Lnh)),Se.of(Unh));await $t(n)||await(0,T9.mkdir)(n,{recursive:!0});let o=`${new Date().toISOString().replace(/[:.]/g,"-")}.debug.log`;this.logFilePath=Ge(n,Se.of(o));let s=["================================================================================","Fern Docs Dev Debug Log",`Session started: ${new Date().toISOString()}`,`Log file: ${lYo.default.basename(this.logFilePath)}`,"================================================================================",""].join(`
|
|
3598
3598
|
`);await(0,T9.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)+`
|
|
3599
3599
|
`;try{await(0,T9.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:Vnh(),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,T9.readdir)(t)).filter(c=>c.endsWith(".log")),i=[];for(let c of n){let u=lYo.default.join(t,c);try{let l=await(0,T9.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=uYo/1024/1024;if(o<=uYo){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<=uYo)break;if(!(this.logFilePath!=null&&c.fullPath===this.logFilePath))try{await(0,T9.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 Qei={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Headers":"Content-Type"};function hal(e){let t=_nh();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:Qei});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",...Qei}})}catch{return new Response(JSON.stringify(i()),{headers:{"Content-Type":"application/json",...Qei}})}let d=/^\/_local\/(.*)/.exec(p.pathname);return u.method==="GET"&&d!=null?new Response(t.file(`/${d[1]}`),{headers:Qei}):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 l4e.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 _nh(){return globalThis.Bun}jt();var kal=require("events"),Vei=be(require("fs"),1),f4e=be(require("path"),1);var gal=be(require("os"),1),Aal=300,ZBe=20,b9t=1e7,yal=gal.default.platform();var qnh=yal==="darwin",pYo=yal==="win32",$Be=qnh||pYo,bal=3e3,Eal=2e4,fYo=1250;var bie;(function(e){e[e.DIR=1]="DIR",e[e.FILE=2]="FILE"})(bie||(bie={}));var p4e;(function(e){e.CHANGE="change",e.RENAME="rename"})(p4e||(p4e={}));var E9t;(function(e){e.CHANGE="change",e.ERROR="error"})(E9t||(E9t={}));var Cc;(function(e){e.ADD="add",e.ADD_DIR="addDir",e.CHANGE="change",e.RENAME="rename",e.RENAME_DIR="renameDir",e.UNLINK="unlink",e.UNLINK_DIR="unlinkDir"})(Cc||(Cc={}));var eN;(function(e){e.ALL="all",e.CLOSE="close",e.ERROR="error",e.READY="ready"})(eN||(eN={}));var Gnh=(e,t=1,r)=>{t=Math.max(1,t);let n=r?.leading??!1,i=r?.trailing??!0,o=Math.max(r?.maxWait??1/0,t),s,a,c=0,u=0,l=()=>{let I=Date.now(),C=I-c,w=I-u,T=C>=t||w>=o;return[I,T]},p=I=>{if(u=I,!s)return;let C=s;s=void 0,e.apply(void 0,C)},d=()=>{E(0)},f=()=>{a&&(d(),p(Date.now()))},m=I=>{if(u=I,n)return p(I)},g=I=>{if(i&&s)return p(I);s=void 0},A=()=>{a=void 0;let[I,C]=l();return C?g(I):y(I)},y=I=>{let C=I-c,w=I-u,T=t-C,P=o-w,O=Math.min(T,P);return E(O)},E=I=>{a&&clearTimeout(a),!(I<=0)&&(a=setTimeout(A,I))},v=(...I)=>{let[C,w]=l(),T=!!a;if(s=I,c=C,(w||!a)&&E(t),w)return T?p(C):m(C)};return v.cancel=d,v.flush=f,v},zei=Gnh;var gYo=be(require("fs"),1),Lei=be(require("path"),1);var Bd=be(require("fs"),1),MB=require("util");var Qde=(e,t)=>function(...n){return e.apply(void 0,n).catch(t)},Eie=(e,t)=>function(...n){try{return e.apply(void 0,n)}catch(i){return t(i)}};var dYo=be(require("process"),1),Ial=dYo.default.getuid?!dYo.default.getuid():!1,val=1e4,rM=()=>{};var I9t={isChangeErrorOk:e=>{if(!I9t.isNodeError(e))return!1;let{code:t}=e;return t==="ENOSYS"||!Ial&&(t==="EINVAL"||t==="EPERM")},isNodeError:e=>e instanceof Error,isRetriableError:e=>{if(!I9t.isNodeError(e))return!1;let{code:t}=e;return t==="EMFILE"||t==="ENFILE"||t==="EAGAIN"||t==="EBUSY"||t==="EACCESS"||t==="EACCES"||t==="EACCS"||t==="EPERM"},onChangeError:e=>{if(!I9t.isNodeError(e))throw e;if(!I9t.isChangeErrorOk(e))throw e}},Zv=I9t;var mYo=class{constructor(){this.interval=25,this.intervalId=void 0,this.limit=val,this.queueActive=new Set,this.queueWaiting=new Set,this.init=()=>{this.intervalId||(this.intervalId=setInterval(this.tick,this.interval))},this.reset=()=>{this.intervalId&&(clearInterval(this.intervalId),delete this.intervalId)},this.add=t=>{this.queueWaiting.add(t),this.queueActive.size<this.limit/2?this.tick():this.init()},this.remove=t=>{this.queueWaiting.delete(t),this.queueActive.delete(t)},this.schedule=()=>new Promise(t=>{let r=()=>this.remove(n),n=()=>t(r);this.add(n)}),this.tick=()=>{if(!(this.queueActive.size>=this.limit)){if(!this.queueWaiting.size)return this.reset();for(let t of this.queueWaiting){if(this.queueActive.size>=this.limit)break;this.queueWaiting.delete(t),this.queueActive.add(t),t()}}}}},xal=new mYo;var zde=(e,t)=>function(n){return function i(...o){return xal.schedule().then(s=>{let a=u=>(s(),u),c=u=>{if(s(),Date.now()>=n)throw u;if(t(u)){let l=Math.round(100*Math.random());return new Promise(d=>setTimeout(d,l)).then(()=>i.apply(void 0,o))}throw u};return e.apply(void 0,o).then(a,c)})}},Mde=(e,t)=>function(n){return function i(...o){try{return e.apply(void 0,o)}catch(s){if(Date.now()>n)throw s;if(t(s))return i.apply(void 0,o);throw s}}};var Wnh={attempt:{chmod:Qde((0,MB.promisify)(Bd.default.chmod),Zv.onChangeError),chown:Qde((0,MB.promisify)(Bd.default.chown),Zv.onChangeError),close:Qde((0,MB.promisify)(Bd.default.close),rM),fsync:Qde((0,MB.promisify)(Bd.default.fsync),rM),mkdir:Qde((0,MB.promisify)(Bd.default.mkdir),rM),realpath:Qde((0,MB.promisify)(Bd.default.realpath),rM),stat:Qde((0,MB.promisify)(Bd.default.stat),rM),unlink:Qde((0,MB.promisify)(Bd.default.unlink),rM),chmodSync:Eie(Bd.default.chmodSync,Zv.onChangeError),chownSync:Eie(Bd.default.chownSync,Zv.onChangeError),closeSync:Eie(Bd.default.closeSync,rM),existsSync:Eie(Bd.default.existsSync,rM),fsyncSync:Eie(Bd.default.fsync,rM),mkdirSync:Eie(Bd.default.mkdirSync,rM),realpathSync:Eie(Bd.default.realpathSync,rM),statSync:Eie(Bd.default.statSync,rM),unlinkSync:Eie(Bd.default.unlinkSync,rM)},retry:{close:zde((0,MB.promisify)(Bd.default.close),Zv.isRetriableError),fsync:zde((0,MB.promisify)(Bd.default.fsync),Zv.isRetriableError),open:zde((0,MB.promisify)(Bd.default.open),Zv.isRetriableError),readFile:zde((0,MB.promisify)(Bd.default.readFile),Zv.isRetriableError),rename:zde((0,MB.promisify)(Bd.default.rename),Zv.isRetriableError),stat:zde((0,MB.promisify)(Bd.default.stat),Zv.isRetriableError),write:zde((0,MB.promisify)(Bd.default.write),Zv.isRetriableError),writeFile:zde((0,MB.promisify)(Bd.default.writeFile),Zv.isRetriableError),closeSync:Mde(Bd.default.closeSync,Zv.isRetriableError),fsyncSync:Mde(Bd.default.fsyncSync,Zv.isRetriableError),openSync:Mde(Bd.default.openSync,Zv.isRetriableError),readFileSync:Mde(Bd.default.readFileSync,Zv.isRetriableError),renameSync:Mde(Bd.default.renameSync,Zv.isRetriableError),statSync:Mde(Bd.default.statSync,Zv.isRetriableError),writeSync:Mde(Bd.default.writeSync,Zv.isRetriableError),writeFileSync:Mde(Bd.default.writeFileSync,Zv.isRetriableError)}},Cal=Wnh;var Mei=be(require("fs"),1),v9t=be(require("path"),1);var hYo=()=>{};var Hnh=()=>{let e=hYo,t=hYo,r=!1,n=!1;return{promise:new Promise((c,u)=>{e=l=>(r=!0,c(l)),t=l=>(n=!0,u(l))}),resolve:e,reject:t,isPending:()=>!r&&!n,isResolved:()=>r,isRejected:()=>n}},wal=Hnh;var Knh=()=>{let{promise:e,resolve:t,isPending:r}=wal(),n=0,i=()=>{n+=1},o=()=>{n-=1,!n&&t()};return i(),queueMicrotask(o),{promise:e,isPending:r,increment:i,decrement:o}},Sal=Knh;var Tal={then:e=>{e()}};var Oal=e=>Array.isArray(e)?e:[e],Bal=e=>typeof e=="function";var Jnh=(e,t)=>{let r=t?.followSymlinks??!1,n=t?.depth??1/0,i=t?.limit??1/0,o=t?.ignore??[],s=Oal(o).map(se=>Bal(se)?se:pe=>se.test(pe)),a=se=>s.some(pe=>pe(se)),c=t?.signal??{aborted:!1},u=t?.onDirents||(()=>{}),l=[],p=new Set,d={},f=[],m=new Set,g={},A=[],y=new Set,E={},v={},I=new Set,C={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{},map:{}},w={directories:l,directoriesNames:p,directoriesNamesToPaths:d,files:f,filesNames:m,filesNamesToPaths:g,symlinks:A,symlinksNames:y,symlinksNamesToPaths:E,map:v},{promise:T,increment:P,decrement:O}=Sal(),M=0,K=(se,pe,xe,ve)=>{I.has(pe)||M>=i||(M+=1,se.directories.push(pe),se.directoriesNames.add(xe),l.push(pe),p.add(xe),d.propertyIsEnumerable(xe)||(d[xe]=[]),d[xe].push(pe),I.add(pe),!(ve>=n)&&(M>=i||ce(pe,ve+1)))},Y=(se,pe,xe)=>{I.has(pe)||M>=i||(M+=1,se.files.push(pe),se.filesNames.add(xe),f.push(pe),m.add(xe),g.propertyIsEnumerable(xe)||(g[xe]=[]),g[xe].push(pe),I.add(pe))},Z=(se,pe,xe,ve)=>{I.has(pe)||M>=i||(M+=1,se.symlinks.push(pe),se.symlinksNames.add(xe),A.push(pe),y.add(xe),E.propertyIsEnumerable(xe)||(E[xe]=[]),E[xe].push(pe),I.add(pe),r&&(ve>=n||M>=i||Te(pe,ve+1)))},ae=(se,pe,xe,ve,Re)=>{c.aborted||a(pe)||(ve.isDirectory()?K(se,pe,xe,Re):ve.isFile()?Y(se,pe,xe):ve.isSymbolicLink()&&Z(se,pe,xe,Re))},le=(se,pe,xe,ve)=>{if(c.aborted)return;let Re=pe===v9t.default.sep?"":v9t.default.sep,Ke=xe.name,ct=`${pe}${Re}${Ke}`;a(ct)||(xe.isDirectory()?K(se,ct,Ke,ve):xe.isFile()?Y(se,ct,Ke):xe.isSymbolicLink()&&Z(se,ct,Ke,ve))},oe=(se,pe,xe,ve)=>{for(let Re=0,Ke=xe.length;Re<Ke;Re++)le(se,pe,xe[Re],ve)},ce=(se,pe)=>{c.aborted||pe>n||M>=i||(P(),Mei.default.readdir(se,{withFileTypes:!0},(xe,ve)=>{if(xe||c.aborted||!ve.length)return O();(u(ve)||Tal).then(()=>{let Ke=v[se]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};oe(Ke,se,ve,pe),O()})}))},Te=(se,pe)=>{P(),Mei.default.realpath(se,(xe,ve)=>{if(xe||c.aborted)return O();Mei.default.stat(ve,(Re,Ke)=>{if(Re||c.aborted)return O();let ct=v9t.default.basename(ve),Ct=v[se]={directories:[],directoriesNames:new Set,directoriesNamesToPaths:{},files:[],filesNames:new Set,filesNamesToPaths:{},symlinks:[],symlinksNames:new Set,symlinksNamesToPaths:{}};ae(Ct,ve,ct,Ke,pe),O()})})};return(async(se,pe=1)=>(se=v9t.default.normalize(se),I.add(se),ce(se,pe),await T,c.aborted?C:w))(e)},Pal=Jnh;var Iie={lang:{debounce:zei,attempt:e=>{try{return e()}catch(t){return Iie.lang.castError(t)}},castArray:e=>Iie.lang.isArray(e)?e:[e],castError:e=>Iie.lang.isError(e)?e:Iie.lang.isString(e)?new Error(e):new Error("Unknown error"),defer:e=>setTimeout(e,0),isArray:e=>Array.isArray(e),isError:e=>e instanceof Error,isFunction:e=>typeof e=="function",isNaN:e=>Number.isNaN(e),isNumber:e=>typeof e=="number",isPrimitive:e=>{if(e===null)return!0;let t=typeof e;return t!=="object"&&t!=="function"},isShallowEqual:(e,t)=>{if(e===t)return!0;if(Iie.lang.isNaN(e))return Iie.lang.isNaN(t);if(Iie.lang.isPrimitive(e)||Iie.lang.isPrimitive(t))return e===t;for(let r in e)if(!(r in t))return!1;for(let r in t)if(e[r]!==t[r])return!1;return!0},isSet:e=>e instanceof Set,isString:e=>typeof e=="string",isUndefined:e=>e===void 0,noop:()=>{},uniq:e=>e.length<2?e:Array.from(new Set(e))},fs:{getDepth:e=>Math.max(0,e.split(Lei.default.sep).length-1),getRealPath:(e,t)=>{try{return t?gYo.default.realpathSync.native(e):gYo.default.realpathSync(e)}catch{return}},isSubPath:(e,t)=>t.startsWith(e)&&t[e.length]===Lei.default.sep&&t.length-e.length>Lei.default.sep.length,poll:(e,t=Eal)=>Cal.retry.stat(t)(e,{bigint:!0}).catch(Iie.lang.noop),readdir:async(e,t,r=1/0,n=1/0,i,o)=>{if(o&&r===1&&e in o){let s=o[e];return[s.directories,s.files]}else{let s=await Pal(e,{depth:r,limit:n,ignore:t,signal:i});return[s.directories,s.files]}}}},Yl=Iie;var Uei=be(require("path"),1);var AYo=class{constructor(t,r,n){this.base=n,this.watcher=t,this.handler=r.handler,this.fswatcher=r.watcher,this.options=r.options,this.folderPath=r.folderPath,this.filePath=r.filePath,this.handlerBatched=this.base?this.base.onWatcherEvent.bind(this.base):this._makeHandlerBatched(this.options.debounce)}_isSubRoot(t){return this.filePath?t===this.filePath:t===this.folderPath||Yl.fs.isSubPath(this.folderPath,t)}_makeHandlerBatched(t=Aal){return(()=>{let r=this.watcher._readyWait,n=[],i=new Set,o=async(a,c)=>{let u=this.options.ignoreInitial?[]:a,l=await this.eventsPopulate([...c]),p=this.eventsDeduplicate([...u,...l]);this.onTargetEvents(p)},s=Yl.lang.debounce(()=>{this.watcher.isClosed()||(r=o(n,i),n=[],i=new Set)},t);return async(a,c="",u=!1)=>{u?await this.eventsPopulate([c],n,!0):i.add(c),r.then(s)}})()}eventsDeduplicate(t){if(t.length<2)return t;let r={};return t.reduce((n,i)=>{let[o,s]=i,a=r[s];return o===a||o===Cc.CHANGE&&a===Cc.ADD||(r[s]=o,n.push(i)),n},[])}async eventsPopulate(t,r=[],n=!1){return await Promise.all(t.map(async i=>{let o=await this.watcher._poller.update(i,this.options.pollingTimeout);await Promise.all(o.map(async s=>{r.push([s,i]),s===Cc.ADD_DIR?await this.eventsPopulateAddDir(t,i,r,n):s===Cc.UNLINK_DIR&&await this.eventsPopulateUnlinkDir(t,i,r,n)}))})),r}async eventsPopulateAddDir(t,r,n=[],i=!1){if(i)return n;let o=this.options.recursive?this.options.depth??ZBe:Math.min(1,this.options.depth??ZBe),s=this.options.limit??b9t,[a,c]=await Yl.fs.readdir(r,this.options.ignore,o,s,this.watcher._closeSignal),u=[...a,...c];return await Promise.all(u.map(l=>{if(!this.watcher.isIgnored(l,this.options.ignore)&&!t.includes(l))return this.eventsPopulate([l],n,!0)})),n}async eventsPopulateUnlinkDir(t,r,n=[],i=!1){if(i)return n;for(let o of this.watcher._poller.stats.keys())Yl.fs.isSubPath(r,o)&&(t.includes(o)||await this.eventsPopulate([o],n,!0));return n}onTargetAdd(t){this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAdd(t,this.options.renameTimeout):this.watcher.event(Cc.ADD,t))}onTargetAddDir(t){t!==this.folderPath&&this.options.recursive&&!$Be&&this.options.native!==!1&&this.watcher.watchDirectory(t,this.options,this.handler,void 0,this.base||this),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetAddDir(t,this.options.renameTimeout):this.watcher.event(Cc.ADD_DIR,t))}onTargetChange(t){this._isSubRoot(t)&&this.watcher.event(Cc.CHANGE,t)}onTargetUnlink(t){this.watcher.watchersClose(Uei.default.dirname(t),t,!1),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlink(t,this.options.renameTimeout):this.watcher.event(Cc.UNLINK,t))}onTargetUnlinkDir(t){this.watcher.watchersClose(Uei.default.dirname(t),t,!1),this.watcher.watchersClose(t),this._isSubRoot(t)&&(this.options.renameDetection?this.watcher._locker.getLockTargetUnlinkDir(t,this.options.renameTimeout):this.watcher.event(Cc.UNLINK_DIR,t))}onTargetEvent(t){let[r,n]=t;r===Cc.ADD?this.onTargetAdd(n):r===Cc.ADD_DIR?this.onTargetAddDir(n):r===Cc.CHANGE?this.onTargetChange(n):r===Cc.UNLINK?this.onTargetUnlink(n):r===Cc.UNLINK_DIR&&this.onTargetUnlinkDir(n)}onTargetEvents(t){for(let r of t)this.onTargetEvent(r)}onWatcherEvent(t,r,n=!1){return this.handlerBatched(t,r,n)}onWatcherChange(t=p4e.CHANGE,r){if(this.watcher.isClosed())return;let n=Uei.default.resolve(this.folderPath,r||"");this.filePath&&n!==this.folderPath&&n!==this.filePath||this.watcher.isIgnored(n,this.options.ignore)||this.onWatcherEvent(t,n)}onWatcherError(t){pYo&&t.code==="EPERM"?this.onWatcherChange(p4e.CHANGE,""):this.watcher.error(t)}async init(){await this.initWatcherEvents(),await this.initInitialEvents()}async initWatcherEvents(){let t=this.onWatcherChange.bind(this);this.fswatcher.on(E9t.CHANGE,t);let r=this.onWatcherError.bind(this);this.fswatcher.on(E9t.ERROR,r)}async initInitialEvents(){let t=!this.watcher.isReady();if(this.filePath){if(this.watcher._poller.stats.has(this.filePath))return;await this.onWatcherEvent(p4e.CHANGE,this.filePath,t)}else{let r=this.options.recursive&&$Be&&this.options.native!==!1?this.options.depth??ZBe:Math.min(1,this.options.depth??ZBe),n=this.options.limit??b9t,[i,o]=await Yl.fs.readdir(this.folderPath,this.options.ignore,r,n,this.watcher._closeSignal,this.options.readdirMap),s=[this.folderPath,...i,...o];await Promise.all(s.map(a=>{if(!this.watcher._poller.stats.has(a)&&!this.watcher.isIgnored(a,this.options.ignore))return this.onWatcherEvent(p4e.CHANGE,a,t)}))}}},Dal=AYo;var tN={interval:100,intervalId:void 0,fns:new Map,init:()=>{tN.intervalId||(tN.intervalId=setInterval(tN.resolve,tN.interval))},reset:()=>{tN.intervalId&&(clearInterval(tN.intervalId),delete tN.intervalId)},add:(e,t)=>{tN.fns.set(e,Date.now()+t),tN.init()},remove:e=>{tN.fns.delete(e)},resolve:()=>{if(!tN.fns.size)return tN.reset();let e=Date.now();for(let[t,r]of tN.fns)r>=e||(tN.remove(t),t())}},x9t=tN;var C9t=class e{constructor(t){this._watcher=t,this.reset()}getLockAdd(t,r=fYo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{let p=this._watcher._poller.paths.find(n||-1,d=>d!==i);if(p&&p!==i){if(Yl.fs.getRealPath(i,!0)===p)return;this._watcher.event(o.rename,p,i)}else this._watcher.event(o.add,i)};if(!n)return a();let c=()=>{s.add.delete(n),x9t.remove(u)},u=()=>{c(),a()};x9t.add(u,r);let l=()=>{let p=s.unlink.get(n);if(!p)return;c();let d=p();i===d?o.change&&this._watcher._poller.stats.has(i)&&this._watcher.event(o.change,i):this._watcher.event(o.rename,d,i)};s.add.set(n,l),l()}getLockUnlink(t,r=fYo){let{ino:n,targetPath:i,events:o,locks:s}=t,a=()=>{this._watcher.event(o.unlink,i)};if(!n)return a();let c=()=>{s.unlink.delete(n),x9t.remove(u)},u=()=>{c(),a()};x9t.add(u,r);let l=()=>(c(),i);s.unlink.set(n,l),s.add.get(n)?.()}getLockTargetAdd(t,r){let n=this._watcher._poller.getIno(t,Cc.ADD,bie.FILE);return this.getLockAdd({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetAddDir(t,r){let n=this._watcher._poller.getIno(t,Cc.ADD_DIR,bie.DIR);return this.getLockAdd({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}getLockTargetUnlink(t,r){let n=this._watcher._poller.getIno(t,Cc.UNLINK,bie.FILE);return this.getLockUnlink({ino:n,targetPath:t,events:e.FILE_EVENTS,locks:this._locksFile},r)}getLockTargetUnlinkDir(t,r){let n=this._watcher._poller.getIno(t,Cc.UNLINK_DIR,bie.DIR);return this.getLockUnlink({ino:n,targetPath:t,events:e.DIR_EVENTS,locks:this._locksDir},r)}reset(){this._locksAdd=new Map,this._locksAddDir=new Map,this._locksUnlink=new Map,this._locksUnlinkDir=new Map,this._locksDir={add:this._locksAddDir,unlink:this._locksUnlinkDir},this._locksFile={add:this._locksAdd,unlink:this._locksUnlink}}};C9t.DIR_EVENTS={add:Cc.ADD_DIR,rename:Cc.RENAME_DIR,unlink:Cc.UNLINK_DIR};C9t.FILE_EVENTS={add:Cc.ADD,change:Cc.CHANGE,rename:Cc.RENAME,unlink:Cc.UNLINK};var Ral=C9t;var yYo=class{constructor(){this.map=new Map}clear(){this.map.clear()}delete(t,r){if(Yl.lang.isUndefined(r))return this.map.delete(t);if(this.map.has(t)){let n=this.map.get(t);if(Yl.lang.isSet(n)){let i=n.delete(r);return n.size||this.map.delete(t),i}else if(n===r)return this.map.delete(t),!0}return!1}find(t,r){if(this.map.has(t)){let n=this.map.get(t);if(Yl.lang.isSet(n))return Array.from(n).find(r);if(r(n))return n}}get(t){return this.map.get(t)}has(t,r){if(Yl.lang.isUndefined(r))return this.map.has(t);if(this.map.has(t)){let n=this.map.get(t);return Yl.lang.isSet(n)?n.has(r):n===r}return!1}set(t,r){if(this.map.has(t)){let n=this.map.get(t);Yl.lang.isSet(n)?n.add(r):n!==r&&this.map.set(t,new Set([n,r]))}else this.map.set(t,r);return this}},bYo=yYo;var EYo=class{constructor(t){this.ino=t.ino<=Number.MAX_SAFE_INTEGER?Number(t.ino):t.ino,this.size=Number(t.size),this.atimeMs=Number(t.atimeMs),this.mtimeMs=Number(t.mtimeMs),this.ctimeMs=Number(t.ctimeMs),this.birthtimeMs=Number(t.birthtimeMs),this._isFile=t.isFile(),this._isDirectory=t.isDirectory(),this._isSymbolicLink=t.isSymbolicLink()}isFile(){return this._isFile}isDirectory(){return this._isDirectory}isSymbolicLink(){return this._isSymbolicLink}},Fal=EYo;var IYo=class{constructor(){this.inos={},this.paths=new bYo,this.stats=new Map}getIno(t,r,n){let i=this.inos[r];if(!i)return;let o=i[t];if(o&&!(n&&o[1]!==n))return o[0]}getStats(t){return this.stats.get(t)}async poll(t,r){let n=await Yl.fs.poll(t,r);if(!(!n||!(n.isFile()||n.isDirectory())))return new Fal(n)}reset(){this.inos={},this.paths=new bYo,this.stats=new Map}async update(t,r){let n=this.getStats(t),i=await this.poll(t,r);if(this.updateStats(t,i),!n&&i){if(i.isFile())return this.updateIno(t,Cc.ADD,i),[Cc.ADD];if(i.isDirectory())return this.updateIno(t,Cc.ADD_DIR,i),[Cc.ADD_DIR]}else if(n&&!i){if(n.isFile())return this.updateIno(t,Cc.UNLINK,n),[Cc.UNLINK];if(n.isDirectory())return this.updateIno(t,Cc.UNLINK_DIR,n),[Cc.UNLINK_DIR]}else if(n&&i){if(n.isFile()){if(i.isFile())return n.ino===i.ino&&!n.size&&!i.size?[]:(this.updateIno(t,Cc.CHANGE,i),[Cc.CHANGE]);if(i.isDirectory())return this.updateIno(t,Cc.UNLINK,n),this.updateIno(t,Cc.ADD_DIR,i),[Cc.UNLINK,Cc.ADD_DIR]}else if(n.isDirectory()){if(i.isFile())return this.updateIno(t,Cc.UNLINK_DIR,n),this.updateIno(t,Cc.ADD,i),[Cc.UNLINK_DIR,Cc.ADD];if(i.isDirectory())return n.ino===i.ino?[]:(this.updateIno(t,Cc.UNLINK_DIR,n),this.updateIno(t,Cc.ADD_DIR,i),[Cc.UNLINK_DIR,Cc.ADD_DIR])}}return[]}updateIno(t,r,n){let i=this.inos[r]=this.inos[r]||(this.inos[r]={}),o=n.isFile()?bie.FILE:bie.DIR;i[t]=[n.ino,o]}updateStats(t,r){if(r)this.paths.set(r.ino,t),this.stats.set(t,r);else{let n=this.stats.get(t)?.ino||-1;this.paths.delete(n,t),this.stats.delete(t)}}},vYo=IYo;var xYo=class e extends kal.EventEmitter{constructor(t,r,n){super(),this._closed=!1,this._ready=!1,this._closeAborter=new AbortController,this._closeSignal=this._closeAborter.signal,this.on(eN.CLOSE,()=>this._closeAborter.abort()),this._closeWait=new Promise(i=>this.on(eN.CLOSE,i)),this._readyWait=new Promise(i=>this.on(eN.READY,i)),this._locker=new Ral(this),this._roots=new Set,this._poller=new vYo,this._pollers=new Set,this._subwatchers=new Set,this._watchers={},this._watchersLock=Promise.resolve(),this._watchersRestorable={},this.watch(t,r,n)}isClosed(){return this._closed}isIgnored(t,r){return!!r&&(Yl.lang.isFunction(r)?!!r(t):r.test(t))}isReady(){return this._ready}close(){return this._locker.reset(),this._poller.reset(),this._roots.clear(),this.watchersClose(),this.isClosed()?!1:(this._closed=!0,this.emit(eN.CLOSE))}error(t){if(this.isClosed())return!1;let r=Yl.lang.castError(t);return this.emit(eN.ERROR,r)}event(t,r,n){return this.isClosed()?!1:(this.emit(eN.ALL,t,r,n),this.emit(t,r,n))}ready(){return this.isClosed()||this.isReady()?!1:(this._ready=!0,this.emit(eN.READY))}pollerExists(t,r){for(let n of this._pollers)if(n.targetPath===t&&Yl.lang.isShallowEqual(n.options,r))return!0;return!1}subwatcherExists(t,r){for(let n of this._subwatchers)if(n.targetPath===t&&Yl.lang.isShallowEqual(n.options,r))return!0;return!1}watchersClose(t,r,n=!0){if(t){let i=this._watchers[t];if(i)for(let o of[...i])r&&o.filePath!==r||this.watcherClose(o);if(n)for(let o in this._watchers)Yl.fs.isSubPath(t,o)&&this.watchersClose(o,r,!1)}else for(let i in this._watchers)this.watchersClose(i,r,!1)}watchersLock(t){return this._watchersLock.then(()=>this._watchersLock=new Promise(async r=>{await t(),r()}))}watchersRestore(){delete this._watchersRestoreTimeout;let t=Object.entries(this._watchersRestorable);this._watchersRestorable={};for(let[r,n]of t)this.watchPath(r,n.options,n.handler)}async watcherAdd(t,r){let{folderPath:n}=t;(this._watchers[n]=this._watchers[n]||[]).push(t);let o=new Dal(this,t,r);return await o.init(),o}watcherClose(t){t.watcher.close();let r=this._watchers[t.folderPath];if(r){let o=r.indexOf(t);r.splice(o,1),r.length||delete this._watchers[t.folderPath]}let n=t.filePath||t.folderPath;this._roots.has(n)&&(this._watchersRestorable[n]=t,this._watchersRestoreTimeout||(this._watchersRestoreTimeout=Yl.lang.defer(()=>this.watchersRestore())))}watcherExists(t,r,n,i){if(this._watchers[t]?.find(a=>a.handler===n&&(!a.filePath||a.filePath===i)&&a.options.ignore===r.ignore&&!!a.options.native==!!r.native&&(!r.recursive||a.options.recursive)))return!0;let s=f4e.default.dirname(t);for(let a=1;a<1/0;a++){if(this._watchers[s]?.find(l=>(a===1||l.options.recursive&&a<=(l.options.depth??ZBe))&&l.handler===n&&(!l.filePath||l.filePath===i)&&l.options.ignore===r.ignore&&!!l.options.native==!!r.native&&(!r.recursive||l.options.recursive&&$Be&&l.options.native!==!1)))return!0;if(!$Be)break;let u=f4e.default.dirname(t);if(s===u)break;s=u}return!1}async watchDirectories(t,r,n,i,o){if(this.isClosed())return;t=Yl.lang.uniq(t).sort();let s;for(let a of t)if(!this.isIgnored(a,r.ignore)&&!this.watcherExists(a,r,n,i))try{let c=!r.recursive||$Be&&r.native!==!1?r:{...r,recursive:!1},l={watcher:Vei.default.watch(a,c),handler:n,options:r,folderPath:a,filePath:i},p=s=await this.watcherAdd(l,o);if(this._roots.has(i||a)){let f={...r,ignoreInitial:!0,recursive:!1},m=f4e.default.dirname(a),g=a;await this.watchDirectories([m],f,n,g,p)}}catch(c){this.error(c)}return s}async watchDirectory(t,r,n,i,o){if(!this.isClosed()&&!this.isIgnored(t,r.ignore)){if(!r.recursive||$Be&&r.native!==!1)return this.watchersLock(()=>this.watchDirectories([t],r,n,i,o));{r={...r,recursive:!0};let s=r.depth??ZBe,a=r.limit??b9t,[c]=await Yl.fs.readdir(t,r.ignore,s,a,this._closeSignal,r.readdirMap);return this.watchersLock(async()=>{let u=await this.watchDirectories([t],r,n,i,o);if(c.length){let l=Yl.fs.getDepth(t);for(let p of c){let d=Yl.fs.getDepth(p),f=Math.max(0,s-(d-l)),m={...r,depth:f};await this.watchDirectories([p],m,n,i,o||u)}}})}}}async watchFileOnce(t,r,n){if(this.isClosed()||(r={...r,ignoreInitial:!1},this.subwatcherExists(t,r)))return;let i={targetPath:t,options:r},o=(u,l)=>{l===t&&(c(),n())},s=new e(o),a=()=>{this._subwatchers.add(i),this.on(eN.CLOSE,c),s.watchFile(t,r,o)},c=()=>{this._subwatchers.delete(i),this.removeListener(eN.CLOSE,c),s.close()};return a()}async watchFile(t,r,n){if(this.isClosed()||this.isIgnored(t,r.ignore))return;r={...r,recursive:!1};let i=f4e.default.dirname(t);return this.watchDirectory(i,r,n,t)}async watchPollingOnce(t,r,n){if(this.isClosed())return;let i=!1,o=new vYo,s=await this.watchPolling(t,r,async()=>{i||!(await o.update(t,r.pollingTimeout)).length||i||(i=!0,s(),n())})}async watchPolling(t,r,n){if(this.isClosed())return Yl.lang.noop;if(this.pollerExists(t,r))return Yl.lang.noop;let i={...r,interval:r.pollingInterval??bal},o={targetPath:t,options:r},s=()=>{this._pollers.add(o),this.on(eN.CLOSE,a),Vei.default.watchFile(t,i,n)},a=()=>{this._pollers.delete(o),this.removeListener(eN.CLOSE,a),Vei.default.unwatchFile(t,n)};return Yl.lang.attempt(s),()=>Yl.lang.attempt(a)}async watchUnknownChild(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchFileOnce(t,r,i)}async watchUnknownTarget(t,r,n){if(this.isClosed())return;let i=()=>this.watchPath(t,r,n);return this.watchPollingOnce(t,r,i)}async watchPaths(t,r,n){if(this.isClosed())return;if(t=Yl.lang.uniq(t).sort(),t.every((o,s)=>t.every((a,c)=>c===s||!Yl.fs.isSubPath(o,a))))await Promise.all(t.map(o=>this.watchPath(o,r,n)));else for(let o of t)await this.watchPath(o,r,n)}async watchPath(t,r,n){if(this.isClosed()||(t=f4e.default.resolve(t),this.isIgnored(t,r.ignore)))return;let i=await Yl.fs.poll(t,r.pollingTimeout);if(i){if(i.isFile())return this.watchFile(t,r,n);if(i.isDirectory())return this.watchDirectory(t,r,n);this.error(`"${t}" is not supported`)}else{let o=f4e.default.dirname(t);return(await Yl.fs.poll(o,r.pollingTimeout))?.isDirectory()?this.watchUnknownChild(t,r,n):this.watchUnknownTarget(t,r,n)}}async watch(t,r,n=Yl.lang.noop){if(Yl.lang.isFunction(t))return this.watch([],{},t);if(Yl.lang.isUndefined(t))return this.watch([],r,n);if(Yl.lang.isFunction(r))return this.watch(t,{},r);if(Yl.lang.isUndefined(r))return this.watch(t,{},n);if(this.isClosed())return;this.isReady()&&(r.readdirMap=void 0);let i=Yl.lang.castArray(t);i.forEach(o=>this._roots.add(o)),await this.watchPaths(i,r,n),!this.isClosed()&&(n!==Yl.lang.noop&&this.on(eN.ALL,n),r.readdirMap=void 0,this.ready())}},Nal=xYo;function Ynh(e){return"code"in e&&typeof e.code=="string"}function jal(e){return e instanceof Error?e:new Error(String(e))}function Qal(e){return Ynh(e)&&e.code==="ENOSPC"?"Unable to watch Fern docs files for changes because the system limit for file watchers was reached. Close other file-watching processes or increase the file watcher limit, then restart `fern docs dev`.":`Unable to watch Fern docs files for changes: ${e.message}`}async function _ei({absoluteFilePathToFern:e,additionalFilepaths:t,context:r}){let n=new Nal([e,...t],{recursive:!0,ignoreInitial:!0,debounce:100,renameDetection:!0}),i=await new Promise(o=>{let s=()=>{n.off("error",a),o(void 0)},a=c=>{n.off("ready",s),o(jal(c))};n.once("ready",s),n.once("error",a)});return i!=null&&(n.close(),r.failAndThrow(Qal(i),i,{code:B.Code.EnvironmentError})),n.on("error",o=>{let s=jal(o);r.failWithoutThrowing(Qal(s),s,{code:B.Code.EnvironmentError}),n.close()}),n}Zt();Ow();jt();bn();var Mdl=require("child_process"),rri=be(RYo(),1),Ldl=be(GXo(),1),qE=require("fs"),iN=require("fs/promises"),Udl=require("os"),nN=be(require("path"),1),Vdl=be(hv(),1),_dl=be(zdl(),1),I4e=process.platform==="win32",tri=fe.cyan("[docs]:"),Sch="etag",Tch=23,rZo=e=>e.padEnd(Tch," "),Och="preview",Bch="app-preview",Pch="bundle",Dch=".next",Rch="standalone",Fch=".fern",kch="packages/fern-docs/bundle/.next/server/instrumentation.js",Nch='Cannot find matching keyid: {"signatures":',jch="ERR_PNPM_IGNORED_BUILDS";function Qch(e){try{let r=(0,Mdl.execSync)('reg query "HKLM\\SYSTEM\\CurrentControlSet\\Control\\FileSystem" /v LongPathsEnabled',{encoding:"utf-8",timeout:5e3}).match(/LongPathsEnabled\s+REG_DWORD\s+0x(\d+)/i);if(r!=null&&r[1]==="1")return}catch(t){e.debug(`Registry query for LongPathsEnabled failed: ${t}`)}throw new B({message:`Windows long path support is not enabled. The docs bundle contains deeply nested .pnpm paths that exceed the 260-character MAX_PATH limit.
|
|
3600
3600
|
|
|
@@ -4155,15 +4155,15 @@ js:
|
|
|
4155
4155
|
${i.error?.message??"Unknown error"}`,code:B.Code.ParseError})}iW();Zt();xW();bn();var Y1l=require("fs"),Sci=require("fs/promises"),X1l=require("stream/promises");async function Z1l({snippetsS3PreSignedReadUrl:e,absolutePathToLocalSnippetJSON:t,context:r}){try{await KOh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(fe.green(`Downloaded to ${t}`))}catch{r.logger.debug(fe.yellow("Failed to download snippet.json from output."))}}async function KOh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await py.get(e,{responseType:"stream"});await $t(t)&&await(0,Sci.rm)(t,{recursive:!0}),await(0,Sci.mkdir)(yn(t),{recursive:!0}),await(0,X1l.pipeline)(r.data,(0,Y1l.createWriteStream)(t))}Va();Zt();async function $1l({generatorInvocation:e,context:t}){if(e.absolutePathToLocalOutput==null)return;let r=Ge(e.absolutePathToLocalOutput,Se.of(MP));if(await $t(r))return t.logger.debug(`Auto-discovered ${MP} at ${r}`),r}Gp();Kk();Va();nm();Dt();Qm();var SFl=be(NUe(),1);Kl();zn();tc();om();Sde();jt();nm();Zt();jt();iW();xW();var cTl=be(vMt(),1),Pci=require("fs/promises");ps();var uTl=be(km(),1),lTl=require("util"),pTl=require("zlib");jt();var fBh=2e3,sTl=12e4,was=5,dBh=.5,jUe=class e extends Error{retryAfterSeconds;constructor(t){super("Received 429 Too Many Requests"),Object.setPrototypeOf(this,e.prototype),this.retryAfterSeconds=t}};async function aTl({fn:e,retryRateLimited:t,logger:r,onRateLimitedWithoutRetry:n,delayFn:i=o=>new Promise(s=>setTimeout(s,o))}){if(!t)try{return await e()}catch(o){if(o instanceof jUe)return n();throw o}for(let o=0;o<=was;o++)try{return await e()}catch(s){if(s instanceof jUe&&o<was){let a=Math.min(fBh*2**o,sTl),c=s.retryAfterSeconds!=null?s.retryAfterSeconds*1e3:void 0,u=c!=null?Math.max(a,c):a,l=1+(Math.random()-.5)*dBh,p=Math.round(Math.min(Math.max(u*l,c??0),sTl));r.warn(`Received 429 Too Many Requests. Retrying in ${(p/1e3).toFixed(1)}s (attempt ${o+1}/${was})...`),await i(p)}else throw s}throw new B({message:"Exceeded maximum retries for 429 Too Many Requests.",code:B.Code.NetworkError})}var mBh=(0,lTl.promisify)(pTl.gzip);async function fTl({projectConfig:e,workspace:t,organization:r,intermediateRepresentation:n,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignorePath:g,skipFernignore:A,retryRateLimited:y,automationMode:E,autoMerge:v,skipIfNoDiff:I,verify:C,loginCommand:w="fern login",specsTarGzBuffer:T}){let P;if(A)P="";else if(g!=null)try{P=await(0,Pci.readFile)(g,"utf-8")}catch(M){s.failAndThrow(`Failed to read fernignore file at ${g}: ${M}`,void 0,{code:B.Code.ConfigError})}let O=await aTl({fn:()=>hBh({projectConfig:e,workspace:t,organization:r,generatorInvocation:i,version:o,context:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,absolutePathToPreview:d,fiddlePreview:f,pushPreviewBranch:m,fernignoreContents:P,automationMode:E,autoMerge:v,skipIfNoDiff:I,verify:C,loginCommand:w}),retryRateLimited:y,logger:s.logger,onRateLimitedWithoutRetry:()=>s.failAndThrow("Received 429 Too Many Requests. Re-run with --retry-rate-limited to automatically retry.",void 0,{code:B.Code.NetworkError})});return await gBh({intermediateRepresentation:n,job:O,context:s,generatorInvocation:i,irVersionOverride:p,specsTarGzBuffer:T}),O}async function hBh({projectConfig:e,workspace:t,organization:r,generatorInvocation:n,version:i,context:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,fiddlePreview:p,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m,verify:g,loginCommand:A}){let y=mpe({token:a.value}),E={id:n.name,version:n.version,outputMode:n.outputMode,customConfig:n.config,publishMetadata:n.publishMetadata},v={apiName:t.definition.rootApiFile.contents.name,version:i,organizationName:r,generators:[E],uploadToS3:IBh({outputMode:n.outputMode,generatorInvocation:n,absolutePathToPreview:l,shouldLogS3Url:s}),whitelabel:c,replay:u!=null?{enabled:u.enabled}:void 0,preview:p??l!=null,pushPreviewBranch:d,fernignoreContents:f,skipIfNoDiff:m,verify:g},I=await y.remoteGen.createJobV3(v);if(!I.ok){let C=I.error;if(C?.content?.reason==="status-code"&&C.content.statusCode===429){let T=bBh(C);throw new jUe(T)}let w=yBh(C);return w!=null?o.failAndThrow(w,void 0,{code:B.Code.ConfigError}):EBh(C)._visit({illegalApiNameError:()=>o.failAndThrow("API name is invalid: "+t.definition.rootApiFile.contents.name,void 0,{code:B.Code.ConfigError}),illegalApiVersionError:()=>o.failAndThrow("API version is invalid: "+i,void 0,{code:B.Code.ConfigError}),cannotPublishToNpmScope:({validScope:T,invalidScope:P})=>o.failAndThrow(`You do not have permission to publish to ${P} (expected ${T})`,void 0,{code:B.Code.AuthError}),cannotPublishToMavenGroup:({validGroup:T,invalidGroup:P})=>o.failAndThrow(`You do not have permission to publish to ${P} (expected ${T})`,void 0,{code:B.Code.AuthError}),cannotPublishPypiPackage:({validPrefix:T,invalidPackageName:P})=>o.failAndThrow(`You do not have permission to publish to ${P} (expected ${T})`,void 0,{code:B.Code.AuthError}),generatorsDoNotExistError:T=>o.failAndThrow("Generators do not exist: "+T.nonExistentGenerators.map(P=>`${P.id}@${P.version}`).join(", "),void 0,{code:B.Code.ConfigError}),insufficientPermissions:()=>o.failAndThrow(`You do not have permission to run this generator for organization '${r}'. Please run '${A}' to ensure you are logged in with the correct account.
|
|
4156
4156
|
|
|
4157
4157
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:B.Code.AuthError}),orgNotConfiguredForWhitelabel:()=>o.failAndThrow("Your org is not configured for white-labeling. Please reach out to support@buildwithfern.com.",void 0,{code:B.Code.AuthError}),branchDoesNotExist:T=>o.failAndThrow(`Branch ${T.branch} does not exist in repository ${T.repositoryOwner}/${T.repositoryName}`,void 0,{code:B.Code.ConfigError}),rateLimitExceeded:()=>{throw new jUe},_other:T=>{o.logger.debug(`Failed to create job: ${JSON.stringify(T)}`);let P=ABh(T);return P!=null?o.failAndThrow(P,void 0,{code:B.Code.NetworkError}):o.failAndThrow("Failed to create job. Please try again or contact support@buildwithfern.com for assistance.",void 0,{code:B.Code.NetworkError})}})}return I.body}async function gBh({intermediateRepresentation:e,generatorInvocation:t,job:r,context:n,irVersionOverride:i,specsTarGzBuffer:o}){let s=await tMe(t).then(m=>m==null?void 0:"v"+m.toString()),a=i??s,c=a==null?await o5t({intermediateRepresentation:e,context:n,targetGenerator:{name:t.name,version:t.version}}):await b8o({intermediateRepresentation:e,context:n,irVersion:a,targetGenerator:{name:t.name,version:t.version}}),u=new cTl.default,l=await Kor(c,{onWrite:m=>{n.logger.debug("Wrote IR to disk: "+m)}}),p=new TextEncoder().encode(l),d=await mBh(p);n.logger.debug(`Compressed IR from ${p.byteLength} bytes to ${d.length} bytes (${((1-d.length/p.byteLength)*100).toFixed(1)}% reduction)`),u.append("ir",d,{filename:"ir.json",contentType:"application/octet-stream"}),o!=null&&(u.append("specs",o,{filename:"specs.tar.gz",contentType:"application/gzip"}),n.logger.debug(`Appended specs tar.gz (${o.length} bytes)`));let f=(0,uTl.default)(rMe(),`/api/remote-gen/jobs/${r.jobId}/start`);try{await py.post(f,u,{headers:u.getHeaders(),maxBodyLength:1/0})}catch(m){let g=m instanceof lsu?m.response?.data:m;n.logger.debug(`POST ${f} failed with ${JSON.stringify(m)}`),n.failAndThrow("Failed to start job",g,{code:B.Code.NetworkError})}}function ABh(e){let t;if(e?.reason==="status-code"?t=e.body:e?.content?.reason==="status-code"&&(t=e.content.body),typeof t?.content?.message=="string")return t.content.message;if(typeof t?.message=="string")return t.message}function yBh(e){let t=e?.content?.reason==="status-code"?e.content.body:void 0;return t?.error!=="GithubAppNotInstalled"?void 0:typeof t?.content?.message=="string"?t.content.message:`The Fern GitHub App is not installed on ${typeof t?.content?.repositoryName=="string"?t.content.repositoryName:"the target repository"}. Please install it (https://github.com/apps/fern-api) and try again.`}function bBh(e){let t=e?.content?.body?.content?.retryAfter;return typeof t=="number"&&t>0?t:void 0}function EBh(e){if(e?.content?.reason==="status-code"){let t=e.content.body;switch(t?.error){case"IllegalApiNameError":return Vr.remoteGen.createJobV3.Error.illegalApiNameError();case"IllegalApiVersionError":return Vr.remoteGen.createJobV3.Error.illegalApiVersionError(t.content);case"GeneratorsDoNotExistError":return Vr.remoteGen.createJobV3.Error.generatorsDoNotExistError(t.content);case"CannotPublishToNpmScope":return Vr.remoteGen.createJobV3.Error.cannotPublishToNpmScope(t.content);case"CannotPublishToMavenScope":return Vr.remoteGen.createJobV3.Error.cannotPublishToMavenGroup(t.content);case"CannotPublishPypiPackage":return Vr.remoteGen.createJobV3.Error.cannotPublishPypiPackage(t.content);case"InsufficientPermissions":return Vr.remoteGen.createJobV3.Error.insufficientPermissions(t.content);case"OrgNotConfiguredForWhitelabel":return Vr.remoteGen.createJobV3.Error.orgNotConfiguredForWhitelabel(t.content);case"BranchDoesNotExist":return Vr.remoteGen.createJobV3.Error.branchDoesNotExist(t.content)}}return e}function IBh({outputMode:e,generatorInvocation:t,absolutePathToPreview:r,shouldLogS3Url:n}){return e.type==="downloadFiles"||t.absolutePathToLocalSnippets!=null||r!=null||n}jt();nm();var dTl=mpe();var vBh=3;function mTl({job:e,taskId:t,taskHandler:r,context:n}){let i=0,o=async()=>{let s=await dTl.remoteGen.getJobStatus(e.jobId);if(s.ok)return s.body[t];n.logger.debug("Failed to get job status.",JSON.stringify(s.error.content))};return new Promise((s,a)=>{c();async function c(){try{let u=await o();if(u==null)i++,i===vBh&&n.failAndThrow(`Failed to get job status after ${i} attempts.`,void 0,{code:B.Code.NetworkError}),setTimeout(c,2e3+1e3*i);else{i=0;let l=await r.processUpdate(u);r.isFinished?s(l):setTimeout(c,2e3)}}catch(u){a(u)}}})}Va();Dt();Zt();var bFl=be(zui(),1);db();Ow();jt();xW();bn();var Uui=require("fs"),vM=require("fs/promises"),YUe=be(require("path"),1),_us=require("stream/promises");AQr();var Mui=be(yFl(),1);function Pme(e,t,{target:r="stdout",...n}={}){return Mui.default[r]?fW.link(e,t):n.fallback===!1?e:typeof n.fallback=="function"?n.fallback(e,t):`${e} (\u200B${t}\u200B)`}Pme.isSupported=Mui.default.stdout;Pme.stderr=(e,t,r={})=>Pme(e,t,{target:"stderr",...r});Pme.stderr.isSupported=Mui.default.stderr;var Vui=be(hv(),1),EFl=be(Qti(),1);var ajh=/^Pipeline: raw result \(\d+ bytes\): (\{.*\})$/,Lui=class{context;generatorInvocation;absolutePathToPreview;telemetryContext;lengthOfLastLogs=0;cachedReplayResult;replayEventEmitted=!1;taskStartedAtMs=Date.now();constructor({interactiveTaskContext:t,generatorInvocation:r,absolutePathToPreview:n,telemetryContext:i}){this.context=t,this.generatorInvocation=r,this.absolutePathToPreview=n,this.telemetryContext=i}async processUpdate(t){t==null&&this.context.failAndThrow("Task is missing on job status",void 0,{code:B.Code.InternalError});let r=t.packages.map(i=>i.coordinate._visit({npm:o=>`${o.name}@${o.version}`,maven:o=>`${o.group}:${o.artifact}:${o.version}`,pypi:o=>`${o.name} ${o.version}`,ruby:o=>`${o.name}:${o.version}`,nuget:o=>`${o.name} ${o.version}`,crates:o=>`${o.name} ${o.version}`,_other:()=>"<unknown package>"}));t.packages.length>0&&this.#n==null&&(this.#n=t.packages[0]?.coordinate._visit({npm:i=>i.version,maven:i=>i.version,pypi:i=>i.version,ruby:i=>i.version,nuget:i=>i.version,crates:i=>i.version,_other:()=>{}})),this.#i==null&&(this.#i=Q1l(t.packages)),this.absolutePathToPreview==null&&this.context.setSubtitle(r.length>0?r.map(i=>`\u25E6 ${i}`).join(`
|
|
4158
|
-
`):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(hjh(i.level),i.message),this.#n==null&&(this.#n=ujh(i.message)??this.#n),this.cachedReplayResult==null&&(this.cachedReplayResult=ljh(i.message));this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Pme("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:ht,running:ht,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:B.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await djh({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion),this.emitReplayTelemetryIfReady()},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?Ge(this.absolutePathToPreview,Se.of(YUe.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}emitReplayTelemetryIfReady(){if(!this.replayEventEmitted&&this.cachedReplayResult!=null&&!this.telemetryContext.disableTelemetry)try{let t={success:!0,steps:{replay:this.cachedReplayResult},warnings:[]},n={...(0,bFl.buildReplayTelemetryProps)({pipelineResult:t,generatorName:this.generatorInvocation.name,generatorVersion:this.generatorInvocation.version,cliVersion:this.telemetryContext.cliVersion,repoUri:pjh(this.generatorInvocation),automationMode:this.telemetryContext.automationMode,autoMerge:this.telemetryContext.autoMerge,skipIfNoDiff:this.telemetryContext.skipIfNoDiff,hasBreakingChanges:!1,versionArg:this.telemetryContext.versionArg,versionBump:this.telemetryContext.versionBump,replayConfigEnabled:this.telemetryContext.replayConfigEnabled,noReplayFlag:this.telemetryContext.noReplayFlag,githubMode:fjh(this.generatorInvocation),previewMode:this.absolutePathToPreview!=null,durationMs:Date.now()-this.taskStartedAtMs}),surface:"fiddle",org_id:this.telemetryContext.orgId};this.context.instrumentPostHogEvent({command:"replay",properties:n}),this.context.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(n)}`),this.replayEventEmitted=!0}catch(t){this.context.logger.debug(`[telemetry] failed to send replay event: ${String(t)}`)}}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},cjh=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function ujh(e){let t=e.match(cjh);if(t?.[1]!=null)return t[1].replace(/^v/,"")}function ljh(e){let t=e.match(ajh);if(t?.[1]!=null)try{return JSON.parse(t[1])?.steps?.replay}catch{return}}function pjh(e){let t=e.raw?.github;return t==null?"":"uri"in t&&typeof t.uri=="string"?t.uri:"repository"in t&&typeof t.repository=="string"?t.repository:""}function fjh(e){let t=e.raw?.github;if(t!=null&&"mode"in t){if(t.mode==="pull-request")return"pull-request";if(t.mode==="commit-and-release")return"commit-and-release"}return"push"}async function djh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await gjh(t),i=await Ajh(t);n&&i?await yjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await bjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await mjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(fe.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:B.Code.NetworkError})}}async function mjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await py.get(e,{responseType:"stream"}),n=await Vui.default.dir({prefix:"fern",unsafeCleanup:!0}),i=YUe.default.join(n.path,"output.zip");await(0,_us.pipeline)(r.data,(0,Uui.createWriteStream)(i)),await Vus(t),await(0,vM.mkdir)(t,{recursive:!0}),await xFl(i,t)}async function Vus(e){await $t(e)&&(await IFl(e),await(0,vM.rm)(e,{recursive:!0,force:!0}))}async function IFl(e){try{let t=await(0,vM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=qt.of(YUe.default.join(e,r.name));r.isDirectory()&&await IFl(n);try{await(0,vM.chmod)(n,493)}catch{}}await(0,vM.chmod)(e,493)}catch{}}function hjh(e){switch(e){case"DEBUG":return Un.Debug;case"INFO":return Un.Info;case"WARN":return Un.Warn;case"ERROR":return Un.Error;default:return Un.Info}}async function gjh(e){let t=Ge(e,Se.of(MP));return await $t(t)}async function Ajh(e){let t=Ge(e,Se.of(".git"));return await $t(t)}async function EK(e,t,r){return(await Wc(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function yjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Ge(t,Se.of(MP)),i=await Pye({absolutePathToFernignore:n});await EK(["rm","-rf","."],t,r),await vFl({s3PreSignedReadUrl:e,outputPath:t}),await EK(["add","."],t,r),await EK(["reset","--",...i],t,r),await EK(["restore","."],t,r)}async function bjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=qt.of((await Vui.default.dir({})).path),i=Ge(t,Se.of(MP)),o=await Pye({absolutePathToFernignore:i});await(0,vM.cp)(t,n,{recursive:!0}),await EK(["init"],n,r),await EK(["add","."],n,r),await EK(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await EK(["rm","-rf","."],n,r),await vFl({s3PreSignedReadUrl:e,outputPath:n}),await EK(["add","."],n,r),await EK(["reset","--",...o],n,r),await EK(["restore","."],n,r),await Vus(Ge(n,Se.of(".git"))),await Vus(t),await(0,vM.cp)(n,t,{recursive:!0})}async function vFl({s3PreSignedReadUrl:e,outputPath:t}){let r=await py.get(e,{responseType:"stream"}),n=await Vui.default.dir({prefix:"fern",unsafeCleanup:!0}),i=YUe.default.join(n.path,"output.zip");await(0,_us.pipeline)(r.data,(0,Uui.createWriteStream)(i)),await xFl(i,t)}async function xFl(e,t){return new Promise((r,n)=>{EFl.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=YUe.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,vM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,vM.mkdir)(YUe.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,Uui.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}Zt();zn();Ow();jt();var _ui=require("fs/promises"),CFl=be(hv(),1),Ejh="proto.zip",S7t=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,_ui.readFile)(n.absoluteFilePath),o;try{o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}})}catch(s){await n.cleanup(),this.context.failAndThrow(`Network error uploading source file: ${t.absoluteFilePath}`,s,{code:B.Code.NetworkError});return}await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:B.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,_ui.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await CFl.default.dir(),n=Ge(qt.of(r.path),Se.of(Ejh));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Wc(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(mj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(mj.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:B.Code.InternalError}),r}};async function TFl({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,readme:A,fernignorePath:y,skipFernignore:E,dynamicIrOnly:v,retryRateLimited:I,requireEnvVars:C,automationMode:w,autoMerge:T,skipIfNoDiff:P,verify:O,noReplay:M,disableTelemetry:K,loginCommand:Y,specsTarGzBuffer:Z}){let ae=Fk({token:c.value}),oe=await vLt("https://registry.buildwithfern.com/health",n.logger),ce=jn.getPackageName({generatorInvocation:i}),Te=f??d!=null,De=ye=>YA(ye,{onError:Ne=>{!Te&&C&&n.failAndThrow(void 0,Ne,{code:B.Code.EnvironmentError})}},{substituteAsEmpty:Te}),se=De(i),pe=RUe({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:se}),xe=o??await QDt({packageName:ce,generatorInvocation:i});o!=null&&(Te?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await fgr({version:o,packageName:ce,generatorInvocation:i,context:n}));let ve=wg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:ce,version:xe,context:n,sourceResolver:new vh(n,r),dynamicGeneratorConfig:pe,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:TY(),originGitCommitIsDirty:OY(),invokedBy:wY(),requestedVersion:o,ciProvider:SY()}}),Re=vf({token:c.value});if(!oe){let ye=await Re.organization.get({orgId:e.organization});ye.ok&&(ye.body.isWhitelabled&&(ve.readmeConfig==null&&(ve.readmeConfig=xjh),ve.readmeConfig.whiteLabel=!0),ve.selfHosted=ye.body.selfHostedSdKs)}let Ke=r.getSources(),ct,Ct,at=ST({ir:ve,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let ye=await ae.api.register.registerApiDefinition({orgId:cn.OrgId(t),apiId:cn.ApiId(Lr(ve.apiName)),definition:at,sources:Ke.length>0?vjh(Ke):void 0});ct=ye.apiDefinitionId,Ct=ye.sources??void 0}catch(ye){new S7t(n,Ke).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(ye)}`)}let Ut=new S7t(n,Ke);if(Ct==null&&Ut.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:B.Code.NetworkError}),Ct!=null){n.logger.debug("Uploading source files ...");let ye=await Ut.uploadSources(Ct);n.logger.debug("Setting IR source configuration ..."),ve.sourceConfig=ye}if(v){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:B.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:B.Code.ConfigError});return}if(ce==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:B.Code.ConfigError});return}try{await wFl({fdr:ae,organization:t,version:o,language:i.language,packageName:ce,ir:ve,smartCasing:i.smartCasing,dynamicGeneratorConfig:pe,context:n})}catch(ye){n.failAndThrow(`Failed to upload dynamic IR: ${Ln(ye)}`,void 0,{code:B.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let er=await fTl({projectConfig:e,workspace:r,organization:t,generatorInvocation:se,context:n,version:xe,intermediateRepresentation:{...ve,fdrApiDefinitionId:ct,publishConfig:Ijh({generatorInvocation:se})},shouldLogS3Url:a,token:c,whitelabel:u!=null?De(u):void 0,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:y,skipFernignore:E,retryRateLimited:I,automationMode:w,autoMerge:T,skipIfNoDiff:P,verify:O,loginCommand:Y,specsTarGzBuffer:Z});n.logger.debug(`Job ID: ${er.jobId}`);let Ae=er.taskIds[0];if(Ae==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:B.Code.NetworkError});return}n.logger.debug(`Task ID: ${Ae}`);let me=new Lui({job:er,taskId:Ae,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:w===!0,autoMerge:T===!0,skipIfNoDiff:P===!0,versionArg:o==null?"none":(0,SFl.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:M===!0,disableTelemetry:K===!0}}),ke=await mTl({job:er,taskHandler:me,taskId:Ae,context:n});if(ke!=null&&ke.actualVersion==null){let ye=Cjh(xe);ye!=null&&(ke={...ke,actualVersion:ye})}let it=ke?.actualVersion??xe;if(ke!=null&&it!=null&&i.language!=null&&ce!=null&&!Te)try{await wFl({fdr:ae,organization:t,version:it,language:i.language,packageName:ce,ir:ve,smartCasing:i.smartCasing,dynamicGeneratorConfig:pe,context:n})}catch(ye){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${Ln(ye)}`)}return ke}function Ijh({generatorInvocation:e}){return e.outputMode._visit({downloadFiles:()=>{},github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:t=>t._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:r=>{let n;return e.raw?.output?.location==="postman"&&(n=e.raw.output?.["collection-id"]),rr.PublishingConfig.direct({target:rr.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function vjh(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var xjh={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function wFl({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,dynamicGeneratorConfig:a,context:c}){c.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let u;try{u=await e.api.register.getSdkDynamicIrUploadUrls({orgId:cn.OrgId(t),version:r,snippetConfiguration:{[n]:i}})}catch(f){c.logger.warn(`Failed to get dynamic IR upload URLs (non-fatal, dynamic snippets may be stale): ${f}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=Mze({ir:o,disableExamples:!0,smartCasing:s,generationLanguage:n,generatorConfig:a}),d=JSON.stringify(p);try{let f=await fetch(l,{method:"PUT",body:d,headers:{"Content-Type":"application/octet-stream","Content-Length":d.length.toString()}});f.ok?c.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):c.logger.warn(`Failed to upload dynamic IR for ${n}: ${f.status}`)}catch(f){c.logger.warn(`Network error uploading dynamic IR for ${n}: ${f}`)}}function Cjh(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function gDe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:g,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:E,retryRateLimited:v,requireEnvVars:I,automationMode:C,autoMerge:w,skipIfNoDiff:T,verify:P,noReplay:O,disableTelemetry:M,automation:K,occurrenceTracker:Y,loginCommand:Z,getSpecsTarGzBuffer:ae}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let le=[],oe=Y??new BUe;Y==null&&oe.recordOccurrences(i.generators);let ce=r.generatorsConfiguration?.absolutePathToConfiguration,Te=await Promise.all(i.generators.map(De=>n.runInteractiveTask({name:De.name},se=>wjh({generatorInvocation:De,interactiveTaskContext:se,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:g,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:E,retryRateLimited:v,requireEnvVars:I,automationMode:C,autoMerge:w,skipIfNoDiff:T,verify:P,noReplay:O,disableTelemetry:M,automation:K,generatorsYmlAbsolutePath:ce,occurrenceTracker:oe,loginCommand:Z,getSpecsTarGzBuffer:ae,onSnippetsProduced:pe=>le.push(pe)}))));if(K==null&&Te.some(De=>!De))throw new _c;return{snippetsProducedBy:le}}async function wjh({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,mode:A,fernignorePath:y,skipFernignore:E,dynamicIrOnly:v,validateWorkspace:I,retryRateLimited:C,requireEnvVars:w,automationMode:T,autoMerge:P,skipIfNoDiff:O,verify:M,noReplay:K,disableTelemetry:Y,automation:Z,generatorsYmlAbsolutePath:ae,occurrenceTracker:le,loginCommand:oe,getSpecsTarGzBuffer:ce,onSnippetsProduced:Te}){let De=Date.now();try{let se=sXe(e),pe=await i.toFernWorkspace({context:o},se,e.apiOverride?.specs);I&&await yK({workspace:pe,context:o,logWarnings:!1,ossWorkspace:i instanceof yp?i:void 0});let xe=E?void 0:y??await $1l({generatorInvocation:e,context:t}),ve=await TFl({projectConfig:r,organization:n,workspace:pe,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:Re=>Vr.OutputMode.github({...Re,makePr:A==="pull-request"}),githubV2:Re=>A==="pull-request"?Vr.OutputMode.githubV2(Vr.GithubOutputModeV2.pullRequest(Re)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:xe,skipFernignore:E,dynamicIrOnly:v,retryRateLimited:C,requireEnvVars:w,automationMode:T,autoMerge:P,skipIfNoDiff:O,verify:M,noReplay:K,disableTelemetry:Y,loginCommand:oe,specsTarGzBuffer:await ce?.(e.name)});if(ve?.createdSnippets&&(Te(e),e.absolutePathToLocalSnippets!=null&&ve.snippetsS3PreSignedReadUrl!=null&&await Z1l({snippetsS3PreSignedReadUrl:ve.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),Z!=null){let Re=ae!=null?await DUe(ae,e.name,le.lookup(e)):void 0;Z.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:ve?.actualVersion??null,durationMs:Date.now()-De,pullRequestUrl:ve?.pullRequestUrl,noChangesDetected:ve?.noChangesDetected,publishTarget:ve?.publishTarget,outputRepoUrl:PUe(e),generatorsYmlAbsolutePath:ae,generatorsYmlLineNumber:Re})}}catch(se){if(Z==null)throw se;if(se instanceof _c){let ve=ae!=null?await DUe(ae,e.name,le.lookup(e)):void 0;throw Z.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-De,outputRepoUrl:PUe(e),generatorsYmlAbsolutePath:ae,generatorsYmlLineNumber:ve}),se}let pe=Ln(se),xe=ae!=null?await DUe(ae,e.name,le.lookup(e)):void 0;Z.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:pe,durationMs:Date.now()-De,outputRepoUrl:PUe(e),generatorsYmlAbsolutePath:ae,generatorsYmlLineNumber:xe}),t.failWithoutThrowing(pe,se,{code:nAe(se)})}}Dt();jt();jt();var qui="https://",qus="http://";function BFl(e){return e.startsWith(qui)?e.slice(qui.length):e.startsWith(qus)?e.slice(qus.length):e}function OFl(e){try{let t=e.startsWith(qui)||e.startsWith(qus)?e:`${qui}${e}`;return Sjh(new URL(t).pathname)}catch{return"/"}}function Sjh(e){return e===""||e==="/"?"/":e.endsWith("/")?e.slice(0,-1):e}function PFl(e,t,r){let n=OFl(e);for(let i of t){let o=OFl(i);n!==o&&r.failAndThrow(`Basepath mismatch between Fern url and custom-domain. When basepath-aware mode is enabled (via 'multi-source: true' or the deprecated 'experimental.basepath-aware: true'), the instance 'url' and 'custom-domain' must share the same basepath, otherwise docs will fail to resolve after DNS cutover. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:B.Code.ConfigError})}}Kk();Va();nm();Dt();CC();Qm();CC();Zt();Kl();tc();om();Sde();jt();xW();bn();var U6l=require("crypto"),Z7t=require("fs/promises");Vi();var X7t=be(kEe(),1),qfs=require("path");var Tjh=new Set(["legacy","ledger"]);function DFl(){if(process.env.FERN_SELF_HOSTED==="true")return"legacy";let e=process.env.FERN_DOCS_DEPLOY_MODE?.toLowerCase().trim();return e==null||e===""?"legacy":Ojh(e)?e:(console.warn(`[fern] Unrecognized FERN_DOCS_DEPLOY_MODE="${e}" \u2014 falling back to "legacy". Valid values: legacy, ledger.`),"legacy")}function Ojh(e){return Tjh.has(e)}Dt();var Akl=be(gkl(),1);Vi();var ykl=require("util"),hzh=(0,ykl.promisify)(Akl.default);async function bkl(e,t,r){let n=iBt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await hzh(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(Oa))}return new Map(i.map(o=>[o.filePath,o]))}Dt();function Ekl(e,t){if(e.startsWith("https://")||e.startsWith("http://"))return e;switch(t){case"github":return`https://github.com/${e}`;case"gitlab":return`https://gitlab.com/${e}`;case"bitbucket":return`https://bitbucket.org/${e}`;default:Ee(t)}}CC();Qm();Sde();var S6l=require("crypto"),T6l=require("fs/promises"),O6l=be(kEe(),1);Dt();function qIt(e,t){if(e==null)return;let r=t?.get(e);return r??e}function gzh(e,t,r){let n=qIt(e,r);if(n==null)return;let i=t?.[n];if(!(i?.width==null||i?.height==null))return{path:n,width:i.width,height:i.height}}function B7t(e,t){if(e==null)return;if(e.type==="url")return{type:"url",value:e.value};let r=qIt(e.value,t);if(r!=null)return{type:"path",value:r}}function pls(e,t,r){let n=e.background!=null?{type:"solid",...e.background}:void 0,i=qIt(e.backgroundImage,r);return{logo:gzh(e.logo,t,r),backgroundImage:i,accentPrimary:e.accentPrimary,background:n,border:e.border,sidebarBackground:e.sidebarBackground,headerBackground:e.headerBackground,cardBackground:e.cardBackground}}function Azh(e,t,r){if(e!=null)switch(e.type){case"dark":case"light":return{type:e.type,...pls(e,t,r)};case"darkAndLight":return{type:"darkAndLight",dark:pls(e.dark,t,r),light:pls(e.light,t,r)};default:Ee(e)}}function yzh(e,t){if(e==null)return;let{"og:image":r,"og:logo":n,"twitter:image":i,"og:background-image":o,"og:dynamic:background-image":s,...a}=e;return{...a,"og:image":B7t(r,t)??void 0,"og:logo":B7t(n,t)??void 0,"twitter:image":B7t(i,t)??void 0,"og:background-image":B7t(o,t)??void 0,"og:dynamic:background-image":B7t(s,t)??void 0}}function bzh(e,t){if(e==null)return;let r=[];for(let n of e.files){let i=qIt(n.fileId,t);i!=null&&r.push({path:i,strategy:n.strategy})}return{remote:e.remote?.map(n=>({url:n.url,strategy:n.strategy})),files:r,inline:e.inline}}function Ezh(e,t){if(e==null)return;let r=n=>{if(n!=null)return{type:"custom",name:n.name,variants:n.variants.map(i=>({fontFile:qIt(i.fontFile,t)??i.fontFile,weight:i.weight,style:i.style})),display:n.display,fallback:n.fallback,fontVariationSettings:n.fontVariationSettings}};return{headingsFont:r(e.headingsFont),bodyFont:r(e.bodyFont),codeFont:r(e.codeFont)}}function Izh(e){if(e!=null)return{pageDirective:e.pageDirective,pageDescriptionSource:e.pageDescriptionSource,siteDescription:e.siteDescription}}function vzh(e){if(e!=null)return{intercom:e.intercom}}function Ikl({docsConfig:e,fileManifest:t,fileIdToPath:r}){return{title:e.title,defaultLanguage:e.defaultLanguage,translations:e.translations,announcement:e.announcement,navbarLinks:e.navbarLinks,footerLinks:e.footerLinks,logoHeight:e.logoHeight,logoHref:e.logoHref,logoRightText:e.logoRightText,favicon:qIt(e.favicon,r),agents:Izh(e.agents),metadata:yzh(e.metadata,r),redirects:e.redirects,colorsV3:Azh(e.colorsV3,t,r),layout:e.layout,theme:e.theme,settings:e.settings,typographyV2:Ezh(e.typographyV2,r),analyticsConfig:e.analyticsConfig,css:e.css,js:bzh(e.js,r),aiChatConfig:e.aiChatConfig,pageActions:e.pageActions,editThisPageLaunch:e.editThisPageLaunch,integrations:vzh(e.integrations),header:e.header,footer:e.footer}}async function GIt(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var X3h=10,Z3h=4,Ufs=3,$3h=1e3;function B6l(e){return(0,S6l.createHash)("sha256").update(e).digest("hex")}var P6l=/file:([^\s"'<>)}\]]+)/g;function e4h(e){let t=new Set;for(let r of e.matchAll(P6l)){let n=r[1];n!=null&&t.add(n)}return[...t]}function t4h(e,t){return t==null||t.size===0?e:e.replace(P6l,(r,n)=>`file:${t.get(n)??n}`)}function r4h(e){return JSON.stringify(e,(t,r)=>r!=null&&typeof r=="object"&&!Array.isArray(r)?Object.fromEntries(Object.entries(r).sort(([n],[i])=>n<i?-1:n>i?1:0)):r)}function C6l(e){let t=Buffer.from(r4h(e),"utf-8"),r=B6l(t);return{ref:{hash:r,contentType:"application/json",contentLength:t.length},hash:r,buf:t}}function $li({docsDefinition:e,git:t,apiDefinitions:r,fileManifest:n,fileIdToPath:i,locale:o="en"}){let s=new Map,a={};for(let[d,f]of Object.entries(e.pages)){if(f==null)continue;let m=t4h(f.markdown,i),g=Buffer.from(m,"utf-8"),A=B6l(g),y=e4h(m);a[d]={hash:A,contentType:"text/markdown",contentLength:g.length,...y.length>0?{referencedFiles:y}:{}},s.set(A,g)}let c=Ikl({docsConfig:e.config,fileManifest:n,fileIdToPath:i}),u=null;if(r.size>0){let d=Object.fromEntries(r),f=C6l(d);s.set(f.hash,f.buf),u=f.ref}let l=null;if(e.jsFiles!=null&&Object.keys(e.jsFiles).length>0){let d=C6l(e.jsFiles);s.set(d.hash,d.buf),l=d.ref}return{localeEntry:{root:e.config.root??e.config.navigation,pages:a,config:c,apiManifest:u,jsFiles:l,fileManifest:n,redirects:null,locale:o,git:t},blobs:s}}async function D6l({docsDefinition:e,organization:t,domain:r,basepath:n,previewId:i,customDomains:o,git:s,token:a,fdrOrigin:c,headers:u,context:l,apiDefinitions:p,fileManifest:d,filePaths:f,fileIdToPath:m,resolver:g}){let{localeEntry:A,blobs:y}=$li({docsDefinition:e,git:s,apiDefinitions:p,fileManifest:d,fileIdToPath:m}),E=await _fs({docsDefinition:e,git:s,apiDefinitions:p,fileManifest:d,fileIdToPath:m,resolver:g,context:l});for(let Z of E)for(let[ae,le]of Z.blobs)y.set(ae,le);let{createDocsLedgerClient:v}=await Promise.resolve().then(()=>(Mfs(),I6l)),I=v({baseUrl:c,token:a,headers:u}),C=[A,...E.map(Z=>Z.localeEntry)],w={orgId:t,domain:r,basepath:n??"",customDomains:o??[],previewId:i??null,defaultLocale:A.locale,locales:C};l.logger.debug("[ledger] Registering deployment...");let T=performance.now(),P=await I.register(w),O=performance.now()-T;l.logger.debug(`[ledger] Registered in ${O.toFixed(0)}ms \u2014 hash=${P.deploymentHash}, missing=${P.missingContent.length} blobs`),await Vfs(P.missingContent,y,l,f),l.logger.debug("[ledger] Finishing deployment...");let M=performance.now(),K=await I.finish(w),Y=performance.now()-M;if(l.logger.debug(`[ledger] Finished in ${Y.toFixed(0)}ms \u2014 deploymentId=${K.deploymentId}, reused=${K.reusedDeployment}`),K.translationsProcessed!=null)for(let Z of K.translationsProcessed)l.logger.info(`[ledger] Locale "${Z.locale}": ${Z.segmentsAdded} segment(s) added`);return K}async function Vfs(e,t,r,n){if(e.length>0){r.logger.debug(`[ledger] Uploading ${e.length} missing blobs...`);let i=performance.now(),o=await GIt(X3h,[...e],async({hash:u,uploadUrl:l})=>{let p=t.get(u),d="application/octet-stream";if(p==null&&n!=null){let f=n.get(u);if(f!=null){p=await(0,T6l.readFile)(f);let m=O6l.lookup(f);m!==!1&&(d=m)}}return p==null?(r.logger.warn(`[ledger] Server requested blob ${u} but we don't have it \u2014 skipping`),"skipped"):n4h(p,l,u,d,r)}),s=o.filter(u=>u==="uploaded").length,a=o.filter(u=>u==="already_exists").length,c=performance.now()-i;r.logger.debug(`[ledger] Upload complete in ${c.toFixed(0)}ms \u2014 ${s} uploaded, ${a} already in store`)}else r.logger.debug("[ledger] All content already in CAS \u2014 no uploads needed")}async function n4h(e,t,r,n,i){let o=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let s=0;s<=Ufs;s++){let a=await fetch(t,{method:"PUT",headers:{"Content-Type":n},body:o});if(a.ok)return"uploaded";if(a.status===412)return i.logger.debug(`[ledger] Blob ${r} already exists in store \u2014 skipping`),"already_exists";if(a.status===403){let l=await a.text();throw new Error(`[ledger] Presigned URL rejected for ${r} (expired or signature mismatch): ${l}`)}if(a.status===400){let l=await a.text();throw new Error(`[ledger] Content integrity check failed for ${r}: ${l}`)}if((a.status===429||a.status>=500)&&s<Ufs){let l=$3h*2**s;i.logger.debug(`[ledger] Upload ${r} got ${a.status}, retrying in ${l}ms (attempt ${s+1}/${Ufs})`),await new Promise(p=>setTimeout(p,l));continue}let u=await a.text();throw new Error(`[ledger] S3 upload failed for ${r}: ${a.status} ${u}`)}throw new Error(`[ledger] Upload exhausted retries for ${r}`)}function w6l(e,t,r){try{let n=Ule(e,cn.ApiDefinitionId(t),new Vle({snippetsConfigWithSdkId:{},snippetsBySdkId:{},snippetTemplatesByEndpoint:{},snippetTemplatesByEndpointId:{},snippetsBySdkIdAndEndpointId:{}}));return _le(n)}catch(n){r.logger.debug(`[ledger] Failed to convert API definition "${t}" to read form: ${String(n)}`);return}}function i4h({baseApiDefinitions:e,translatedSpecs:t,context:r}){let n=new Map(e);for(let[i,o]of t)try{let s=ST({ir:o.ir,snippetsConfig:o.snippetsConfig,playgroundConfig:o.playgroundConfig,graphqlOperations:o.graphqlOperations,graphqlTypes:o.graphqlTypes,context:r,apiNameOverride:o.apiName});n.set(i,s)}catch(s){r.logger.warn(`[ledger] Failed to convert translated API definition for API "${i}": ${String(s)}. Falling back to base (untranslated) API.`)}return n}async function _fs({docsDefinition:e,git:t,apiDefinitions:r,fileManifest:n,fileIdToPath:i,resolver:o,context:s}){if(o==null)return[];let a=o.getTranslationPages(),c=o.getTranslationNavigationOverlays();if(a==null||Object.keys(a).length===0)return[];let u=o.getTranslatedApiSpecs(),l={};if(u.size>0)for(let[f,m]of r){let g=w6l(m,f,s);g!=null&&(l[f]=g)}let p=Object.entries(a);s.logger.info(`[ledger] Building ${p.length} translation locale(s)...`);let{buildTranslatedDocsDefinition:d}=await Promise.resolve().then(()=>(x6l(),v6l));return GIt(Z3h,p,async([f,m])=>{let g=await d({docsDefinition:e,locale:f,localePages:m,translationNavigationOverlays:c,resolver:o,context:s}),A=u.get(f),y=r;if(A!=null&&A.size>0&&(y=i4h({baseApiDefinitions:r,translatedSpecs:A,context:s}),g.config.root!=null)){let I={};for(let[C]of A){let w=y.get(C);if(w!=null){let T=w6l(w,C,s);T!=null&&(I[C]=T)}}Object.keys(I).length>0&&(g.config.root=O3e(g.config.root,l,I))}let{localeEntry:E,blobs:v}=$li({docsDefinition:g,git:t,apiDefinitions:y,fileManifest:n,fileIdToPath:i,locale:f});return{locale:f,localePages:m,translatedDefinition:g,localeEntry:E,blobs:v}})}Mfs();async function R6l({docsDefinition:e,organization:t,basePath:r,previewId:n,git:i,token:o,fdrOrigin:s,headers:a,context:c,apiDefinitions:u,fileManifest:l,filePaths:p,fileIdToPath:d,resolver:f}){let{localeEntry:m,blobs:g}=$li({docsDefinition:e,git:i,apiDefinitions:u,fileManifest:l,fileIdToPath:d}),A=await _fs({docsDefinition:e,git:i,apiDefinitions:u,fileManifest:l,fileIdToPath:d,resolver:f,context:c});for(let M of A)for(let[K,Y]of M.blobs)g.set(K,Y);let y=[m,...A.map(M=>M.localeEntry)],E=Zli({baseUrl:s,token:o,headers:a});c.logger.debug("[ledger-preview] Registering preview deployment...");let v=performance.now(),I={orgId:t,previewId:n??null,basePath:r??"",defaultLocale:m.locale,locales:y,root:m.root,pages:m.pages,apiManifest:m.apiManifest,config:m.config,fileManifest:m.fileManifest,jsFiles:m.jsFiles,redirects:m.redirects,locale:m.locale,version:m.version,repo:m.repo,git:i},C=await E.previewRegister(I),w=performance.now()-v;c.logger.debug(`[ledger-preview] Registered in ${w.toFixed(0)}ms \u2014 hash=${C.deploymentHash}, preview=${C.previewUrl}, missing=${C.missingContent.length} blobs`),await Vfs(C.missingContent,g,c,p),c.logger.debug("[ledger-preview] Finishing preview deployment...");let T=performance.now(),P=await E.finish({orgId:t,domain:C.domain,basepath:C.basepath,customDomains:[],previewId:C.previewId,defaultLocale:m.locale,locales:y}),O=performance.now()-T;if(c.logger.debug(`[ledger-preview] Finished in ${O.toFixed(0)}ms \u2014 deploymentId=${P.deploymentId}, reused=${P.reusedDeployment}`),P.translationsProcessed!=null)for(let M of P.translationsProcessed)c.logger.info(`[ledger-preview] Locale "${M.locale}": ${M.segmentsAdded} segment(s) added`);return{previewUrl:C.previewUrl,deploymentId:P.deploymentId}}async function F6l({fn:e,maxRetries:t,baseDelayMs:r,jitterFactor:n=0,isRetryable:i=()=>!0,logger:o,label:s,delayFn:a=c=>new Promise(u=>setTimeout(u,c))}){let c;for(let u=0;u<=t;u++)try{return await e()}catch(l){if(c=l,!i(l)||u>=t)throw l;let p=n>0?1+(Math.random()-.5)*n:1,d=Math.round(r*2**u*p);s!=null&&o.warn(`${s} (attempt ${u+1}/${t+1}), retrying in ${d}ms...`),await a(d)}throw c}var o4h=10,k6l=10,epi=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10),s4h=3,a4h=1e3,c4h=.5;function N6l(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var ovt=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function j6l({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await py.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}function u4h(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function Q6l(e){let t=await(0,Z7t.readFile)(e),r=(0,U6l.createHash)("sha256").update(new Uint8Array(t)).digest("hex");return{buffer:t,hash:r}}async function V6l({token:e,organization:t,docsWorkspace:r,domain:n,customDomains:i,apiWorkspaces:o,ossWorkspaces:s,context:a,preview:c,previewId:u,editThisPage:l,disableTemplates:p=!1,skipUpload:d=!1,withAiExamples:f=!0,excludeApis:m=!1,targetAudiences:g,docsUrl:A,cliVersion:y,ciSource:E,deployerAuthor:v,loginCommand:I="fern login",multiSource:C=!1}){let w=process.env.FERN_FDR_ORIGIN??process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com";await vLt(`${w}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let P={};y!=null&&(P["X-CLI-Version"]=y),E!=null&&(P["X-CI-Source"]=JSON.stringify(E),a.logger.debug(`CI source detected: ${E.type} (${E.repo??"unknown repo"})`)),v?.username!=null&&(P["X-Deployer-Author"]=v.username),v?.email!=null&&(P["X-Deployer-Author-Email"]=v.email);let O=Fk({token:e.value,...Object.keys(P).length>0&&{headers:P}}),M={type:"public"},K=DFl();K!=="legacy"&&a.logger.info(`Docs deploy mode: ${K}`),m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let Y,Z=i[0]??n,ae=A4h(n),le=r.config.experimental&&r.config.experimental.dynamicSnippets===!1;r.config.experimental?.basepathAware===!0&&a.logger.warn("experimental.basepath-aware is deprecated. Use 'multi-source: true' on the instance instead.");let oe=C||r.config.experimental?.basepathAware===!0;oe&&a.logger.debug("Basepath-aware mode is enabled - using basepath-aware S3 key format");let ce=!1,Te=()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to early exit..."),j6l({fdrOrigin:w,token:e.value,domain:n,basepath:ae}))},De=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await j6l({fdrOrigin:w,token:e.value,domain:n,basepath:ae})),process.exit(1)};process.on("SIGINT",De),process.on("SIGTERM",De);try{let se=await Z5t({docsWorkspace:r,organization:t,fdrOrigin:w,token:e.value,taskContext:a}),pe=r.config.translations!=null&&r.config.translations.length>1,xe=new Map,ve={},Re=new Map,Ke=new Map,ct=new Map,Ct=(Mt,dr)=>{if(pe)try{let qe=Ule(Mt,cn.ApiDefinitionId(dr),new Vle({snippetsConfigWithSdkId:{},snippetsBySdkId:{},snippetTemplatesByEndpoint:{},snippetTemplatesByEndpointId:{},snippetsBySdkIdAndEndpointId:{}}));ct.set(dr,_le(qe))}catch(qe){a.logger.debug(`Failed to build read API definition for ${dr} (translated sidebar titles may stay in the default language): ${String(qe)}`)}},at=async({ir:Mt,snippetsConfig:dr,playgroundConfig:qe,apiName:Me,workspace:_,graphqlOperations:Ie,graphqlTypes:tt})=>{let mt=ST({ir:Mt,snippetsConfig:dr,playgroundConfig:qe,graphqlOperations:Ie,graphqlTypes:tt,context:a,apiNameOverride:Me}),xt=e.value==="dummy",Lt=C4h(f&&!xt,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(Lt){let Ft=_?.getSources()?.filter(Pt=>Pt.type==="openapi").map(Pt=>({absoluteFilePath:Pt.absoluteFilePath,absoluteFilePathToOverrides:Pt.absoluteFilePathToOverrides}));Ft==null||Ft.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):mt=await myt(mt,Lt,a,e,t,Ft)}let Be,Gt=new Set;if(Object.keys(dr).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!le){let It=await y4h({fdr:O,workspace:_,organization:t,context:a,snippetsConfig:dr});It&&Object.keys(It).length>0&&(Be=It,Gt=new Set(Object.keys(It)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(It).join(", ")}`));let Ft=await I4h({workspace:_,organization:t,context:a,snippetsConfig:dr,skipLanguages:Gt});Ft&&(Be={...Be,...Ft})}let mr=Me??Lr(Mt.apiName),Er;try{Er=await F6l({fn:()=>O.api.register.registerApiDefinition({orgId:cn.OrgId(t),apiId:cn.ApiId(mr),definition:mt,dynamicIRs:Be}),maxRetries:s4h,baseDelayMs:a4h,jitterFactor:c4h,isRetryable:w4h,logger:a.logger,label:`registerApiDefinition failed for ${mr}`})}catch(It){let Ft=G6l(It);return a.logger.error(`FDR registerApiDefinition failed. Error details:
|
|
4159
|
-
${JSON.stringify(Ft,void 0,2)}`),Me!=null?a.failAndThrow(`Failed to publish docs because API definition (${Me}) could not be uploaded. Please contact support@buildwithfern.com`,Ft,{code:B.Code.NetworkError}):a.failAndThrow("Failed to publish docs because API definition could not be uploaded. Please contact support@buildwithfern.com",Ft,{code:B.Code.NetworkError})}return a.logger.debug(`Registered API Definition ${Me}: ${Er.apiDefinitionId}`),Er.dynamicIRs&&Be&&(d?a.logger.debug("Skip-upload mode: skipping dynamic IR uploads"):await v4h({dynamicIRs:Be,dynamicIRUploadUrls:Er.dynamicIRs,context:a,apiId:Er.apiDefinitionId})),Ct(mt,Er.apiDefinitionId),xe.set(Er.apiDefinitionId,mt),Er.apiDefinitionId},Ut=new m3({domain:n,docsWorkspace:se,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async Mt=>{let dr=Mt.map(Pt=>({...Pt,sanitizedPath:u4h(Pt.relativeFilePath)})),qe=new Map(dr.map(Pt=>[Pt.absoluteFilePath,Pt])),Me=new Map(dr.map(Pt=>[Pt.sanitizedPath,Pt.absoluteFilePath])),Ie=dr.map(Pt=>({...Pt,mediaType:X7t.lookup(Pt.absoluteFilePath)})).filter(Pt=>Pt.mediaType!==!1).filter(Pt=>Df.parse(Pt.mediaType)?.isImage()??!1).map(Pt=>Pt.absoluteFilePath),tt=await bkl(Ie,o4h,a);a.logger.debug(`Hashing ${tt.size} image files with concurrency ${epi}...`);let mt=performance.now(),xt=Array.from(tt.values()),Be=(await GIt(epi,xt,async Pt=>{let wr=qe.get(Pt.filePath);if(wr==null)return null;let ne=wr.sanitizedPath,{buffer:je,hash:Pe}=await Q6l(wr.absoluteFilePath),Je=X7t.lookup(wr.absoluteFilePath)||"application/octet-stream";return ve[ne]={hash:Pe,contentType:Je,contentLength:je.byteLength,filename:(0,qfs.basename)(wr.sanitizedPath),width:Pt.width,height:Pt.height},Re.set(Pe,wr.absoluteFilePath),{filePath:cn.docs.v1.write.FilePath(YBt(ne)),width:Pt.width,height:Pt.height,blurDataUrl:Pt.blurDataUrl,alt:void 0,fileHash:Pe}})).filter(Pt=>Pt!=null),Gt=performance.now()-mt;a.logger.debug(`Hashed ${Be.length} images in ${Gt.toFixed(0)}ms`);let mr=dr.filter(({absoluteFilePath:Pt})=>!tt.has(Pt));a.logger.debug(`Hashing ${mr.length} non-image files with concurrency ${epi}...`);let Er=performance.now(),It=await GIt(epi,mr,async Pt=>{let{buffer:wr,hash:ne}=await Q6l(Pt.absoluteFilePath),je=X7t.lookup(Pt.absoluteFilePath)||"application/octet-stream";return ve[Pt.sanitizedPath]={hash:ne,contentType:je,contentLength:wr.byteLength,filename:(0,qfs.basename)(Pt.sanitizedPath)},Re.set(ne,Pt.absoluteFilePath),{path:cn.docs.v1.write.FilePath(YBt(Pt.sanitizedPath)),fileHash:ne}}),Ft=performance.now()-Er;if(a.logger.debug(`Hashed ${It.length} non-image files in ${Ft.toFixed(0)}ms`),K==="ledger"){let Pt=[];for(let wr of dr)ve[wr.sanitizedPath]!=null&&(Ke.set(wr.sanitizedPath,wr.sanitizedPath),Pt.push({relativeFilePath:wr.relativeFilePath,absoluteFilePath:wr.absoluteFilePath,fileId:wr.sanitizedPath}));return a.logger.debug(`[ledger] Skipping V2 startDocsRegister; resolved ${Pt.length} files by sanitizedPath`),Pt}if(c){let Pt;try{Pt=await O.docs.v2.write.startDocsPreviewRegister({orgId:cn.OrgId(t),authConfig:M,filepaths:It,images:Be,basePath:ae,previewId:u!=null?N6l(u):void 0})}catch(wr){return await L6l(wr,a,t,n,I)}if(Z=Pt.previewUrl,Y=Pt.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${Y}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let wr=new Set(Pt.skippedFiles||[]),ne=Object.fromEntries(Object.entries(Pt.uploadUrls).filter(([Je])=>!wr.has(Je))),je=Object.keys(ne).length,Pe=wr.size;je>0?(a.logger.debug(`Uploading ${je} files (${Pe} skipped)...`),await z6l(ne,r.absoluteFilePath,a,k6l,Me)):a.logger.debug(`No files to upload (all ${Pe} up to date)`)}return M6l(Pt.uploadUrls,r.absoluteFilePath,Me)}else{let Pt;try{Pt=await O.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:M,orgId:cn.OrgId(t),filepaths:It,images:Be,...oe&&{basepathAware:!0}})}catch(ne){return L6l(ne,a,t,n,I)}Y=Pt.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${Y}`);let wr=Pt.skippedFiles?.length||0;if(wr>0&&a.logger.info(`Skipped ${wr} unchanged file${wr===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let ne=new Set(Pt.skippedFiles||[]),je=Object.fromEntries(Object.entries(Pt.uploadUrls).filter(([Je])=>!ne.has(Je))),Pe=Object.keys(je).length;Pe>0?(a.logger.info(`\u2191 Uploading ${Pe} files...`),await z6l(je,r.absoluteFilePath,a,k6l,Me)):a.logger.info("No files to upload (all up to date)")}return M6l(Pt.uploadUrls,r.absoluteFilePath,Me)}},registerApi:at,buildTranslatedApiDefinitions:pe,targetAudiences:g});a.logger.info("Resolving docs definition...");let er=performance.now(),Ae=await Ut.resolve(),me=performance.now()-er;if(r.config.settings?.substituteEnvVars){a.logger.debug("Applying environment variable substitution to docs definition...");let{jsFiles:Mt,...dr}=Ae;Ae={...YA(dr,{onError:Me=>a.failAndThrow(void 0,Me,{code:B.Code.EnvironmentError})},{substituteAsEmpty:!1}),jsFiles:Mt}}let ke=Object.keys(Ae.pages).length,it=o.length,ye=process.memoryUsage();if(a.logger.info(`Resolved docs definition in ${me.toFixed(0)}ms: ${ke} pages${it?`, ${it} API workspaces`:""}`),a.logger.debug(`Memory after resolve: RSS=${(ye.rss/1024/1024).toFixed(2)}MB, Heap=${(ye.heapUsed/1024/1024).toFixed(2)}MB`),Y==null&&K!=="ledger")return Te(),a.failAndThrow("Failed to publish docs.","Docs registration ID is missing.",{code:B.Code.InternalError});let Ne=E?.repo!=null&&E?.branch!=null?{repoUrl:Ekl(E.repo,E.type),branch:E.branch,commitSha:E.commitSha}:void 0,Rt=async()=>{if(Y==null)return;a.logger.info("Publishing docs to FDR...");let Mt=performance.now();await O.docs.v2.write.finishDocsRegister({docsRegistrationId:Y,docsDefinition:Ae,excludeApis:m,...oe&&!c&&{basepathAware:!0}});let dr=performance.now()-Mt;a.logger.debug(`Docs published to FDR in ${dr.toFixed(0)}ms`)},ft=async()=>{if(c){let Mt=await R6l({docsDefinition:Ae,organization:t,basePath:ae,previewId:u!=null?N6l(u):u,git:Ne,token:e.value,fdrOrigin:w,headers:P,context:a,apiDefinitions:xe,fileManifest:Object.keys(ve).length>0?ve:void 0,filePaths:Re.size>0?Re:void 0,fileIdToPath:Ke.size>0?Ke:void 0,resolver:Ut});K==="ledger"&&(Z=Mt.previewUrl),a.logger.info(`[ledger] Preview deployment created: ${Mt.deploymentId}`)}else{let Mt=await D6l({docsDefinition:Ae,organization:t,domain:n,basepath:ae,previewId:u,customDomains:i,git:Ne,token:e.value,fdrOrigin:w,headers:P,context:a,apiDefinitions:xe,fileManifest:Object.keys(ve).length>0?ve:void 0,filePaths:Re.size>0?Re:void 0,fileIdToPath:Ke.size>0?Ke:void 0,resolver:Ut});a.logger.info(`[ledger] Deployment ${Mt.reusedDeployment?"reused":"created"}: ${Mt.deploymentId}`)}};if(K==="ledger")try{await ft()}catch(Mt){return a.failAndThrow("Failed to publish docs via ledger to "+n,Mt,{code:B.Code.NetworkError})}else if(Y!=null)try{await Rt()}catch(Mt){return a.failAndThrow("Failed to publish docs to "+n,Mt,{code:B.Code.NetworkError})}let Ze=pe?Ut.getTranslatedApiSpecs():new Map,ur=new Map;if(Ze.size>0){a.logger.info(`Registering translated API definitions for ${Ze.size} locale(s)...`);for(let[Mt,dr]of Ze){let qe=new Map;for(let[Me,_]of dr)try{let Ie=await at(_);Ie!==Me&&qe.set(Me,Ie)}catch(Ie){a.logger.warn(`Failed to register translated API definition for locale "${Mt}" (API reference will render in the default language): ${String(Ie)}`)}qe.size>0&&ur.set(Mt,qe)}}let Yt=Ut.getTranslationPages(),Cr=Ut.getTranslationNavigationOverlays(),ji=c?Z:n;K!=="ledger"&&Yt!=null&&Object.keys(Yt).length>0&&(a.logger.info(`Registering translations for ${Object.keys(Yt).length} locale(s)...`),await Promise.all(Object.entries(Yt).map(async([Mt,dr])=>{try{let qe=Ut.getCollectedFileIds(),Me=Ut.getDocsWorkspacePath(),_=async wr=>{let ne=ko(Me,wr),je=ni(Me,Se.of(`translations/${Mt}/${ne}`));return await $t(je)?je:wr},Ie=async wr=>{let ne=await _(wr),je=await(0,Z7t.readFile)(ne,"utf-8"),Pe=je.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Pe!=null?je.slice(Pe[0].length):je},tt=async wr=>{let ne=await _(wr);return(0,Z7t.readFile)(ne,"utf-8")},mt=await Promise.all(Object.entries(dr).map(async([wr,ne])=>{try{let je=Ae.pages[wr],Pe=ni(Me,Se.of(wr)),{markdown:Je}=await wT({markdown:ne,absolutePathToFernFolder:Me,absolutePathToMarkdownFile:Pe,context:a,markdownLoader:Ie}),Et=await _2({markdown:Je,absolutePathToFernFolder:Me,absolutePathToMarkdownFile:Pe,context:a,fileLoader:tt}),Qr=q2({markdown:Et,absolutePathToFernFolder:Me,absolutePathToMarkdownFile:Pe}),gn=Mw(Qr);gn=V2(gn,qe,{},{absolutePathToMarkdownFile:Pe,absolutePathToFernFolder:Me},a);let Mn=je?.editThisPageUrl;if(Mn!=null){let yo=`/fern/${wr}`,Zl=`/fern/translations/${Mt}/${wr}`;Mn=Mn.replace(yo,Zl)}return[wr,{markdown:gn,rawMarkdown:gn,editThisPageUrl:Mn,editThisPageLaunch:je?.editThisPageLaunch}]}catch(je){a.logger.warn(`Failed to process translated page "${wr}" for locale "${Mt}": ${String(je)}. Falling back to base page.`);return}})),xt={...Ae.pages,...Object.fromEntries(mt.filter(wr=>wr!=null))},Lt=Ide(Ae.config.root,dr,a),Be=Cr?.[Mt],Gt=Ae.config.announcement,mr=Ae.config.navbarLinks;Be!=null&&(Lt=vde(Lt,Be),Gt=xde(Be)??Gt,Be.navbarLinks!=null&&(mr=Be.navbarLinks));let Er=ur.get(Mt);if(Er!=null&&Er.size>0&&Lt!=null){let wr={},ne={};for(let[je,Pe]of Er){let Je=ct.get(je),Et=ct.get(Pe);Je!=null&&(wr[je]=Je),Et!=null&&(ne[je]=Et)}Lt=Object.keys(ne).length>0?O3e(Lt,wr,ne):structuredClone(Lt);for(let[je,Pe]of Er)D3e(Lt,je,Pe)}let It={...Ae,pages:xt,config:{...Ae.config,root:Lt,announcement:Gt,navbarLinks:mr}},Ft=Object.keys(dr).length;a.logger.debug(`Sending translation for locale "${Mt}" (${Ft} page${Ft===1?"":"s"})`);let Pt=await fetch(`${w}/v2/registry/docs/translations/register`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.value}`,...P},body:JSON.stringify({domain:ji,customDomains:c?[]:i,orgId:t,locale:Mt,docsDefinition:It})});if(!Pt.ok){let wr=await Pt.text();throw new Error(`HTTP ${Pt.status}: ${wr}`)}a.logger.debug(`Registered translations for locale "${Mt}"`)}catch(qe){a.logger.warn(`Failed to register translations for locale "${Mt}": ${String(qe)}`)}})));let An=W2(Z);await x4h({docsDefinition:Ae,isPreview:c,context:a});let Zi=Pme(An,An);return a.logger.info(fe.green(`Published docs to ${Zi}`)),An}catch(se){throw Te(),se}finally{ce=!1,process.removeListener("SIGINT",De),process.removeListener("SIGTERM",De)}}function _6l(e){return typeof e=="object"&&e!==null&&"uploadUrl"in e&&typeof e.uploadUrl=="string"&&"fileId"in e&&typeof e.fileId=="string"}function l4h(e){if(typeof e=="string")return e;if(_6l(e))return e.uploadUrl;throw new Error(`Unexpected upload URL value: ${JSON.stringify(e)}`)}function p4h(e,t){return _6l(t)?Ew.FileId(t.fileId):Ew.FileId(e)}async function z6l(e,t,r,n,i){let o=Date.now(),s=Object.keys(e).length;r.logger.debug(`Start uploading ${s} files...`);let a=iBt(Object.entries(e),n),c=0;for(let l of a){await Promise.all(l.map(async([d,f])=>{let m=i.get(d)||ni(t,Se.of(d));try{let g=l4h(f),A=X7t.lookup(m);await py.put(g,await(0,Z7t.readFile)(m),{headers:{"Content-Type":A===!1?"application/octet-stream":A,"Cache-Control":"public, max-age=31536000, immutable"}})}catch(g){r.failAndThrow(`Failed to upload ${m}`,g,{code:B.Code.NetworkError})}}));let p=Date.now();c+=l.length,r.logger.debug(`Uploaded ${c}/${s} files in ${p-o}ms`)}let u=Date.now();r.logger.debug(`Finished uploading ${s} files in ${u-o}ms`)}function M6l(e,t,r){let n=[];for(let[i,o]of Object.entries(e)){let s=Se.of(i),a=r?.get(i)||ni(t,s);n.push({relativeFilePath:s,absoluteFilePath:a,fileId:p4h(i,o)})}return n}async function L6l(e,t,r,n,i){t.instrumentPostHogEvent({command:"docs-generation",properties:{error:JSON.stringify(e)}});let o=G6l(e);t.logger.debug(`startDocsRegister failed for domain '${n}', org '${r}'. Error details:
|
|
4158
|
+
`):void 0);for(let i of t.logs.slice(this.lengthOfLastLogs))this.context.logger.log(hjh(i.level),i.message),this.#n==null&&(this.#n=ujh(i.message)??this.#n),this.cachedReplayResult==null&&(this.cachedReplayResult=ljh(i.message));this.lengthOfLastLogs=t.logs.length;let n=i=>{this.context.logger.debug(`Generated files. ${Pme("View here",i,{fallback:(o,s)=>`${o}: ${s}`})}`)};return await t.status._visit({notStarted:ht,running:ht,failed:({message:i,s3PreSignedReadUrl:o})=>{o!=null&&n(o),this.context.failAndThrow(i,void 0,{code:B.Code.ContainerError})},finished:async i=>{if(i.s3PreSignedReadUrlV2!=null){n(i.s3PreSignedReadUrlV2);let o=this.getAbsolutePathToLocalOutput();o!=null&&await djh({s3PreSignedReadUrl:i.s3PreSignedReadUrlV2,absolutePathToLocalOutput:o,context:this.context})}if(this.absolutePathToPreview==null)for(let o of r)this.context.logger.info(`Published ${o}`);this.#e=!0,this.#t=i.createdSnippets!=null?i.createdSnippets:!1,this.#r=i.snippetsS3PreSignedReadUrl,this.#o=i.pullRequestUrl,this.#s=i.noChangesDetected,i.actualVersion!=null&&(this.#n=i.actualVersion),this.emitReplayTelemetryIfReady()},_other:()=>{this.context.logger.warn("Received unknown update type: "+t.status.type)}}),this.#e?{createdSnippets:this.#t,snippetsS3PreSignedReadUrl:this.#r,actualVersion:this.#n,pullRequestUrl:this.#o,noChangesDetected:this.#s,publishTarget:this.#i}:void 0}getAbsolutePathToLocalOutput(){return this.absolutePathToPreview!=null?Ge(this.absolutePathToPreview,Se.of(YUe.default.basename(this.generatorInvocation.name))):this.generatorInvocation.absolutePathToLocalOutput}emitReplayTelemetryIfReady(){if(!this.replayEventEmitted&&this.cachedReplayResult!=null&&!this.telemetryContext.disableTelemetry)try{let t={success:!0,steps:{replay:this.cachedReplayResult},warnings:[]},n={...(0,bFl.buildReplayTelemetryProps)({pipelineResult:t,generatorName:this.generatorInvocation.name,generatorVersion:this.generatorInvocation.version,cliVersion:this.telemetryContext.cliVersion,repoUri:pjh(this.generatorInvocation),automationMode:this.telemetryContext.automationMode,autoMerge:this.telemetryContext.autoMerge,skipIfNoDiff:this.telemetryContext.skipIfNoDiff,hasBreakingChanges:!1,versionArg:this.telemetryContext.versionArg,versionBump:this.telemetryContext.versionBump,replayConfigEnabled:this.telemetryContext.replayConfigEnabled,noReplayFlag:this.telemetryContext.noReplayFlag,githubMode:fjh(this.generatorInvocation),previewMode:this.absolutePathToPreview!=null,durationMs:Date.now()-this.taskStartedAtMs}),surface:"fiddle",org_id:this.telemetryContext.orgId};this.context.instrumentPostHogEvent({command:"replay",properties:n}),this.context.logger.debug(`[telemetry] replay event sent: ${JSON.stringify(n)}`),this.replayEventEmitted=!0}catch(t){this.context.logger.debug(`[telemetry] failed to send replay event: ${String(t)}`)}}#e=!1;get isFinished(){return this.#e}#t=!1;get createdSnippets(){return this.#t}#r=void 0;get snippetsS3PreSignedReadUrl(){return this.#r}#n=void 0;get actualVersion(){return this.#n}#i=void 0;get publishTarget(){return this.#i}#o=void 0;get pullRequestUrl(){return this.#o}#s=void 0;get noChangesDetected(){return this.#s}},cjh=/Tagging release (v?\d+\.\d+\.\d+(?:-[\w.-]+)?)/;function ujh(e){let t=e.match(cjh);if(t?.[1]!=null)return t[1].replace(/^v/,"")}function ljh(e){let t=e.match(ajh);if(t?.[1]!=null)try{return JSON.parse(t[1])?.steps?.replay}catch{return}}function pjh(e){let t=e.raw?.github;return t==null?"":"uri"in t&&typeof t.uri=="string"?t.uri:"repository"in t&&typeof t.repository=="string"?t.repository:""}function fjh(e){let t=e.raw?.github;if(t!=null&&"mode"in t){if(t.mode==="pull-request")return"pull-request";if(t.mode==="commit-and-release")return"commit-and-release"}return"push"}async function djh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){try{let n=await gjh(t),i=await Ajh(t);n&&i?await yjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):n&&!i?await bjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}):await mjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}),r.logger.info(fe.green(`Downloaded to ${t}`))}catch(n){r.failAndThrow("Failed to download files",n,{code:B.Code.NetworkError})}}async function mjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t}){let r=await py.get(e,{responseType:"stream"}),n=await Vui.default.dir({prefix:"fern",unsafeCleanup:!0}),i=YUe.default.join(n.path,"output.zip");await(0,_us.pipeline)(r.data,(0,Uui.createWriteStream)(i)),await Vus(t),await(0,vM.mkdir)(t,{recursive:!0}),await xFl(i,t)}async function Vus(e){await $t(e)&&(await IFl(e),await(0,vM.rm)(e,{recursive:!0,force:!0}))}async function IFl(e){try{let t=await(0,vM.readdir)(e,{withFileTypes:!0});for(let r of t){let n=qt.of(YUe.default.join(e,r.name));r.isDirectory()&&await IFl(n);try{await(0,vM.chmod)(n,493)}catch{}}await(0,vM.chmod)(e,493)}catch{}}function hjh(e){switch(e){case"DEBUG":return Un.Debug;case"INFO":return Un.Info;case"WARN":return Un.Warn;case"ERROR":return Un.Error;default:return Un.Info}}async function gjh(e){let t=Ge(e,Se.of(MP));return await $t(t)}async function Ajh(e){let t=Ge(e,Se.of(".git"));return await $t(t)}async function EK(e,t,r){return(await Wc(r.logger,"git",e,{cwd:t,doNotPipeOutput:!0})).stdout}async function yjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=Ge(t,Se.of(MP)),i=await Pye({absolutePathToFernignore:n});await EK(["rm","-rf","."],t,r),await vFl({s3PreSignedReadUrl:e,outputPath:t}),await EK(["add","."],t,r),await EK(["reset","--",...i],t,r),await EK(["restore","."],t,r)}async function bjh({s3PreSignedReadUrl:e,absolutePathToLocalOutput:t,context:r}){let n=qt.of((await Vui.default.dir({})).path),i=Ge(t,Se.of(MP)),o=await Pye({absolutePathToFernignore:i});await(0,vM.cp)(t,n,{recursive:!0}),await EK(["init"],n,r),await EK(["add","."],n,r),await EK(["-c","user.name=fern","-c","user.email=hey@buildwithfern.com","-c","commit.gpgsign=false","commit","--allow-empty","--no-verify","-m","init"],n,r),await EK(["rm","-rf","."],n,r),await vFl({s3PreSignedReadUrl:e,outputPath:n}),await EK(["add","."],n,r),await EK(["reset","--",...o],n,r),await EK(["restore","."],n,r),await Vus(Ge(n,Se.of(".git"))),await Vus(t),await(0,vM.cp)(n,t,{recursive:!0})}async function vFl({s3PreSignedReadUrl:e,outputPath:t}){let r=await py.get(e,{responseType:"stream"}),n=await Vui.default.dir({prefix:"fern",unsafeCleanup:!0}),i=YUe.default.join(n.path,"output.zip");await(0,_us.pipeline)(r.data,(0,Uui.createWriteStream)(i)),await xFl(i,t)}async function xFl(e,t){return new Promise((r,n)=>{EFl.default.open(e,{lazyEntries:!0},(i,o)=>{if(i||!o){n(i??new Error("Failed to open zip file"));return}o.on("error",n),o.on("end",r),o.on("entry",s=>{let a=YUe.default.join(t,s.fileName);if(s.fileName.endsWith("/")){(0,vM.mkdir)(a,{recursive:!0}).then(()=>o.readEntry()).catch(n);return}(0,vM.mkdir)(YUe.default.dirname(a),{recursive:!0}).then(()=>{o.openReadStream(s,(c,u)=>{if(c||!u){n(c??new Error("Failed to open read stream"));return}u.pipe((0,Uui.createWriteStream)(a)).on("finish",()=>o.readEntry()).on("error",n)})}).catch(n)}),o.readEntry()})})}Zt();zn();Ow();jt();var _ui=require("fs/promises"),CFl=be(hv(),1),Ejh="proto.zip",S7t=class{sourceTypes;context;sources;constructor(t,r){this.context=t,this.sources=Object.fromEntries(r.map(n=>[n.id,n])),this.sourceTypes=new Set(Object.values(this.sources).map(n=>n.type))}async uploadSources(t){for(let[r,n]of Object.entries(t)){let i=this.getSourceOrThrow(r);await this.uploadSource(i,n.uploadUrl)}return this.convertFdrSourceUploadsToSourceConfig(t)}async uploadSource(t,r){let n=await this.getUploadCommand(t),i=await(0,_ui.readFile)(n.absoluteFilePath),o;try{o=await fetch(r,{method:"PUT",body:i,headers:{"Content-Type":"application/octet-stream"}})}catch(s){await n.cleanup(),this.context.failAndThrow(`Network error uploading source file: ${t.absoluteFilePath}`,s,{code:B.Code.NetworkError});return}await n.cleanup(),o.ok||this.context.failAndThrow(`Failed to upload source file: ${t.absoluteFilePath}. Status: ${o.status}, ${o.statusText}`,void 0,{code:B.Code.NetworkError})}async getUploadCommand(t){if(t.type==="protobuf"){let r=await this.zipSource(t.absoluteFilePath);return{absoluteFilePath:r,cleanup:async()=>{this.context.logger.debug(`Removing ${r}`),await(0,_ui.unlink)(r)}}}return{absoluteFilePath:t.absoluteFilePath,cleanup:async()=>{}}}async zipSource(t){let r=await CFl.default.dir(),n=Ge(qt.of(r.path),Se.of(Ejh));return this.context.logger.debug(`Zipping source ${t} into ${n}`),await Wc(this.context.logger,"zip",["-r",n,"."],{cwd:t,doNotPipeOutput:!0}),n}convertFdrSourceUploadsToSourceConfig(t){let r=[];for(let[n,i]of Object.entries(t))switch(this.getSourceOrThrow(n).type){case"protobuf":r.push(mj.proto({id:n,protoRootUrl:i.downloadUrl}));continue;case"openapi":r.push(mj.openapi());continue;case"asyncapi":continue}return{sources:r}}getSourceOrThrow(t){let r=this.sources[t];return r==null&&this.context.failAndThrow(`Internal error; server responded with source id "${t}" which does not exist in the workspace.`,void 0,{code:B.Code.InternalError}),r}};async function TFl({projectConfig:e,organization:t,workspace:r,interactiveTaskContext:n,generatorInvocation:i,version:o,audiences:s,shouldLogS3Url:a,token:c,whitelabel:u,replay:l,irVersionOverride:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,readme:A,fernignorePath:y,skipFernignore:E,dynamicIrOnly:v,retryRateLimited:I,requireEnvVars:C,automationMode:w,autoMerge:T,skipIfNoDiff:P,verify:O,noReplay:M,disableTelemetry:K,loginCommand:Y,specsTarGzBuffer:Z}){let ae=Fk({token:c.value}),oe=await vLt("https://registry.buildwithfern.com/health",n.logger),ce=jn.getPackageName({generatorInvocation:i}),Te=f??d!=null,De=ye=>YA(ye,{onError:Ne=>{!Te&&C&&n.failAndThrow(void 0,Ne,{code:B.Code.EnvironmentError})}},{substituteAsEmpty:Te}),se=De(i),pe=RUe({apiName:r.definition.rootApiFile.contents.name,organization:t,generatorInvocation:se}),xe=o??await QDt({packageName:ce,generatorInvocation:i});o!=null&&(Te?n.logger.warn(`Skipping version availability check in preview mode. Version ${o} may already exist on the package registry.`):await fgr({version:o,packageName:ce,generatorInvocation:i,context:n}));let ve=wg({workspace:r,generationLanguage:i.language,keywords:i.keywords,smartCasing:i.smartCasing,exampleGeneration:{disabled:i.disableExamples,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!1},audiences:s,readme:A,packageName:ce,version:xe,context:n,sourceResolver:new vh(n,r),dynamicGeneratorConfig:pe,generationMetadata:{cliVersion:r.cliVersion,generatorName:i.name,generatorVersion:i.version,generatorConfig:i.config,originGitCommit:TY(),originGitCommitIsDirty:OY(),invokedBy:wY(),requestedVersion:o,ciProvider:SY()}}),Re=vf({token:c.value});if(!oe){let ye=await Re.organization.get({orgId:e.organization});ye.ok&&(ye.body.isWhitelabled&&(ve.readmeConfig==null&&(ve.readmeConfig=xjh),ve.readmeConfig.whiteLabel=!0),ve.selfHosted=ye.body.selfHostedSdKs)}let Ke=r.getSources(),ct,Ct,at=ST({ir:ve,snippetsConfig:{typescriptSdk:void 0,pythonSdk:void 0,javaSdk:void 0,rubySdk:void 0,goSdk:void 0,csharpSdk:void 0,phpSdk:void 0,swiftSdk:void 0,rustSdk:void 0},context:n});try{let ye=await ae.api.register.registerApiDefinition({orgId:cn.OrgId(t),apiId:cn.ApiId(Lr(ve.apiName)),definition:at,sources:Ke.length>0?vjh(Ke):void 0});ct=ye.apiDefinitionId,Ct=ye.sources??void 0}catch(ye){new S7t(n,Ke).sourceTypes.has("protobuf")&&n.failAndThrow(`Failed to register API definition: ${JSON.stringify(ye)}`)}let Ut=new S7t(n,Ke);if(Ct==null&&Ut.sourceTypes.has("protobuf")&&n.failAndThrow("Did not successfully upload Protobuf source files.",void 0,{code:B.Code.NetworkError}),Ct!=null){n.logger.debug("Uploading source files ...");let ye=await Ut.uploadSources(Ct);n.logger.debug("Setting IR source configuration ..."),ve.sourceConfig=ye}if(v){if(n.logger.info("Dynamic IR only mode: skipping SDK generation and uploading dynamic IR only"),o==null){n.failAndThrow("Version is required for dynamic IR only mode",void 0,{code:B.Code.ConfigError});return}if(i.language==null){n.failAndThrow("Language is required for dynamic IR only mode",void 0,{code:B.Code.ConfigError});return}if(ce==null){n.failAndThrow("Package name is required for dynamic IR only mode",void 0,{code:B.Code.ConfigError});return}try{await wFl({fdr:ae,organization:t,version:o,language:i.language,packageName:ce,ir:ve,smartCasing:i.smartCasing,dynamicGeneratorConfig:pe,context:n})}catch(ye){n.failAndThrow(`Failed to upload dynamic IR: ${Ln(ye)}`,void 0,{code:B.Code.NetworkError})}return{createdSnippets:!1,snippetsS3PreSignedReadUrl:void 0,actualVersion:o,pullRequestUrl:void 0,noChangesDetected:void 0,publishTarget:void 0}}let er=await fTl({projectConfig:e,workspace:r,organization:t,generatorInvocation:se,context:n,version:xe,intermediateRepresentation:{...ve,fdrApiDefinitionId:ct,publishConfig:Ijh({generatorInvocation:se})},shouldLogS3Url:a,token:c,whitelabel:u!=null?De(u):void 0,replay:l,irVersionOverride:p,absolutePathToPreview:d,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:y,skipFernignore:E,retryRateLimited:I,automationMode:w,autoMerge:T,skipIfNoDiff:P,verify:O,loginCommand:Y,specsTarGzBuffer:Z});n.logger.debug(`Job ID: ${er.jobId}`);let Ae=er.taskIds[0];if(Ae==null){n.failAndThrow("Did not receive a task ID.",void 0,{code:B.Code.NetworkError});return}n.logger.debug(`Task ID: ${Ae}`);let me=new Lui({job:er,taskId:Ae,generatorInvocation:i,interactiveTaskContext:n,absolutePathToPreview:d,telemetryContext:{cliVersion:r.cliVersion,orgId:e.organization,automationMode:w===!0,autoMerge:T===!0,skipIfNoDiff:P===!0,versionArg:o==null?"none":(0,SFl.isAutoVersion)(o)?"auto":"explicit",versionBump:void 0,replayConfigEnabled:l?.enabled===!0,noReplayFlag:M===!0,disableTelemetry:K===!0}}),ke=await mTl({job:er,taskHandler:me,taskId:Ae,context:n});if(ke!=null&&ke.actualVersion==null){let ye=Cjh(xe);ye!=null&&(ke={...ke,actualVersion:ye})}let it=ke?.actualVersion??xe;if(ke!=null&&it!=null&&i.language!=null&&ce!=null&&!Te)try{await wFl({fdr:ae,organization:t,version:it,language:i.language,packageName:ce,ir:ve,smartCasing:i.smartCasing,dynamicGeneratorConfig:pe,context:n})}catch(ye){n.logger.warn(`Failed to upload dynamic IR for SDK generation: ${Ln(ye)}`)}return ke}function Ijh({generatorInvocation:e}){return e.outputMode._visit({downloadFiles:()=>{},github:()=>{},githubV2:()=>{},publish:()=>{},publishV2:t=>t._visit({mavenOverride:()=>{},pypiOverride:()=>{},nugetOverride:()=>{},npmOverride:()=>{},rubyGemsOverride:()=>{},cratesOverride:()=>{},postman:r=>{let n;return e.raw?.output?.location==="postman"&&(n=e.raw.output?.["collection-id"]),rr.PublishingConfig.direct({target:rr.PublishTarget.postman({apiKey:r.apiKey,workspaceId:r.workspaceId,collectionId:n})})},_other:()=>{}}),_other:()=>{}})}function vjh(e){return Object.fromEntries(Object.values(e).map(t=>[t.id,{type:t.type==="protobuf"?"proto":t.type}]))}var xjh={defaultEndpoint:void 0,bannerLink:void 0,introduction:void 0,apiReferenceLink:void 0,apiName:void 0,disabledFeatures:void 0,whiteLabel:void 0,customSections:void 0,features:void 0,exampleStyle:void 0};async function wFl({fdr:e,organization:t,version:r,language:n,packageName:i,ir:o,smartCasing:s,dynamicGeneratorConfig:a,context:c}){c.logger.debug(`Uploading dynamic IR for ${n} SDK...`);let u;try{u=await e.api.register.getSdkDynamicIrUploadUrls({orgId:cn.OrgId(t),version:r,snippetConfiguration:{[n]:i}})}catch(f){c.logger.warn(`Failed to get dynamic IR upload URLs (non-fatal, dynamic snippets may be stale): ${f}`);return}let l=u.uploadUrls[n]?.uploadUrl;if(l==null){c.logger.warn(`No upload URL returned for ${n}`);return}let p=Mze({ir:o,disableExamples:!0,smartCasing:s,generationLanguage:n,generatorConfig:a}),d=JSON.stringify(p);try{let f=await fetch(l,{method:"PUT",body:d,headers:{"Content-Type":"application/octet-stream","Content-Length":d.length.toString()}});f.ok?c.logger.debug(`Uploaded dynamic IR for ${n}:${i} (${r})`):c.logger.warn(`Failed to upload dynamic IR for ${n}: ${f.status}`)}catch(f){c.logger.warn(`Network error uploading dynamic IR for ${n}: ${f}`)}}function Cjh(e){if(e!=null&&e.toUpperCase()!=="AUTO")return e}async function gDe({projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:g,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:E,retryRateLimited:v,requireEnvVars:I,automationMode:C,autoMerge:w,skipIfNoDiff:T,verify:P,noReplay:O,disableTelemetry:M,automation:K,occurrenceTracker:Y,loginCommand:Z,getSpecsTarGzBuffer:ae}){if(i.generators.length===0)return n.logger.warn("No generators specified."),null;let le=[],oe=Y??new BUe;Y==null&&oe.recordOccurrences(i.generators);let ce=r.generatorsConfiguration?.absolutePathToConfiguration,Te=await Promise.all(i.generators.map(De=>n.runInteractiveTask({name:De.name},se=>wjh({generatorInvocation:De,interactiveTaskContext:se,projectConfig:e,organization:t,workspace:r,context:n,generatorGroup:i,version:o,shouldLogS3Url:s,token:a,whitelabel:c,replay:u,absolutePathToPreview:l,isPreview:p,fiddlePreview:d,pushPreviewBranch:f,mode:m,fernignorePath:g,skipFernignore:A,dynamicIrOnly:y,validateWorkspace:E,retryRateLimited:v,requireEnvVars:I,automationMode:C,autoMerge:w,skipIfNoDiff:T,verify:P,noReplay:O,disableTelemetry:M,automation:K,generatorsYmlAbsolutePath:ce,occurrenceTracker:oe,loginCommand:Z,getSpecsTarGzBuffer:ae,onSnippetsProduced:pe=>le.push(pe)}))));if(K==null&&Te.some(De=>!De))throw new _c;return{snippetsProducedBy:le}}async function wjh({generatorInvocation:e,interactiveTaskContext:t,projectConfig:r,organization:n,workspace:i,context:o,generatorGroup:s,version:a,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,mode:A,fernignorePath:y,skipFernignore:E,dynamicIrOnly:v,validateWorkspace:I,retryRateLimited:C,requireEnvVars:w,automationMode:T,autoMerge:P,skipIfNoDiff:O,verify:M,noReplay:K,disableTelemetry:Y,automation:Z,generatorsYmlAbsolutePath:ae,occurrenceTracker:le,loginCommand:oe,getSpecsTarGzBuffer:ce,onSnippetsProduced:Te}){let De=Date.now();try{let se=sXe(e),pe=await i.toFernWorkspace({context:o},se,e.apiOverride?.specs);I&&await yK({workspace:pe,context:o,logWarnings:!1,ossWorkspace:i instanceof yp?i:void 0});let xe=E?void 0:y??await $1l({generatorInvocation:e,context:t}),ve=await TFl({projectConfig:r,organization:n,workspace:pe,interactiveTaskContext:t,generatorInvocation:{...e,outputMode:e.outputMode._visit({downloadFiles:()=>e.outputMode,github:Re=>Vr.OutputMode.github({...Re,makePr:A==="pull-request"}),githubV2:Re=>A==="pull-request"?Vr.OutputMode.githubV2(Vr.GithubOutputModeV2.pullRequest(Re)):e.outputMode,publish:()=>e.outputMode,publishV2:()=>e.outputMode,_other:()=>e.outputMode})},version:a,audiences:s.audiences,shouldLogS3Url:c,token:u,whitelabel:l,replay:p,readme:e.readme,irVersionOverride:e.irVersionOverride,absolutePathToPreview:d,isPreview:f,fiddlePreview:m,pushPreviewBranch:g,fernignorePath:xe,skipFernignore:E,dynamicIrOnly:v,retryRateLimited:C,requireEnvVars:w,automationMode:T,autoMerge:P,skipIfNoDiff:O,verify:M,noReplay:K,disableTelemetry:Y,loginCommand:oe,specsTarGzBuffer:await ce?.(e.name)});if(ve?.createdSnippets&&(Te(e),e.absolutePathToLocalSnippets!=null&&ve.snippetsS3PreSignedReadUrl!=null&&await Z1l({snippetsS3PreSignedReadUrl:ve.snippetsS3PreSignedReadUrl,absolutePathToLocalSnippetJSON:e.absolutePathToLocalSnippets,context:t})),Z!=null){let Re=ae!=null?await DUe(ae,e.name,le.lookup(e)):void 0;Z.recorder.recordSuccess({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,version:ve?.actualVersion??null,durationMs:Date.now()-De,pullRequestUrl:ve?.pullRequestUrl,noChangesDetected:ve?.noChangesDetected,publishTarget:ve?.publishTarget,outputRepoUrl:PUe(e),generatorsYmlAbsolutePath:ae,generatorsYmlLineNumber:Re})}}catch(se){if(Z==null)throw se;if(se instanceof _c){let ve=ae!=null?await DUe(ae,e.name,le.lookup(e)):void 0;throw Z.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:t.getLastFailureMessage()??"Generator failed",durationMs:Date.now()-De,outputRepoUrl:PUe(e),generatorsYmlAbsolutePath:ae,generatorsYmlLineNumber:ve}),se}let pe=Ln(se),xe=ae!=null?await DUe(ae,e.name,le.lookup(e)):void 0;Z.recorder.recordFailure({apiName:i.workspaceName,groupName:s.groupName,generatorName:e.name,errorMessage:pe,durationMs:Date.now()-De,outputRepoUrl:PUe(e),generatorsYmlAbsolutePath:ae,generatorsYmlLineNumber:xe}),t.failWithoutThrowing(pe,se,{code:nAe(se)})}}Dt();jt();jt();var qui="https://",qus="http://";function BFl(e){return e.startsWith(qui)?e.slice(qui.length):e.startsWith(qus)?e.slice(qus.length):e}function OFl(e){try{let t=e.startsWith(qui)||e.startsWith(qus)?e:`${qui}${e}`;return Sjh(new URL(t).pathname)}catch{return"/"}}function Sjh(e){return e===""||e==="/"?"/":e.endsWith("/")?e.slice(0,-1):e}function PFl(e,t,r){let n=OFl(e);for(let i of t){let o=OFl(i);n!==o&&r.failAndThrow(`Basepath mismatch between Fern url and custom-domain. When basepath-aware mode is enabled (via 'multi-source: true' or the deprecated 'experimental.basepath-aware: true'), the instance 'url' and 'custom-domain' must share the same basepath, otherwise docs will fail to resolve after DNS cutover. Instance url '${e}' has basepath '${n}' but custom-domain '${i}' has basepath '${o}'.`,void 0,{code:B.Code.ConfigError})}}Kk();Va();nm();Dt();CC();Qm();CC();Zt();Kl();tc();om();Sde();jt();xW();bn();var U6l=require("crypto"),Z7t=require("fs/promises");Vi();var X7t=be(kEe(),1),qfs=require("path");var Tjh=new Set(["legacy","ledger"]);function DFl(){if(process.env.FERN_SELF_HOSTED==="true")return"legacy";let e=process.env.FERN_DOCS_DEPLOY_MODE?.toLowerCase().trim();return e==null||e===""?"legacy":Ojh(e)?e:(console.warn(`[fern] Unrecognized FERN_DOCS_DEPLOY_MODE="${e}" \u2014 falling back to "legacy". Valid values: legacy, ledger.`),"legacy")}function Ojh(e){return Tjh.has(e)}Dt();var Akl=be(gkl(),1);Vi();var ykl=require("util"),hzh=(0,ykl.promisify)(Akl.default);async function bkl(e,t,r){let n=iBt(e,t),i=[];for(let o of n){let s=await Promise.all(o.map(async a=>{try{let c=await hzh(a);return c==null||c.height==null||c.width==null?void 0:{filePath:a,width:c.width,height:c.height,blurDataUrl:void 0}}catch(c){r.logger.error(`Failed to measure image size for ${a}. ${c?.message}`);return}}));i.push(...s.filter(Oa))}return new Map(i.map(o=>[o.filePath,o]))}Dt();function Ekl(e,t){if(e.startsWith("https://")||e.startsWith("http://"))return e;switch(t){case"github":return`https://github.com/${e}`;case"gitlab":return`https://gitlab.com/${e}`;case"bitbucket":return`https://bitbucket.org/${e}`;default:Ee(t)}}CC();Qm();Sde();var S6l=require("crypto"),T6l=require("fs/promises"),O6l=be(kEe(),1);Dt();function qIt(e,t){if(e==null)return;let r=t?.get(e);return r??e}function gzh(e,t,r){let n=qIt(e,r);if(n==null)return;let i=t?.[n];if(!(i?.width==null||i?.height==null))return{path:n,width:i.width,height:i.height}}function B7t(e,t){if(e==null)return;if(e.type==="url")return{type:"url",value:e.value};let r=qIt(e.value,t);if(r!=null)return{type:"path",value:r}}function pls(e,t,r){let n=e.background!=null?{type:"solid",...e.background}:void 0,i=qIt(e.backgroundImage,r);return{logo:gzh(e.logo,t,r),backgroundImage:i,accentPrimary:e.accentPrimary,background:n,border:e.border,sidebarBackground:e.sidebarBackground,headerBackground:e.headerBackground,cardBackground:e.cardBackground}}function Azh(e,t,r){if(e!=null)switch(e.type){case"dark":case"light":return{type:e.type,...pls(e,t,r)};case"darkAndLight":return{type:"darkAndLight",dark:pls(e.dark,t,r),light:pls(e.light,t,r)};default:Ee(e)}}function yzh(e,t){if(e==null)return;let{"og:image":r,"og:logo":n,"twitter:image":i,"og:background-image":o,"og:dynamic:background-image":s,...a}=e;return{...a,"og:image":B7t(r,t)??void 0,"og:logo":B7t(n,t)??void 0,"twitter:image":B7t(i,t)??void 0,"og:background-image":B7t(o,t)??void 0,"og:dynamic:background-image":B7t(s,t)??void 0}}function bzh(e,t){if(e==null)return;let r=[];for(let n of e.files){let i=qIt(n.fileId,t);i!=null&&r.push({path:i,strategy:n.strategy})}return{remote:e.remote?.map(n=>({url:n.url,strategy:n.strategy})),files:r,inline:e.inline}}function Ezh(e,t){if(e==null)return;let r=n=>{if(n!=null)return{type:"custom",name:n.name,variants:n.variants.map(i=>({fontFile:qIt(i.fontFile,t)??i.fontFile,weight:i.weight,style:i.style})),display:n.display,fallback:n.fallback,fontVariationSettings:n.fontVariationSettings}};return{headingsFont:r(e.headingsFont),bodyFont:r(e.bodyFont),codeFont:r(e.codeFont)}}function Izh(e){if(e!=null)return{pageDirective:e.pageDirective,pageDescriptionSource:e.pageDescriptionSource,siteDescription:e.siteDescription}}function vzh(e){if(e!=null)return{intercom:e.intercom}}function Ikl({docsConfig:e,fileManifest:t,fileIdToPath:r,editThisPage:n}){return{title:e.title,defaultLanguage:e.defaultLanguage,translations:e.translations,announcement:e.announcement,navbarLinks:e.navbarLinks,footerLinks:e.footerLinks,logoHeight:e.logoHeight,logoHref:e.logoHref,logoRightText:e.logoRightText,favicon:qIt(e.favicon,r),agents:Izh(e.agents),metadata:yzh(e.metadata,r),redirects:e.redirects,colorsV3:Azh(e.colorsV3,t,r),layout:e.layout,theme:e.theme,settings:e.settings,typographyV2:Ezh(e.typographyV2,r),analyticsConfig:e.analyticsConfig,css:e.css,js:bzh(e.js,r),aiChatConfig:e.aiChatConfig,pageActions:e.pageActions,editThisPageLaunch:e.editThisPageLaunch,editThisPageGithub:n?.github!=null?{owner:n.github.owner,repo:n.github.repo,branch:n.github.branch??"main",host:n.github.host??"https://github.com"}:void 0,integrations:vzh(e.integrations),header:e.header,footer:e.footer}}async function GIt(e,t,r){let n=new Array(t.length),i=new Set;for(let o=0;o<t.length;o++){let s=t[o];if(s===void 0)continue;let a=(async()=>{let c=await r(s,o);n[o]=c})().then(()=>{i.delete(a)});i.add(a),i.size>=e&&await Promise.race(i)}return await Promise.all(i),n}var X3h=10,Z3h=4,Ufs=3,$3h=1e3;function B6l(e){return(0,S6l.createHash)("sha256").update(e).digest("hex")}var P6l=/file:([^\s"'<>)}\]]+)/g;function e4h(e){let t=new Set;for(let r of e.matchAll(P6l)){let n=r[1];n!=null&&t.add(n)}return[...t]}function t4h(e,t){return t==null||t.size===0?e:e.replace(P6l,(r,n)=>`file:${t.get(n)??n}`)}function r4h(e){return JSON.stringify(e,(t,r)=>r!=null&&typeof r=="object"&&!Array.isArray(r)?Object.fromEntries(Object.entries(r).sort(([n],[i])=>n<i?-1:n>i?1:0)):r)}function C6l(e){let t=Buffer.from(r4h(e),"utf-8"),r=B6l(t);return{ref:{hash:r,contentType:"application/json",contentLength:t.length},hash:r,buf:t}}function $li({docsDefinition:e,git:t,apiDefinitions:r,fileManifest:n,fileIdToPath:i,editThisPage:o,locale:s="en"}){let a=new Map,c={};for(let[f,m]of Object.entries(e.pages)){if(m==null)continue;let g=t4h(m.markdown,i),A=Buffer.from(g,"utf-8"),y=B6l(A),E=e4h(g);c[f]={hash:y,contentType:"text/markdown",contentLength:A.length,...E.length>0?{referencedFiles:E}:{}},a.set(y,A)}let u=Ikl({docsConfig:e.config,fileManifest:n,fileIdToPath:i,editThisPage:o}),l=null;if(r.size>0){let f=Object.fromEntries(r),m=C6l(f);a.set(m.hash,m.buf),l=m.ref}let p=null;if(e.jsFiles!=null&&Object.keys(e.jsFiles).length>0){let f=C6l(e.jsFiles);a.set(f.hash,f.buf),p=f.ref}return{localeEntry:{root:e.config.root??e.config.navigation,pages:c,config:u,apiManifest:l,jsFiles:p,fileManifest:n,redirects:null,locale:s,git:t},blobs:a}}async function D6l({docsDefinition:e,organization:t,domain:r,basepath:n,previewId:i,customDomains:o,git:s,token:a,fdrOrigin:c,headers:u,context:l,apiDefinitions:p,fileManifest:d,filePaths:f,fileIdToPath:m,editThisPage:g,resolver:A}){let{localeEntry:y,blobs:E}=$li({docsDefinition:e,git:s,apiDefinitions:p,fileManifest:d,fileIdToPath:m,editThisPage:g}),v=await _fs({docsDefinition:e,git:s,apiDefinitions:p,fileManifest:d,fileIdToPath:m,editThisPage:g,resolver:A,context:l});for(let ae of v)for(let[le,oe]of ae.blobs)E.set(le,oe);let{createDocsLedgerClient:I}=await Promise.resolve().then(()=>(Mfs(),I6l)),C=I({baseUrl:c,token:a,headers:u}),w=[y,...v.map(ae=>ae.localeEntry)],T={orgId:t,domain:r,basepath:n??"",customDomains:o??[],previewId:i??null,defaultLocale:y.locale,locales:w};l.logger.debug("[ledger] Registering deployment...");let P=performance.now(),O=await C.register(T),M=performance.now()-P;l.logger.debug(`[ledger] Registered in ${M.toFixed(0)}ms \u2014 hash=${O.deploymentHash}, missing=${O.missingContent.length} blobs`),await Vfs(O.missingContent,E,l,f),l.logger.debug("[ledger] Finishing deployment...");let K=performance.now(),Y=await C.finish(T),Z=performance.now()-K;if(l.logger.debug(`[ledger] Finished in ${Z.toFixed(0)}ms \u2014 deploymentId=${Y.deploymentId}, reused=${Y.reusedDeployment}`),Y.translationsProcessed!=null)for(let ae of Y.translationsProcessed)l.logger.info(`[ledger] Locale "${ae.locale}": ${ae.segmentsAdded} segment(s) added`);return Y}async function Vfs(e,t,r,n){if(e.length>0){r.logger.debug(`[ledger] Uploading ${e.length} missing blobs...`);let i=performance.now(),o=await GIt(X3h,[...e],async({hash:u,uploadUrl:l})=>{let p=t.get(u),d="application/octet-stream";if(p==null&&n!=null){let f=n.get(u);if(f!=null){p=await(0,T6l.readFile)(f);let m=O6l.lookup(f);m!==!1&&(d=m)}}return p==null?(r.logger.warn(`[ledger] Server requested blob ${u} but we don't have it \u2014 skipping`),"skipped"):n4h(p,l,u,d,r)}),s=o.filter(u=>u==="uploaded").length,a=o.filter(u=>u==="already_exists").length,c=performance.now()-i;r.logger.debug(`[ledger] Upload complete in ${c.toFixed(0)}ms \u2014 ${s} uploaded, ${a} already in store`)}else r.logger.debug("[ledger] All content already in CAS \u2014 no uploads needed")}async function n4h(e,t,r,n,i){let o=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);for(let s=0;s<=Ufs;s++){let a=await fetch(t,{method:"PUT",headers:{"Content-Type":n},body:o});if(a.ok)return"uploaded";if(a.status===412)return i.logger.debug(`[ledger] Blob ${r} already exists in store \u2014 skipping`),"already_exists";if(a.status===403){let l=await a.text();throw new Error(`[ledger] Presigned URL rejected for ${r} (expired or signature mismatch): ${l}`)}if(a.status===400){let l=await a.text();throw new Error(`[ledger] Content integrity check failed for ${r}: ${l}`)}if((a.status===429||a.status>=500)&&s<Ufs){let l=$3h*2**s;i.logger.debug(`[ledger] Upload ${r} got ${a.status}, retrying in ${l}ms (attempt ${s+1}/${Ufs})`),await new Promise(p=>setTimeout(p,l));continue}let u=await a.text();throw new Error(`[ledger] S3 upload failed for ${r}: ${a.status} ${u}`)}throw new Error(`[ledger] Upload exhausted retries for ${r}`)}function w6l(e,t,r){try{let n=Ule(e,cn.ApiDefinitionId(t),new Vle({snippetsConfigWithSdkId:{},snippetsBySdkId:{},snippetTemplatesByEndpoint:{},snippetTemplatesByEndpointId:{},snippetsBySdkIdAndEndpointId:{}}));return _le(n)}catch(n){r.logger.debug(`[ledger] Failed to convert API definition "${t}" to read form: ${String(n)}`);return}}function i4h({baseApiDefinitions:e,translatedSpecs:t,context:r}){let n=new Map(e);for(let[i,o]of t)try{let s=ST({ir:o.ir,snippetsConfig:o.snippetsConfig,playgroundConfig:o.playgroundConfig,graphqlOperations:o.graphqlOperations,graphqlTypes:o.graphqlTypes,context:r,apiNameOverride:o.apiName});n.set(i,s)}catch(s){r.logger.warn(`[ledger] Failed to convert translated API definition for API "${i}": ${String(s)}. Falling back to base (untranslated) API.`)}return n}async function _fs({docsDefinition:e,git:t,apiDefinitions:r,fileManifest:n,fileIdToPath:i,editThisPage:o,resolver:s,context:a}){if(s==null)return[];let c=s.getTranslationPages(),u=s.getTranslationNavigationOverlays();if(c==null||Object.keys(c).length===0)return[];let l=s.getTranslatedApiSpecs(),p={};if(l.size>0)for(let[m,g]of r){let A=w6l(g,m,a);A!=null&&(p[m]=A)}let d=Object.entries(c);a.logger.info(`[ledger] Building ${d.length} translation locale(s)...`);let{buildTranslatedDocsDefinition:f}=await Promise.resolve().then(()=>(x6l(),v6l));return GIt(Z3h,d,async([m,g])=>{let A=await f({docsDefinition:e,locale:m,localePages:g,translationNavigationOverlays:u,resolver:s,context:a}),y=l.get(m),E=r;if(y!=null&&y.size>0&&(E=i4h({baseApiDefinitions:r,translatedSpecs:y,context:a}),A.config.root!=null)){let C={};for(let[w]of y){let T=E.get(w);if(T!=null){let P=w6l(T,w,a);P!=null&&(C[w]=P)}}Object.keys(C).length>0&&(A.config.root=O3e(A.config.root,p,C))}let{localeEntry:v,blobs:I}=$li({docsDefinition:A,git:t,apiDefinitions:E,fileManifest:n,fileIdToPath:i,editThisPage:o,locale:m});return{locale:m,localePages:g,translatedDefinition:A,localeEntry:v,blobs:I}})}Mfs();async function R6l({docsDefinition:e,organization:t,basePath:r,previewId:n,git:i,token:o,fdrOrigin:s,headers:a,context:c,apiDefinitions:u,fileManifest:l,filePaths:p,fileIdToPath:d,editThisPage:f,resolver:m}){let{localeEntry:g,blobs:A}=$li({docsDefinition:e,git:i,apiDefinitions:u,fileManifest:l,fileIdToPath:d,editThisPage:f}),y=await _fs({docsDefinition:e,git:i,apiDefinitions:u,fileManifest:l,fileIdToPath:d,editThisPage:f,resolver:m,context:c});for(let K of y)for(let[Y,Z]of K.blobs)A.set(Y,Z);let E=[g,...y.map(K=>K.localeEntry)],v=Zli({baseUrl:s,token:o,headers:a});c.logger.debug("[ledger-preview] Registering preview deployment...");let I=performance.now(),C={orgId:t,previewId:n??null,basePath:r??"",defaultLocale:g.locale,locales:E,root:g.root,pages:g.pages,apiManifest:g.apiManifest,config:g.config,fileManifest:g.fileManifest,jsFiles:g.jsFiles,redirects:g.redirects,locale:g.locale,version:g.version,repo:g.repo,git:i},w=await v.previewRegister(C),T=performance.now()-I;c.logger.debug(`[ledger-preview] Registered in ${T.toFixed(0)}ms \u2014 hash=${w.deploymentHash}, preview=${w.previewUrl}, missing=${w.missingContent.length} blobs`),await Vfs(w.missingContent,A,c,p),c.logger.debug("[ledger-preview] Finishing preview deployment...");let P=performance.now(),O=await v.finish({orgId:t,domain:w.domain,basepath:w.basepath,customDomains:[],previewId:w.previewId,defaultLocale:g.locale,locales:E}),M=performance.now()-P;if(c.logger.debug(`[ledger-preview] Finished in ${M.toFixed(0)}ms \u2014 deploymentId=${O.deploymentId}, reused=${O.reusedDeployment}`),O.translationsProcessed!=null)for(let K of O.translationsProcessed)c.logger.info(`[ledger-preview] Locale "${K.locale}": ${K.segmentsAdded} segment(s) added`);return{previewUrl:w.previewUrl,deploymentId:O.deploymentId}}async function F6l({fn:e,maxRetries:t,baseDelayMs:r,jitterFactor:n=0,isRetryable:i=()=>!0,logger:o,label:s,delayFn:a=c=>new Promise(u=>setTimeout(u,c))}){let c;for(let u=0;u<=t;u++)try{return await e()}catch(l){if(c=l,!i(l)||u>=t)throw l;let p=n>0?1+(Math.random()-.5)*n:1,d=Math.round(r*2**u*p);s!=null&&o.warn(`${s} (attempt ${u+1}/${t+1}), retrying in ${d}ms...`),await a(d)}throw c}var o4h=10,k6l=10,epi=parseInt(process.env.FERN_DOCS_ASSET_HASH_CONCURRENCY??"32",10),s4h=3,a4h=1e3,c4h=.5;function N6l(e){let t=e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"");return t.length===0?"default":t}var ovt=class extends Error{constructor(){super("Another docs publish is currently in progress for this domain."),this.name="DocsPublishConflictError"}};async function j6l({fdrOrigin:e,token:t,domain:r,basepath:n}){try{await py.post(`${e}/docs-deployment/unlock`,{domain:r,basepath:n},{headers:{Authorization:`Bearer ${t}`}})}catch{}}function u4h(e){return e.replace(/\.\.\//g,"_dot_dot_/")}async function Q6l(e){let t=await(0,Z7t.readFile)(e),r=(0,U6l.createHash)("sha256").update(new Uint8Array(t)).digest("hex");return{buffer:t,hash:r}}async function V6l({token:e,organization:t,docsWorkspace:r,domain:n,customDomains:i,apiWorkspaces:o,ossWorkspaces:s,context:a,preview:c,previewId:u,editThisPage:l,disableTemplates:p=!1,skipUpload:d=!1,withAiExamples:f=!0,excludeApis:m=!1,targetAudiences:g,docsUrl:A,cliVersion:y,ciSource:E,deployerAuthor:v,loginCommand:I="fern login",multiSource:C=!1}){let w=process.env.FERN_FDR_ORIGIN??process.env.OVERRIDE_FDR_ORIGIN??"https://registry.buildwithfern.com"??"https://registry.buildwithfern.com";await vLt(`${w}/health`,a.logger)&&a.logger.debug("Detected air-gapped environment - skipping external FDR service calls");let P={};y!=null&&(P["X-CLI-Version"]=y),E!=null&&(P["X-CI-Source"]=JSON.stringify(E),a.logger.debug(`CI source detected: ${E.type} (${E.repo??"unknown repo"})`)),v?.username!=null&&(P["X-Deployer-Author"]=v.username),v?.email!=null&&(P["X-Deployer-Author-Email"]=v.email);let O=Fk({token:e.value,...Object.keys(P).length>0&&{headers:P}}),M={type:"public"},K=DFl();K!=="legacy"&&a.logger.info(`Docs deploy mode: ${K}`),m&&a.logger.debug("Experimental flag 'exclude-apis' is enabled - API references will be excluded from S3 upload");let Y,Z=i[0]??n,ae=A4h(n),le=r.config.experimental&&r.config.experimental.dynamicSnippets===!1;r.config.experimental?.basepathAware===!0&&a.logger.warn("experimental.basepath-aware is deprecated. Use 'multi-source: true' on the instance instead.");let oe=C||r.config.experimental?.basepathAware===!0;oe&&a.logger.debug("Basepath-aware mode is enabled - using basepath-aware S3 key format");let ce=!1,Te=()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to early exit..."),j6l({fdrOrigin:w,token:e.value,domain:n,basepath:ae}))},De=async()=>{ce&&!c&&(ce=!1,a.logger.debug("Unlocking docs deploy due to signal..."),await j6l({fdrOrigin:w,token:e.value,domain:n,basepath:ae})),process.exit(1)};process.on("SIGINT",De),process.on("SIGTERM",De);try{let se=await Z5t({docsWorkspace:r,organization:t,fdrOrigin:w,token:e.value,taskContext:a}),pe=r.config.translations!=null&&r.config.translations.length>1,xe=new Map,ve={},Re=new Map,Ke=new Map,ct=new Map,Ct=(Mt,dr)=>{if(pe)try{let qe=Ule(Mt,cn.ApiDefinitionId(dr),new Vle({snippetsConfigWithSdkId:{},snippetsBySdkId:{},snippetTemplatesByEndpoint:{},snippetTemplatesByEndpointId:{},snippetsBySdkIdAndEndpointId:{}}));ct.set(dr,_le(qe))}catch(qe){a.logger.debug(`Failed to build read API definition for ${dr} (translated sidebar titles may stay in the default language): ${String(qe)}`)}},at=async({ir:Mt,snippetsConfig:dr,playgroundConfig:qe,apiName:Me,workspace:_,graphqlOperations:Ie,graphqlTypes:tt})=>{let mt=ST({ir:Mt,snippetsConfig:dr,playgroundConfig:qe,graphqlOperations:Ie,graphqlTypes:tt,context:a,apiNameOverride:Me}),xt=e.value==="dummy",Lt=C4h(f&&!xt,r.config.aiExamples?.style??r.config.experimental?.aiExampleStyleInstructions);if(Lt){let Ft=_?.getSources()?.filter(Pt=>Pt.type==="openapi").map(Pt=>({absoluteFilePath:Pt.absoluteFilePath,absoluteFilePathToOverrides:Pt.absoluteFilePathToOverrides}));Ft==null||Ft.length===0?a.logger.debug("Skipping AI example enhancement: no OpenAPI source file paths available"):mt=await myt(mt,Lt,a,e,t,Ft)}let Be,Gt=new Set;if(Object.keys(dr).length===0)a.logger.debug("No snippets configuration defined, skipping snippet generation...");else if(!le){let It=await y4h({fdr:O,workspace:_,organization:t,context:a,snippetsConfig:dr});It&&Object.keys(It).length>0&&(Be=It,Gt=new Set(Object.keys(It)),a.logger.debug(`Using existing SDK dynamic IRs for: ${Object.keys(It).join(", ")}`));let Ft=await I4h({workspace:_,organization:t,context:a,snippetsConfig:dr,skipLanguages:Gt});Ft&&(Be={...Be,...Ft})}let mr=Me??Lr(Mt.apiName),Er;try{Er=await F6l({fn:()=>O.api.register.registerApiDefinition({orgId:cn.OrgId(t),apiId:cn.ApiId(mr),definition:mt,dynamicIRs:Be}),maxRetries:s4h,baseDelayMs:a4h,jitterFactor:c4h,isRetryable:w4h,logger:a.logger,label:`registerApiDefinition failed for ${mr}`})}catch(It){let Ft=G6l(It);return a.logger.error(`FDR registerApiDefinition failed. Error details:
|
|
4159
|
+
${JSON.stringify(Ft,void 0,2)}`),Me!=null?a.failAndThrow(`Failed to publish docs because API definition (${Me}) could not be uploaded. Please contact support@buildwithfern.com`,Ft,{code:B.Code.NetworkError}):a.failAndThrow("Failed to publish docs because API definition could not be uploaded. Please contact support@buildwithfern.com",Ft,{code:B.Code.NetworkError})}return a.logger.debug(`Registered API Definition ${Me}: ${Er.apiDefinitionId}`),Er.dynamicIRs&&Be&&(d?a.logger.debug("Skip-upload mode: skipping dynamic IR uploads"):await v4h({dynamicIRs:Be,dynamicIRUploadUrls:Er.dynamicIRs,context:a,apiId:Er.apiDefinitionId})),Ct(mt,Er.apiDefinitionId),xe.set(Er.apiDefinitionId,mt),Er.apiDefinitionId},Ut=new m3({domain:n,docsWorkspace:se,ossWorkspaces:s,apiWorkspaces:o,taskContext:a,editThisPage:l,uploadFiles:async Mt=>{let dr=Mt.map(Pt=>({...Pt,sanitizedPath:u4h(Pt.relativeFilePath)})),qe=new Map(dr.map(Pt=>[Pt.absoluteFilePath,Pt])),Me=new Map(dr.map(Pt=>[Pt.sanitizedPath,Pt.absoluteFilePath])),Ie=dr.map(Pt=>({...Pt,mediaType:X7t.lookup(Pt.absoluteFilePath)})).filter(Pt=>Pt.mediaType!==!1).filter(Pt=>Df.parse(Pt.mediaType)?.isImage()??!1).map(Pt=>Pt.absoluteFilePath),tt=await bkl(Ie,o4h,a);a.logger.debug(`Hashing ${tt.size} image files with concurrency ${epi}...`);let mt=performance.now(),xt=Array.from(tt.values()),Be=(await GIt(epi,xt,async Pt=>{let wr=qe.get(Pt.filePath);if(wr==null)return null;let ne=wr.sanitizedPath,{buffer:je,hash:Pe}=await Q6l(wr.absoluteFilePath),Je=X7t.lookup(wr.absoluteFilePath)||"application/octet-stream";return ve[ne]={hash:Pe,contentType:Je,contentLength:je.byteLength,filename:(0,qfs.basename)(wr.sanitizedPath),width:Pt.width,height:Pt.height},Re.set(Pe,wr.absoluteFilePath),{filePath:cn.docs.v1.write.FilePath(YBt(ne)),width:Pt.width,height:Pt.height,blurDataUrl:Pt.blurDataUrl,alt:void 0,fileHash:Pe}})).filter(Pt=>Pt!=null),Gt=performance.now()-mt;a.logger.debug(`Hashed ${Be.length} images in ${Gt.toFixed(0)}ms`);let mr=dr.filter(({absoluteFilePath:Pt})=>!tt.has(Pt));a.logger.debug(`Hashing ${mr.length} non-image files with concurrency ${epi}...`);let Er=performance.now(),It=await GIt(epi,mr,async Pt=>{let{buffer:wr,hash:ne}=await Q6l(Pt.absoluteFilePath),je=X7t.lookup(Pt.absoluteFilePath)||"application/octet-stream";return ve[Pt.sanitizedPath]={hash:ne,contentType:je,contentLength:wr.byteLength,filename:(0,qfs.basename)(Pt.sanitizedPath)},Re.set(ne,Pt.absoluteFilePath),{path:cn.docs.v1.write.FilePath(YBt(Pt.sanitizedPath)),fileHash:ne}}),Ft=performance.now()-Er;if(a.logger.debug(`Hashed ${It.length} non-image files in ${Ft.toFixed(0)}ms`),K==="ledger"){let Pt=[];for(let wr of dr)ve[wr.sanitizedPath]!=null&&(Ke.set(wr.sanitizedPath,wr.sanitizedPath),Pt.push({relativeFilePath:wr.relativeFilePath,absoluteFilePath:wr.absoluteFilePath,fileId:wr.sanitizedPath}));return a.logger.debug(`[ledger] Skipping V2 startDocsRegister; resolved ${Pt.length} files by sanitizedPath`),Pt}if(c){let Pt;try{Pt=await O.docs.v2.write.startDocsPreviewRegister({orgId:cn.OrgId(t),authConfig:M,filepaths:It,images:Be,basePath:ae,previewId:u!=null?N6l(u):void 0})}catch(wr){return await L6l(wr,a,t,n,I)}if(Z=Pt.previewUrl,Y=Pt.docsRegistrationId,a.logger.debug(`Received preview registration ID: ${Y}`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs preview");else{let wr=new Set(Pt.skippedFiles||[]),ne=Object.fromEntries(Object.entries(Pt.uploadUrls).filter(([Je])=>!wr.has(Je))),je=Object.keys(ne).length,Pe=wr.size;je>0?(a.logger.debug(`Uploading ${je} files (${Pe} skipped)...`),await z6l(ne,r.absoluteFilePath,a,k6l,Me)):a.logger.debug(`No files to upload (all ${Pe} up to date)`)}return M6l(Pt.uploadUrls,r.absoluteFilePath,Me)}else{let Pt;try{Pt=await O.docs.v2.write.startDocsRegister({domain:n,customDomains:i,authConfig:M,orgId:cn.OrgId(t),filepaths:It,images:Be,...oe&&{basepathAware:!0}})}catch(ne){return L6l(ne,a,t,n,I)}Y=Pt.docsRegistrationId,ce=!0,a.logger.debug(`Received production registration ID: ${Y}`);let wr=Pt.skippedFiles?.length||0;if(wr>0&&a.logger.info(`Skipped ${wr} unchanged file${wr===1?"":"s"} (already uploaded)`),d)a.logger.debug("Skip-upload mode: skipping file uploads for docs");else{let ne=new Set(Pt.skippedFiles||[]),je=Object.fromEntries(Object.entries(Pt.uploadUrls).filter(([Je])=>!ne.has(Je))),Pe=Object.keys(je).length;Pe>0?(a.logger.info(`\u2191 Uploading ${Pe} files...`),await z6l(je,r.absoluteFilePath,a,k6l,Me)):a.logger.info("No files to upload (all up to date)")}return M6l(Pt.uploadUrls,r.absoluteFilePath,Me)}},registerApi:at,buildTranslatedApiDefinitions:pe,targetAudiences:g});a.logger.info("Resolving docs definition...");let er=performance.now(),Ae=await Ut.resolve(),me=performance.now()-er;if(r.config.settings?.substituteEnvVars){a.logger.debug("Applying environment variable substitution to docs definition...");let{jsFiles:Mt,...dr}=Ae;Ae={...YA(dr,{onError:Me=>a.failAndThrow(void 0,Me,{code:B.Code.EnvironmentError})},{substituteAsEmpty:!1}),jsFiles:Mt}}let ke=Object.keys(Ae.pages).length,it=o.length,ye=process.memoryUsage();if(a.logger.info(`Resolved docs definition in ${me.toFixed(0)}ms: ${ke} pages${it?`, ${it} API workspaces`:""}`),a.logger.debug(`Memory after resolve: RSS=${(ye.rss/1024/1024).toFixed(2)}MB, Heap=${(ye.heapUsed/1024/1024).toFixed(2)}MB`),Y==null&&K!=="ledger")return Te(),a.failAndThrow("Failed to publish docs.","Docs registration ID is missing.",{code:B.Code.InternalError});let Ne=E?.repo!=null&&E?.branch!=null?{repoUrl:Ekl(E.repo,E.type),branch:E.branch,commitSha:E.commitSha}:void 0,Rt=async()=>{if(Y==null)return;a.logger.info("Publishing docs to FDR...");let Mt=performance.now();await O.docs.v2.write.finishDocsRegister({docsRegistrationId:Y,docsDefinition:Ae,excludeApis:m,...oe&&!c&&{basepathAware:!0}});let dr=performance.now()-Mt;a.logger.debug(`Docs published to FDR in ${dr.toFixed(0)}ms`)},ft=async()=>{if(c){let Mt=await R6l({docsDefinition:Ae,organization:t,basePath:ae,previewId:u!=null?N6l(u):u,git:Ne,token:e.value,fdrOrigin:w,headers:P,context:a,apiDefinitions:xe,fileManifest:Object.keys(ve).length>0?ve:void 0,filePaths:Re.size>0?Re:void 0,fileIdToPath:Ke.size>0?Ke:void 0,editThisPage:l,resolver:Ut});K==="ledger"&&(Z=Mt.previewUrl),a.logger.info(`[ledger] Preview deployment created: ${Mt.deploymentId}`)}else{let Mt=await D6l({docsDefinition:Ae,organization:t,domain:n,basepath:ae,previewId:u,customDomains:i,git:Ne,token:e.value,fdrOrigin:w,headers:P,context:a,apiDefinitions:xe,fileManifest:Object.keys(ve).length>0?ve:void 0,filePaths:Re.size>0?Re:void 0,fileIdToPath:Ke.size>0?Ke:void 0,editThisPage:l,resolver:Ut});a.logger.info(`[ledger] Deployment ${Mt.reusedDeployment?"reused":"created"}: ${Mt.deploymentId}`)}};if(K==="ledger")try{await ft()}catch(Mt){return a.failAndThrow("Failed to publish docs via ledger to "+n,Mt,{code:B.Code.NetworkError})}else if(Y!=null)try{await Rt()}catch(Mt){return a.failAndThrow("Failed to publish docs to "+n,Mt,{code:B.Code.NetworkError})}let Ze=pe?Ut.getTranslatedApiSpecs():new Map,ur=new Map;if(Ze.size>0){a.logger.info(`Registering translated API definitions for ${Ze.size} locale(s)...`);for(let[Mt,dr]of Ze){let qe=new Map;for(let[Me,_]of dr)try{let Ie=await at(_);Ie!==Me&&qe.set(Me,Ie)}catch(Ie){a.logger.warn(`Failed to register translated API definition for locale "${Mt}" (API reference will render in the default language): ${String(Ie)}`)}qe.size>0&&ur.set(Mt,qe)}}let Yt=Ut.getTranslationPages(),Cr=Ut.getTranslationNavigationOverlays(),ji=c?Z:n;K!=="ledger"&&Yt!=null&&Object.keys(Yt).length>0&&(a.logger.info(`Registering translations for ${Object.keys(Yt).length} locale(s)...`),await Promise.all(Object.entries(Yt).map(async([Mt,dr])=>{try{let qe=Ut.getCollectedFileIds(),Me=Ut.getDocsWorkspacePath(),_=async wr=>{let ne=ko(Me,wr),je=ni(Me,Se.of(`translations/${Mt}/${ne}`));return await $t(je)?je:wr},Ie=async wr=>{let ne=await _(wr),je=await(0,Z7t.readFile)(ne,"utf-8"),Pe=je.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return Pe!=null?je.slice(Pe[0].length):je},tt=async wr=>{let ne=await _(wr);return(0,Z7t.readFile)(ne,"utf-8")},mt=await Promise.all(Object.entries(dr).map(async([wr,ne])=>{try{let je=Ae.pages[wr],Pe=ni(Me,Se.of(wr)),{markdown:Je}=await wT({markdown:ne,absolutePathToFernFolder:Me,absolutePathToMarkdownFile:Pe,context:a,markdownLoader:Ie}),Et=await _2({markdown:Je,absolutePathToFernFolder:Me,absolutePathToMarkdownFile:Pe,context:a,fileLoader:tt}),Qr=q2({markdown:Et,absolutePathToFernFolder:Me,absolutePathToMarkdownFile:Pe}),gn=Mw(Qr);gn=V2(gn,qe,{},{absolutePathToMarkdownFile:Pe,absolutePathToFernFolder:Me},a);let Mn=je?.editThisPageUrl;if(Mn!=null){let yo=`/fern/${wr}`,Zl=`/fern/translations/${Mt}/${wr}`;Mn=Mn.replace(yo,Zl)}return[wr,{markdown:gn,rawMarkdown:gn,editThisPageUrl:Mn,editThisPageLaunch:je?.editThisPageLaunch}]}catch(je){a.logger.warn(`Failed to process translated page "${wr}" for locale "${Mt}": ${String(je)}. Falling back to base page.`);return}})),xt={...Ae.pages,...Object.fromEntries(mt.filter(wr=>wr!=null))},Lt=Ide(Ae.config.root,dr,a),Be=Cr?.[Mt],Gt=Ae.config.announcement,mr=Ae.config.navbarLinks;Be!=null&&(Lt=vde(Lt,Be),Gt=xde(Be)??Gt,Be.navbarLinks!=null&&(mr=Be.navbarLinks));let Er=ur.get(Mt);if(Er!=null&&Er.size>0&&Lt!=null){let wr={},ne={};for(let[je,Pe]of Er){let Je=ct.get(je),Et=ct.get(Pe);Je!=null&&(wr[je]=Je),Et!=null&&(ne[je]=Et)}Lt=Object.keys(ne).length>0?O3e(Lt,wr,ne):structuredClone(Lt);for(let[je,Pe]of Er)D3e(Lt,je,Pe)}let It={...Ae,pages:xt,config:{...Ae.config,root:Lt,announcement:Gt,navbarLinks:mr}},Ft=Object.keys(dr).length;a.logger.debug(`Sending translation for locale "${Mt}" (${Ft} page${Ft===1?"":"s"})`);let Pt=await fetch(`${w}/v2/registry/docs/translations/register`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.value}`,...P},body:JSON.stringify({domain:ji,customDomains:c?[]:i,orgId:t,locale:Mt,docsDefinition:It})});if(!Pt.ok){let wr=await Pt.text();throw new Error(`HTTP ${Pt.status}: ${wr}`)}a.logger.debug(`Registered translations for locale "${Mt}"`)}catch(qe){a.logger.warn(`Failed to register translations for locale "${Mt}": ${String(qe)}`)}})));let An=W2(Z);await x4h({docsDefinition:Ae,isPreview:c,context:a});let Zi=Pme(An,An);return a.logger.info(fe.green(`Published docs to ${Zi}`)),An}catch(se){throw Te(),se}finally{ce=!1,process.removeListener("SIGINT",De),process.removeListener("SIGTERM",De)}}function _6l(e){return typeof e=="object"&&e!==null&&"uploadUrl"in e&&typeof e.uploadUrl=="string"&&"fileId"in e&&typeof e.fileId=="string"}function l4h(e){if(typeof e=="string")return e;if(_6l(e))return e.uploadUrl;throw new Error(`Unexpected upload URL value: ${JSON.stringify(e)}`)}function p4h(e,t){return _6l(t)?Ew.FileId(t.fileId):Ew.FileId(e)}async function z6l(e,t,r,n,i){let o=Date.now(),s=Object.keys(e).length;r.logger.debug(`Start uploading ${s} files...`);let a=iBt(Object.entries(e),n),c=0;for(let l of a){await Promise.all(l.map(async([d,f])=>{let m=i.get(d)||ni(t,Se.of(d));try{let g=l4h(f),A=X7t.lookup(m);await py.put(g,await(0,Z7t.readFile)(m),{headers:{"Content-Type":A===!1?"application/octet-stream":A,"Cache-Control":"public, max-age=31536000, immutable"}})}catch(g){r.failAndThrow(`Failed to upload ${m}`,g,{code:B.Code.NetworkError})}}));let p=Date.now();c+=l.length,r.logger.debug(`Uploaded ${c}/${s} files in ${p-o}ms`)}let u=Date.now();r.logger.debug(`Finished uploading ${s} files in ${u-o}ms`)}function M6l(e,t,r){let n=[];for(let[i,o]of Object.entries(e)){let s=Se.of(i),a=r?.get(i)||ni(t,s);n.push({relativeFilePath:s,absoluteFilePath:a,fileId:p4h(i,o)})}return n}async function L6l(e,t,r,n,i){t.instrumentPostHogEvent({command:"docs-generation",properties:{error:JSON.stringify(e)}});let o=G6l(e);t.logger.debug(`startDocsRegister failed for domain '${n}', org '${r}'. Error details:
|
|
4160
4160
|
${JSON.stringify(o,void 0,2)}`);let s=e,a=s?.content;if(a?.reason==="status-code"&&a?.statusCode===409)throw new ovt;let c=f4h(e,r,n,i);if(c!=null)return t.failAndThrow(c,void 0,{code:B.Code.AuthError});switch(s?.error){case"InvalidCustomDomainError":return t.failAndThrow("Your docs domain should end with docs.buildwithfern.com",void 0,{code:B.Code.ConfigError});case"InvalidDomainError":return t.failAndThrow("Please make sure that none of your custom domains are not overlapping (i.e. one is a substring of another)",void 0,{code:B.Code.ConfigError});case"UnauthorizedError":return t.failAndThrow(q6l(n,r,a,i),void 0,{code:B.Code.AuthError});case"UserNotInOrgError":return t.failAndThrow(`You do not belong to organization '${r}'. Please run '${i}' to ensure you are logged in with the correct account.
|
|
4161
4161
|
|
|
4162
4162
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`,void 0,{code:B.Code.AuthError});case"UnavailableError":return t.failAndThrow("Failed to publish docs. Please try again later or reach out to Fern support at support@buildwithfern.com.",void 0,{code:B.Code.NetworkError});default:return t.failAndThrow("Failed to publish docs.",e,{code:B.Code.NetworkError})}}function f4h(e,t,r,n){if(typeof e!="object"||e==null)return;let i=e.content,o=typeof i=="object"&&i!=null?i:void 0;if(o?.reason==="status-code"){let s=typeof o.statusCode=="number"?o.statusCode:void 0;if(s===401||s===403)return q6l(r,t,o,n)}}function q6l(e,t,r,n){let{code:i,message:o}=g4h(r);switch(i){case"FORBIDDEN":return m4h(e,t,o,n);case"UNAUTHORIZED":return h4h(t,o,n);case"INTERNAL_SERVER_ERROR":return`An internal server error occurred while publishing docs to '${e}'. Please try again or reach out to support@buildwithfern.com for assistance.`;default:return o??`Failed to publish docs to '${e}'. Please reach out to support@buildwithfern.com for assistance.`}}var d4h=["does not belong to organization","User does not belong"];function m4h(e,t,r,n){return r==null?`You do not have permission to publish docs to '${e}' under organization '${t}'.`:d4h.some(i=>r.includes(i))?`You are not a member of organization '${t}'. Please run '${n}' to ensure you are logged in with the correct account.
|
|
4163
4163
|
|
|
4164
4164
|
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`:r}function h4h(e,t,r){return t!=null&&t.includes("Invalid authorization token")?`Your authentication token is invalid or expired. Please run '${r}' to re-authenticate.`:`You are not authorized to publish docs under organization '${e}'. Please run '${r}' to ensure you are logged in with the correct account.
|
|
4165
4165
|
|
|
4166
|
-
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function g4h(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function A4h(e){try{return new URL(W2(e)).pathname}catch{return}}async function y4h({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await b4h({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:cn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Gfs(e){return e.replace(/^https:\/\//,"")}async function b4h({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&Gfs(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await E4h({fdr:e,workspace:t,language:s.language,snippetName:s.snippetName,context:n}))?.version),i[s.language]={packageName:s.snippetName,version:a},a||n.logger.debug(`[SDK Dynamic IR] ${s.language}: no version specified, will use latest`)}return i}async function E4h({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=jn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let u=await e.sdks.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function I4h({workspace:e,organization:t,context:r,snippetsConfig:n,skipLanguages:i=new Set}){let o={};if(!e)return;let s={typescript:n.typescriptSdk?.package,python:n.pythonSdk?.package,java:n.javaSdk?.coordinate,go:n.goSdk?.githubRepo&&Gfs(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let c of a.generators){let u=RUe({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=Gfs(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=wg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new vh(r,e),dynamicGeneratorConfig:u}),d=Mze({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function v4h({dynamicIRs:e,dynamicIRUploadUrls:t,context:r,apiId:n}){if(Object.keys(t).length>0)for(let[i,o]of Object.entries(t)){let s=e[i]?.dynamicIR;if(s){let a=JSON.stringify(s);try{(await fetch(o.uploadUrl,{method:"PUT",body:a,headers:{"Content-Type":"application/octet-stream","Content-Length":Buffer.byteLength(a,"utf8").toString()}})).ok?r.logger.debug(`Uploaded dynamic IR for ${n}:${i}`):r.logger.warn(`Failed to upload dynamic IR for ${n}:${i}`)}catch(c){r.logger.warn(`Network error uploading dynamic IR for ${n}:${i}: ${c}`)}}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function x4h({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(fe.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function C4h(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function w4h(e){let t=e,r=t?.content,n=t?.statusCode??r?.statusCode;return n==null?!0:n===429||n>=500}function G6l(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var $7t=[60*1e3,300*1e3,300*1e3];async function eWt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m}){let g=a&&!n.config.settings?.substituteEnvVars;n.config=YA(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:B.Code.EnvironmentError})},{substituteAsEmpty:g});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:B.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:B.Code.ConfigError});return}let y=A.find(C=>C.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:B.Code.ConfigError});return}let E=(typeof y.customDomain=="string"?[y.customDomain]:y.customDomain??[]).map(BFl);(y.multiSource===!0||n.config.experimental?.basepathAware===!0)&&PFl(y.url,E,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let I;return await i.runInteractiveTask({name:y.url},async()=>{let C=performance.now(),w=()=>V6l({docsWorkspace:n,customDomains:E,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let P=0;;P++)try{I=await w();break}catch(O){if(!(O instanceof ovt)||P>=$7t.length){if(O instanceof ovt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:B.Code.NetworkError});throw O}let M=$7t[P]??$7t[$7t.length-1]??6e4,K=M/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${K} minute${K===1?"":"s"} (attempt ${P+1}/${$7t.length})...`),await new Promise(Y=>setTimeout(Y,M))}let T=performance.now()-C;i.logger.debug(`Docs publishing completed in ${T.toFixed(0)}ms`)}),I}jt();var tpi=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 od({context:this.context,task:this.task});try{let s=await eWt({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.50.5",loginCommand:"fern auth login"});return o.getResult()===df.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Ln(s)}}}};Dt();bn();var svt=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(`
|
|
4166
|
+
Please ensure you have membership at https://dashboard.buildwithfern.com, and ask a team member for an invite if not.`}function g4h(e){if(e==null)return{code:void 0,message:void 0};let t=e.body;if(t!=null&&typeof t=="object"){let n=typeof t.code=="string"?t.code:void 0,i=typeof t.message=="string"?t.message:void 0;return{code:n,message:i}}return{code:void 0,message:typeof t=="string"&&t.length>0?t:typeof e.errorMessage=="string"?e.errorMessage:typeof e.message=="string"?e.message:void 0}}function A4h(e){try{return new URL(W2(e)).pathname}catch{return}}async function y4h({fdr:e,workspace:t,organization:r,context:n,snippetsConfig:i}){if(!t)return;let o=await b4h({fdr:e,workspace:t,snippetsConfig:i,context:n});if(Object.keys(o).length===0){n.logger.debug("[SDK Dynamic IR] No snippet configs found, skipping S3 check");return}try{let s=Object.fromEntries(Object.entries(o).map(([l,p])=>[l,{packageName:p.packageName,version:p.version}])),c=(await e.api.register.checkSdkDynamicIrExists({orgId:cn.OrgId(r),snippetConfiguration:s})).existingDynamicIrs??{};if(Object.keys(c).length===0){n.logger.debug("[SDK Dynamic IR] No existing SDK dynamic IRs found in S3");return}let u={};for(let[l,p]of Object.entries(c??{}))try{n.logger.debug(`Downloading existing SDK dynamic IR for ${l}...`);let d=await fetch(p.downloadUrl);if(d.ok){let f=await d.json();u[l]={dynamicIR:f},n.logger.debug(`Successfully downloaded SDK dynamic IR for ${l}`)}else n.logger.warn(`Failed to download SDK dynamic IR for ${l}: ${d.status}`)}catch(d){n.logger.warn(`Error downloading SDK dynamic IR for ${l}: ${d}`)}return Object.keys(u).length>0?u:void 0}catch(s){n.logger.debug(`Error checking for existing SDK dynamic IRs: ${s}`);return}}function Gfs(e){return e.replace(/^https:\/\//,"")}async function b4h({fdr:e,workspace:t,snippetsConfig:r,context:n}){let i={},o=[{language:"typescript",snippetName:r.typescriptSdk?.package??void 0,explicitVersion:r.typescriptSdk?.version??void 0},{language:"python",snippetName:r.pythonSdk?.package??void 0,explicitVersion:r.pythonSdk?.version??void 0},{language:"java",snippetName:r.javaSdk?.coordinate??void 0,explicitVersion:r.javaSdk?.version??void 0},{language:"go",snippetName:r.goSdk?.githubRepo&&Gfs(r.goSdk?.githubRepo),explicitVersion:r.goSdk?.version??void 0},{language:"csharp",snippetName:r.csharpSdk?.package??void 0,explicitVersion:r.csharpSdk?.version??void 0},{language:"ruby",snippetName:r.rubySdk?.gem??void 0,explicitVersion:r.rubySdk?.version??void 0},{language:"php",snippetName:r.phpSdk?.package??void 0,explicitVersion:r.phpSdk?.version??void 0},{language:"swift",snippetName:r.swiftSdk?.package??void 0,explicitVersion:r.swiftSdk?.version??void 0},{language:"rust",snippetName:r.rustSdk?.package??void 0,explicitVersion:r.rustSdk?.version??void 0}];for(let s of o){if(!s.snippetName)continue;let a=s.explicitVersion??void 0;a||(a=(await E4h({fdr:e,workspace:t,language:s.language,snippetName:s.snippetName,context:n}))?.version),i[s.language]={packageName:s.snippetName,version:a},a||n.logger.debug(`[SDK Dynamic IR] ${s.language}: no version specified, will use latest`)}return i}async function E4h({fdr:e,workspace:t,language:r,snippetName:n,context:i}){let o;switch(r){case"csharp":o="Csharp";break;case"go":o="Go";break;case"java":o="Java";break;case"python":o="Python";break;case"ruby":o="Ruby";break;case"typescript":o="TypeScript";break;case"php":o="Php";break;case"swift":o="Swift";break;default:return}let s,a,c;if(t.generatorsConfiguration?.groups){let u=[];for(let l of t.generatorsConfiguration.groups)for(let p of l.generators)if(p.language===r){let d=jn.getPackageName({generatorInvocation:p});d&&u.push(d),!a&&d&&(a=d,c=p.name,p.outputMode.type==="githubV2"&&(s=`${p.outputMode.githubV2.owner}/${p.outputMode.githubV2.repo}`))}}if(!a){i.logger.debug(`[SDK Dynamic IR] ${r}: no generator found with a package name`);return}try{let u=await e.sdks.computeSemanticVersion({githubRepository:s,language:o,package:a});return i.logger.debug(`[SDK Dynamic IR] ${r}: computed version ${u.version} for package "${a}"`),{version:u.version,generatorPackage:a}}catch(u){i.logger.debug(`[SDK Dynamic IR] ${r}: error computing version: ${u}`);return}}async function I4h({workspace:e,organization:t,context:r,snippetsConfig:n,skipLanguages:i=new Set}){let o={};if(!e)return;let s={typescript:n.typescriptSdk?.package,python:n.pythonSdk?.package,java:n.javaSdk?.coordinate,go:n.goSdk?.githubRepo&&Gfs(n.goSdk?.githubRepo),csharp:n.csharpSdk?.package,ruby:n.rubySdk?.gem,php:n.phpSdk?.package,swift:n.swiftSdk?.package,rust:n.rustSdk?.package};if(e.generatorsConfiguration?.groups)for(let a of e.generatorsConfiguration.groups)for(let c of a.generators){let u=RUe({apiName:e.workspaceName??"",organization:t,generatorInvocation:c}),l="";if(u?.outputConfig.type==="publish")switch(u.outputConfig.value.type){case"npm":case"nuget":case"pypi":case"rubygems":l=u.outputConfig.value.packageName;break;case"maven":l=u.outputConfig.value.coordinate;break;case"go":l=u.outputConfig.value.repoUrl;break;case"swift":l=u.outputConfig.value.repoUrl;break;case"crates":l=u.outputConfig.value.packageName;break}if(c.language==="php"&&c.config&&typeof c.config=="object"&&"packageName"in c.config&&(l=c.config.packageName??""),c.language==="go"&&l&&(l=Gfs(l)),!!c.language){if(i.has(c.language)){r.logger.debug(`Skipping dynamic IR generation for ${c.language} (using existing SDK dynamic IR)`);continue}if(c.language&&s[c.language]===l){let p=wg({workspace:e,generationLanguage:c.language,keywords:void 0,smartCasing:c.smartCasing,exampleGeneration:{disabled:!0,skipAutogenerationIfManualExamplesExist:!0,skipErrorAutogenerationIfManualErrorExamplesExist:!0},audiences:{type:"all"},readme:void 0,packageName:l,version:void 0,context:r,sourceResolver:new vh(r,e),dynamicGeneratorConfig:u}),d=Mze({ir:p,disableExamples:!0,smartCasing:c.smartCasing,generationLanguage:c.language,generatorConfig:u});d?o[c.language]={dynamicIR:d}:r.logger.debug(`Failed to create dynamic IR for ${c.language}`)}}}for(let[a,c]of Object.entries(s))a&&c&&!Object.keys(o).includes(a)&&!i.has(a)&&(r.logger.warn(),r.logger.warn(`Failed to upload ${a} SDK snippets because of unknown package \`${c}\`.`),r.logger.warn(`Please make sure your ${e.workspaceName?`${e.workspaceName}/`:""}generators.yml has a generator that publishes a ${c} package.`),r.logger.warn());if(Object.keys(o).length>0)return o}async function v4h({dynamicIRs:e,dynamicIRUploadUrls:t,context:r,apiId:n}){if(Object.keys(t).length>0)for(let[i,o]of Object.entries(t)){let s=e[i]?.dynamicIR;if(s){let a=JSON.stringify(s);try{(await fetch(o.uploadUrl,{method:"PUT",body:a,headers:{"Content-Type":"application/octet-stream","Content-Length":Buffer.byteLength(a,"utf8").toString()}})).ok?r.logger.debug(`Uploaded dynamic IR for ${n}:${i}`):r.logger.warn(`Failed to upload dynamic IR for ${n}:${i}`)}catch(c){r.logger.warn(`Network error uploading dynamic IR for ${n}:${i}: ${c}`)}}else r.logger.warn(`Could not find matching dynamic IR to upload for ${n}:${i}`)}}async function x4h({docsDefinition:e,isPreview:t,context:r}){e.config.aiChatConfig==null||t||r.logger.warn(fe.yellow("Enabling Ask Fern from docs.yml is deprecated. Please enable it from the Fern dashboard instead."))}function C4h(e,t){if(e)return{enabled:!0,model:process.env.FERN_AI_MODEL||"gpt-4o-mini",maxRetries:parseInt(process.env.FERN_AI_MAX_RETRIES||"3"),requestTimeoutMs:parseInt(process.env.FERN_AI_TIMEOUT_MS||"25000"),styleInstructions:t}}function w4h(e){let t=e,r=t?.content,n=t?.statusCode??r?.statusCode;return n==null?!0:n===429||n>=500}function G6l(e){let t=e,r=t?.content;return{errorType:t?.error,statusCode:t?.statusCode??r?.statusCode,reason:r?.reason,errorMessage:r?.errorMessage??r?.message,body:r?.body,cause:r?.cause,rawError:e}}var $7t=[60*1e3,300*1e3,300*1e3];async function eWt({organization:e,apiWorkspaces:t,ossWorkspaces:r,docsWorkspace:n,context:i,token:o,instanceUrl:s,preview:a,previewId:c,disableTemplates:u,skipUpload:l,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m}){let g=a&&!n.config.settings?.substituteEnvVars;n.config=YA(n.config,{onError:C=>i.failAndThrow(void 0,C,{code:B.Code.EnvironmentError})},{substituteAsEmpty:g});let A=n.config.instances;if(A.length===0){i.failAndThrow("No instances specified in docs.yml! Cannot register docs.",void 0,{code:B.Code.ConfigError});return}if(A.length>1&&s==null){i.failAndThrow(`More than one docs instances. Please specify one (e.g. --instance ${A[0]?.url})`,void 0,{code:B.Code.ConfigError});return}let y=A.find(C=>C.url===s)??A[0];if(y==null){i.failAndThrow(`No docs instance with url ${s}. Failed to register.`,void 0,{code:B.Code.ConfigError});return}let E=(typeof y.customDomain=="string"?[y.customDomain]:y.customDomain??[]).map(BFl);(y.multiSource===!0||n.config.experimental?.basepathAware===!0)&&PFl(y.url,E,i),i.logger.info(`Starting docs publishing for ${a?"preview":"production"}: ${y.url}`),i.logger.debug(`Organization: ${e}, Preview: ${a}, APIs: ${t.length}, OSS: ${r.length}`);let I;return await i.runInteractiveTask({name:y.url},async()=>{let C=performance.now(),w=()=>V6l({docsWorkspace:n,customDomains:E,domain:y.url,token:o,organization:e,context:i,apiWorkspaces:t,ossWorkspaces:r,preview:a,previewId:c,editThisPage:y.editThisPage,disableTemplates:u,skipUpload:l,withAiExamples:n.config.aiExamples?.enabled??n.config.experimental?.aiExamples??!0,excludeApis:n.config.experimental?.excludeApis??!1,targetAudiences:y.audiences?Array.isArray(y.audiences)?y.audiences:[y.audiences]:void 0,docsUrl:y.url,cliVersion:p,ciSource:d,deployerAuthor:f,loginCommand:m,multiSource:y.multiSource??!1});for(let P=0;;P++)try{I=await w();break}catch(O){if(!(O instanceof ovt)||P>=$7t.length){if(O instanceof ovt)return i.failAndThrow("Another docs publish is currently in progress. Please try again once the other publish is complete.",void 0,{code:B.Code.NetworkError});throw O}let M=$7t[P]??$7t[$7t.length-1]??6e4,K=M/6e4;i.logger.warn(`Another docs publish is in progress. Retrying in ${K} minute${K===1?"":"s"} (attempt ${P+1}/${$7t.length})...`),await new Promise(Y=>setTimeout(Y,M))}let T=performance.now()-C;i.logger.debug(`Docs publishing completed in ${T.toFixed(0)}ms`)}),I}jt();var tpi=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 od({context:this.context,task:this.task});try{let s=await eWt({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.50.6",loginCommand:"fern auth login"});return o.getResult()===df.Failure?{success:!1}:{success:!0,url:s}}catch(s){return{success:!1,error:Ln(s)}}}};Dt();bn();var svt=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(`
|
|
4167
4167
|
`),this.stream.write(`${fe.cyan("\u25C6")} ${fe.bold(t.title)}
|
|
4168
4168
|
`),t.subtitle!=null&&this.stream.write(` ${fe.dim(t.subtitle)}
|
|
4169
4169
|
`),this.stream.write(`
|
|
@@ -4810,7 +4810,7 @@ ${r}`}function QAi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
|
|
|
4810
4810
|
`),g="";return c&&(g=l.style.error(c)),[`${p} ${f} ${s}`,[m,g].filter(Boolean).join(`
|
|
4811
4811
|
`)]});var Mzg=yx((e,t)=>{let{validate:r=()=>!0}=e,n=iI(e.theme),[i,o]=$c("idle"),[s,a]=$c(),[c,u]=$c(""),l=gx({status:i,theme:n});Ax(async(g,A)=>{if(i==="idle")if(hx(g)){let y=c;o("loading");let E=await r(y);E===!0?(u(y),o("done"),t(y)):(A.write(c),a(E||"You must provide a valid value"),o("idle"))}else u(A.line),a(void 0)});let p=n.style.message(e.message,i),d="",f;e.mask?d=(typeof e.mask=="string"?e.mask:"*").repeat(c.length):i!=="done"&&(f=`${n.style.help("[input is masked]")}${Iwt}`),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 R5e=be(Rw(),1);var Lzg={icon:{cursor:sC.pointer},style:{disabled:e=>R5e.default.dim(`- ${e}`),searchTerm:e=>R5e.default.cyan(e),description:e=>R5e.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${R5e.default.bold(t)} ${R5e.default.dim(r)}`).join(R5e.default.dim(" \u2022 "))},helpMode:"always"};function gRs(e){return!fd.isSeparator(e)&&!e.disabled}function Uzg(e){return e.map(t=>{if(fd.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 Vzg=yx((e,t)=>{let{pageSize:r=7,validate:n=()=>!0}=e,i=iI(Lzg,e.theme),[o,s]=$c("loading"),[a,c]=$c(""),[u,l]=$c([]),[p,d]=$c(),f=gx({status:o,theme:i}),m=e6(()=>{let M=u.findIndex(gRs),K=u.findLastIndex(gRs);return{first:M,last:K}},[u]),[g=m.first,A]=$c();Z3(()=>{let M=new AbortController;return s("loading"),d(void 0),(async()=>{try{let Y=await e.source(a||void 0,{signal:M.signal});M.signal.aborted||(A(void 0),d(void 0),l(Uzg(Y)),s("idle"))}catch(Y){!M.signal.aborted&&Y instanceof Error&&d(Y.message)}})(),()=>{M.abort()}},[a]);let y=u[g];Ax(async(M,K)=>{if(hx(M))if(y){s("loading");let Y=await n(y.value);s("idle"),Y===!0?(s("done"),t(y.value)):y.name===a?d(Y||"You must provide a valid value"):(K.write(y.name),c(y.name))}else K.write(a);else if(whe(M)&&y)K.clearLine(0),K.write(y.name),c(y.name);else if(o!=="loading"&&(nP(M)||$M(M))){if(K.clearLine(0),nP(M)&&g!==m.first||$M(M)&&g!==m.last){let Y=nP(M)?-1:1,Z=g;do Z=(Z+Y+u.length)%u.length;while(!gRs(u[Z]));A(Z)}}else c(K.line)});let E=i.style.message(e.message,o),v;if(i.helpMode!=="never")if(e.instructions){let{pager:M,navigation:K}=e.instructions;v=i.style.help(u.length>r?M:K)}else v=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let I=O5e({items:u,active:g,renderItem({item:M,isActive:K}){if(fd.isSeparator(M))return` ${M.separator}`;if(M.disabled){let ae=typeof M.disabled=="string"?M.disabled:"(disabled)";return i.style.disabled(`${M.name} ${ae}`)}let Y=K?i.style.highlight:ae=>ae,Z=K?i.icon.cursor:" ";return Y(`${Z} ${M.name}`)},pageSize:r,loop:!1}),C;p?C=i.style.error(p):u.length===0&&a!==""&&o==="idle"&&(C=i.style.error("No results found"));let w;if(o==="done"&&y)return[f,E,i.style.answer(y.short)].filter(Boolean).join(" ").trimEnd();w=i.style.searchTerm(a);let T=y?.description,P=[f,E,w].filter(Boolean).join(" ").trimEnd(),O=[C??I," ",T?i.style.description(T):"",v].filter(Boolean).join(`
|
|
4812
4812
|
`).trimEnd();return[P,O]});var xwt=be(Rw(),1);var _zg={icon:{cursor:sC.pointer},style:{disabled:e=>xwt.default.dim(`- ${e}`),description:e=>xwt.default.cyan(e),keysHelpTip:e=>e.map(([t,r])=>`${xwt.default.bold(t)} ${xwt.default.dim(r)}`).join(xwt.default.dim(" \u2022 "))},helpMode:"always",indexMode:"hidden",keybindings:[]};function vwt(e){return!fd.isSeparator(e)&&!e.disabled}function qzg(e){return e.map(t=>{if(fd.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 ARs=yx((e,t)=>{let{loop:r=!0,pageSize:n=7}=e,i=iI(_zg,e.theme),{keybindings:o}=i,[s,a]=$c("idle"),c=gx({status:s,theme:i}),u=T5e(),l=!o.includes("vim"),p=e6(()=>qzg(e.choices),[e.choices]),d=e6(()=>{let T=p.findIndex(vwt),P=p.findLastIndex(vwt);if(T===-1)throw new gae("[select prompt] No selectable choices. All choices are disabled.");return{first:T,last:P}},[p]),f=e6(()=>"default"in e?p.findIndex(T=>vwt(T)&&T.value===e.default):-1,[e.default,p]),[m,g]=$c(f===-1?d.first:f),A=p[m];Ax((T,P)=>{if(clearTimeout(u.current),hx(T))a("done"),t(A.value);else if(nP(T,o)||$M(T,o)){if(P.clearLine(0),r||nP(T,o)&&m!==d.first||$M(T,o)&&m!==d.last){let O=nP(T,o)?-1:1,M=m;do M=(M+O+p.length)%p.length;while(!vwt(p[M]));g(M)}}else if(OJt(T)&&!Number.isNaN(Number(P.line))){let O=Number(P.line)-1,M=-1,K=p.findIndex(Z=>fd.isSeparator(Z)?!1:(M++,M===O)),Y=p[K];Y!=null&&vwt(Y)&&g(K),u.current=setTimeout(()=>{P.clearLine(0)},700)}else if(C5e(T))P.clearLine(0);else if(l){let O=P.line.toLowerCase(),M=p.findIndex(K=>fd.isSeparator(K)||!vwt(K)?!1:K.name.toLowerCase().startsWith(O));M!==-1&&g(M),u.current=setTimeout(()=>{P.clearLine(0)},700)}}),Z3(()=>()=>{clearTimeout(u.current)},[]);let y=i.style.message(e.message,s),E;if(i.helpMode!=="never")if(e.instructions){let{pager:T,navigation:P}=e.instructions;E=i.style.help(p.length>n?T:P)}else E=i.style.keysHelpTip([["\u2191\u2193","navigate"],["\u23CE","select"]]);let v=0,I=O5e({items:p,active:m,renderItem({item:T,isActive:P,index:O}){if(fd.isSeparator(T))return v++,` ${T.separator}`;let M=i.indexMode==="number"?`${O+1-v}. `:"";if(T.disabled){let Z=typeof T.disabled=="string"?T.disabled:"(disabled)";return i.style.disabled(`${M}${T.name} ${Z}`)}let K=P?i.style.highlight:Z=>Z,Y=P?i.icon.cursor:" ";return K(`${Y} ${M}${T.name}`)},pageSize:n,loop:r});if(s==="done")return[c,y,i.style.answer(A.short)].filter(Boolean).join(" ");let{description:C}=A;return`${[[c,y].filter(Boolean).join(" "),I," ",C?i.style.description(C):"",E].filter(Boolean).join(`
|
|
4813
|
-
`).trimEnd()}${Iwt}`});bn();Vi();var Aae={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"},Gzg={[Aae.GENERATION_STARTED]:!1,[Aae.GENERATION_COMPLETED]:!1,[Aae.GENERATION_FAILED]:!0,[Aae.VERIFICATION_FAILED]:!0,[Aae.SDK_PR_CREATED]:!1,[Aae.UPGRADE_APPLIED]:!1,[Aae.MAJOR_VERSION_BUMP]:!1};function cnp(e){return Gzg[e]}function unp(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 lnp(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 pnp(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 fnp(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 dnp(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?Aae.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?Aae.VERIFICATION_FAILED:Aae.GENERATION_FAILED}var Wzg="",Hzg="FERN_AUTOMATION_EVENTS_ORIGIN",Kzg=3e3,byi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[Hzg]??Wzg)),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(),Kzg);try{let s={"content-type":"application/json"},a=await o_();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(fnp(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function mnp(){let{fern_run_id:e,github_run_id:t}=Kae();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.50.
|
|
4813
|
+
`).trimEnd()}${Iwt}`});bn();Vi();var Aae={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"},Gzg={[Aae.GENERATION_STARTED]:!1,[Aae.GENERATION_COMPLETED]:!1,[Aae.GENERATION_FAILED]:!0,[Aae.VERIFICATION_FAILED]:!0,[Aae.SDK_PR_CREATED]:!1,[Aae.UPGRADE_APPLIED]:!1,[Aae.MAJOR_VERSION_BUMP]:!1};function cnp(e){return Gzg[e]}function unp(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 lnp(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 pnp(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 fnp(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 dnp(e){let t=e.join(" ");return/\bautomations\s+generate\b/.test(t)?Aae.GENERATION_FAILED:/\bautomations\s+preview\b/.test(t)?Aae.VERIFICATION_FAILED:Aae.GENERATION_FAILED}var Wzg="",Hzg="FERN_AUTOMATION_EVENTS_ORIGIN",Kzg=3e3,byi=class e{static instance;origin;inflight=[];static getInstance(){return e.instance==null&&(e.instance=new e(process.env[Hzg]??Wzg)),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(),Kzg);try{let s={"content-type":"application/json"},a=await o_();a!=null&&a.value.length>0&&(s.Authorization=`Bearer ${a.value}`);let c=await fetch(n,{method:"POST",headers:s,body:JSON.stringify(fnp(t,r)),signal:i.signal})}catch{return}finally{clearTimeout(o)}}};function mnp(){let{fern_run_id:e,github_run_id:t}=Kae();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.50.6"}}function hnp(){return process.env.FERN_AUTOMATION==="true"}var Eyi=class{constructor(t,r=byi.getInstance()){this.reporter=t;this.automationEventApiClient=r;this.context=mnp()}reporter;automationEventApiClient;context;setOrganization(t){this.context={...this.context,org:t}}emit(t,r){let n=this.captureSentryForFailure({event:t,context:this.context,error:r?.error}),i=n==null?t:{...t,attributes:{...t.attributes??{},sentry_event_id:n}};this.capturePostHogEvent({event:i,context:this.context}),this.captureAutomationEventApiEvent(i,this.context)}async flush(){await this.automationEventApiClient.shutdown()}capturePostHogEvent({event:t,context:r}){this.reporter.instrumentPostHogAutomationEvent({distinctId:r.run_id??void 0,event:t.event,properties:unp(t,r)})}captureSentryForFailure({event:t,context:r,error:n}){if(!(!cnp(t.event)||t.errorCode==null))return this.reporter.captureException(n,{tags:lnp(t,r),context:{automation:pnp(t,r)}})}captureAutomationEventApiEvent(t,r){this.automationEventApiClient.post(t,r)}};jt();function Iyi(e,t,r){if(t instanceof _c)return;let n=nAe(t,r?.code),i=r?.argv??process.argv,o=i.join(" "),s=r?.message??(t instanceof Error?t.message:void 0)??"",a=t??new B({message:s,code:n});hnp()?Yzg(i,e,n,s,a):Jzg(e,o,n,a)}function Jzg(e,t,r,n){e.instrumentPostHogEvent({command:t,properties:{failed:!0,errorCode:r}}),Gqe(r)&&e.captureException(n,{tags:{"error.code":r}})}function Yzg(e,t,r,n,i){let o=dnp(e);t.emitAutomationTelemetryEvent({event:o,errorCode:r,attributes:{error_message:n}},{error:i})}jt();function F5e(){return process.env.FERN_DISABLE_TELEMETRY==="true"}function vyi({cliName:e,packageVersion:t,isLocal:r}){return F5e()||r?!1:!(t==="0.0.0")&&(e==="fern"&&!0)}var xyi=class{sentry;constructor({release:t,telemetry:r}){let n="https://84f58b5e457f06999d92f11ce4b79158@o4509504076185600.ingest.us.sentry.io/4511021546602496";if(vyi(r)&&n!=null&&n.length>0){let i="production";if(i==null||i.length===0)throw new B({message:"SENTRY_ENVIRONMENT must be set when SENTRY_DSN is configured",code:B.Code.ConfigError});this.sentry=jOt({dsn:n,release:t,environment:i,defaultIntegrations:!1,integrations:[w9e(),Bge(),Pge(),dge(),Oge()],tracesSampleRate:0,attachStacktrace:!0,sendClientReports:!1}),QOt()}}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):lO(a=>{if(o&&a.setTags(n),i!=null)for(let[c,u]of Object.entries(i))u!=null&&a.setContext(c,u);return this.sentry?.captureException(t,void 0,a)})}catch{return}}async flush(){this.sentry!=null&&await Promise.resolve(this.sentry.flush(2e3)).catch(()=>{})}};jt();var Cyi=class{originalWrite;redirected=!1;redirect(){if(this.redirected)throw new B({message:"StdoutRedirector: already redirected \u2014 did you forget to restore()?",code:B.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()}}};FEe();Dt();db();jt();bn();var RJt=class{result=df.Success;lastFailureMessage=void 0;logImmediately;logPrefix;title;subtasks=[];shouldBufferLogs;bufferedLogs=[];status="notStarted";onResult;instrumentPostHogEventImpl;captureExceptionImpl;emitAutomationTelemetryEventImpl;constructor({logImmediately:t,logPrefix:r,title:n,takeOverTerminal:i,onResult:o,shouldBufferLogs:s,instrumentPostHogEvent:a,captureException:c,emitAutomationTelemetryEvent:u}){this.logImmediately=t,this.logPrefix=r??"",this.title=n,this.takeOverTerminal=i,this.onResult=o,this.shouldBufferLogs=s,this.instrumentPostHogEventImpl=a,this.captureExceptionImpl=c,this.emitAutomationTelemetryEventImpl=u}start(){return this.status="running",this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.status="finished",this.flushLogs(),this.onResult?.(this.getResult()))}isFinished(){return this.status==="finished"}takeOverTerminal;failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),this.finish(),new _c}failWithoutThrowing(t,r,n){this.result=df.Failure,!(r instanceof _c)&&(t!=null&&(this.lastFailureMessage=t),nMt({message:t,error:r,logger:this.logger}),Iyi(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=uv(this.logAtLevel.bind(this));addInteractiveTask({name:t,subtitle:r}){let n=new yRs({name:t,subtitle:r,logImmediately:i=>this.logImmediately(i),logPrefix:`${this.logPrefix}${fe.blackBright(t)} `,takeOverTerminal:this.takeOverTerminal,onResult:this.onResult,shouldBufferLogs:this.shouldBufferLogs,instrumentPostHogEvent:i=>this.instrumentPostHogEventImpl(i),captureException:this.captureExceptionImpl,emitAutomationTelemetryEvent:this.emitAutomationTelemetryEventImpl});return this.subtasks.push(n),n}async runInteractiveTask(t,r){let n=this.addInteractiveTask(t).start();try{await r(n)}catch(i){n.failWithoutThrowing(void 0,i)}finally{n.finish()}return n.getResult()===df.Success}printInteractiveTasks({spinner:t}){return this.subtasks.map(r=>r.print({spinner:t})).join(`
|
|
4814
4814
|
`)}},yRs=class extends RJt{name;subtitle;constructor({name:t,subtitle:r,...n}){super(n),this.name=t,this.subtitle=r}start(){return super.start(),this.logAtLevelWithOverrides(Un.Info,["Started."],{omitOnTTY:!0}),this.flushLogs(),this}isStarted(){return this.status!=="notStarted"}finish(){this.status!=="finished"&&(this.result===df.Success?this.logAtLevelWithOverrides(Un.Info,["Finished."],{omitOnTTY:!0}):this.logAtLevelWithOverrides(Un.Error,["Failed."],{omitOnTTY:!0}),super.finish())}setSubtitle(t){this.subtitle=t}print({spinner:t}){let r=[this.name];return this.subtitle!=null&&r.push(fe.dim(this.subtitle)),r.push(...this.subtasks.map(n=>n.print({spinner:t}))),$N({prefix:this.getIcon({spinner:t}),content:r.join(`
|
|
4815
4815
|
`)})}printInteractiveTasks({spinner:t}){return this.print({spinner:t})}getIcon({spinner:t}){let r=this.subtasks.length>0;switch(this.status){case"notStarted":return r?fe.dim("\u25B8 "):fe.dim("\u25E6 ");case"running":return r?fe.cyan("\u25BE "):t;case"finished":switch(this.getResult()){case df.Success:return r?fe.green("\u25BE "):fe.green("\u2713 ");case df.Failure:return r?fe.red("\u25BE "):fe.red("x ")}}}getResult(){if(this.result===df.Failure)return df.Failure;for(let t of this.subtasks)if(t.getResult()===df.Failure)return df.Failure;return df.Success}};jt();var gnp=be(lze(),1);bn();function Anp(e){return e.filter(t=>t.isUpgradeAvailable).length>0}function Xzg(e){return(e.cliUpgradeInfo?.isUpgradeAvailable??!1)||Anp(e.generatorUpgradeInfo)}async function ynp({cliEnvironment:e,upgradeInfo:t}){if(!Xzg(t)||e.packageVersion==t.cliUpgradeInfo?.latestVersion)return;let r=`${fe.underline("Upgrades available")}
|
|
4816
4816
|
|
|
@@ -4819,7 +4819,7 @@ ${r}`}function QAi(e){let t=this,{emitParseErrors:r,...n}={...t.data("settings")
|
|
|
4819
4819
|
Run ${fe.cyan("fern generator upgrade")} to upgrade your generators.`),i.length>2&&(r+=`
|
|
4820
4820
|
Run ${fe.cyan("fern generator upgrade --list")} to see the full list of generator upgrades available.`),Mnt(r,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"})}async function bRs({generatorUpgradeInfo:e,header:t,limit:r,includeBoxen:n=!0}){if(!Anp(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+=`
|
|
4821
4821
|
${await Zzg(a.generatorName)} (${a.apiName!=null?"API: "+a.apiName+", ":""}Group: ${a.generatorGroup}) `+fe.dim(a.currentVersion)+fe.reset(" \u2192 ")+fe.green(a.latestVersion);return i+=`
|
|
4822
|
-
`,n?Mnt(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function Zzg(e){let r=await new gnp.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new B({message:`Generator ${e} not found`,code:B.Code.ConfigError});return r.body.displayName}Uo();MEe();jt();async function $zg({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await bnp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=eze(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await s1({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await bnp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=eze(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await s1({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function bnp({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 yL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?BA(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 Enp(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c;try{c=AQ(a.latestVersion,a.previousVersion)}catch{throw new B({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:B.Code.ConfigError})}r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function wyi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await $zg({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...Enp(u,c,t.logger));else s.push(...Enp(a.versions,void 0,t.logger))}return s}jt();q_i();async function She({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await jDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new B({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:B.Code.NetworkError})}}var Inp=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Syi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Un.Info;isLocal;stdoutRedirector=new Cyi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await J4t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new EMt(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 xyi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new Eyi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.50.
|
|
4822
|
+
`,n?Mnt(i,{padding:1,float:"center",textAlignment:"center",borderColor:"yellow",borderStyle:"round"}):i}async function Zzg(e){let r=await new gnp.FernRegistryClient({environment:"https://registry.buildwithfern.com"}).generators.getGeneratorByImage({dockerImage:e});if(!r.ok||r.body==null)throw new B({message:`Generator ${e} not found`,code:B.Code.ConfigError});return r.body.displayName}Uo();MEe();jt();async function $zg({cliContext:e,project:{apiWorkspaces:t},generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){if(t.length===1){let a={type:"singleApi",versions:{}};return await bnp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(c,u,l,p)=>{a.versions[u]==null&&(a.versions[u]={});let d=eze(l.name);if(d==null){p.logger.debug(`Skipping unknown generator: ${l.name}`);return}let f=await s1({generatorName:d,cliVersion:e.environment.packageVersion,currentGeneratorVersion:l.version,channel:i,includeMajor:o,context:p});f!=null&&(a.versions[u][l.name]={previousVersion:l.version,latestVersion:f})},generatorFilter:r,groupFilter:n}),a}let s={type:"multiApi",versions:{}};return await bnp({cliContext:e,apiWorkspaces:t,perGeneratorAction:async(a,c,u,l)=>{if(a==null)return;s.versions[a]==null&&(s.versions[a]={}),s.versions[a][c]==null&&(s.versions[a][c]={});let p=eze(u.name);if(p==null){l.logger.debug(`Skipping unknown generator: ${u.name}`);return}let d=await s1({generatorName:p,cliVersion:e.environment.packageVersion,currentGeneratorVersion:u.version,channel:i,includeMajor:o,context:l});d!=null&&(s.versions[a][c][u.name]={previousVersion:u.version,latestVersion:d})},generatorFilter:r,groupFilter:n}),s}async function bnp({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 yL({absolutePathToWorkspace:o.absoluteFilePath,context:s});if(a==null||a.groups==null)return;let c=n!=null?BA(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 Enp(e,t,r){let n=[];for(let[i,o]of Object.entries(e))for(let[s,a]of Object.entries(o)){r.debug(`Checking if ${s} in group ${i} has an upgrade available...`);let c;try{c=AQ(a.latestVersion,a.previousVersion)}catch{throw new B({message:`Generator "${s}" has an invalid version "${a.previousVersion}" in generators.yml. Use an exact version like 1.2.3.`,code:B.Code.ConfigError})}r.debug(`Latest version: ${a.latestVersion}. `+(c?"Upgrade available.":"No upgrade available.")),n.push({generatorName:s,generatorGroup:i,apiName:t,isUpgradeAvailable:c,currentVersion:a.previousVersion,latestVersion:a.latestVersion})}return n}async function wyi({project:e,cliContext:t,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o}){let s=[];if(e!=null){let a=await $zg({cliContext:t,project:e,generatorFilter:r,groupFilter:n,channel:i,includeMajor:o});if(a.type==="multiApi")for(let[c,u]of Object.entries(a.versions))s.push(...Enp(u,c,t.logger));else s.push(...Enp(a.versions,void 0,t.logger))}return s}jt();q_i();async function She({cliEnvironment:e,includePreReleases:t=!1}){if(e.packageName!=="fern-api"||e.packageVersion==="0.0.0")return e.packageVersion;try{return await jDt(e.packageName,{version:t?"prerelease":"latest"})}catch(r){throw new B({message:`Failed to resolve latest CLI version: ${r instanceof Error?r.message:String(r)}`,code:B.Code.NetworkError})}}var Inp=["#2E86AB","#A23B72","#F18F01","#C73E1D","#CCE2A3"],Syi=class e{environment;sentryClient;posthogManager;automationTelemetryManager;didSucceed=!0;numTasks=0;ttyAwareLogger;logLevel=Un.Info;isLocal;stdoutRedirector=new Cyi;jsonMode=!1;static async create(t,r,{isLocal:n}){let i=await J4t();return new e(t,r,{isLocal:n,posthogManager:i})}constructor(t,r,{isLocal:n,posthogManager:i}){this.ttyAwareLogger=new EMt(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 xyi({release:`cli@${this.environment.packageVersion}`,telemetry:{cliName:this.environment.cliName,packageVersion:this.environment.packageVersion,isLocal:this.isLocal}}),this.automationTelemetryManager=new Eyi(this)}getPackageName(){return"fern-api"}getPackageVersion(){return"5.50.6"}getCliName(){return"fern"}setLogLevel(t){this.logLevel=t}logFernVersionDebug(){this.logger.debug(`Running ${fe.bold(`${this.environment.cliName}`)} (${this.environment.packageName}@${this.environment.packageVersion})`)}failAndThrow(t,r,n){throw this.failWithoutThrowing(t,r,n),new _c}failWithoutThrowing(t,r,n){this.didSucceed=!1,!(r instanceof _c)&&(nMt({message:t,error:r,logger:this.logger}),Iyi(this,r,{...n,message:t}))}enableJsonMode(){this.jsonMode||(this.jsonMode=!0,this.stdoutRedirector.redirect())}get isJsonMode(){return this.jsonMode}writeJsonToStdout(t){this.stdoutRedirector.restore(),process.stdout.write(JSON.stringify(t,null,2)+`
|
|
4823
4823
|
`),this.jsonMode&&this.stdoutRedirector.redirect()}async exit({code:t}={}){!this._suppressUpgradeMessage&&!this.isLocal&&await this.nudgeUpgradeIfAvailable(),this.ttyAwareLogger.finish();try{await this.posthogManager.flush()}catch{}await this.sentryClient.flush(),await this.automationTelemetryManager.flush(),this.exitProgram({code:t})}async nudgeUpgradeIfAvailable(){try{let t=await Promise.race([this.isUpgradeAvailable(),new Promise((n,i)=>setTimeout(()=>i("Request timed out"),300))]),r=await ynp({cliEnvironment:this.environment,upgradeInfo:t});r!=null&&(r.endsWith(`
|
|
4824
4824
|
`)||(r+=`
|
|
4825
4825
|
`),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=WBi(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 RJt(t);return this.ttyAwareLogger.registerTask(r),r}USE_NODE_18_OR_ABOVE_MESSAGE="The Fern CLI requires Node 18+ or above.";async runTaskWithInit(t,r){let n=this.addTaskWithInit(t).start(),i;try{i=await r(n)}catch(o){throw n.failWithoutThrowing(void 0,o),new _c}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=uv((t,...r)=>this.log(t,...r));stderr=uv((t,...r)=>this.logStderr(t,...r));constructTaskInitForWorkspace(t){let r=t.type==="docs"?"docs":t.workspaceName??"api",n=vnp(r),i=1+(this.longestWorkspaceName!=null?vnp(this.longestWorkspaceName):n).length,o=n.padEnd(i),s=Inp[this.numTasks++%Inp.length],a=fe.hex(s)(o);return{...this.constructTaskInit(),logPrefix:a,title:fe.hex(s).bold(r)}}constructTaskInit(){return{logImmediately:t=>this.logImmediately(t),takeOverTerminal:t=>this.ttyAwareLogger.takeOverTerminal(t),onResult:t=>{t===df.Failure&&(this.didSucceed=!1)},instrumentPostHogEvent:t=>{this.instrumentPostHogEvent(t)},shouldBufferLogs:!1,captureException:(t,r)=>this.sentryClient.captureException(t,r),emitAutomationTelemetryEvent:(t,r)=>this.emitAutomationTelemetryEvent(t,r)}}log(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}])}logStderr(t,...r){this.logImmediately([{parts:r,level:t,time:new Date}],{stderr:!0})}logImmediately(t,{stderr:r=!1}={}){let n=t.filter(i=>ew.indexOf(i.level)>=ew.indexOf(this.logLevel));this.ttyAwareLogger.log(n,{includeDebugInfo:this.logLevel===Un.Debug,stderr:r||this.jsonMode})}_suppressUpgradeMessage=!1;suppressUpgradeMessage(){this._suppressUpgradeMessage=!0}_isUpgradeAvailable;async isUpgradeAvailable({includePreReleases:t=!1}={}){if(this._isUpgradeAvailable==null){this.logger.debug(`Checking if ${this.environment.packageName} upgrade is available...`);let r=await She({cliEnvironment:this.environment,includePreReleases:t}),n=AQ(r,this.environment.packageVersion);this.logger.debug(`Latest version: ${r}. `+(n?"Upgrade available.":"No upgrade available."));let i={isUpgradeAvailable:n,latestVersion:r},o=await wyi({project:this.project,cliContext:this});this._isUpgradeAvailable={cliUpgradeInfo:i,generatorUpgradeInfo:o}}return this._isUpgradeAvailable}async confirmPrompt(t,r=!1){try{return await ARs({message:t,choices:[{name:"No",value:!1},{name:"Yes",value:!0}],default:r,theme:{prefix:fe.yellow("?"),style:{answer:i=>fe.cyan(i),message:i=>fe.bold(i),highlight:i=>fe.cyan(i)}}})}catch(n){throw n?.name==="ExitPromptError"?(this.logger.info(`
|
package/package.json
CHANGED