mirror of
https://github.com/thedotmack/claude-mem.git
synced 2026-09-20 04:23:02 +08:00
adce0fdfaf
PATCH 13.25.2 — ships two merged fixes: - #4125 CLAUDE_MEM_LLM_TIMEOUT_MS honored from settings.json; deadline expiry keeps buffered observer work - #4124 context filter falls back to the mode's types when the configured filter matches nothing Bundles rebuilt with `npm run build`; #4124 had not been rebuilt into plugin/scripts on main. Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
53 lines
260 KiB
JavaScript
Executable File
53 lines
260 KiB
JavaScript
Executable File
#!/usr/bin/env bun
|
|
var __CM_FILENAME__ = typeof __filename !== "undefined" ? __filename : require("node:path").resolve(process.argv[1] || "");
|
|
var __CM_DIRNAME__ = typeof __dirname !== "undefined" ? __dirname : require("node:path").dirname(__CM_FILENAME__);
|
|
"use strict";var Vl=Object.create;var Qn=Object.defineProperty;var ql=Object.getOwnPropertyDescriptor;var zl=Object.getOwnPropertyNames;var Yl=Object.getPrototypeOf,Jl=Object.prototype.hasOwnProperty;var vt=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(n){throw t=[n],n}};var Xl=(r,e)=>{for(var t in e)Qn(r,t,{get:e[t],enumerable:!0})},Ql=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of zl(e))!Jl.call(r,s)&&s!==t&&Qn(r,s,{get:()=>e[s],enumerable:!(n=ql(e,s))||n.enumerable});return r};var _e=(r,e,t)=>(t=r!=null?Vl(Yl(r)):{},Ql(e||!r||!r.__esModule?Qn(t,"default",{value:r,enumerable:!0}):t,r));function Zn(r){return(Zl??process.stderr.write.bind(process.stderr))(r)}function Oe(r){Zn(r)}function Ki(r,e={}){dr&&dr.length>0&&(Zn(dr.join("")),dr=[]),Zn(r.endsWith(`
|
|
`)?r:`${r}
|
|
`),e.skipExit||process.exit(2)}var Zl,dr,fr=vt(()=>{"use strict";Zl=null;dr=null});function tu(r){return r.replace(/^\uFEFF/,"")}function xe(r){return JSON.parse(tu(r))}function ru(r){(0,I.existsSync)(r)||(0,I.mkdirSync)(r,{recursive:!0})}function tt(r,e){let t=r;try{if((0,I.lstatSync)(r).isSymbolicLink())try{t=(0,I.realpathSync)(r)}catch(l){let u=l instanceof Error?l:new Error(String(l));Oe(`claude-mem: realpathSync failed for ${r}, resolving symlink manually: ${u.message}
|
|
`);let f=(0,I.readlinkSync)(r);t=(0,oe.resolve)((0,oe.dirname)(r),f)}}catch(l){let u=l.code;if(u!=="ENOENT"&&u!=="ENOTDIR")throw l}ru((0,oe.dirname)(t));let n=(0,oe.dirname)(t),s=(0,oe.basename)(t),i=(0,oe.join)(n,`.${s}.${process.pid}.${(0,Vi.randomBytes)(6).toString("hex")}.tmp`),o=Buffer.from(JSON.stringify(e,null,2)+`
|
|
`,"utf-8"),a;try{a=(0,I.statSync)(t).mode&511}catch{}let c;try{c=a!==void 0?(0,I.openSync)(i,"w",a):(0,I.openSync)(i,"w");let l=0;for(;l<o.length;){let u=(0,I.writeSync)(c,o,l,o.length-l);if(u===0)throw new Error(`writeSync stalled at ${l}/${o.length} bytes`);l+=u}if((0,I.fsyncSync)(c),(0,I.closeSync)(c),c=void 0,(0,I.renameSync)(i,t),!eu){let u;try{u=(0,I.openSync)(n,"r"),(0,I.fsyncSync)(u)}catch(f){let p=f instanceof Error?f:new Error(String(f));Oe(`claude-mem: directory fsync failed for ${n}: ${p.message}
|
|
`)}finally{if(u!==void 0)try{(0,I.closeSync)(u)}catch{}}}}catch(l){if(c!==void 0)try{(0,I.closeSync)(c)}catch{}try{(0,I.unlinkSync)(i)}catch{}throw l}}var I,Vi,oe,eu,rt=vt(()=>{"use strict";I=require("fs"),Vi=require("crypto"),oe=require("path");fr();eu=process.platform==="win32"});function ae(r,e=process.platform,t=(0,qi.homedir)()){return typeof r!="string"||r.length===0?r:r==="~"?t:r.startsWith("~/")||e==="win32"&&r.startsWith("~\\")?(0,zi.join)(t,r.slice(2)):r}var qi,zi,At=vt(()=>{"use strict";qi=require("os"),zi=require("path")});function nu(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,C.dirname)((0,Yi.fileURLToPath)(au.url))}function Fe(){if(process.env.CLAUDE_MEM_DATA_DIR)return ae(process.env.CLAUDE_MEM_DATA_DIR);let r=(0,C.join)((0,pr.homedir)(),".claude-mem"),e=(0,C.join)(r,"settings.json");try{if((0,Tt.existsSync)(e)){let t=xe((0,Tt.readFileSync)(e,"utf-8")),n=t.env??t;if(n.CLAUDE_MEM_DATA_DIR)return ae(n.CLAUDE_MEM_DATA_DIR)}}catch{}return r}function Xi(r,e=(0,pr.homedir)(),t=process.platform){return ae(r,t,e)}var C,pr,Tt,Yi,au,am,O,su,es,nt,iu,st,Ji,cm,gr,ou,L,U=vt(()=>{"use strict";C=require("path"),pr=require("os"),Tt=require("fs"),Yi=require("url");rt();At();At();au={};am=nu();O=Fe(),su=(0,C.join)((0,pr.homedir)(),".claude"),es=process.env.CLAUDE_CONFIG_DIR||su,nt=(0,C.join)(es,"plugins","marketplaces","thedotmack"),iu=(0,C.join)(O,"logs"),st=(0,C.join)(O,"settings.json"),Ji="claude-mem.db",cm=(0,C.join)(O,Ji),gr=(0,C.join)(O,"observer-sessions"),ou=(0,C.basename)(gr);L={dataDir:()=>O,workerPid:()=>(0,C.join)(O,"worker.pid"),serverPid:()=>(0,C.join)(O,".server-beta.pid"),serverPort:()=>(0,C.join)(O,".server-beta.port"),serverRuntime:()=>(0,C.join)(O,".server-beta.runtime.json"),settings:()=>(0,C.join)(O,"settings.json"),database:()=>(0,C.join)(O,Ji),chroma:()=>(0,C.join)(O,"chroma"),combinedCerts:()=>(0,C.join)(O,"combined_certs.pem"),transcriptsConfig:()=>(0,C.join)(O,"transcript-watch.json"),transcriptsState:()=>(0,C.join)(O,"transcript-watch-state.json"),corpora:()=>(0,C.join)(O,"corpora"),supervisorRegistry:()=>(0,C.join)(O,"supervisor.json"),envFile:()=>(0,C.join)(O,".env"),logsDir:()=>iu}});var ye,eo,rs,ts,ns,d,A=vt(()=>{"use strict";ye=require("fs"),eo=require("path");U();fr();rt();rs=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(rs||{}),ts=null,ns=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;logFileDate=null;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){let e=new Date().toISOString().split("T")[0];if(!(this.logFileInitialized&&this.logFileDate===e)){this.logFileInitialized=!0,this.logFileDate=e;try{let t=L.logsDir();(0,ye.existsSync)(t)||(0,ye.mkdirSync)(t,{recursive:!0}),this.logFilePath=(0,eo.join)(t,`claude-mem-${e}.log`)}catch(t){console.error("[LOGGER] Failed to initialize log file:",t instanceof Error?t.message:String(t)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=L.settings();if((0,ye.existsSync)(e)){let t=(0,ye.readFileSync)(e,"utf-8"),s=(xe(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=rs[s]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
|
|
${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?JSON.stringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{n=t}if(e==="Bash"&&n.command)return`${e}(${n.command})`;if(n.file_path)return`${e}(${n.file_path})`;if(n.notebook_path)return`${e}(${n.notebook_path})`;if(e==="Glob"&&n.pattern)return`${e}(${n.pattern})`;if(e==="Grep"&&n.pattern)return`${e}(${n.pattern})`;if(n.url)return`${e}(${n.url})`;if(n.query)return`${e}(${n.query})`;if(e==="Task"){if(n.subagent_type)return`${e}(${n.subagent_type})`;if(n.description)return`${e}(${n.description})`}return e==="Skill"&&n.skill?`${e}(${n.skill})`:e==="LSP"&&n.operation?`${e}(${n.operation})`:e}formatTimestamp(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${t}-${n}-${s} ${i}:${o}:${a}.${c}`}log(e,t,n,s,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let o=this.formatTimestamp(new Date),a=rs[e].padEnd(5),c=t.padEnd(6),l="";s?.correlationId?l=`[${s.correlationId}] `:s?.sessionId&&(l=`[session-${s.sessionId}] `);let u="";if(i!=null)if(i instanceof Error)u=this.getLevel()===0?`
|
|
${i.message}
|
|
${i.stack}`:` ${i.message}`;else if(this.getLevel()===0&&typeof i=="object")try{u=`
|
|
`+JSON.stringify(i,null,2)}catch{u=" "+this.formatData(i)}else u=" "+this.formatData(i);let f="";if(s){let{sessionId:g,memorySessionId:h,correlationId:m,...E}=s;Object.keys(E).length>0&&(f=` {${Object.entries(E).map(([S,P])=>`${S}=${P}`).join(", ")}}`)}let p=`[${o}] [${a}] [${c}] ${l}${n}${f}${u}`;if(this.logFilePath)try{(0,ye.appendFileSync)(this.logFilePath,p+`
|
|
`,"utf8")}catch(g){let h=g instanceof Error?g:new Error(String(g));Oe(`[LOGGER] Failed to write to log file: ${h.message}
|
|
${h.stack??""}
|
|
`)}else Oe(p+`
|
|
`)}debug(e,t,n,s){this.log(0,e,t,n,s)}info(e,t,n,s){this.log(1,e,t,n,s)}warn(e,t,n,s){this.log(2,e,t,n,s)}setErrorSink(e){ts=e}error(e,t,n,s){this.log(3,e,t,n,s),this.routeErrorToSink(t,n,s)}routeErrorToSink(e,t,n){try{if(!ts||!(n instanceof Error))return;ts(n)}catch{}}dataIn(e,t,n,s){this.info(e,`\u2192 ${t}`,n,s)}dataOut(e,t,n,s){this.info(e,`\u2190 ${t}`,n,s)}success(e,t,n,s){this.info(e,`\u2713 ${t}`,n,s)}failure(e,t,n,s){this.error(e,`\u2717 ${t}`,n,s)}},d=new ns});var Ee=require("fs"),Qi=require("os"),hr=require("path");U();var it=L.transcriptsConfig(),mr=L.transcriptsState(),cu={version:1,schemas:{},watches:[],stateFile:mr};function lu(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name;if(!(r.name==="codex"||e==="codex")||!r.path)return!1;let n=V(r.path).replace(/\\/g,"/"),s=(0,hr.join)((0,Qi.homedir)(),".codex","sessions").replace(/\\/g,"/");return n===`${s}/**/*.jsonl`}function Zi(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name,t=r.name==="codex"&&(!e||e==="codex");return r.context?.mode==="agents"&&t&&lu(r)}function V(r){return r&&Xi(r)}function Pt(r=it){let e=V(r);if(!(0,Ee.existsSync)(e))throw new Error(`Transcript watch config not found: ${e}`);let t=(0,Ee.readFileSync)(e,"utf-8"),n=JSON.parse(t);if(!n.version||!n.watches)throw new Error(`Invalid transcript watch config: ${e}`);return n.stateFile||(n.stateFile=mr),n}function _r(r=it){let e=V(r),t=(0,hr.dirname)(e);(0,Ee.existsSync)(t)||(0,Ee.mkdirSync)(t,{recursive:!0}),(0,Ee.writeFileSync)(e,JSON.stringify(cu,null,2))}var j=require("fs"),ie=require("path");A();var Se=require("fs"),to=require("path");A();function ro(r){try{if(!(0,Se.existsSync)(r))return{offsets:{}};let e=(0,Se.readFileSync)(r,"utf-8"),t=JSON.parse(e);return t.offsets?t:{offsets:{}}}catch(e){return d.warn("TRANSCRIPT","Failed to load watch state, starting fresh",{statePath:r,error:e instanceof Error?e.message:String(e)}),{offsets:{}}}}function no(r,e){try{let t=(0,to.dirname)(r);(0,Se.existsSync)(t)||(0,Se.mkdirSync)(t,{recursive:!0}),(0,Se.writeFileSync)(r,JSON.stringify(e,null,2))}catch(t){d.warn("TRANSCRIPT","Failed to save watch state",{statePath:r,error:t instanceof Error?t.message:String(t)})}}var ur=_e(require("path"),1);var x=_e(require("path"),1),No=require("crypto"),R=require("fs");var ss=require("node:child_process");function It(r,e,t){return(0,ss.spawn)(r,e??[],{windowsHide:!0,...t})}var uu=new Set([".cmd",".bat"]),du=new Set([".exe",".com"]),ym=new Set([...du,...uu]);A();var z={HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},ke={SUCCESS:0,BLOCKING_ERROR:2};function De(r){return process.platform==="win32"?Math.round(r*z.WINDOWS_MULTIPLIER):r}var Er=require("fs"),is=require("path"),Rt=require("os");rt();var fu="security_alert",Y=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(De(z.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:(0,is.join)((0,Rt.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,is.join)((0,Rt.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,Rt.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:"30000",CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let t=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(t):t}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,t){let n=t?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let t=this.get(e);return parseInt(t,10)}static applyEnvOverrides(e){let t={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(t[n]=process.env[n]);return t}static loadFromFile(e,t=!0){try{if(!(0,Er.existsSync)(e)){let l=this.getAllDefaults();try{tt(e,l),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(u){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,u instanceof Error?u.message:String(u))}return this.finalizeSettings(l,t)}let n=(0,Er.readFileSync)(e,"utf-8"),s=xe(n),i=s,o=s.env&&typeof s.env=="object"&&!Array.isArray(s.env),a=o&&Object.keys(s).some(l=>l!=="env");if(o&&(i=s.env,!a))try{tt(e,i),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(l){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,l instanceof Error?l.message:String(l))}if(i.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===fu){i={...i,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{tt(e,a?{...s,env:i}:i),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(l){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,l instanceof Error?l.message:String(l))}}let c={...this.DEFAULTS};for(let l of Object.keys(this.DEFAULTS))i[l]!==void 0&&(c[l]=i[l]);return this.finalizeSettings(c,t)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let s=this.getAllDefaults();return this.finalizeSettings(s,t)}}};U();U();var yr=null;function be(){return yr!==null||(yr=Y.loadFromFile(st)),yr}var Ae=require("fs");A();var ve=require("fs"),ds=_e(require("path"),1);A();var pu=["CLAUDECODE_","CLAUDE_CODE_"],gu=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),hu=new Set(["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy","npm_config_noproxy"]),mu=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...hu]);function Ct(r=process.env){let e={};for(let[t,n]of Object.entries(r))if(n!==void 0){if(mu.has(t)){e[t]=n;continue}gu.has(t)||pu.some(s=>t.startsWith(s))||(e[t]=n)}return e}U();var as=require("child_process"),io=require("fs");A();var _u=5e3,so=new Map,os=0;function Eu(r){os+=1;let e=(0,as.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${r}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Ct(process.env),LC_ALL:"C",LANG:"C"}});if(e.status===0){let t=e.stdout.trim();return t.length>0?t:null}return null}function yu(r,e=!1){if(!e){let n=so.get(r);if(n&&Date.now()-n.capturedAtMs<_u)return n.token}let t=null;try{t=Eu(r)}catch(n){d.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:r,error:n instanceof Error?n.message:String(n)}),t=null}return so.set(r,{token:t,capturedAtMs:Date.now()}),t}function oo(r,e){if(!Number.isInteger(r)||r<=0)return null;if(process.platform==="linux"){os+=1;try{let t=(0,io.readFileSync)(`/proc/${r}/stat`,"utf-8"),n=t.lastIndexOf(") ");if(n<0)return null;let i=t.slice(n+2).split(" ")[19];return i&&/^\d+$/.test(i)?i:null}catch(t){return d.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}if(process.platform==="win32")return yu(r,e);os+=1;try{let t=(0,as.spawnSync)("ps",["-p",String(r),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Ct(process.env),LC_ALL:"C",LANG:"C"}});if(t.status!==0)return null;let n=t.stdout.trim();return n.length>0?n:null}catch(t){return d.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}function Le(r){return oo(r,!1)}function we(r,e){if(e===null)return!0;let t=oo(r,!0);return t===null?!0:t===e}var ao=require("child_process"),wr=require("fs"),co=require("util");A();var cs=(0,co.promisify)(ao.execFile),Su=128,bu=/not found|no running instance|no tasks/i,Sr=class extends Error{pid;constructor(e,t,n){super(t,n),this.name="ProcessTreeKillError",this.pid=e}};async function ce(r,e={}){let t=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:Le(r),s=()=>we(r,n);if(!s()){d.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:r});return}if(d.debug("PROCESS",`Killing process tree rooted at PID ${r}`,{immediate:t}),process.platform==="win32"){try{await cs("taskkill",["/PID",String(r),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(i){let o=i.code,a=String(i.stderr??""),c=i instanceof Error?i.message:String(i);if(o===Su||bu.test(`${a} ${c}`)){d.debug("PROCESS","taskkill reported the process was already gone",{pid:r});return}throw new Sr(r,`taskkill failed for PID ${r} (exit ${String(o)}): ${a.trim()||c}`,{cause:i})}return}try{let i=t?"SIGKILL":"SIGTERM",o=await br(r);for(let l of o){if(!we(l.pid,l.startToken)){d.debug("PROCESS",`Skipping ${i}: descendant PID was reused since enumeration`,{pid:l.pid,rootPid:r});continue}try{process.kill(l.pid,i)}catch{}}if(s())try{process.kill(r,i)}catch(l){let u=l instanceof Error?l:new Error(String(l)),f=u.code;f!=="ESRCH"&&d.debug("PROCESS",`Failed to ${i} PID ${r}`,{code:f},u)}else d.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:r,signal:i});t||await new Promise(l=>setTimeout(l,500));let a=s()?await br(r):[],c=new Map;for(let l of o)c.set(l.pid,l.startToken);for(let l of a)c.set(l.pid,l.startToken);for(let[l,u]of c){if(!we(l,u)){d.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:l,rootPid:r});continue}try{process.kill(l,"SIGKILL")}catch{}}if(!t&&s())try{process.kill(r,"SIGKILL")}catch{}}catch(i){throw new Sr(r,`tree-kill failed for PID ${r}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function wu(){return process.platform==="win32"?Tu():process.platform==="linux"?vu():Au()}function vu(){let r=[],e;try{e=(0,wr.readdirSync)("/proc")}catch(t){return d.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),r}for(let t of e){if(!/^\d+$/.test(t))continue;let n;try{n=(0,wr.readFileSync)(`/proc/${t}/stat`,"utf-8")}catch{continue}let s=n.lastIndexOf(") ");if(s<0)continue;let i=n.slice(s+2).split(" "),o=Number.parseInt(i[1]??"",10),a=i[19];Number.isFinite(o)&&r.push({pid:Number.parseInt(t,10),ppid:o,startToken:a&&/^\d+$/.test(a)?a:null})}return r}async function Au(){let r;try{r=(await cs("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(t){return d.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(`
|
|
`)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function Tu(){let r;try{r=(await cs("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Csv -NoTypeInformation"],{timeout:3e4,windowsHide:!0,maxBuffer:33554432})).stdout}catch(t){return d.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(/\r?\n/).slice(1)){let n=t.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function br(r){let e=await wu(),t=new Map;for(let o of e){let a=t.get(o.ppid);a?a.push(o):t.set(o.ppid,[o])}let n=new Set([r]),s=[],i=o=>{for(let a of t.get(o)??[])n.has(a.pid)||(n.add(a.pid),i(a.pid),s.push({pid:a.pid,startToken:a.startToken}))};return i(r),s}var Pu=5e3,Iu=1e3,Ru=L.supervisorRegistry();function H(r){if(!Number.isInteger(r)||r<0||r===0)return!1;try{return process.kill(r,0),!0}catch(e){if(e instanceof Error){let t=e.code;return t==="EPERM"?!0:(d.debug("SYSTEM","PID check failed",{pid:r,code:t}),!1)}return d.warn("SYSTEM","PID check threw non-Error",{pid:r,error:String(e)}),!1}}async function vr(r,e){let t=Date.now()+e;for(;Date.now()<t;){if(r.every(n=>!H(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function Ar(r){if(!r||!H(r.pid))return!1;if(!r.startToken)return!0;let e=Le(r.pid);if(e===null)return!0;let t=e===r.startToken;return t||d.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:r.pid,stored:r.startToken,current:e}),t}var fs=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Ru){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,(0,ve.mkdirSync)(ds.default.dirname(this.registryPath),{recursive:!0}),!(0,ve.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,ve.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(n))this.entries.set(s,i)}catch(t){t instanceof Error?d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},t):d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(t)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&d.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,t,n){this.initialize(),this.entries.set(e,t),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e){this.initialize();let t=this.entries.get(e);this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist(),t?.type==="sdk"&&us()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,t])=>({id:e,...t})).sort((e,t)=>{let n=Date.parse(e.startedAt),s=Date.parse(t.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}getBySession(e){let t=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===t)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,t=0;for(let[n,s]of this.entries)H(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(t+=1));e>0&&this.persist();for(let n=0;n<t;n+=1)us();return e}async reapSession(e){this.initialize();let t=this.getBySession(e);if(t.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;d.info("SYSTEM",`Reaping ${t.length} process(es) for session ${e}`,{sessionId:n,pids:t.map(a=>a.pid)});let s=t.filter(a=>H(a.pid)),i=new Map(s.map(a=>[a.pid,Le(a.pid)]));for(let a of s)try{process.platform==="win32"?await ce(a.pid,{expectedStartToken:i.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&d.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):d.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}await vr(s,Pu);let o=s.filter(a=>H(a.pid));for(let a of o){d.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});let c=i.get(a.pid)??null;if(!we(a.pid,c)){d.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:n});continue}try{process.platform==="win32"?await ce(a.pid,{expectedStartToken:c}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(l){l instanceof Error?l.code!=="ESRCH"&&d.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):d.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}}if(o.length>0){let a=Date.now()+Iu;for(;Date.now()<a&&o.filter(l=>H(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of t)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of t)a.type==="sdk"&&us();return d.info("SYSTEM",`Reaped ${t.length} process(es) for session ${e}`,{sessionId:n,reaped:t.length}),t.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};(0,ve.mkdirSync)(ds.default.dirname(this.registryPath),{recursive:!0}),(0,ve.writeFileSync)(this.registryPath,JSON.stringify(e,null,2))}},ls=null;function Tr(){return ls||(ls=new fs),ls}var jm=180*1e3,Cu=[];function us(){let r=Cu.shift();r&&r.notify()}var ot=require("fs");A();U();var Mu=L.workerPid();async function uo(r){let e=r.currentPid??process.pid,t=r.pidFilePath??Mu,n=r.registry.getAll(),s=[...n].filter(c=>c.pid!==e).sort((c,l)=>Date.parse(l.startedAt)-Date.parse(c.startedAt)),i=new Map,o=new Map;for(let c of s){if(!H(c.pid)){r.registry.unregister(c.id);continue}o.set(c.id,Le(c.pid)),i.set(c.id,await br(c.pid));try{await lo(c,"SIGTERM")}catch(l){l instanceof Error?d.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:c.pid,pgid:c.pgid,type:c.type},l):d.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(l)})}}await vr(s,5e3);let a=s.filter(c=>H(c.pid)||(i.get(c.id)??[]).some(l=>H(l.pid)));for(let c of a){let l=we(c.pid,o.get(c.id)??null);l||d.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:c.pid,type:c.type});try{l&&await lo(c,"SIGKILL")}catch(u){u instanceof Error?d.debug("SYSTEM","Failed to force kill child process",{pid:c.pid,pgid:c.pgid,type:c.type},u):d.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(u)})}finally{Ou(i.get(c.id)??[],c.pid)}}await vr(a,1e3);for(let c of s)r.registry.unregister(c.id);for(let c of n.filter(l=>l.pid===e))r.registry.unregister(c.id);fo(t,e),r.registry.pruneDeadEntries()}function fo(r,e,t=!1){if(!(0,ot.existsSync)(r))return;let n=null;try{let o=JSON.parse((0,ot.readFileSync)(r,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){d.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:r,error:o instanceof Error?o.message:String(o)});return}let s=e!==null&&n===e,i=n===null||!H(n);if(!s&&!(t&&i)){d.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:r,recordedPid:n,currentPid:e});return}try{(0,ot.rmSync)(r,{force:!0})}catch(o){o instanceof Error?d.debug("SYSTEM","Failed to remove PID file",{pidFilePath:r},o):d.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:r,error:String(o)})}}function Ou(r,e){for(let{pid:t,startToken:n}of r)if(!(t===e||!H(t))){if(!we(t,n)){d.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:t,rootPid:e});continue}try{process.kill(t,"SIGKILL"),d.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:t,rootPid:e})}catch(s){let i=s instanceof Error?s.code:void 0;i!=="ESRCH"&&d.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:t,rootPid:e,errno:i})}}}async function lo(r,e){let{pid:t,pgid:n}=r;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}if(e==="SIGKILL"){await ce(t,{signalMode:"immediate"});return}try{process.kill(t,e)}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}return}await ce(t)}A();var po=3e4,at=null;function xu(){let e=Tr().pruneDeadEntries();e>0&&d.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function go(){at===null&&(at=setInterval(xu,po),at.unref(),d.debug("SYSTEM","Health checker started",{intervalMs:po}))}function ho(){at!==null&&(clearInterval(at),at=null,d.debug("SYSTEM","Health checker stopped"))}var mo=require("child_process"),_o=require("util");A();var Fu=(0,_o.promisify)(mo.execFile),ku=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function Du(r){let e=[];for(let t of r.split(`
|
|
`)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function Lu(){let r=await Fu("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Du(r.stdout)}function Nu(r,e){let t=r.filter(o=>ku.test(o.command)&&o.pid!==e.selfPid),n=new Set(t.map(o=>o.pid)),s=t.filter(o=>!n.has(o.ppid)),i=s.filter(o=>o.ppid===e.selfPid?!1:o.ppid===1?!0:!e.isAlive(o.ppid));return{matched:t,roots:s,orphans:i}}async function Eo(r={}){let e=r.platform??process.platform,t={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return t.skipped="windows",t;let n=r.readTable??Lu,s=r.isAlive??H,i=r.killTree??(g=>ce(g,{signalMode:"graceful"})),o=r.selfPid??process.pid,a;try{a=await n()}catch(g){return d.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:g instanceof Error?g.message:String(g)}),t.skipped="unreadable",t}let{matched:c,roots:l,orphans:u}=Nu(a,{isAlive:s,selfPid:o});if(t.matched=c.length,t.trees=l.length,t.orphans=u.length,u.length===0)return d.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:t.matched,trees:t.trees}),t;d.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(g=>g.pid)});let f=new Set,p=8;for(let g=0;g<u.length;g+=p){let h=u.slice(g,g+p);(await Promise.allSettled(h.map(E=>i(E.pid)))).forEach((E,_)=>{let S=h[_];E.status==="fulfilled"?(t.killed+=1,f.add(S.pid)):(t.failed+=1,d.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:S.pid,ppid:S.ppid,error:E.reason instanceof Error?E.reason.message:String(E.reason)}))})}if(r.registry)for(let g of r.registry.getAll())g.type==="chroma"&&f.has(g.pid)&&(r.registry.unregister(g.id),t.unregistered+=1);return d.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:t.orphans,killed:t.killed,failed:t.failed,unregistered:t.unregistered}),t}U();var ps=L.workerPid(),gs=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),Pr({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Eo({registry:this.registry}).catch(t=>{d.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:t instanceof Error?t.message:String(t)})}),go()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let t=async n=>{if(this.shutdownInitiated){d.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,d.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?d.error("SYSTEM","Error during shutdown",{},s):d.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?d.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):d.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{t("SIGTERM")}),process.on("SIGINT",()=>{t("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{d.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{t("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}ho(),this.stopPromise=uo({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,t,n){this.registry.register(e,t,n)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},c_=new gs(Tr());function hs(){if(!(0,Ae.existsSync)(ps))return null;let r;try{r=JSON.parse((0,Ae.readFileSync)(ps,"utf-8"))}catch{return null}return r!==null&&Ar(r)?r:null}function Pr(r={}){let e=r.pidFilePath??ps;if(!(0,Ae.existsSync)(e))return"missing";let t=null;try{t=JSON.parse((0,Ae.readFileSync)(e,"utf-8"))}catch(s){return s instanceof Error?d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),(0,Ae.rmSync)(e,{force:!0}),"invalid"}return Ar(t)&&t?((r.logAlive??!0)&&d.info("SYSTEM","Worker already running (PID alive)",{existingPid:t.pid,existingPort:t.port,startedAt:t.startedAt}),"alive"):(d.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:t?.pid,port:t?.port,startedAt:t?.startedAt}),(0,Ae.rmSync)(e,{force:!0}),"stale")}fr();var ms=require("path"),Rr=require("fs"),So=require("crypto");U();var Ir=require("fs");rt();function yo(r,e){if(!(0,Ir.existsSync)(r))return e;try{return xe((0,Ir.readFileSync)(r,"utf-8"))}catch(t){throw new Error(`Corrupt JSON file, refusing to overwrite: ${r}: ${t instanceof Error?t.message:String(t)}`)}}A();var bo="telemetry.json";function Uu(r){let e=r.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function $u(r,e){if(Uu(r))return{enabled:!1,source:"DO_NOT_TRACK"};let t=r.CLAUDE_MEM_TELEMETRY?.toLowerCase();return t==="0"||t==="false"||t==="off"?{enabled:!1,source:"env"}:t==="1"||t==="true"||t==="on"?{enabled:!0,source:"env"}:e?.enabled===!0?{enabled:!0,source:"config"}:e?.enabled===!1?{enabled:!1,source:"config"}:{enabled:!0,source:"default"}}function Cr(r,e){return $u(r,e).enabled}function wo(r){let e=r.CLAUDE_MEM_TELEMETRY_ERRORS?.toLowerCase();return!(e==="0"||e==="false"||e==="off")}function Bu(){return(0,ms.join)(Fe(),bo)}function Mt(){let r;try{r=yo(Bu(),null)}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.warn("SYSTEM","Telemetry: corrupt telemetry.json; treating as no recorded consent",void 0,t),null}return!r||typeof r!="object"||typeof r.installId!="string"||r.enabled!==void 0&&typeof r.enabled!="boolean"?null:{enabled:r.enabled,installId:r.installId,decidedAt:typeof r.decidedAt=="string"?r.decidedAt:""}}function Wu(r){let e=Fe();(0,Rr.mkdirSync)(e,{recursive:!0}),(0,Rr.writeFileSync)((0,ms.join)(e,bo),JSON.stringify(r,null,2)+`
|
|
`)}function Mr(){let r=Mt();if(r?.installId)return r.installId;let e=(0,So.randomUUID)();return Wu({installId:e,decidedAt:""}),e}var ju=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","install_method","interactive","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_invalid_output","top_model","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),vo=200;function Hu(r,e){if(!(!r||typeof r!="object"))for(let t of Object.keys(r)){if(!ju.has(t))continue;let n=r[t];typeof n=="string"?e[t]=n.length>vo?n.slice(0,vo):n:(typeof n=="number"&&Number.isFinite(n)||typeof n=="boolean")&&(e[t]=n)}}function Or(r){let e={};try{Hu(r,e)}catch{}return e}var _s=_e(require("os"),1);A();var Gu="13.25.2",Ku="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Vu="https://us.i.posthog.com";function xr(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||Ku}function Fr(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Vu}var qu=["version","os","os_version","is_wsl","arch","runtime","locale","ide","provider","runtime_mode","install_method","claude_code_version","first_active_date","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs"];function kr(r){let e={};for(let t of qu)r[t]!==void 0&&(e[t]=r[t]);return e}function zu(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||_s.default.release().toLowerCase().includes("microsoft")}catch(r){let e=r instanceof Error?r:new Error(String(r));return d.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function Dr(){return{version:Gu,os:process.platform,os_version:_s.default.release(),is_wsl:zu(),arch:process.arch,runtime:process.versions.bun?"bun":"node",runtime_version:process.versions.bun??process.versions.node,node_version:process.versions.node,is_ci:!!process.env.CI,locale:Intl.DateTimeFormat().resolvedOptions().locale}}var Yu=2e3;async function Ao(r,e,t){try{if(!Cr(process.env,Mt()))return;let n=Or({...Dr(),...e??{}});if(t?.person?n.$set=kr(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
|
|
`);return}let s=xr(),i=new AbortController,o=setTimeout(()=>i.abort(),Yu);try{await Ju(s,r,n,i.signal)}finally{clearTimeout(o)}}catch{}}async function Ju(r,e,t,n){await fetch(`${Fr()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r,event:e,distinct_id:Mr(),properties:t}),signal:n})}var Te=_e(require("path"),1),To=require("os"),re=require("fs"),Ss=require("child_process");A();A();A();U();var B_=L.dataDir(),W_=L.workerPid();function Qu(r){try{return(0,re.realpathSync)(r)}catch{return null}}function Es(r){return r?/(^|[\\/])bun(\.exe)?$/i.test(r.trim()):!1}function Zu(r,e){let t=e==="win32"?`where ${r}`:`which ${r}`,n;try{n=(0,Ss.execSync)(t,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(i){return i instanceof Error?d.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t},i):d.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t},new Error(String(i))),null}return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)||null}var ys;function bs(r={}){let e=Object.keys(r).length===0;if(e&&ys!==void 0)return ys;let t=ed(r);return e&&t!==null&&(ys=t),t}function ed(r){let e=r.platform??process.platform,t=r.execPath??process.execPath;if(Es(t))return t;let n=r.env??process.env,s=r.homeDirectory??(0,To.homedir)(),i=r.pathExists??re.existsSync,o=r.lookupInPath??Zu,a=r.realpath??Qu,c=e==="win32"?[n.BUN,n.BUN_PATH,Te.default.join(s,".bun","bin","bun.exe"),Te.default.join(s,".bun","bin","bun"),n.USERPROFILE?Te.default.join(n.USERPROFILE,".bun","bin","bun.exe"):void 0,n.LOCALAPPDATA?Te.default.join(n.LOCALAPPDATA,"bun","bun.exe"):void 0,n.LOCALAPPDATA?Te.default.join(n.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,n.npm_config_prefix?Te.default.join(n.npm_config_prefix,"bun.exe"):void 0]:[n.BUN,n.BUN_PATH,Te.default.join(s,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun",n.npm_config_prefix?Te.default.join(n.npm_config_prefix,"bin","bun"):void 0];for(let f of c){let p=f?.trim();if(p&&(Es(p)&&i(p)||p.toLowerCase()==="bun"))return p}let l=o("bun",e)?.trim();if(!l||!Es(l))return null;let u=a(l)??l;return i(u)?u:null}var Po=_e(require("net"),1);A();U();function ws(){return Y.loadFromFile(st).CLAUDE_MEM_WORKER_HOST}function Io(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var Ro=5e3;async function td(r,e,t="GET",n=Ro){let s=await fetch(`http://${Io(ws())}:${r}${e}`,{method:t,signal:AbortSignal.timeout(Math.max(1,n))}),i="";try{i=await s.text()}catch{}return{ok:s.ok,statusCode:s.status,body:i}}async function Co(r,e=Ro){if(process.platform==="win32")try{let t=await fetch(`http://${Io(ws())}:${r}/api/health`,{signal:AbortSignal.timeout(Math.max(1,e))});if(t.ok)return!0;d.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:r,status:t.status})}catch(t){t instanceof Error?d.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,message:t.message}):d.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,error:String(t)})}return new Promise(t=>{let n=Po.default.createServer(),s=ws();n.once("error",i=>{i.code==="EADDRINUSE"?t(!0):t(!1)}),n.once("listening",()=>{n.close(()=>t(!1))}),n.listen(r,s)})}async function rd(r){try{let e=await td(r,"/api/health");return e.ok?JSON.parse(e.body).version:null}catch{return d.debug("SYSTEM","Could not fetch worker version",{}),null}}async function Mo(r,e){let t=e??"unknown",n=await rd(r);return!n||t==="unknown"?{matches:!0,pluginVersion:t,workerVersion:n}:{matches:t===n,pluginVersion:t,workerVersion:n}}A();var Lr=require("path"),J=require("fs");U();A();var nd=9e4;function Oo(){return(0,Lr.join)(Fe(),"spawn.lock")}function vs(){let r=Oo(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let t=0;t<2;t++)try{return(0,J.mkdirSync)((0,Lr.dirname)(r),{recursive:!0}),(0,J.writeFileSync)(r,e,{flag:"wx"}),!0}catch(n){let s=n instanceof Error?n:new Error(String(n)),i=s.code;if(i!=="EEXIST")return d.warn("SYSTEM","Spawn lock write failed for a non-contention reason; failing open (spawning unlocked)",{lockPath:r,code:i},s),!0;if(t>0)return!1;let o;try{o=(0,J.statSync)(r).mtimeMs}catch{continue}if(Date.now()-o<=nd)return!1;let a;try{a=(0,J.statSync)(r).mtimeMs}catch{continue}if(a!==o)return!1;try{(0,J.unlinkSync)(r)}catch{return!1}}return!1}function As(){let r=Oo();try{if(JSON.parse((0,J.readFileSync)(r,"utf-8")).pid!==process.pid)return;(0,J.unlinkSync)(r)}catch{}}rt();function Cs(r,e,t){let n=process.env[r];if(n){let s=parseInt(n,10);if(Number.isFinite(s)&&s>=t.min&&s<=t.max)return s;d.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max})}return e}var Ot=Cs("CLAUDE_MEM_HEALTH_TIMEOUT_MS",De(z.HEALTH_CHECK),{min:500,max:3e5}),sd=Cs("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",De(z.HOOK_READINESS_WAIT),{min:0,max:3e5}),Ts=Cs("CLAUDE_MEM_WEDGED_WORKER_UPTIME_S",300,{min:60,max:86400}),id={min:500,max:3e5};function Uo(r=process.env){let e=r.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="on"||t==="yes"}function od(r){return Uo()?{...r,verbose:!0}:r}function ad(r){let e={},t=r;for(let n=0;t&&n<4;n++){let s=n===0?"error":`cause${n}`;if(t instanceof Error){let i=t;e[s]={name:t.name,message:t.message,...i.code!==void 0?{code:i.code}:{}},t=t.cause;continue}e[s]=String(t);break}return e}function cd(r,e,t){let n=typeof e.method=="string"?e.method:"GET",s=ad(t),i=JSON.stringify(s);d.warn("SYSTEM","Worker IPC fetch failed",{url:r,method:n},i),Oe(`[claude-mem] fetch verbose: ${n} ${r} ${i}
|
|
`)}async function $o(r,e={}){let t=od(e);try{return await fetch(r,t)}catch(n){throw Uo()&&cd(r,e,n),n}}async function Ms(r,e={},t){try{return await $o(r,{...e,signal:AbortSignal.timeout(t)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${t}ms`):n}}var Nr=null,Ur=null,$r=null,Br=null;function ld(){return x.default.join(Y.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Os(){return $r!==null||($r=Y.loadFromFile(ld())),$r}function xo(r,e){if(!r)return null;let t=parseInt(r,10);return Number.isFinite(t)&&t>=e.min&&t<=e.max?t:null}function ud(r,e,t){let n=process.env[r];if(n!==void 0){let o=xo(n,t);return o!==null?o:(d.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max}),e)}let s=Os()[r],i=xo(s,t);return i!==null?i:(d.warn("SYSTEM",`Invalid ${r} in settings.json, using default`,{value:s,min:t.min,max:t.max}),e)}function Ke(){if(Nr!==null)return Nr;let r=Os();return Nr=parseInt(r.CLAUDE_MEM_WORKER_PORT,10),Nr}function dd(){return Ur!==null||(Ur=Os().CLAUDE_MEM_WORKER_HOST),Ur}function fd(){return Br!==null||(Br=ud("CLAUDE_MEM_API_TIMEOUT_MS",De(z.API_REQUEST),id)),Br}function pd(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}function gd(r){return`http://${pd(dd())}:${Ke()}${r}`}function le(r,e={}){let t=e.method??"GET",n=e.timeoutMs??fd(),s=gd(r),i={method:t};return e.headers&&(i.headers=e.headers),e.body&&(i.body=e.body),n>0?Ms(s,i,n):$o(s,i)}async function hd(){return(await le("/api/health",{timeoutMs:Ot})).ok}async function Is(r=Ot){return(await le("/api/readiness",{timeoutMs:r})).ok}function Bo(r){let e=(0,R.existsSync)(x.default.join(r,"plugin","scripts"))?x.default.join(r,"plugin"):r;return x.default.join(e,"scripts","worker-service.cjs")}function md(r,e){let t=f=>{let p=f.split("-")[0].split(".");return[parseInt(p[0],10)||0,parseInt(p[1],10)||0,parseInt(p[2],10)||0]},[n,s,i]=t(r),[o,a,c]=t(e);if(o!==n)return o-n;if(a!==s)return a-s;if(c!==i)return c-i;let l=r.includes("-")?1:0,u=e.includes("-")?1:0;return l!==u?l-u:r<e?1:r>e?-1:0}function _d(r=x.default.join(x.default.dirname(x.default.dirname(nt)),"cache","thedotmack","claude-mem")){try{return(0,R.readdirSync)(r).filter(e=>/^\d/.test(e)).map(e=>x.default.join(r,e)).filter(e=>{try{if(!(0,R.statSync)(e).isDirectory())return!1}catch{return!1}return!(0,R.existsSync)(x.default.join(e,".orphaned_at"))}).map(e=>({scriptPath:Bo(e),version:x.default.basename(e)}))}catch{return[]}}function Fo(r){try{let e=JSON.parse((0,R.readFileSync)(r,"utf-8"));return typeof e.version=="string"?e.version:null}catch(e){let t=e.code;return t!=="ENOENT"&&d.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:r,code:t}),null}}function Wo(){let r=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(r){if((0,R.existsSync)(r))return{scriptPath:r,version:null};d.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:r})}let e=[..._d(),{scriptPath:Bo(x.default.join(nt,"plugin")),version:Fo(x.default.join(nt,"package.json"))},{scriptPath:x.default.join(process.cwd(),"plugin","scripts","worker-service.cjs"),version:Fo(x.default.join(process.cwd(),"package.json"))}];return Ed(e)}function Ed(r){let e=r.filter(t=>(0,R.existsSync)(t.scriptPath));return e.length===0?null:(e.sort((t,n)=>t.version===null&&n.version===null?0:t.version===null?1:n.version===null?-1:md(t.version,n.version)),e[0])}function yd(){return Wo()?.scriptPath??null}async function Sd(r){let e=r.backoffMs;for(let t=1;t<=r.attempts;t++){if(await Ho())return!0;t<r.attempts&&(await new Promise(n=>setTimeout(n,e)),e*=2)}return!1}async function Ps(r=sd){if(r<=0)try{return await Is()}catch(t){let n=t instanceof Error?t:new Error(String(t));return d.debug("SYSTEM","Worker readiness check threw",{},n),!1}let e=Date.now();for(;Date.now()-e<r;){try{if(await Is())return!0}catch(n){d.debug("SYSTEM","Worker readiness check threw",{error:n instanceof Error?n.message:String(n)})}let t=r-(Date.now()-e);if(t<=0)break;await new Promise(n=>setTimeout(n,Math.min(250,t)))}return!1}async function bd(){try{let e=await(await le("/api/health",{timeoutMs:Ot})).json();return typeof e.version=="string"?e.version:null}catch(r){let e=r instanceof Error?r:new Error(String(r));return d.debug("SYSTEM","Worker health-version fetch failed",{},e),null}}async function wd(){try{let e=await(await le("/api/health",{timeoutMs:Ot})).json();return typeof e.uptime=="number"&&Number.isFinite(e.uptime)?e.uptime:null}catch(r){let e=r instanceof Error?r:new Error(String(r));return d.debug("SYSTEM","Worker health-uptime fetch failed",{},e),null}}async function vd(r=5e3){let e=Date.now();for(;;){try{await le("/api/health",{timeoutMs:Ot})}catch{return!0}if(Date.now()-e>=r)return!1;await new Promise(t=>setTimeout(t,200))}}function Ad(r,e){if(!r)return null;try{let t=(0,R.statSync)(r.scriptPath);return JSON.stringify([r.scriptPath,e,t.size,t.mtimeMs,t.ctimeMs])}catch{return null}}function jo(){return x.default.join(Fe(),"worker-version-recycle.json")}function Td(r,e){if(r===null||e===null)return!1;try{let t=JSON.parse((0,R.readFileSync)(jo(),"utf-8"));return t?.buildKey===r&&t?.workerVersion===e}catch{return!1}}async function ko(r,e=null){let t=await bd();if(t!==null&&t!==r){if(e!==null)try{tt(jo(),{buildKey:e,workerVersion:t})}catch(n){d.warn("SYSTEM","Could not persist the failed worker version recycle",{error:n instanceof Error?n.message:String(n)})}d.warn("SYSTEM","Worker is ready but still reports a stale version; rebuild or reinstall the worker bundle before retrying",{pluginVersion:r,workerVersion:t})}}async function Ho(){let r;try{r=await hd()}catch(t){return d.debug("SYSTEM","Worker health check threw",{error:t instanceof Error?t.message:String(t)}),!1}if(!r)return!1;let e=Pr({logAlive:!1});return e==="missing"||e==="alive"}async function Gr(){let r=Wo(),e=null,t=null;if(await Ho()){let{matches:a,pluginVersion:c,workerVersion:l}=await Mo(Ke(),r?.version??null);if(c!=="unknown"&&(e=c),a){if(await Ps())return e!==null&&await ko(e),!0;let p=await wd();if(p===null||p<Ts)return d.warn("SYSTEM","Worker is healthy but not ready; skipping hook API call",{uptimeSeconds:p,wedgedAfterSeconds:Ts}),!1;d.info("SYSTEM","Worker healthy but never became ready \u2014 recycling wedged worker",{uptimeSeconds:p,wedgedAfterSeconds:Ts,version:l})}else{if(t=Ad(r,c),Td(t,l))return d.warn("SYSTEM","Skipping repeated worker recycle: the unchanged bundle still reports a stale version; rebuild or reinstall it",{pluginVersion:c,workerVersion:l,scriptPath:r?.scriptPath}),Ps();d.info("SYSTEM","Worker version mismatch \u2014 killing stale worker",{pluginVersion:c,workerVersion:l})}let u=hs();if(u===null||u.port!==Ke())return d.error("SYSTEM","Stale worker is serving the port but the PID file does not identify it; kill the claude-mem worker process manually",{port:Ke(),pidFilePid:u?.pid??null,pidFilePort:u?.port??null}),!1;try{await ce(u.pid,{signalMode:"immediate"})}catch(f){return d.error("SYSTEM","Could not kill stale worker",{pid:u.pid,port:u.port},f instanceof Error?f:new Error(String(f))),!1}if(!await vd())return d.error("SYSTEM","Stale worker port still open after SIGKILL; skipping spawn this hook event",{pid:u.pid,port:Ke()}),!1}let n=bs(),s=r?.scriptPath??null;if(!n)return d.warn("SYSTEM","Cannot lazy-spawn worker: Bun runtime not found on PATH"),!1;if(!s)return d.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;let i=vs();try{if(i){d.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:n,scriptPath:s});try{(0,R.mkdirSync)(O,{recursive:!0});let c=It(n,[s,"--daemon"],{detached:!0,stdio:["ignore","ignore","ignore"],cwd:O});c.on("error",l=>{d.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:n,scriptPath:s},l)}),c.unref()}catch(c){return c instanceof Error?d.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:n,scriptPath:s},c):d.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:n,scriptPath:s,error:String(c)}),!1}}else d.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await Sd({attempts:6,backoffMs:500}))return d.warn("SYSTEM",i?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),hs()===null&&await Co(Ke())&&(Hr=Ke(),d.error("SYSTEM","Worker port is occupied by an unreachable process that no PID file claims (likely an orphaned OS socket); every lazy-spawn on this port will be silently refused",{port:Hr,fix:Go})),!1}finally{i&&As()}return await Ps()?(e!==null&&await ko(e,t),!0):(d.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout"),!1)}var Go="Set CLAUDE_MEM_WORKER_PORT to a different port in claude-mem settings, or reboot to release the stuck port",Hr=null,Wr=null;async function Pd(){return Wr!==null||(Wr=await Gr()),Wr}async function Id(r){let e=Date.now()+r,t=async()=>{let o=e-Date.now();if(o<=0)return!1;try{return await Is(Math.min(500,o))}catch{return!1}};if(await t())return!0;let n=bs(),s=yd();if(!n||!s)return!1;let i=vs();try{if(i){let o=It(n,[s,"--daemon"],{detached:!0,stdio:["ignore","ignore","ignore"]});o.on("error",a=>{d.error("SYSTEM","Bounded worker startup spawn failed",{runtimePath:n,scriptPath:s},a)}),o.unref()}for(;Date.now()<e;){if(await t())return!0;let o=e-Date.now();o>0&&await new Promise(a=>setTimeout(a,Math.min(100,o)))}return!1}catch(o){return d.debug("SYSTEM","Bounded worker startup failed",{error:o instanceof Error?o.message:String(o)}),!1}finally{i&&As()}}var Rd=3,Ko=1e3,Cd=10,Vo=5e3,Md=Vo+Ko;function Kr(){return x.default.join(O,"state")}function qo(){return x.default.join(Kr(),"hook-failures.json")}function zo(){return x.default.join(Kr(),"hook-failures.lock")}async function Yo(r=Ko){let e=Kr(),t=zo(),n=(0,No.randomUUID)(),s=JSON.stringify({pid:process.pid,token:n}),i=Date.now()+r;for(;Date.now()<=i;)try{return(0,R.mkdirSync)(e,{recursive:!0}),(0,R.writeFileSync)(t,s,{flag:"wx"}),n}catch(o){let a=o instanceof Error?o:new Error(String(o)),c=a.code;if(c!=="EEXIST")return d.warn("SYSTEM","Hook-failure lock unavailable; skipping failure-state update",{lockPath:t,code:c},a),null;let l;try{l=(0,R.statSync)(t).mtimeMs}catch{continue}if(Date.now()-l>Vo){let u;try{u=(0,R.statSync)(t).mtimeMs}catch{continue}if(u===l)try{(0,R.unlinkSync)(t);continue}catch{}}await new Promise(u=>setTimeout(u,Cd))}return d.warn("SYSTEM","Timed out waiting for hook-failure lock; skipping failure-state update",{lockPath:t,waitMs:r}),null}function Jo(r){let e=zo();try{if(JSON.parse((0,R.readFileSync)(e,"utf-8")).token!==r)return;(0,R.unlinkSync)(e)}catch{}}function Od(r){let e=JSON.parse(r);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0,thresholdTripped:e.thresholdTripped===!0}}function Rs(){try{return Od((0,R.readFileSync)(qo(),"utf-8"))}catch{return{consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1}}}function Xo(r){let e=Kr(),t=qo(),n=`${t}.tmp`;try{return(0,R.existsSync)(e)||(0,R.mkdirSync)(e,{recursive:!0}),(0,R.writeFileSync)(n,JSON.stringify(r),"utf-8"),(0,R.renameSync)(n,t),!0}catch(s){return d.debug("SYSTEM","Failed to persist hook-failure counter",{error:s instanceof Error?s.message:String(s)}),!1}}function xd(){try{let e=be().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,t=parseInt(e,10);if(Number.isFinite(t)&&t>=1)return t}catch{}return Rd}var Do=null;async function Fd(){let r=await Yo();if(r===null)return Rs().consecutiveFailures;let e,t=!1;try{let n=Rs();e={consecutiveFailures:n.consecutiveFailures+1,lastFailureAt:Date.now(),thresholdTripped:n.thresholdTripped};let s=xd();t=e.consecutiveFailures>=s&&!e.thresholdTripped,t&&(e.thresholdTripped=!0);let i=Xo(e);t=t&&i}finally{Jo(r)}return t&&(await Ao("hook_failed",{...Do!==null?{hook_type:Do}:{},error_mode:"worker_unavailable",consecutive_failures:e.consecutiveFailures,threshold_tripped:!0}),Ki(Hr!==null?`claude-mem worker unreachable for ${e.consecutiveFailures} consecutive hooks: port ${Hr} is held by an unreachable process that no PID file claims, so the worker cannot bind it. ${Go}.`:`claude-mem worker unreachable for ${e.consecutiveFailures} consecutive hooks.`)),e.consecutiveFailures}async function Lo(){let r=await Yo(Md);if(r!==null)try{let e=Rs();if(e.consecutiveFailures===0&&!e.thresholdTripped)return;Xo({consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1})}finally{Jo(r)}}var jr=Symbol.for("claude-mem/worker-fallback");function Vr(r){return typeof r=="object"&&r!==null&&r[jr]===!0}async function qr(r,e,t,n={}){let s=n.workerStartupTimeoutMs!==void 0;if(!(s?await Id(n.workerStartupTimeoutMs):await Pd()))return s||await Fd(),{continue:!0,reason:"worker_unreachable",[jr]:!0};let o={method:e};t!==void 0&&(o.headers={"Content-Type":"application/json"},o.body=JSON.stringify(t)),n.timeoutMs!==void 0&&(o.timeoutMs=n.timeoutMs);let a;try{a=await le(r,o)}catch(l){if(!s)throw l;return d.debug("SYSTEM","Worker unavailable for best-effort hook call",{error:l instanceof Error?l.message:String(l)}),{continue:!0,reason:"worker_unreachable",[jr]:!0}}if(!a.ok){let l=await a.text().catch(()=>"");if(await Lo(),a.status===429||a.status>=500)return d.warn("SYSTEM",`Worker API ${e} ${r} returned ${a.status}; skipping hook API call`,{body:l.substring(0,200)}),{continue:!0,reason:`worker_api_${a.status}`,[jr]:!0};let u=l;try{u=JSON.parse(l)}catch{}return u}await Lo();let c=await a.text();if(c.length!==0)try{return JSON.parse(c)}catch{return c}}var ea=_e(require("path"),1),ta=require("child_process");At();A();var zr=require("fs"),ct=_e(require("path"),1);A();var xt={isWorktree:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function Qo(r){let e=ct.default.join(r,".git"),t;try{t=(0,zr.statSync)(e)}catch(u){return u instanceof Error&&u.code!=="ENOENT"&&d.warn("GIT","Unexpected error checking .git",{error:u instanceof Error?u.message:String(u)}),xt}if(!t.isFile())return xt;let n;try{n=(0,zr.readFileSync)(e,"utf-8").trim()}catch(u){return d.warn("GIT","Failed to read .git file",{error:u instanceof Error?u.message:String(u)}),xt}let s=n.match(/^gitdir:\s*(.+)$/);if(!s)return xt;let o=ct.default.resolve(ct.default.dirname(e),s[1]).match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(!o)return xt;let a=o[1],c=ct.default.basename(r),l=ct.default.basename(a);return{isWorktree:!0,worktreeName:c,parentRepoPath:a,parentProjectName:l}}var Zo="unknown-project";function ra(r){try{return(0,ta.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.debug("PROJECT_NAME","git rev-parse failed, falling back to basename",{dir:r},t),null}}function kd(r,e=process.platform){if(!r||r.trim()==="")return d.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),Zo;let t=ae(r,e),s=ra(t)??t,i=ea.default.basename(s);if(i===""){if(process.platform==="win32"){let a=r.match(/^([A-Z]):\\/i);if(a){let l=`drive-${a[1].toUpperCase()}`;return d.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:l}),l}}return d.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),Zo}return i}function Ve(r,e=process.platform){let t=kd(r,e);if(!r)return{primary:t,parent:null,isWorktree:!1,allProjects:[t]};let n=ae(r,e),s=Qo(ra(n)??n);if(s.isWorktree&&s.parentProjectName){let i=`${s.parentProjectName}/${t}`;return{primary:i,parent:s.parentProjectName,isWorktree:!0,allProjects:[s.parentProjectName,i]}}return{primary:t,parent:null,isWorktree:!1,allProjects:[t]}}A();var ue=require("path");var na=require("path");At();A();function Dd(r){let e=ae(r.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return t=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${t}$`)}function Yr(r,e){if(!e||!e.trim())return!1;let t=r.replace(/\\/g,"/"),n=(0,na.basename)(t),s=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of s)try{let o=Dd(i);if(o.test(t)||o.test(n))return!0}catch(o){d.warn("PROJECT_NAME","Invalid exclusion pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}return!1}U();var Ld="plugins",Nd="cache",Ud="thedotmack",$d="claude-mem",Bd="plugin",Wd=(0,ue.join)(es,Ld,Nd,Ud,$d),jd=(0,ue.join)(nt,Bd);function xs(r,e){let t=(0,ue.normalize)(r),n=(0,ue.normalize)(e);if(t===n)return!0;let s=(0,ue.relative)(n,t);return s.length>0&&!s.startsWith("..")&&!(0,ue.isAbsolute)(s)}function Jr(r){if(process.env.CLAUDE_MEM_INTERNAL==="1")return!1;if(!r)return!0;if(xs(r,gr)||xs(r,Wd)||xs(r,jd))return!1;let e=be();return!Yr(r,e.CLAUDE_MEM_EXCLUDED_PROJECTS)}var sa="claude";function Hd(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function de(r){if(!r)return sa;let e=Hd(r);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:sa}A();var aa=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],ia=new RegExp(`<(${aa.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g");var oa=100;function Gd(r){let e=Object.fromEntries(aa.map(s=>[s,0]));ia.lastIndex=0;let t=0,n=r.replace(ia,(s,i)=>(e[i]=(e[i]??0)+1,t+=1,""));return t>oa&&d.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:t,maxAllowed:oa,contentLength:r.length}),{stripped:n.trim(),counts:e}}function Fs(r){return Gd(r).stripped}var Kd=["task-notification"],Vd=new RegExp(`^\\s*<(${Kd.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),qd=256*1024;function ca(r){return!r||r.length>qd?!1:Vd.test(r)}A();var zd=De(z.API_REQUEST),Pe=class extends Error{kind;status;cause;constructor(e,t,n={}){super(t),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Xr=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=Yd(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??zd}async startSession(e){let t=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",t)}async recordEvent(e){let t=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,t)}async endSession(e){if(!e.sessionId)throw new Pe("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e){return this.request("POST","/v1/context",this.buildSearchPayload(e))}async getJobStatus(e){if(!e)throw new Pe("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let t=e.content,n=e.kind??"manual",s=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,type:n,narrative:t,...s?{title:s}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:ks(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:ks(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:ks(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,t,n){if(!this.apiKey||!this.apiKey.trim())throw new Pe("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let s=`${this.baseUrl}${t}`,i={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(i.body=JSON.stringify(n));let o;try{o=await Ms(s,i,this.timeoutMs)}catch(c){let l=c instanceof Error?c.message:String(c),u=/timed out|timeout/i.test(l);throw new Pe(u?"timeout":"transport",`Server ${e} ${t} failed: ${l}`,{cause:c})}if(!o.ok){let c=await o.text().catch(()=>"");throw new Pe("http_error",`Server ${e} ${t} returned ${o.status}: ${Jd(c,200)}`,{status:o.status})}let a=await o.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){let l=c instanceof Error?c:new Error(String(c));throw new Pe("invalid_response",`Server ${e} ${t} returned non-JSON response`,{cause:l})}}};function la(r){return r instanceof Pe}function Yd(r){return r.replace(/\/+$/,"")}function ks(r){return typeof r=="string"?de(r):null}function Jd(r,e){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function Xd(){let e=(be().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Qd(){let r=be(),e=(...o)=>{for(let a of o){let c=(a??"").trim();if(c.length>0)return c}return""},t=e(r.CLAUDE_MEM_SERVER_URL,r.CLAUDE_MEM_SERVER_BETA_URL),n=e(r.CLAUDE_MEM_SERVER_API_KEY,r.CLAUDE_MEM_SERVER_BETA_API_KEY),s=e(r.CLAUDE_MEM_SERVER_PROJECT_ID,r.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!t)return d.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return d.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!s)return d.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let i={serverBaseUrl:t,apiKey:n};return{runtime:"server",client:new Xr(i),projectId:s,serverBaseUrl:t}}function ua(){if(Xd()!=="server")return{runtime:"worker"};let r=Qd();return r||{runtime:"worker"}}function da(r,e){d.warn("HOOK",`[server-fallback] reason=${r}`,e??{})}var Zd={executeWithWorkerFallback:qr,isWorkerFallback:Vr,loadFromFileOnce:be,resolveRuntimeContext:ua,logServerFallback:da,shouldTrackProject:Jr},Ne=Zd;var fa={async execute(r){let{sessionId:e,prompt:t}=r,n=r.cwd??process.cwd();if(!e)return d.warn("HOOK","session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"),{continue:!0,suppressOutput:!0,exitCode:ke.SUCCESS};if(!Ne.shouldTrackProject(n))return d.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};if(t&&ca(t))return d.debug("HOOK","session-init: skipping internal protocol payload",{preview:t.slice(0,80)}),{continue:!0,suppressOutput:!0};let s=!t||!t.trim()?"[media prompt]":t,i=Ve(n).primary,o=de(r.platform),a=Ne.loadFromFileOnce(),c=String(a.CLAUDE_MEM_SEMANTIC_INJECT).toLowerCase()==="true",l=Ne.resolveRuntimeContext();if(l.runtime==="server")try{return await ef(l,r,e,o,i,s),{continue:!0,suppressOutput:!0}}catch(h){if(la(h)&&h.isFallbackEligible())Ne.logServerFallback(h.kind,{status:h.status,message:h.message,route:"/v1/sessions/start"});else return d.error("HOOK","Server session-start failed (non-recoverable)",{error:h instanceof Error?h.message:String(h)}),{continue:!0,suppressOutput:!0,exitCode:ke.SUCCESS}}d.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:e,project:i});let u=await Ne.executeWithWorkerFallback("/api/sessions/init","POST",{contentSessionId:e,project:i,prompt:s,platformSource:o},o==="codex"?{workerStartupTimeoutMs:z.POST_SPAWN_WAIT,timeoutMs:2e3}:void 0);if(Ne.isWorkerFallback(u))return{continue:!0,suppressOutput:!0,exitCode:ke.SUCCESS};if(typeof u?.sessionDbId!="number")return d.failure("HOOK","Session initialization returned malformed response",{contentSessionId:e,project:i}),{continue:!0,suppressOutput:!0,exitCode:ke.SUCCESS};let f=u.sessionDbId,p=u.promptNumber;if(d.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:f,promptNumber:p,skipped:u.skipped,contextInjected:u.contextInjected}),d.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${e} | prompt#=${p} | sessionDbId=${f}`),u.skipped&&u.reason==="private")return d.info("HOOK",`INIT_COMPLETE | sessionDbId=${f} | promptNumber=${p} | skipped=true | reason=private`,{sessionId:f}),{continue:!0,suppressOutput:!0};let g="";if(c&&s&&s.length>=20&&s!=="[media prompt]"){let h=a.CLAUDE_MEM_SEMANTIC_INJECT_LIMIT||"5",m=await Ne.executeWithWorkerFallback("/api/context/semantic","POST",{q:s,project:i,limit:h,platformSource:o},o==="codex"?{workerStartupTimeoutMs:z.POST_SPAWN_WAIT,timeoutMs:2e3}:void 0);!Ne.isWorkerFallback(m)&&m?.context&&(d.debug("HOOK",`Semantic injection: ${m.count} observations for prompt`,{sessionId:f,count:m.count}),g=m.context)}return d.info("HOOK",`INIT_COMPLETE | sessionDbId=${f} | promptNumber=${p} | project=${i}`,{sessionId:f}),g?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:g}}:{continue:!0,suppressOutput:!0}}};async function ef(r,e,t,n,s,i){await r.client.startSession({projectId:r.projectId,externalSessionId:t,contentSessionId:t,agentId:e.agentId??null,agentType:e.agentType??null,platformSource:n,metadata:{project:s,prompt:i}}),d.info("HOOK","session-init: server session started",{contentSessionId:t,project:s})}A();var pa={async execute(r){let{sessionId:e,cwd:t,filePath:n,edits:s}=r,i=de(r.platform);if(!n)throw new Error("fileEditHandler requires filePath");if(d.dataIn("HOOK",`FileEdit: ${n}`,{editCount:s?.length??0}),!t)throw new Error(`Missing cwd in FileEdit hook input for session ${e}, file ${n}`);if(!Jr(t))return d.debug("HOOK","Project excluded from tracking, skipping file edit observation",{cwd:t,filePath:n}),{continue:!0,suppressOutput:!0,exitCode:ke.SUCCESS};let o=await qr("/api/sessions/observations","POST",{contentSessionId:e,platformSource:i,tool_name:"write_file",tool_input:{filePath:n,edits:s},tool_response:{success:!0},cwd:t});return Vr(o)?{continue:!0,suppressOutput:!0,exitCode:ke.SUCCESS}:(d.debug("HOOK","File edit observation sent successfully",{filePath:n}),{continue:!0,suppressOutput:!0})}};U();A();var ne=require("fs"),Qr=require("path");A();A();U();var Sy=L.settings();function ga(r,e){let t="<claude-mem-context>",n="</claude-mem-context>";if(!r)return`${t}
|
|
${e}
|
|
${n}`;let s=r.indexOf(t),i=r.indexOf(n);return s!==-1&&i!==-1?r.substring(0,s)+`${t}
|
|
${e}
|
|
${n}`+r.substring(i+n.length):r+`
|
|
|
|
${t}
|
|
${e}
|
|
${n}`}A();function ha(r,e){if(!r)return;let t=(0,Qr.resolve)(r);if(t.includes("/.git/")||t.includes("\\.git\\")||t.endsWith("/.git")||t.endsWith("\\.git"))return;let n=(0,Qr.dirname)(r);(0,ne.existsSync)(n)||(0,ne.mkdirSync)(n,{recursive:!0});let s="";(0,ne.existsSync)(r)&&(s=(0,ne.readFileSync)(r,"utf-8"));let i=`# Memory Context
|
|
|
|
${e}`,o=ga(s,i),a=`${r}.tmp`;try{(0,ne.writeFileSync)(a,o),(0,ne.renameSync)(a,r)}catch(c){d.error("AGENTS_MD","Failed to write AGENTS.md",{agentsPath:r},c instanceof Error?c:new Error(String(c)))}}A();function tf(r){let e=r.trim().replace(/^\$\.?/,"");if(!e)return[];let t=[],n=e.split(".");for(let s of n){let i=/([^[\]]+)|\[(\d+)\]/g,o;for(;(o=i.exec(s))!==null;)o[1]?t.push(o[1]):o[2]&&t.push(parseInt(o[2],10))}return t}function Ds(r,e){if(!e)return;let t=tf(e),n=r;for(let s of t){if(n==null)return;n=n[s]}return n}function ma(r){return r==null||r===""}function _a(r,e){if(r.startsWith("$watch.")){let t=r.slice(7);return e.watch[t]}if(r.startsWith("$schema.")){let t=r.slice(8);return e.schema[t]}if(r.startsWith("$session.")){let t=r.slice(9);return e.session?e.session[t]:void 0}if(r==="$cwd")return e.watch.workspace;if(r==="$project")return e.watch.project}function lt(r,e,t){if(r!==void 0){if(typeof r=="string"){let n=_a(r,t);return n!==void 0?n:Ds(e,r)}if(r.coalesce&&Array.isArray(r.coalesce))for(let n of r.coalesce){let s=lt(n,e,t);if(!ma(s))return s}if(r.path){let n=_a(r.path,t);if(n!==void 0)return n;let s=Ds(e,r.path);if(!ma(s))return s}if(r.value!==void 0)return r.value;if(r.default!==void 0)return r.default}}function Ea(r,e,t){let n={};if(!r)return n;for(let[s,i]of Object.entries(r))n[s]=lt(i,e,t);return n}function ya(r,e,t){if(!e)return!0;let n=e.path||t.eventTypePath||"type",s=n?Ds(r,n):void 0,i=s==null||s==="";if(e.exists!==void 0&&(e.exists&&i||!e.exists&&!i)||e.equals!==void 0&&s!==e.equals||e.not_equals!==void 0&&s===e.not_equals||e.in&&Array.isArray(e.in)&&!e.in.includes(s)||e.not_in&&Array.isArray(e.not_in)&&e.not_in.includes(s)||e.contains!==void 0&&(typeof s!="string"||!s.includes(e.contains))||e.not_contains!==void 0&&typeof s=="string"&&s.includes(e.not_contains))return!1;if(e.regex)try{if(!new RegExp(e.regex).test(String(s??"")))return!1}catch(o){return d.debug("WORKER","Invalid regex in match rule",{regex:e.regex},o instanceof Error?o:void 0),!1}return!0}A();U();A();var Zr=class{static checkUserPromptPrivacy(e,t,n,s,i,o){let a=e.getUserPrompt(t,n,i);return a===null?(d.warn("HOOK",`${s}: no user_prompts row for prompt #${n} \u2014 ingesting anyway (session-init likely raced worker boot; see #2794/#2795)`,{sessionId:i,contentSessionId:t,promptNumber:n,...o}),{allow:!0,prompt:""}):a.trim()===""?(d.debug("HOOK",`Skipping ${s} - user prompt was entirely private`,{sessionId:i,promptNumber:n,...o}),{allow:!1,reason:"private"}):{allow:!0,prompt:a}}};var ut=require("path");function ba(){let r=rf();return async e=>{for(let t of e)t.module=r(t.filename);return e}}function rf(r=process.argv[1]?(0,ut.dirname)(process.argv[1]):process.cwd(),e=ut.sep==="\\"){let t=e?Sa(r):r;return n=>{if(!n)return;let s=e?Sa(n):n,{dir:i,base:o,ext:a}=ut.posix.parse(s);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,-1*a.length));let c=decodeURIComponent(o);i||(i=".");let l=i.lastIndexOf("/node_modules");if(l>-1)return`${i.slice(l+14).replace(/\//g,".")}:${c}`;if(i.startsWith(t)){let u=i.slice(t.length+1).replace(/\//g,".");return u?`${u}:${c}`:c}return c}}function Sa(r){return r.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var k={};Xl(k,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>_n,DOMExceptionCoercer:()=>Qs,EXCEPTION_STEP_INTERNAL_FIELDS:()=>jt,ErrorCoercer:()=>Ut,ErrorEventCoercer:()=>Zs,ErrorPropertiesBuilder:()=>Nt,EventCoercer:()=>ei,ExceptionStepsBuffer:()=>si,ObjectCoercer:()=>Bt,PrimitiveCoercer:()=>Wt,PromiseRejectionEventCoercer:()=>ti,ReduceableCache:()=>ri,StringCoercer:()=>$t,chromeStackLineParser:()=>zs,createDefaultStackParser:()=>Xs,createStackParser:()=>lc,geckoStackLineParser:()=>Ys,getInjectedReleaseId:()=>hp,getUtf8ByteLength:()=>dc,nodeStackLineParser:()=>nc,opera10StackLineParser:()=>ec,opera11StackLineParser:()=>tc,resolveExceptionStepsConfig:()=>ni,reverseAndStripFrames:()=>cc,stripReservedExceptionStepFields:()=>fp,winjsStackLineParser:()=>Za});var G=(function(r){return r.AnonymousId="anonymous_id",r.DistinctId="distinct_id",r.Props="props",r.EnablePersonProcessing="enable_person_processing",r.PersonMode="person_mode",r.FeatureFlagDetails="feature_flag_details",r.FeatureFlags="feature_flags",r.FeatureFlagPayloads="feature_flag_payloads",r.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",r.BootstrapFeatureFlags="bootstrap_feature_flags",r.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",r.OverrideFeatureFlags="override_feature_flags",r.Queue="queue",r.AiQueue="ai_queue",r.AiCaptureQueue="ai_capture_queue",r.LogsQueue="logs_queue",r.OptedOut="opted_out",r.SessionId="session_id",r.SessionStartTimestamp="session_start_timestamp",r.SessionLastTimestamp="session_timestamp",r.PersonProperties="person_properties",r.GroupProperties="group_properties",r.InstalledAppBuild="installed_app_build",r.InstalledAppVersion="installed_app_version",r.SessionReplay="session_replay",r.PushRegistered="push_registered",r.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",r.SurveyLastSeenDate="survey_last_seen_date",r.SurveysInProgress="surveys_in_progress",r.SurveysSeen="surveys_seen",r.Surveys="surveys",r.RemoteConfig="remote_config",r.FlagsEndpointWasHit="flags_endpoint_was_hit",r.DeviceId="device_id",r})({});function Ue(r){let e=[];return JSON.stringify(r,function(t,n){if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;e.length>0&&e[e.length-1]!==this;)e.pop();if(e.includes(n))return"[Circular]";e.push(n)}return n}})??"null"}var nf=Array.isArray,va=Object.prototype,Ly=va.hasOwnProperty,en=va.toString,q=nf||function(r){return en.call(r)==="[object Array]"};var Ft=r=>r===Object(r)&&!q(r);var Ie=r=>r===void 0,$=r=>en.call(r)=="[object String]",Ls=r=>$(r)&&r.trim().length===0,Ns=r=>r===null,se=r=>Ie(r)||Ns(r),dt=r=>en.call(r)=="[object Number]"&&r===r;var Aa=r=>en.call(r)==="[object Boolean]";function tn(r){return r===null||typeof r!="object"}function qe(r,e){return Object.prototype.toString.call(r)===`[object ${e}]`}function $e(r){switch(Object.prototype.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Ia(r,Error)}}function Ta(r){return qe(r,"ErrorEvent")}function ft(r){return"u">typeof Event&&Ia(r,Event)}function Pa(r){return qe(r,"Object")}function Ia(r,e){try{return r instanceof e}catch{return!1}}var sf=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterestbot","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Ra=function(r,e=[]){if(!r)return!1;let t=r.toLowerCase();return sf.concat(e).some(n=>{let s=n.toLowerCase();return t.indexOf(s)!==-1})};function kt(r,e,t,n,s){return e>t&&(n.warn("min cannot be greater than max."),e=t),dt(r)?r>t?(n.warn(" cannot be greater than max: "+t+". Using max value instead."),t):r<e?(n.warn(" cannot be less than min: "+e+". Using min value instead."),e):r:(n.warn(" must be a number. using max or fallback. max: "+t+", fallback: "+s),kt(s??t,e,t,n))}var of=864e5,af=1,cf=10;function Ca(r={}){return{refillRate:r.exceptionRateLimiterRefillRate??r.__exceptionRateLimiterRefillRate??af,bucketSize:r.exceptionRateLimiterBucketSize??r.__exceptionRateLimiterBucketSize??cf}}var rn=class{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=kt(e.bucketSize,0,100,e._logger),this._refillRate=kt(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=kt(e.refillInterval,0,of,e._logger)}_applyRefill(e,t){let n=t-e.lastAccess,s=Math.floor(n/this._refillInterval);if(s>0){let i=s*this._refillRate;e.tokens=Math.min(e.tokens+i,this._bucketSize),e.lastAccess=e.lastAccess+s*this._refillInterval}}consumeRateLimit(e){let t=Date.now(),n=String(e),s=this._buckets[n];return s?this._applyRefill(s,t):(s={tokens:this._bucketSize,lastAccess:t},this._buckets[n]=s),s.tokens===0?!0:(s.tokens--,s.tokens===0&&this._onBucketRateLimited?.(e),s.tokens===0)}stop(){this._buckets={}}};var nn="0123456789abcdef",sn=class r{constructor(e){this.bytes=e}static ofInner(e){if(e.length===16)return new r(e);throw new TypeError("not 128-bit length")}static fromFieldsV7(e,t,n,s){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(s)||e<0||t<0||n<0||s<0||e>0xffffffffffff||t>4095||n>1073741823||s>4294967295)throw new RangeError("invalid field value");let i=new Uint8Array(16);return i[0]=e/2**40,i[1]=e/2**32,i[2]=e/2**24,i[3]=e/2**16,i[4]=e/256,i[5]=e,i[6]=112|t>>>8,i[7]=t,i[8]=128|n>>>24,i[9]=n>>>16,i[10]=n>>>8,i[11]=n,i[12]=s>>>24,i[13]=s>>>16,i[14]=s>>>8,i[15]=s,new r(i)}static parse(e){let t;switch(e.length){case 32:t=/^[0-9a-f]{32}$/i.exec(e)?.[0];break;case 36:t=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;case 38:t=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e)?.slice(1,6).join("");break;case 45:t=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;default:break}if(t){let n=new Uint8Array(16);for(let s=0;s<16;s+=4){let i=parseInt(t.substring(2*s,2*s+8),16);n[s+0]=i>>>24,n[s+1]=i>>>16,n[s+2]=i>>>8,n[s+3]=i}return new r(n)}throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let t=0;t<this.bytes.length;t++)e+=nn.charAt(this.bytes[t]>>>4),e+=nn.charAt(15&this.bytes[t]),(t===3||t===5||t===7||t===9)&&(e+="-");return e}toHex(){let e="";for(let t=0;t<this.bytes.length;t++)e+=nn.charAt(this.bytes[t]>>>4),e+=nn.charAt(15&this.bytes[t]);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(t=>t===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(t=>t===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new r(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let t=0;t<16;t++){let n=this.bytes[t]-e.bytes[t];if(n!==0)return Math.sign(n)}return 0}},Us=class{constructor(e){this.timestamp=0,this.counter=0,this.random=e??lf()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,t){let n=this.generateOrAbortCore(e,t);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(e,t)),n}generateOrAbortCore(e,t){if(!Number.isInteger(e)||e<1||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(t<0||t>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+t>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return sn.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 e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,sn.ofInner(e)}},lf=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),Ma,B=()=>uf().toString(),uf=()=>(Ma||(Ma=new Us)).generate();var on=class{add(e){let t=B(),n=++this.nextId;return this.promiseByIds[t]={id:n,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length;for(;t>0;)await Promise.all(e),e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length}getPromises(e=[],t=this.nextId){let n=new Set(e);return Object.values(this.promiseByIds).filter(s=>s.id<=t&&!n.has(s.promise)).map(s=>s.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}};function df(r=console){return{log:r.log.bind(r),warn:r.warn.bind(r),error:r.error.bind(r),debug:r.debug.bind(r)}}var Oa=(r,e,t)=>{function n(i,...o){e(()=>{let a=t[i];a(r,...o)})}return{debug:(...i)=>{n("debug",...i)},info:(...i)=>{n("log",...i)},warn:(...i)=>{n("warn",...i)},error:(...i)=>{n("error",...i)},critical:(...i)=>{t.error(r,...i)},createLogger:i=>Oa(`${r} ${i}`,e,t)}},ff=r=>r();function xa(r,e=ff){return Oa(r,e,df())}var gt="Mobile",cn="iOS",pt="Android",Na="Tablet",Xy=pt+" "+Na;var gf="Apple",Qy=gf+" Watch",Ua="Safari",ln="BlackBerry",$a="Samsung",hf=$a+"Browser",mf=$a+" Internet",un="Chrome",_f=un+" OS",Ef=un+" "+cn,Ba="Internet Explorer",yf=Ba+" "+gt,Ws="Opera",Zy=Ws+" Mini",Wa="Edge",Sf="Microsoft "+Wa,js="Firefox",bf=js+" "+cn,Hs="Nintendo",Gs="PlayStation",an="Xbox",wf=pt+" "+gt,vf=gt+" "+Ua,Dt="Windows",Af=Dt+" Phone";var ja="Generic",eS=ja+" "+gt.toLowerCase(),tS=ja+" "+Na.toLowerCase(),Tf="Konqueror",Pf="Oculus Browser",Fa="Vivaldi",If="Yandex",ka="Whale",Rf="DuckDuckGo",Cf="Pale Moon",Da="Waterfox",La="Brave",Ha="Claude",Ga="Codex",Ka="ChatGPT",Mf="Google Search App",M="(\\d+(\\.\\d+)?)",$s=new RegExp("Version/"+M),Bs=new RegExp("("+Ha+"|"+Ga+"|"+Ka+")\\/"+M);var rS=new RegExp(an,"i"),nS=new RegExp(Gs+" \\w+","i"),sS=new RegExp(Hs+" \\w+","i"),Of=new RegExp(ln+"|PlayBook|BB10","i"),xf={"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 iS={[yf]:[new RegExp("rv:"+M)],[Sf]:[new RegExp(Wa+"?\\/"+M)],[un]:[new RegExp("("+un+"|CrMo)\\/"+M)],[Ef]:[new RegExp("CriOS\\/"+M)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+M)],[Ua]:[$s],[vf]:[$s],[Ws]:[new RegExp("("+Ws+"|OPR)\\/"+M)],[js]:[new RegExp(js+"\\/"+M)],[bf]:[new RegExp("FxiOS\\/"+M)],[Tf]:[new RegExp("Konqueror[:/]?"+M,"i")],[ln]:[new RegExp(ln+" "+M),$s],[wf]:[new RegExp("android\\s"+M,"i")],[mf]:[new RegExp(hf+"\\/"+M)],[Pf]:[new RegExp("OculusBrowser\\/"+M)],[Fa]:[new RegExp(Fa+"\\/"+M)],[If]:[new RegExp("YaBrowser\\/"+M)],[ka]:[new RegExp(ka+"\\/"+M)],[La]:[new RegExp(La+"\\/"+M)],[Ha]:[Bs],[Ga]:[Bs],[Ka]:[Bs],[Rf]:[new RegExp("(DuckDuckGo|Ddg)\\/"+M)],[Cf]:[new RegExp("PaleMoon\\/"+M)],[Da]:[new RegExp(Da+"\\/"+M)],[Mf]:[new RegExp("GSA\\/"+M)],[Ba]:[new RegExp("(rv:|MSIE )"+M)],Mozilla:[new RegExp("rv:"+M)]};var oS=[[new RegExp(an+"; "+an+" (.*?)[);]","i"),r=>[an,r&&r[1]||""]],[new RegExp(Hs,"i"),[Hs,""]],[new RegExp(Gs,"i"),[Gs,""]],[Of,[ln,""]],[new RegExp(Dt,"i"),(r,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Af,""];if(new RegExp(gt).test(e)&&!/IEMobile\b/.test(e))return[Dt+" "+gt,""];let t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){let n=t[1],s=xf[n]||"";return/arm/i.test(e)&&(s="RT"),[Dt,s]}return[Dt,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,r=>{if(r&&r[3]){let e=[r[3],r[4],r[5]||"0"];return[cn,e.join(".")]}return[cn,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,r=>{let e="";return r&&r.length>=3&&(e=Ie(r[2])?r[3]:r[2]),["watchOS",e]}],[new RegExp("("+pt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+pt+")","i"),r=>{if(r&&r[2]){let e=[r[2],r[3],r[4]||"0"];return[pt,e.join(".")]}return[pt,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,r=>{let e=["Mac OS X",""];if(r&&r[1]){let t=[r[1],r[2],r[3]||"0"];e[1]=t.join(".")}return e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[_f,""]],[/Linux|debian/i,["Linux",""]]];var dn="[Circular]",fn="[Truncated]",X="[Unserializable]",Va="[Function]",lS=Date.prototype.getTime,uS=Date.prototype.toISOString;function fe(r){let e="";for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n>=55296&&n<=56319){let s=r.charCodeAt(t+1);s>=56320&&s<=57343?(e+=r[t]+r[t+1],t++):e+="\uFFFD"}else e+=n>=56320&&n<=57343?"\uFFFD":r[t]}return e}function Re(r,e){if(!e)return r;let t=[];try{t=Object.keys(e)}catch{t=[]}for(let n of t){let s;try{s=e[n]}catch{s=X}Object.defineProperty(r,n,{value:s,enumerable:!0,writable:!0,configurable:!0})}return r}function Ks(r,e=Date.now()){if(typeof r!="string"||!r)return;let t=r.trim(),n=/^\d+\s*,/.test(t)?t.slice(0,t.indexOf(",")).trim():t;if(/^\d+$/.test(n)){let o=1e3*Math.min(Number(n),300);return o>0?o:void 0}if(!/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*[ ,]/.test(n))return;let s=/^\w{3} \w{3} /.test(n)?n+" GMT":n,i=Date.parse(s)-e;if(!(!Number.isFinite(i)||i<=0))return Math.min(i,3e5)}var ze=class{record(e){if(e.kind==="too-large")return;if(e.kind!=="retry-later")return void this.reset();if(!e.retryAfterMs)return;let t=this.isOpen(),n=Date.now(),s=Math.min(e.retryAfterMs,3e5);if(!t){this._installedAt=n,this._until=n+s;return}this._until=Math.max(this._until,Math.min(n+s,this._installedAt+3e5))}remainingMs(){let e=Date.now();if(e<this._installedAt-5e3)return this.reset(),0;let t=Math.min(3e5,Math.max(0,this._until-e));return t===0&&this.reset(),t}isOpen(){return this.remainingMs()>0}reset(){this._until=0,this._installedAt=0}constructor(){this._until=0,this._installedAt=0}};var qa="utf8",Ff=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function kf(r){return typeof r=="string"&&Ff.test(r)}function Ye(r,e){return kf(r)?r:e()}function ht(r,e){let t=new Error(e);try{Object.defineProperty(t,"name",{value:r,writable:!0,enumerable:!0,configurable:!0})}catch{}return t}function za(r){return r?.replace(/\/+$/,"")}async function Ya(r,e){let t=null;for(let n=0;n<e.retryCount+1;n++){n>0&&await new Promise(s=>setTimeout(s,e.retryDelay));try{return await r()}catch(s){if(t=s,!e.retryCheck(s))throw s}}throw t}function Vs(){return new Date().toISOString()}function W(r,e){let t=setTimeout(r,e);return t?.unref&&t?.unref(),t}async function Be(r,e,t){let n;try{return await Promise.race([r,new Promise((s,i)=>{n=W(()=>{try{t?.(),s()}catch(o){i(o)}},e)})])}finally{clearTimeout(n)}}var Ja=r=>r&&typeof r.then=="function";function Lt(r){return Promise.all(r.map(e=>(e??Promise.resolve()).then(t=>({status:"fulfilled",value:t}),t=>({status:"rejected",reason:t}))))}var pn,Xa,gn;function Qa(r){let e=globalThis._posthogChunkIds;if(!e)return;let t=Object.keys(e);return gn&&t.length===Xa||(Xa=t.length,gn=t.reduce((n,s)=>{pn||(pn={});let i=pn[s];if(i)n[i[0]]=i[1];else{let o=r(s);for(let a=o.length-1;a>=0;a--){let l=o[a]?.filename,u=e[s];if(l&&u){n[l]=u,pn[s]=[l,u];break}}}return n},{})),gn}var qs=50,Df=1e3,Lf=100,Nf=4,Nt=class{constructor(e,t,n=[]){this.coercers=e,this.stackParser=t,this.modifiers=n}buildFromUnknown(e,t={}){let s=t&&t.mechanism||{handled:!0,type:"generic"},o=this.buildCoercingContext(s,t,0).apply(e),a=this.buildParsingContext(t),c=this.parseStacktrace(o,a);return{$exception_list:this.convertToExceptionList(c,s),$exception_level:"error"}}async modifyFrames(e){for(let t of e)t.stacktrace&&t.stacktrace.frames&&q(t.stacktrace.frames)&&(t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames));return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let n;e.cause!=null&&(n=this.parseStacktrace(e.cause,t));let s;if(e.stack!=""&&e.stack!=null)try{s=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)}catch{}return{...e,cause:n,stack:s,errors:e.errors?.map(i=>this.parseStacktrace(i,t))}}applyChunkIds(e,t){return e.map(n=>(n.filename&&t&&(n.chunk_id=t[n.filename]),n))}applyCoercers(e,t){for(let n of this.coercers)if(n.match(e))return n.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let n of this.modifiers)t=await n(t);return t}convertToExceptionList(e,t){let n=[],s=(i,o,a)=>{let c=n.length,l=o===void 0?{type:typeof t.type=="string"&&t.type.length>0?t.type:"generic",...typeof t.handled=="boolean"?{handled:t.handled}:t.handled===void 0?{handled:!0}:{},synthetic:typeof t.synthetic=="boolean"?t.synthetic:i.synthetic,exception_id:c}:{type:"chained",source:a,synthetic:i.synthetic,exception_id:c,parent_id:o},u={type:i.type,value:i.value,mechanism:l};i.stack&&(u.stacktrace={type:"raw",frames:i.stack}),n.push(u),i.cause&&s(i.cause,c,"cause");for(let f of i.errors??[])s(f,c,"member")};return s(e),n}buildParsingContext(e){return{chunkIdMap:Qa(this.stackParser),skipFirstLines:e.skipFirstLines??1}}getAggregateErrors(e){try{if($e(e)){let t=Object.getPrototypeOf(e);for(let n=0;t&&n<Lf;n++){let s=Object.getOwnPropertyDescriptor(t,"constructor")?.value;if(typeof s=="function"&&s.name==="AggregateError"){let i=e.errors;return q(i)?i:void 0}t=Object.getPrototypeOf(t)}}}catch{}}buildCoercingContext(e,t,n=0){let s=0,i=0,o=!1,a=new Set,c=[],l={},u=(g,h,m=0)=>{let E=f(h,m),_=E.apply;if(E.apply=y=>{c.push(g);try{return _(y)}finally{c.pop()}},m>Nf||m>0&&c.indexOf(g)!==-1)return this.coerceFallback(E);let S=typeof g=="object"&&g!==null||typeof g=="function";if(m===0&&s>=qs||S&&a.has(g))return;S&&a.add(g),m===0&&s++;let P=this.getAggregateErrors(g);o||=!!P;let T;try{if(T=this.applyCoercers(g,E),!T)throw l}catch(y){if(y===l){m===0&&s--;return}if(!o)throw y;T=this.coerceFallback(E)}if(!P||s>=qs)return T;let D;try{D=P.length}catch{return T}if(!Number.isInteger(D)||D<0||D>4294967295)return T;let K=[];for(let y=0;s<qs&&i<Df&&y<D;y++){i++;let w;try{w=E.next(P[y])}catch{s++,w=this.coerceFallback(f(h+1))}w&&K.push(w)}return{...T,errors:K}},f=(g,h=0)=>({...t,syntheticException:g==0?t.syntheticException:void 0,mechanism:g==0?e:{},apply:m=>{let E=u(m,g,h+1);if(!E)throw l;return E},next:m=>u(m,g+1)}),p=f(n);return{...p,apply:g=>u(g,n)??this.coerceFallback(p)}}};var N="?",Uf="<anonymous>",$f=/^([a-z][a-z0-9.+-]+):/i,Bf=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function Wf(r){if(!r||r===Uf)return!1;let e=$f.exec(r);return!e||Bf.includes(e[1].toLowerCase())}function pe(r,e,t,n,s){let i={platform:r,filename:e,function:t==="<anonymous>"?N:t,in_app:Wf(e)};return Ie(n)||(i.lineno=n),Ie(s)||(i.colno=s),i}var hn=(r,e)=>{let t=r.indexOf("safari-extension")!==-1,n=r.indexOf("safari-web-extension")!==-1;return t||n?[r.indexOf("@")!==-1?r.split("@")[0]:N,t?`safari-extension:${e}`:`safari-web-extension:${e}`]:[r,e]};var jf=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Hf=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Gf=/\((\S*)(?::(\d+))(?::(\d+))\)/,zs=(r,e)=>{let t=jf.exec(r);if(t){let[,s,i,o]=t;return pe(e,s,N,+i,+o)}let n=Hf.exec(r);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Gf.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[i,o]=hn(n[1]||N,n[2]);return pe(e,o,i,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var Kf=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Vf=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Ys=(r,e)=>{let t=Kf.exec(r);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){let o=Vf.exec(t[3]);o&&(t[1]=t[1]||"eval",t[3]=o[1],t[4]=o[2],t[5]="")}let s=t[3],i=t[1]||N;return[i,s]=hn(i,s),pe(e,s,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}};var qf=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Za=(r,e)=>{let t=qf.exec(r);return t?pe(e,t[2],t[1]||N,+t[3],t[4]?+t[4]:void 0):void 0};var zf=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,ec=(r,e)=>{let t=zf.exec(r);return t?pe(e,t[2],t[3]||N,+t[1]):void 0},Yf=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,tc=(r,e)=>{let t=Yf.exec(r);return t?pe(e,t[5],t[3]||t[4]||N,+t[1],+t[2]):void 0};var Jf=/^\s*[-]{4,}$/,Xf=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,Qf=/^Promise\.(?:all|any)$/,Zf=/^index \d+$/,ep="node:internal/promise",nc=(r,e)=>{let t=r.match(Xf);if(t){let n,s,i,o,a;if(t[1]){i=t[1];let u=i.lastIndexOf(".");if(i[u-1]==="."&&u--,u>0){n=i.slice(0,u),s=i.slice(u+1);let f=n.indexOf(".Module");f>0&&(i=i.slice(f+1),n=n.slice(0,f))}o=void 0}s&&(o=n,a=s),s==="<anonymous>"&&(a=void 0,i=void 0),i===void 0&&(a=a||N,i=o?`${o}.${a}`:a);let c=t[2]?.startsWith("file://")?t[2].slice(7):t[2],l=t[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&t[5]&&!l&&(c=t[5]),Qf.test(i)&&Zf.test(c||"")&&(c=ep),{filename:c?decodeURI(c):void 0,module:void 0,function:i,lineno:rc(t[3]),colno:rc(t[4]),in_app:tp(c||"",l),platform:e}}if(r.match(Jf))return{filename:r,platform:e}};function tp(r,e=!1){return!(e||r&&!r.startsWith("/")&&!r.match(/^[A-Z]:/)&&!r.startsWith(".")&&!r.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&r!==void 0&&!r.includes("node_modules/")}function rc(r){return parseInt(r||"",10)||void 0}var sc=/\(error: (.*)\)/,ic=50,rp=10,np=1e3;function Js(r,e){return r.filename===e.filename&&r.function===e.function&&r.module===e.module&&r.lineno===e.lineno&&r.colno===e.colno}function sp(r){for(let e=1;e<=rp;e++){let t=r.length-2*e;if(t<0)break;let n=!0;for(let s=0;s<e;s++){let i=r[t+s];if(!Js(i,r[t+e+s])){n=!1;break}}if(n){for(let s=0;s<e;s++)r[t+s]=r[t+e+s];return r.length=t+e,{start:t,length:e}}}}function ip(r,e){let t=e.start+e.length,n=ac(r,e);n&&r.splice(t+n===r.length?t:e.start,n)}function oc(r,e){let t=e.start;for(;t>0&&Js(r[t-1],r[t-1+e.length]);)t--;return e.start-t}function ac(r,e){let t=e.start+e.length,n=t;for(;n<r.length&&Js(r[n],r[n-e.length]);)n++;return n-t}function op(r,e){let t=e[0],n=r.length-(t?oc(r,t):0);for(let s of e)n-=ac(r,s);return n}function ap(r){let e=r.map(n=>`${n.function}|${n.filename}|${n.lineno}|${n.colno}|${n.module}`),t=0;for(let n=1;n<e.length;n++)cp(e,n,t)&&(t=n);r.push(...r.splice(0,t))}function cp(r,e,t){for(let n=0;n<r.length;n++){let s=r[(e+n)%r.length],i=r[(t+n)%r.length];if(s!==i)return s<i}return!1}function cc(r){if(!r.length)return[];let e=Array.from(r);return e.reverse(),e.slice(0,ic).map(t=>({...t,filename:t.filename||lp(e).filename,function:t.function||N}))}function lp(r){return r[r.length-1]||{}}function Xs(){return lc("web:javascript",zs,Ys)}function lc(r,...e){return(t,n=0)=>{let s=[],i=t.split(`
|
|
`),o=Math.min(i.length,n+np),a=[];for(let u=n;u<o;u++){let f=i[u];if(f.length>1024)continue;let p=sc.test(f)?f.replace(sc,"$1"):f;if(!p.match(/\S*Error: /)){for(let g of e){let h=g(p,r);if(h){s.push(h);let m=sp(s);if(m){for(let E=a.length-1;E>=0;E--){let _=a[E];if(_.start+_.length<=m.start)break;a.pop()}a.push(m)}break}}if(op(s,a)>=ic)break}}let c=[...a].sort((u,f)=>f.start-u.start),l=c[c.length-1];if(l){let u=oc(s,l);s.splice(l.start-u,u);for(let f of c)f.start-=u}for(let u of c)ip(s,u);return a.some(u=>u.start===0&&s.length===u.length)&&ap(s),cc(s)}}var Qs=class{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let n=$(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:n?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){let t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?`${t}: ${e.message}`:t}isDOMException(e){return qe(e,"DOMException")}isDOMError(e){return qe(e,"DOMError")}};var Ut=class{match(e){return $e(e)}coerce(e,t){let n=this.getStack(e),s=n===void 0?t.syntheticException?.stack:void 0,i=!!s;return{type:this.getType(e),value:this.getMessage(e,t),stack:n??s,cause:e.cause?t.next(e.cause):void 0,synthetic:i}}getType(e){return e.name||e.constructor.name}getMessage(e,t){let n=e.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(e){try{let t=e.stacktrace;if(typeof t=="string"&&t.length>0)return t;let n=e.stack;return typeof n=="string"&&n.length>0?n:void 0}catch{return}}};var Zs=class{match(e){if(!Ta(e))return!1;let t=e;return t.error!=null||this._hasUsableMessage(t)}coerce(e,t){if(e.error!=null)return t.apply(e.error);let n=t.apply(e.message);return{...n,stack:this._buildLocationStack(e)??n.stack,synthetic:!0}}_hasUsableMessage(e){return $(e.message)&&e.message.length>0}_buildLocationStack(e){let t=e,n=t.lineno??0,s=t.colno??0;if(!(!$(t.filename)||t.filename.length===0)&&n!==0)return`Error
|
|
at ${t.filename}:${n}:${s}`}};var up=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,$t=class{match(e){return typeof e=="string"}coerce(e,t){let[n,s]=this.getInfos(e);return{type:n??"Error",value:s??e,stack:t.syntheticException?.stack,synthetic:!0}}getInfos(e){let t="Error",n=e,s=e.match(up);return s&&(t=s[1],n=s[2]),[t,n]}};var uc=["fatal","error","warning","log","info","debug"];function mn(r,e=40){let t=Object.keys(r);if(t.sort(),!t.length)return"[object has no keys]";for(let n=t.length;n>0;n--){let s=t.slice(0,n).join(", ");if(!(s.length>e))return n===t.length||s.length<=e?s:`${s.slice(0,e)}...`}return""}var Bt=class{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let n=this.getErrorPropertyFromObject(e);return n?t.apply(n):{type:this.getType(e),value:this.getValue(e),stack:this.getStack(e)??t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){if(ft(e))return e.constructor.name;let t="name"in e?e.name:void 0;return $(t)&&!Ls(t)?t:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){let s=`'${e.name}' captured as exception`;return"message"in e&&typeof e.message=="string"&&(s+=` with message: '${e.message}'`),s}if("message"in e&&typeof e.message=="string")return e.message;let t=this.getObjectClassName(e),n=mn(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(e){return $(e)&&!Ls(e)&&uc.indexOf(e)>=0}getStack(e){try{return $(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:$(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];if($e(n))return n}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}};var ei=class{match(e){return ft(e)}coerce(e,t){let n=e.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${mn(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Wt=class{match(e){return tn(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var ti=class{match(e){return qe(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!ft(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let n=this.getUnhandledRejectionReason(e);return tn(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:t.syntheticException?.stack,synthetic:!0}:t.apply(n)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}};var ri=class{constructor(e){this._maxSize=e,this._cache=new Map}get(e){let t=this._cache.get(e);if(t!==void 0)return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.set(e,t)}reduce(){for(;this._cache.size>=this._maxSize;){let e=this._cache.keys().next().value;e&&this._cache.delete(e)}}};var jt={MESSAGE:"$message",TIMESTAMP:"$timestamp"},dp=new Set([jt.MESSAGE,jt.TIMESTAMP]),_n={enabled:!0,max_bytes:32768};function ni(r){return r?{enabled:r.enabled??_n.enabled,max_bytes:pp(r.max_bytes,_n.max_bytes)}:{..._n}}function fp(r){if(!r)return{sanitizedProperties:{},droppedKeys:[]};let e=[];return{sanitizedProperties:Object.keys(r).reduce((n,s)=>dp.has(s)?(e.push(s),n):(n[s]=r[s],n),{}),droppedKeys:e}}var si=class{constructor(e){this._entries=[],this._totalBytes=0,this._config=ni(e)}setConfig(e){this._config=ni(e),this._trimToMaxBytes()}add(e){let t=gp(e);if(!t)return;let n=dc(t.json);n>this._config.max_bytes||(this._entries.push({step:t.step,bytes:n}),this._totalBytes+=n,this._trimToMaxBytes())}getAttachable(){return this._entries.map(e=>e.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 e=this._entries.shift();e&&(this._totalBytes-=e.bytes)}}};function pp(r,e){if(!dt(r)||r===1/0||r===-1/0)return e;let t=Math.floor(r);return t<0?e:t}function gp(r){let e;try{e=Ue(r)}catch{return}try{let t=JSON.parse(e);if(!Ft(t))return;let n=t,s=n[jt.MESSAGE],i=n[jt.TIMESTAMP];return!$(s)||s.trim().length===0||!$(i)&&!dt(i)?void 0:{step:n,json:e}}catch{return}}function dc(r){if("u">typeof TextEncoder)return new TextEncoder().encode(r).length;let e=encodeURIComponent(r),t=0;for(let n=0;n<e.length;n++)e[n]==="%"?(t+=1,n+=2):t+=1;return t}function hp(){let r=globalThis._posthogReleaseId;return typeof r=="string"&&r.length>0?r:void 0}var ii=r=>{if("flags"in r){let e=fc(r.flags),t=pc(r.flags);return{...r,featureFlags:e,featureFlagPayloads:t}}{let e=r.featureFlags??{},t=Object.fromEntries(Object.entries(r.featureFlagPayloads||{}).map(([s,i])=>[s,mt(i)])),n=Object.fromEntries(Object.entries(e).map(([s,i])=>[s,mp(s,i,t[s])]));return{...r,featureFlags:e,featureFlagPayloads:t,flags:n}}};function mp(r,e,t){return{key:r,enabled:typeof e=="string"?!0:e,variant:typeof e=="string"?e:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:t?JSON.stringify(t):void 0,description:void 0}}}var fc=r=>Object.fromEntries(Object.entries(r??{}).map(([e,t])=>[e,Ht(t)]).filter(([,e])=>e!==void 0)),pc=r=>{let e=r??{};return Object.fromEntries(Object.keys(e).filter(t=>{let n=e[t];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(t=>{let n=e[t].metadata?.payload;return[t,n?mt(n):void 0]}))},Ht=r=>r===void 0?void 0:r.variant??r.enabled,mt=r=>{if(typeof r!="string")return r;try{return JSON.parse(r)}catch{return r}};var gc=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","irclid","_kx"],_p=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain",...gc,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],Gt=(r,e=[])=>{let t={},n=s=>{r[s]!==void 0&&(t[s]=r[s])};return _p.forEach(n),e.forEach(n),t};var En=class{constructor(){this.events={},this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),()=>{this.events[e]=this.events[e].filter(n=>n!==t)}}emit(e,t){for(let n of this.events[e]||[])n(t);for(let n of this.events["*"]||[])n(e,t)}};function oi(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var yp="NativeGzipValidationError",Sp=31,bp=139,wp=8,vp=r=>r.length>=2&&r[0]===Sp&&r[1]===bp;var Kt,Ap=()=>{if(Kt)return Kt;Kt=[];for(let r=0;r<256;r++){let e=r;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;Kt[r]=e>>>0}return Kt},Tp=r=>{let e=Ap(),t=4294967295;for(let n=0;n<r.length;n++)t=e[(t^r[n])&255]^t>>>8;return(4294967295^t)>>>0},yn=r=>{throw ht(yp,`Native gzip produced invalid output: ${r}`)},Pp=async(r,e)=>{r.size<18&&yn("too-short");let t=new Uint8Array(await r.slice(0,10).arrayBuffer());(!vp(t)||t[2]!==wp)&&yn("invalid-header");let n=new DataView(await r.slice(r.size-8).arrayBuffer());n.getUint32(0,!0)!==Tp(e)&&yn("invalid-crc");let s=e.length>>>0;n.getUint32(4,!0)!==s&&yn("invalid-size")};async function Vt(r,e=!0,t){try{let n=new TextEncoder().encode(r),s=new globalThis.CompressionStream("gzip"),i=s.writable.getWriter(),o=i.write(n).then(()=>i.close()).catch(async l=>{try{await i.abort(l)}catch{}throw l}),a=new Response(s.readable).blob(),[c]=await Promise.all([a,o]);return await Pp(c,n),c}catch(n){if(t?.rethrow)throw n;return e&&console.error("Failed to gzip compress data",n),null}}var Q=class extends Error{constructor(e,t,n,s){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.responseBodyDeadline=n,this.abortController=s,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return Ks(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let e=ht("AbortError","Response body read timed out");this.cancelResponseBody(e),this.responseBodyTextPromise=Promise.reject(e)}else{let e=new Promise((n,s)=>{this.responseBodyTimer=W(()=>{this._bodyReadTimedOut=!0;let i=ht("AbortError","Response body read timed out");s(i),this.cancelResponseBody(i)},this.responseBodyDeadline-Date.now())}),t;try{t=Promise.resolve(this.response.text())}catch(n){t=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([t,e]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(e=>JSON.parse(e))}cancelResponseBody(e){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(e),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},Ce=class extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}};var yc=(r,e)=>{for(let t of Object.keys(e))(t.startsWith("$feature/")||t==="$active_feature_flags")&&(r[t]=e[t])};async function hc(r){if(r instanceof Q){let e="";try{e=await r.text}catch{r.bodyReadTimedOut&&(e="<response body read timed out>")}console.error(`Error while flushing PostHog: message=${r.message}, response body=${e}`,r)}else console.error("Error while flushing PostHog",r);return Promise.resolve()}function Ip(r){return typeof r=="object"&&(r instanceof Q||Sc(r))}function Sc(r){return r instanceof Ce}function Rp(r){if(r instanceof Q)return r.status===502||r.status===504;if(!(r instanceof Ce))return!1;let e=r.error;return(e?.code??e?.cause?.code)!=="ECONNREFUSED"}var mc=10485760;function _c(r){try{return typeof r!="string"?r instanceof Uint8Array?r.byteLength:r.size:"u">typeof Buffer?Buffer.byteLength(r,qa):new TextEncoder().encode(r).length}catch{return 0}}function _t(r){return typeof r=="object"&&r instanceof Q&&r.status===413}function Sn(r){return r instanceof Q?r.status===408||r.status===429||r.status>=500:Sc(r)}function Ec(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}var ai="default",qt=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new Nt([new Ut,new Bt,new $t,new Wt],Xs())}getEvaluationRuntime(){}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new on,this._events=new En,this._isInitialized=!1;let n=typeof e=="string"?e.trim():"",s=typeof t.host=="string"?t.host.trim():"",i=!n;this._logger=xa("[PostHog]",this.logMsgIfDebug.bind(this)),i&&this._logger.error("You must pass your PostHog project's api key. The client will be disabled."),this.apiKey=n,this.host=za(s||"https://us.i.posthog.com"),this.flushAt=t.flushAt?Math.max(t.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,t.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,t.maxQueueSize??1e3),this.flushInterval=t.flushInterval??1e4,this.preloadFeatureFlags=t.preloadFeatureFlags??!0,this.defaultOptIn=t.defaultOptIn??!0,this.disableSurveys=t.disableSurveys??!1,this._retryOptions={retryCount:t.fetchRetryCount??3,retryDelay:t.fetchRetryDelay??3e3,retryCheck:Sn},this.requestTimeout=t.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=t.featureFlagsRequestTimeoutMs??3e3,this.featureFlagsRequestMaxRetries=t.featureFlagsRequestMaxRetries??1,this.remoteConfigRequestTimeoutMs=t.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=t.disableGeoip??!0,this.disabled=(t.disabled??!1)||i,this.historicalMigration=t?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=t?.evaluationContexts??t?.evaluationEnvironments,t?.evaluationEnvironments&&!t?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!oi()||(t?.disableCompression??!1)}logMsgIfDebug(e){this.isDebug&&e()}wrap(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return e();this._initPromise.then(()=>e())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(G.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(G.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(G.OptedOut,!0)})}on(e,t){return this._events.on(e,t)}debug(e=!0){if(this.removeDebugCallback?.(),e){let t=this.on("*",(n,s)=>this._logger.info(n,s));this.removeDebugCallback=()=>{t(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(e){let t=e.properties||{},n={...t,...this.getCommonEventProperties()};return yc(n,t),e.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=Gt(n)),{distinct_id:e.distinct_id,event:e.event,properties:n}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,n){this.wrap(()=>{let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",s,n)})}async identifyStatelessImmediate(e,t,n){let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",s,n)}captureStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({distinct_id:e,event:t,properties:n});this.enqueue("capture",i,s)})}async captureStatelessImmediate(e,t,n,s){let i=this.buildPayload({distinct_id:e,event:t,properties:n});await this.sendImmediate("capture",i,s)}aliasStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});this.enqueue("alias",i,s)})}async aliasStatelessImmediate(e,t,n,s){let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",i,s)}groupIdentifyStateless(e,t,n,s,i,o){this.wrap(()=>{let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});this.enqueue("capture",a,s)})}async groupIdentifyStatelessImmediate(e,t,n,s,i,o){let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});await this.sendImmediate("capture",a,s)}async getRemoteConfig(){await this._initPromise;let e=this.host;e==="https://us.i.posthog.com"?e="https://us-assets.i.posthog.com":e==="https://eu.i.posthog.com"&&(e="https://eu-assets.i.posthog.com");let t=`${e}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,n,{type:"required",consume:s=>s.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).catch(s=>{this._logger.error("Remote config could not be loaded",s),this._events.emit("error",s)})}async getFlags(e,t={},n={},s={},i={},o=!1){await this._initPromise;let a=o?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,l={token:this.apiKey,distinct_id:e,groups:t,person_properties:n,group_properties:s,...i};n.$device_id&&(l.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(l.evaluation_contexts=this.evaluationContexts);let u=this.getEvaluationRuntime();u&&(l.evaluation_runtime=u);let f={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(l)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,f,{type:"required",consume:p=>p.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:Rp},this.featureFlagsRequestTimeoutMs).then(p=>({success:!0,response:ii(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(e){if(e instanceof Q)return{type:"api_error",statusCode:e.status};if(e instanceof Ce){let t=e.error;return t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(e,t,n,s,i,o);if(a===void 0)return{response:void 0,requestId:void 0};let c=Ht(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,n,s,i,o,[e]);return a===void 0?void 0:{response:a.flags[e],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(t,n,s,i,o,[e]);if(!a)return;let c=a[e];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(e,t={},n={},s={},i,o){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)).payloads}async getFeatureFlagsStateless(e,t={},n={},s={},i,o){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)}async getFeatureFlagsAndPayloadsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(e,t,n,s,i,o);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a={geoip_disable:i??this.disableGeoip};o&&(a.flag_keys_to_evaluate=o);let c=await this.getFlags(e,t,n,s,a);if(!c.success)return;let l=c.response;return l.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"),l.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:l?.requestId,quotaLimited:l.quotaLimited}):l}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let e=`${this.host}/api/surveys/?token=${this.apiKey}`,t={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},s=(await this.fetchWithRetry(e,t,{type:"required",consume:i=>{if(i.status!==200||!i.json){let o=`Surveys API could not be loaded: ${i.status}`,a=new Error(o);return this._logger.error(a),this._events.emit("error",new Error(o)),Promise.resolve(void 0)}return i.json()}}).catch(i=>{this._logger.error("Surveys API could not be loaded",i),this._events.emit("error",i)}))?.surveys;return s&&this._logger.info("Surveys fetched from API: ",JSON.stringify(s)),s??[]}get props(){return this._props||(this._props=this.getPersistedProperty(G.Props)),this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(G.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(G.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return ai}persistedQueueKeyForRoute(e){return G.Queue}getActiveQueueRoutes(){return[ai]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,n,s){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i===null)return;i=this.normalizeMessage(i);let o=this.persistedQueueKeyForRoute(s??this.getQueueRouteKey(i)),a=this.getPersistedProperty(o)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:i}),this.setPersistedProperty(o,a),this._events.emit(e,i),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=W(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(e,t,n,s){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(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i!==null){i=this.normalizeMessage(i);try{await this.sendBatch([i],void 0,s??this.getQueueRouteKey(i))}catch(o){this._events.emit("error",o)}}}normalizeMessage(e){let{type:t,library:n,library_version:s,...i}=e,o=Ec(i.properties)?i.properties:void 0;return n!==void 0&&o?.$lib===void 0&&(o={...o||{},$lib:n}),s!==void 0&&o?.$lib_version===void 0&&(o={...o||{},$lib_version:s}),o&&(i.properties=o),i.uuid=Ye(i.uuid,B),i}normalizeTimestampForWire(e){let t=e instanceof Date?e:typeof e=="string"?new Date(e):null;if(!t||Number.isNaN(t.getTime()))return e;let n=t.toISOString(),s=typeof e=="string"?e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}prepareMessage(e,t){let n={...e,timestamp:t?.timestamp?t?.timestamp:Vs(),uuid:Ye(t?.uuid,B)};return(t?.disableGeoip??this.disableGeoip)&&(Ec(n.properties)||(n.properties={}),n.properties.$geoip_disable=!0),n.distinctId&&(n.distinct_id=n.distinctId,delete n.distinctId),n}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.pendingFlushPromise||this.flushAutomatic().catch(async e=>{await hc(e)})}flushAutomatic(){return this.flush()}async waitForPendingPromises(e,t=[]){let n=t.filter(i=>!!i),s=0;for(;;){let i=this.promiseQueue.getPromises([...n,...this.flushPromises],e);if(i.length===0)return;s>0&&this._logger.debug(`flush() re-checking ${i.length} pending promise(s) before flushing`),await Promise.all(i.map(o=>o.catch(()=>{}))),s++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(e){if(this.disabled)return Promise.resolve();if(!e&&this.pendingFlushPromise)return this.pendingFlushPromise;let t=this.flushPromise,n=this.promiseQueue.maxId,s=Promise.resolve().then(()=>{if(e)return this.waitForPendingPromises(n,[t,s])}).then(()=>Lt([t])).then(()=>(this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=s,this.flushPromise=s,this.flushPromises.add(s),this.addPendingPromise(s),Lt([s]).then(()=>{this.flushPromises.delete(s),this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this.flushPromise===s&&(this.flushPromise=null)}),s}getCustomHeaders(){let e=this.getCustomUserAgent(),t={};return e&&e!==""&&(t["User-Agent"]=e),t}compressPayload(e){return Vt(e,this.isDebug)}getBatchEndpointPath(e){return"/batch/"}async sendBatch(e,t,n=ai){let s={api_key:this.apiKey,batch:e.map(l=>{if(!l)return l;let u=this.normalizeTimestampForWire(l.timestamp);return u===l.timestamp?l:{...l,timestamp:u}}),sent_at:Vs()};this.historicalMigration&&(s.historical_migration=!0);let i=Ue(s),o=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(i),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||i};await this.fetchWithRetry(o,c,{type:"successful-write"},t)}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some(s=>this.getRouteQueue(s).length>0))return;let t=[],n;for(let s of e)try{await this._flushRoute(s,t)}catch(i){n===void 0&&(n=i)}if(n!==void 0)throw n;this._events.emit("flush",t)}async _flushRoute(e,t){let n=this.persistedQueueKeyForRoute(e),s=this.getPersistedProperty(n)||[];if(!s.length)return;let i=s.length,o=0;for(;s.length>0&&o<i;){let a=s.slice(0,this.maxBatchSize),c=a.map(f=>f.message===void 0?f.message:this.normalizeMessage(f.message)),l=async()=>{let f=this.getPersistedProperty(n)||[],p=[...a],g=f.filter(h=>{let m=h.message?.uuid,E=p.findIndex(_=>_===h||typeof m=="string"&&m.length>0&&_.message?.uuid===m);return E===-1?!0:(p.splice(E,1),!1)});this.setPersistedProperty(n,g),s=g,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},u={retryCheck:f=>_t(f)?!1:Sn(f)};try{await this.sendBatch(c,u,e)}catch(f){if(_t(f)&&c.length>1){this.maxBatchSize=Math.max(1,Math.floor(c.length/2)),this._logger.warn(`Received 413 when sending batch of size ${c.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw f instanceof Ce||await l(),this._events.emit("error",f),f}await l(),t.push(...c),o+=c.length}}async _sendOtlpBatch({path:e,auth:t,payload:n}){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let s;try{s=JSON.stringify(n)}catch(u){return this.logMsgIfDebug(()=>console.warn(`[PostHog] Could not serialize a ${e} batch; reporting it as too large`,u)),{kind:"too-large",measuredLocally:!0}}let i=_c(s);if(i>mc)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${e} batch of ${i} bytes: the endpoint accepts at most ${mc}`)),{kind:"too-large",measuredLocally:!0};let o=t==="bearer"?`${this.host}/i/v1/${e}`:`${this.host}/i/v1/${e}?token=${encodeURIComponent(this.apiKey)}`,a=this.disableCompression?null:await this.compressPayload(s),c=a||s,l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...t==="bearer"&&{Authorization:`Bearer ${this.apiKey}`},...a!==null&&{"Content-Encoding":"gzip"}},body:c};try{return await this.fetchWithRetry(o,l,{type:"successful-write"},{retryCheck:u=>_t(u)||u instanceof Q&&u.retryAfterMs!==void 0?!1:Sn(u)}),{kind:"ok"}}catch(u){if(_t(u))return{kind:"too-large"};if(Sn(u)){let f=u instanceof Q?u.retryAfterMs:void 0;return{kind:"retry-later",error:u,...f!==void 0&&{retryAfterMs:f}}}return{kind:"fatal",error:u}}}async _sendLogsBatch(e){return this._sendOtlpBatch({path:"logs",auth:"query-token",payload:e})}async _sendMetricsBatch(e){return this._sendOtlpBatch({path:"metrics",auth:"query-token",payload:e})}async _sendTracesBatch(e){return this._sendOtlpBatch({path:"traces",auth:"bearer",payload:e})}async fetchWithRetry(e,t,n,s,i){let o=t.body?t.body:"",a=_c(o),c={...this._retryOptions,...s},l=0;return await Ya(async()=>{l++;let u=new AbortController,f=i??this.requestTimeout,p=Date.now()+f,g,h=new Promise((P,T)=>{g=W(()=>{let D=ht("AbortError",`Request timed out after ${f}ms`);T(D),u.abort(D)},f)}),m,E=!1,_,S=()=>_??=(async()=>{try{await m?.body?.cancel()}catch{}})();try{let P;try{P=this.fetch(e,{signal:u.signal,...t})}catch(K){throw new Ce(K)}P.then(K=>{u.signal.aborted&&!E&&Promise.resolve(K.body?.cancel()).catch(()=>{})}).catch(()=>{});try{m=await Promise.race([P,h]),E=!0}catch(K){throw new Ce(K)}let T=t.mode==="no-cors",D=n.type==="successful-write"?300:400;if(!T&&(m.status<200||m.status>=D))throw new Q(m,a,p,u);if(n.type==="successful-write"){try{await Promise.race([S(),h])}catch{}return}try{return await Promise.race([n.consume(m),h])}catch(K){throw u.signal.aborted?new Ce(K):K}}finally{clearTimeout(g),u.signal.aborted&&m&&S()}},{...c,retryCheck:u=>{let f=c.retryCheck(u);return f&&l<=c.retryCount&&u instanceof Q&&u.cancelResponseBody(),f}})}async _shutdown(e=3e4){await this._initPromise;let t=!1;return this.clearFlushTimer(),this.disabled?void 0:Be((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(o=>this.getRouteQueue(o).length>0);){let i=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===i){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(s){if(!Ip(s))throw s;await hc(s)}})(),e,()=>{this._logger.critical("Timeout while shutting down PostHog. Some events may not have been sent.",{shutdownTimeoutMs:e}),t=!0})}async shutdown(e=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(e).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var Fp=["is_not","is_set"],kp=1152921504606847e3,b=class r extends Error{constructor(e){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,r.prototype)}};function vc(r){if(typeof r=="boolean")return!0;if(typeof r=="string"){let e=r.toLowerCase();return e==="true"||e==="false"}if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!vc(e in r?r[e]:null))return!1;return!0}function ci(r){if(typeof r=="boolean")return r;if(typeof r=="string")return r.toLowerCase()==="true";if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!ci(e in r?r[e]:null))return!1;return!0}function zt(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t>=55296&&t<=56319){let n=r.charCodeAt(e+1);if(e+1>=r.length||n<56320||n>57343)throw new b("Cannot stringify an unpaired surrogate like the flags service");e++}else if(t>=56320&&t<=57343)throw new b("Cannot stringify an unpaired surrogate like the flags service")}}function li(r,e=new Set){if(!(r===null||typeof r=="boolean")){if(typeof r=="string")return void zt(r);if(typeof r=="number"){if(!Number.isFinite(r))throw new b(`Cannot represent non-finite number ${r} like the flags service`);return}if(Array.isArray(r)){if(e.has(r))throw new b("Cannot represent a circular array during local evaluation");e.add(r);try{for(let t=0;t<r.length;t++)t in r&&li(r[t],e)}finally{e.delete(r)}return}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new b("Cannot represent a non-JSON object like the flags service");if(e.has(r))throw new b("Cannot represent a circular object during local evaluation");e.add(r);try{for(let n of Object.keys(r))zt(n),li(r[n],e)}finally{e.delete(r)}return}throw new b(`Cannot represent ${typeof r} like the flags service`)}}function Dp(r,e){let t=0,n=0;for(;t<r.length&&n<e.length;){let s=r.charCodeAt(t),i=e.charCodeAt(n),o=s>=55296&&s<=56319,a=i>=55296&&i<=56319,c=o?r.charCodeAt(t+1):0,l=a?e.charCodeAt(n+1):0,u=o?(s-55296)*1024+c-56320+65536:s,f=a?(i-55296)*1024+l-56320+65536:i;if(u!==f)return u-f;t+=o?2:1,n+=a?2:1}return r.length-e.length}function ui(r,e=new Set){if(r===null)return"null";if(typeof r=="string")return zt(r),JSON.stringify(r);if(typeof r=="boolean")return r?"true":"false";if(typeof r=="number"){if(!Number.isFinite(r))throw new b(`Cannot stringify non-finite number ${r} like the flags service`);if(Number.isInteger(r))throw new b(`Cannot distinguish integer ${r} from an integral JSON float during local evaluation`);return String(r)}if(Array.isArray(r)){if(e.has(r))throw new b("Cannot stringify a circular array during local evaluation");e.add(r);try{let t=[];for(let n=0;n<r.length;n++)t.push(n in r?ui(r[n],e):"null");return`[${t.join(",")}]`}finally{e.delete(r)}}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new b("Cannot stringify a non-JSON object like the flags service");if(e.has(r))throw new b("Cannot stringify a circular object during local evaluation");e.add(r);try{let n=Object.keys(r);return n.forEach(zt),`{${n.sort(Dp).map(s=>`${JSON.stringify(s)}:${ui(r[s],e)}`).join(",")}}`}finally{e.delete(r)}}throw new b(`Cannot stringify ${typeof r} like the flags service`)}function bn(r){return typeof r=="string"?(zt(r),r):ui(r)}function bc(r){try{return new RegExp(r),!0}catch{return!1}}function Z(r){return String(r).replace(/[A-Z]/g,e=>e.toLowerCase())}function Ac(r,e,t){if(!/^\d+$/.test(r)||t==="strict"&&r.length>1&&r[0]==="0")throw new b(`Invalid semver: ${e}`);return parseInt(r,10)}function F(r,e="strict"){let n=String(r).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new b(`Invalid semver: ${r}`);let s=n.split("."),i=o=>o===void 0||o===""?0:Ac(o,r,e);return[i(s[0]),i(s[1]),i(s[2])]}function ee(r,e){for(let t=0;t<3;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return 0}function Lp(r,e){let t=F(r,e);return{lower:[t[0],t[1],t[2]],upper:[t[0],t[1]+1,0]}}function Np(r,e){let[t,n,s]=F(r,e),i=[t,n,s],o;return o=t>0?[t+1,0,0]:n>0?[0,n+1,0]:[0,0,s+1],{lower:i,upper:o}}function Up(r,e){let n=String(r).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new b(`Invalid wildcard semver: ${r}`);let s=n.split("."),i=c=>{if(e==="legacy-permissive"){let l=parseInt(c,10);if(!isNaN(l))return l}else try{return Ac(c,r,e)}catch{}throw new b(`Invalid wildcard semver: ${r}`)},o=i(s[0]);if(s.length===1)return{lower:[o,0,0],upper:[o+1,0,0]};let a=i(s[1]);return{lower:[o,a,0],upper:[o,a+1,0]}}function wc(r){if(r instanceof Date)return r;if(typeof r=="string"||typeof r=="number"){let e=new Date(r);if(!isNaN(e.valueOf()))return e;throw new b(`${r} is in an invalid date format`)}throw new b(`The date provided ${r} must be a string, number, or date object`)}function di(r){let e=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,t=r.match(e),n=new Date(new Date().toISOString());if(!t||!t.groups)return null;let s=parseInt(t.groups.number);if(s>=1e4)return null;let i=t.groups.interval;if(i==="h")n.setUTCHours(n.getUTCHours()-s);else if(i==="d")n.setUTCDate(n.getUTCDate()-s);else if(i==="w")n.setUTCDate(n.getUTCDate()-7*s);else if(i==="m")n.setUTCMonth(n.getUTCMonth()-s);else{if(i!=="y")return null;n.setUTCFullYear(n.getUTCFullYear()-s)}return n}function fi(r,e,t={}){let n=r.key,s=r.value,i=r.operator||"exact",o=t.semverParsingPolicy??"strict";if(Object.prototype.hasOwnProperty.call(e,n)){if(i==="is_not_set")return!1;if(i==="is_set")return!0}else throw new b(`Property ${n} not found in propertyValues`);let c=e[n];if(c===void 0)return t.warnFunction?.(`Property ${n} cannot have a value of undefined with the ${i} operator`),i==="is_not";if(c===null&&!Fp.includes(i)&&i!=="exact"&&i!=="is_not")return t.warnFunction?.(`Property ${n} cannot have a value of null with the ${i} operator`),!1;let l=(f,p)=>{if(vc(f))return li(p),ci(f)===ci(p);if(Array.isArray(f)){let g=bn(p).toLowerCase();return f.some(h=>bn(h).toLowerCase()===g)}return bn(f).toLowerCase()===bn(p).toLowerCase()},u=(f,p,g)=>{if(g==="gt")return f>p;if(g==="gte")return f>=p;if(g==="lt")return f<p;if(g==="lte")return f<=p;throw new Error(`Invalid operator: ${g}`)};switch(i){case"exact":return l(s,c);case"is_not":return!l(s,c);case"is_set":return!0;case"icontains":return Z(c).includes(Z(s));case"not_icontains":return!Z(c).includes(Z(s));case"starts_with":return Z(c).startsWith(Z(s));case"not_starts_with":return!Z(c).startsWith(Z(s));case"ends_with":return Z(c).endsWith(Z(s));case"not_ends_with":return!Z(c).endsWith(Z(s));case"regex":return bc(String(s))&&String(c).match(String(s))!==null;case"not_regex":return bc(String(s))&&String(c).match(String(s))===null;case"gt":case"gte":case"lt":case"lte":{let f=typeof s=="number"?s:parseFloat(String(s)),p=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(f)&&Number.isFinite(p)?u(p,f,i):u(String(c),String(s),i)}case"is_date_after":case"is_date_before":{if(typeof s=="boolean")throw new b("Date operations cannot be performed on boolean values");let f=di(String(s));f==null&&(f=wc(s));let p=wc(c);return i==="is_date_before"?p<f:p>f}case"semver_eq":return ee(F(String(c),o),F(String(s),o))===0;case"semver_neq":return ee(F(String(c),o),F(String(s),o))!==0;case"semver_gt":return ee(F(String(c),o),F(String(s),o))>0;case"semver_gte":return ee(F(String(c),o),F(String(s),o))>=0;case"semver_lt":return ee(F(String(c),o),F(String(s),o))<0;case"semver_lte":return ee(F(String(c),o),F(String(s),o))<=0;case"semver_tilde":{let f=F(String(c),o),{lower:p,upper:g}=Lp(String(s),o);return ee(f,p)>=0&&ee(f,g)<0}case"semver_caret":{let f=F(String(c),o),{lower:p,upper:g}=Np(String(s),o);return ee(f,p)>=0&&ee(f,g)<0}case"semver_wildcard":{let f=F(String(c),o),{lower:p,upper:g}=Up(String(s),o);return ee(f,p)>=0&&ee(f,g)<0}default:throw new b(`Unknown operator: ${i}`)}}async function Tc(r){let e=globalThis.crypto?.subtle;if(!e)throw new Error("SubtleCrypto API not available");let t=await e.digest("SHA-1",new TextEncoder().encode(r));return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}async function wn(r,e,t=""){let n=await Tc(`${r}.${e}${t}`);return parseInt(n.slice(0,15),16)/kp}function vn(r){let e=[],t=0;for(let n of r){let s=t+n.rollout_percentage/100;e.push({valueMin:t,valueMax:s,key:n.key}),t=s}return e}async function pi(r,e,t){let n=await wn(r,e,"variant");return vn(t).find(s=>n>=s.valueMin&&n<s.valueMax)?.key}function gi(r,e){if(e===!1||e==null||!r)return null;let t=typeof e=="boolean"?e.toString():e,n=r[t]||null;return n==null?null:mt(n)}var Pc=9223372036854776e3,$p="9223372036854775808",Bp=Object.prototype.propertyIsEnumerable;function Wp(){return{ancestors:new WeakSet,remainingNodes:1e4}}function ge(r,e){try{return Ic(r,e,Wp(),0)}catch{return[]}}function jp(r,e){let t=r.toString(),n=BigInt($p);return r>=n||r<-n?(e?.debug(`Attribute ${t} is outside the int64 range; encoding it as a string`),{stringValue:t}):{intValue:t}}function _i(r,e,t,n){if(t.remainingNodes<=0)return{stringValue:fn};if(t.remainingNodes--,Aa(r))return{boolValue:r};if(typeof r=="bigint")return jp(r,e);if(typeof r=="number"){if(!Number.isFinite(r))return{stringValue:String(r)};if(Number.isInteger(r)){if(Number.isSafeInteger(r))return{intValue:String(r)};if("u"<typeof BigInt)return{stringValue:String(r)};let s=BigInt(r).toString();return r>=Pc||r<-Pc?(e?.debug(`Attribute ${s} is outside the int64 range; encoding it as a string`),{stringValue:s}):{intValue:s}}return{doubleValue:r}}if(typeof r=="string")return{stringValue:fe(r)};if(typeof r=="function")return{stringValue:Va};if(typeof r=="symbol")return{stringValue:String(r)};if(typeof r=="object"&&r!==null){if(t.ancestors.has(r))return{stringValue:dn};if(n>=20)return{stringValue:fn};if(r instanceof Date){let s=r.getTime(),i=Number.isFinite(s)?r.toISOString():String(r);return{stringValue:typeof i=="string"?fe(i):String(i)}}t.ancestors.add(r);try{try{let s=r.toJSON;if(typeof s=="function")return _i(s.call(r),e,t,n+1)}catch{}return q(r)?{arrayValue:{values:Hp(r,e,t,n+1)}}:{kvlistValue:{values:Ic(r,e,t,n+1)}}}finally{t.ancestors.delete(r)}}return{stringValue:fe(String(r))}}function Hp(r,e,t,n){let s=[],i=Math.min(r.length,1e3),o=0;for(;o<i&&t.remainingNodes>0;o++)try{let a=o in r?r[o]:void 0;if(se(a))continue;s.push(_i(a,e,t,n))}catch{s.push({stringValue:X})}return r.length>o&&s.push({stringValue:fn}),s}function Ic(r,e,t,n){let s=[];for(let i in r)if(Bp.call(r,i)){if(!i){e?.debug("Dropping an attribute with an empty key");continue}if(s.length>=1e3||t.remainingNodes<=0){e?.debug("Attributes truncated: the value exceeds the OTLP encoder budget");break}try{let o=r[i];if(Ns(o)||Ie(o))continue;s.push({key:fe(i),value:_i(o,e,t,n)})}catch{s.push({key:fe(i),value:{stringValue:X}})}}return s}function Jt(r,e,t){return{...Re({},r.resourceAttributes),"service.name":r.serviceName||"unknown_service",...r.environment&&{"deployment.environment":r.environment},...r.serviceVersion&&{"service.version":r.serviceVersion},"telemetry.sdk.name":e,"telemetry.sdk.version":t}}var Gp=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function Xt(r,e){let t=Re({},r),n={};for(let s of Gp)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s],delete t[s]);return[...ge(t,e),...ge(n,e)]}var Rc={darwin:"macOS",win32:"Windows",cygwin:"Windows",linux:"Linux",android:"Android",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",sunos:"SunOS",aix:"AIX",haiku:"Haiku","Mac OS X":"macOS"};function Kp(r){if(r)return Object.prototype.hasOwnProperty.call(Rc,r)?Rc[r]:r}function Ei(r,e){let t=Kp(r);return{...t?{"os.name":t}:{},...e?{"os.version":e}:{}}}var Vp={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}},Mw=Vp.info;var Je=class{constructor(e){this._onFire=e,this._firesAt=0}get pending(){return!!this._timer}arm(e){this.clear(),this._firesAt=Date.now()+e,this._timer=W(()=>{this._timer=void 0,this._onFire()},e)}armNoEarlierThan(e){this._timer&&Date.now()+e<=this._firesAt||this.arm(e)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function Qt(){return 1-.25+Math.random()*.25*2}var te=1;function Zt(r,e,t,n){let s=Math.min(Math.max(0,e-1),6),i=r*2**s,o=n===void 0?i:Math.min(i,Math.max(n,r));return Math.round(o*t)}var er=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function yi(r){return String(r)+"000000"}function Si(r,e,t,n){let s="";return n&&(s=Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${JSON.stringify(n[o])}`).join(",")),`${r}\0${e}\0${t??""}\0${s}`}function Cc(r,e){for(let t=0;t<e.length;t++)if(r<=e[t])return t;return e.length}function bi(r,e,t){return Jt(r,e,t)}function wi(r,e,t,n){return{resourceMetrics:[{resource:{attributes:Xt(e)},scopeMetrics:[{scope:{name:t,version:n},metrics:r}]}]}}function Tn(r){let e=r?.resourceAttributes;return{serviceName:e?.["service.name"]??r?.serviceName,serviceVersion:e?.["service.version"]??r?.serviceVersion,environment:e?.["deployment.environment"]??r?.environment,resourceAttributes:e,beforeSend:r?.beforeSend,flushIntervalMs:r?.flushIntervalMs??1e4,maxSeriesPerFlush:r?.maxSeriesPerFlush??1e3}}var Mc=1,tr=class{constructor(e,t,n){this._instance=e,this._config=t,this._logger=n,this._series=new Map,this._flushTimer=new Je(()=>this.flush().catch(s=>{this._logger.error("Metrics flush failed:",s)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new ze,this._consecutiveFlushFailures=0,this._flushJitter=te,this._generation=0}count(e,t=1,n){this._capture({name:e,type:"count",value:t,unit:n?.unit,attributes:n?.attributes})}gauge(e,t,n){this._capture({name:e,type:"gauge",value:t,unit:n?.unit,attributes:n?.attributes})}histogram(e,t,n){this._capture({name:e,type:"histogram",value:t,unit:n?.unit,attributes:n?.attributes})}flush(){let e=this._flushPromise,n=(async()=>{e&&await e.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=te,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let n,s;try{n=t.attributes?{...t.attributes}:void 0,s=Si(t.type,t.name,t.unit,n)}catch(a){this._logger.warn(`Dropping metric '${t.name}': attributes could not be serialized`,a);return}let i=this._series.get(s);if(!i){if(!this._admitNewSeries())return;i={name:t.name,type:t.type,unit:t.unit,attributes:n,windowStartMs:Date.now()},this._series.set(s,i)}let o=this._typeByName.get(t.name);o===void 0?this._typeByName.set(t.name,t.type):o!==t.type&&!this._typeCollisionWarned.has(t.name)&&(this._typeCollisionWarned.add(t.name),this._logger.warn(`Metric name '${t.name}' is already used as a ${o}; recording it as a ${t.type} too will blend both series in charts. Use a distinct name.`)),this._fold(i,t.value),this._armFlushTimer()}_admitNewSeries(){return this._series.size<this._config.maxSeriesPerFlush?!0:(this._seriesCapWarned||(this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`)),!1)}_fold(e,t){switch(e.type){case"count":e.total=(e.total??0)+t;break;case"gauge":e.last=t;break;case"histogram":{e.hist||(e.hist={count:0,sum:0,min:t,max:t,bucketCounts:new Array(er.length+1).fill(0)});let n=e.hist;n.count+=1,n.sum+=t,n.min=Math.min(n.min,t),n.max=Math.max(n.max,t),n.bucketCounts[Cc(t,er)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let n=q(t)?t:[t],s=e;for(let i of n)try{let o=i(s);if(!o)return this._logger.info("Metric was rejected in beforeSend function"),null;s=o}catch(o){return this._logger.error("Error in beforeSend function for metric:",o),null}return s}_armFlushTimer(){this._flushTimer.pending||this._flushTimer.arm(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Zt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}async _doFlush(){if(this._flushTimer.clear(),this._series.size===0)return;let e=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let t=this._generation,n=await this._instance._sendMetricsBatch(this._buildPayload(e));if(t===this._generation)switch(this._retryAfter.record(n),n.kind==="retry-later"?(this._consecutiveFlushFailures++,this._flushJitter=Qt()):(this._consecutiveFlushFailures=0,this._flushJitter=te),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(e){return wi(this._buildMetrics(e),bi(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=yi(Date.now()),n=new Map;for(let s of e.values()){let i=Si(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o={name:s.name,...s.unit&&{unit:s.unit}},s.type==="count"?o.sum={aggregationTemporality:Mc,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:Mc,dataPoints:[]},n.set(i,o));let a=ge(s.attributes??{},this._logger),c=yi(s.windowStartMs);if(s.type==="count"){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,asDouble:s.total??0};o.sum.dataPoints.push(l)}else if(s.type==="gauge"){let l={attributes:a,timeUnixNano:t,asDouble:s.last??0};o.gauge.dataPoints.push(l)}else if(s.hist){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,count:s.hist.count,sum:s.hist.sum,min:s.hist.min,max:s.hist.max,bucketCounts:s.hist.bucketCounts,explicitBounds:er};o.histogram.dataPoints.push(l)}}return Array.from(n.values())}_mergeWindowBack(e){for(let[t,n]of e){let s=this._series.get(t);if(!s){this._admitNewSeries()&&this._series.set(t,n);continue}switch(s.windowStartMs=Math.min(s.windowStartMs,n.windowStartMs),s.type){case"count":s.total=(s.total??0)+(n.total??0);break;case"gauge":break;case"histogram":if(n.hist)if(s.hist){s.hist.count+=n.hist.count,s.hist.sum+=n.hist.sum,s.hist.min=Math.min(s.hist.min,n.hist.min),s.hist.max=Math.max(s.hist.max,n.hist.max);for(let i=0;i<s.hist.bucketCounts.length;i++)s.hist.bucketCounts[i]+=n.hist.bucketCounts[i]}else s.hist=n.hist;break}}}};var Jp="0".repeat(32),Xp="0".repeat(16),Qp=/^[0-9a-f]+$/;function Zp(r){let e=new Uint8Array(r),t=globalThis.crypto;if(t&&typeof t.getRandomValues=="function")try{return t.getRandomValues(e),e}catch{}for(let n=0;n<r;n++)e[n]=Math.floor(256*Math.random());return e}function eg(r){let e="";for(let t=0;t<r.length;t++)e+=r[t].toString(16).padStart(2,"0");return e}function Oc(r){let e=eg(Zp(r));return/[^0]/.test(e)?e:e.slice(0,-1)+"1"}function xc(){return Oc(16)}function Fc(){return Oc(8)}function kc(r,e,t){return typeof r=="string"&&r.length===e&&r!==t&&Qp.test(r)}function Dc(r){return kc(r,32,Jp)}function Lc(r){return kc(r,16,Xp)}var tg=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Nc(r){let e=Uc(r);return e&&{traceId:e.traceId,spanId:e.spanId,flags:rg(e.flags)}}function rg(r){return 1&parseInt(r,16)?In:ng}function Uc(r){if(typeof r!="string")return;let e=tg.exec(r.trim());if(!e)return;let[,t,n,s,i,o]=e;if(t!=="ff"&&!(t==="00"&&o)&&!(!Dc(n)||!Lc(s)))return{version:t,traceId:n,spanId:s,flags:i}}function $c(r){return Uc(r)&&r.trim()}function Pn(r){return Array.isArray(r)&&r.length===1?r[0]:r}var In="01",ng="00";function Bc(r,e,t=In){return`00-${r}-${e}-${t}`}var sg=32,vi=512;function Rn(r){if(typeof r!="string")return;let e=r.trim();if(!e||/[^\x20-\x7e\t]/.test(e))return;let t=e.split(",");if(!(t.length>sg)){for(let n of t)if(n.trim()&&!n.includes("="))return;return e.length<=vi?e:og(t)}}var ig=128;function og(r){let e=[...r],t=()=>e.reduce((n,s)=>n+s.length,0)+e.length-1;for(let n=e.length-1;n>=0&&t()>vi;n--)e[n].length>ig&&e.splice(n,1);for(;e.length&&t()>vi;)e.pop();return e.length?e.join(","):void 0}var Wc="unknown";function Xe(r,e,t,n){return typeof r=="string"&&r.trim()?r.length>t?r.slice(0,t):r:(n?.debug(`${e} must be a non-empty string; using "${Wc}"`),Wc)}function Et(r){if(r==null)return;let e=r;if(r instanceof Date)try{e=r.getTime()}catch{return}if(!(typeof e!="number"||!Number.isFinite(e))&&!(e<0||e>9223372036854))return e}function jc(r,e,t){let n=Et(r);return n===void 0?(r!==void 0&&t?.debug("Span startTime is out of range or not a valid time; using the current time"),e):(e-n>864e5?t?.debug("Span startTime is more than 24 hours in the past; the server will clamp it to receive time and keep the original in $originalTimestamp"):n>e&&t?.debug("Span startTime is in the future; the span may export with a zero duration"),n)}function Cn(r,e){return r<e?e:r}function rr(r,e,t,n){let s=Et(r);return s===void 0?(r!==void 0&&n?.debug(`Span ${t} is out of range or not a valid time; using the derived time`),e):s}function On(){let r=globalThis.performance;return typeof r?.now=="function"?r.now():void 0}var yt=class{constructor(e,t,n){this._onEnd=t,this._logger=n,this._events=[],this._ended=!1,this._userAttributeCount=0,this._userEventCount=0,this._droppedAttributes=0,this._droppedEvents=0,this._traceId=e.traceId,this._spanId=e.spanId,this._parentSpanId=e.parentSpanId,this._traceState=e.traceState,this._traceFlags=e.traceFlags??In,this._parentIsRemote=e.parentIsRemote??!1,this._name=e.name,this._kind=e.kind,this._autoKeys=new Set(e.autoAttributeKeys),this._maxAttributes=e.maxAttributes,this._maxEvents=e.maxEvents,this._maxAttributesPerEvent=e.maxAttributesPerEvent,this._maxAttributeValueLength=e.maxAttributeValueLength,this._attributes=Object.create(null);for(let s of Object.keys(e.attributes))this._writeAttribute(s,e.attributes[s]);this._startMono=e.backdated?void 0:On(),this._startTime=e.clockAnchor&&this._startMono!==void 0?e.clockAnchor.wall+(this._startMono-e.clockAnchor.mono):e.startTime,this._startMono!==void 0&&(this._clockAnchor=e.clockAnchor??{wall:this._startTime,mono:this._startMono})}_now(){if(this._startMono!==void 0){let e=On();if(e!==void 0)return this._startTime+Math.max(0,e-this._startMono)}return Date.now()}_mutable(e){return this._ended?(this._logger?.debug(`Ignoring ${e} on a span that has already ended`),!1):!0}_writeAttribute(e,t){if(se(t)){e in this._attributes&&!this._autoKeys.has(e)&&this._userAttributeCount--,delete this._attributes[e];return}if(!this._autoKeys.has(e)&&!(e in this._attributes)){if(this._userAttributeCount>=this._maxAttributes)return void this._droppedAttributes++;this._userAttributeCount++}this._attributes[e]=Fn(t,this._maxAttributeValueLength)}setAttribute(e,t){return this._mutable("setAttribute")&&this._writeAttribute(e,t),this}setAttributes(e){if(this._mutable("setAttributes")){let t=Re({},e);for(let n of Object.keys(t))this._writeAttribute(n,t[n])}return this}addEvent(e,t,n){if(this._mutable("addEvent")){if(this._userEventCount>=this._maxEvents)return this._droppedEvents++,this;this._userEventCount++;let s=t&&Vc(t,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:Xe(e,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:rr(n,this._now(),"event timestamp",this._logger),...s&&{attributes:s.attributes,...s.dropped&&{droppedAttributesCount:s.dropped}}})}return this}setStatus(e,t){if(this._mutable("setStatus")){if(e!=="ok"&&e!=="error")return this._logger?.debug(`Ignoring unknown span status "${String(e)}"; expected "ok" or "error"`),this;this._status={code:e,...t&&{message:Ai(t,this._maxAttributeValueLength)}}}return this}get statusIsExplicitlyOk(){return this._status?.code==="ok"}recordException(e){if(!this._mutable("recordException"))return this;let{type:t,message:n,stack:s}=Ti(e);return this.addEvent(ag,{"exception.type":t,"exception.message":n,...s&&{"exception.stacktrace":s}}),this.setStatus("error",n)}updateName(e){return this._mutable("updateName")&&(this._name=Xe(e,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return Bc(this._traceId,this._spanId,this._traceFlags)}tracestate(){return this._traceState??null}childContext(){return{traceId:this._traceId,parentSpanId:this._spanId,traceState:this._traceState,traceFlags:this._traceFlags,clockAnchor:this._clockAnchor}}end(e){if(this._ended)return void this._logger?.debug("Ignoring end() on a span that has already ended");this._ended=!0;let t=this._now(),n=rr(e,t,"end time",this._logger);this._onEnd({traceId:this._traceId,spanId:this._spanId,...this._parentSpanId&&{parentSpanId:this._parentSpanId},...this._traceState&&{traceState:this._traceState},traceFlags:this._traceFlags,parentIsRemote:this._parentIsRemote,name:this._name,kind:this._kind,...this._status&&{status:this._status},attributes:{...this._attributes},events:this._events,startTime:this._startTime,endTime:Cn(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},ag="exception",cg=4294967295;function lg(r){try{return typeof r=="string"?r:String(r)}catch{return X}}function Qe(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),cg)}function ug(r,e){if(!e.length)return Object.keys(r);let t=e.filter(s=>Object.prototype.propertyIsEnumerable.call(r,s)),n=new Set(t);return[...t,...Object.keys(r).filter(s=>!n.has(s))]}function Gc(r,e,t,n,s,i,o=[]){let a=0,c=0,l={};for(let g of ug(r.attributes,o)){let h=r.attributes[g];if(!se(h)){if(!e.has(g)){if(a>=t){c++;continue}a++}Object.defineProperty(l,g,{value:Fn(h,i),enumerable:!0,writable:!0,configurable:!0})}}r.attributes=l,c&&(r.droppedAttributesCount=Qe(r.droppedAttributesCount)+c);let u=0,f=0,p=[];for(let g of r.events){if(u>=n){f++;continue}if(u++,g.attributes){let h=Vc(g.attributes,s,i);g.attributes=h.attributes,h.dropped&&(g.droppedAttributesCount=Qe(g.droppedAttributesCount)+h.dropped)}p.push(g)}r.events=p,f&&(r.droppedEventsCount=Qe(r.droppedEventsCount)+f),r.status?.message&&(r.status={...r.status,message:Ai(lg(r.status.message),i)})}var xn=class{setAttribute(){return this}setAttributes(){return this}addEvent(){return this}setStatus(){return this}recordException(){return this}updateName(){return this}traceparent(){return null}tracestate(){return null}end(){}},Kc=new xn,nr=class extends xn{constructor(e,t){super(),this._traceparent=e,this._tracestate=t}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function dg(r){try{let e=r.stack;return typeof e=="string"&&e?{stack:e}:{}}catch{return{}}}function We(r,e){let t=Pn(r?.parent)??e,n=typeof t=="string"||t==null?t:Hc(t,"traceparent"),s=$c(n);if(!s)return Kc;let i=typeof t=="string"||t==null?r?.tracestate:Hc(t,"tracestate");return new nr(s,Rn(i))}function Hc(r,e){try{let t=r[e];return typeof t=="function"?t.call(r):void 0}catch{return}}function Ai(r,e){return r.length>e?r.slice(0,e):r}function Fn(r,e){return Mn(r,e,{ancestors:new WeakSet,remainingNodes:1e4},0)}function Mn(r,e,t,n){if(r===null||typeof r!="object")return se(r)||t.remainingNodes<=0?r:(t.remainingNodes--,typeof r=="string"?Ai(r,e):r);if(t.ancestors.has(r))return dn;if(t.remainingNodes<=0||n>=20)return r;t.remainingNodes--,t.ancestors.add(r);try{if(r instanceof Date)return r;let s=fg(r);if(s.selfDescribed)return se(s.value)?String(s.value):Mn(s.value,e,t,n+1);if(q(r)){let a=Math.min(r.length,1e3),c=[];for(let l=0;l<a;l++)try{c.push(Mn(r[l],e,t,n+1))}catch{c.push(X)}return r.length>a&&(c.length=r.length),c}let i={},o=0;for(let a of Object.keys(r)){if(o>=1e3)break;let c;try{c=Mn(r[a],e,t,n+1)}catch{c=X}a&&!se(c)&&o++,Object.defineProperty(i,a,{value:c,enumerable:!0,writable:!0,configurable:!0})}return i}catch{return r}finally{t.ancestors.delete(r)}}function fg(r){try{let e=r.toJSON;if(typeof e=="function")return{selfDescribed:!0,value:e.call(r)}}catch{}return{selfDescribed:!1}}function Vc(r,e,t){let n;try{n=Object.keys(r)}catch{return{attributes:{},dropped:0}}let s={},i=0,o=0;for(let a of n){if(i>=e){o++;continue}let c;try{c=Fn(r[a],t)}catch{c=X}se(c)||(i++,Object.defineProperty(s,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:s,dropped:o}}function qc(r,e){for(let t of Object.keys(r))r[t]=Fn(r[t],e);return r}function sr(r,e,t){return e===Kc?t(e):r.with(e,()=>t(e))}function Ti(r){try{let e=dg(r);if($e(r))return{type:r.name||"Error",message:r.message||"",...e};if(typeof r=="string")return{type:"string",message:r};if(r&&typeof r=="object"){let t=r;if(typeof t.message=="string")return{type:typeof t.name=="string"?t.name:"Object",message:t.message,...e}}return{type:typeof r,message:String(r)}}catch{return{type:typeof r,message:""}}}var Pi={internal:1,server:2,client:3,producer:4,consumer:5},pg={ok:1,error:2},gg=1,hg=256,mg=512;function _g(r){let e=parseInt(r.traceFlags,16);return(Number.isFinite(e)?255&e:gg)|hg|(r.parentIsRemote?mg:0)}function kn(r){if(typeof r=="string")return fe(r);try{return fe(String(r))}catch{return X}}function Eg(r){return r&&Object.prototype.hasOwnProperty.call(Pi,r)?Pi[r]:Pi.internal}function Ii(r){let e=Math.floor(r),t=Math.round((r-e)*1e6);return t>=1e6&&(e+=1,t=0),String(e)+String(t).padStart(6,"0")}function yg(r,e){let t={name:kn(r.name),timeUnixNano:Ii(r.timestamp)};if(r.attributes){let s=ge(r.attributes,e);s.length&&(t.attributes=s)}let n=Qe(r.droppedAttributesCount);return n&&(t.droppedAttributesCount=n),t}function zc(r,e){let t={traceId:r.traceId,spanId:r.spanId,name:kn(r.name),kind:Eg(r.kind),startTimeUnixNano:Ii(r.startTime),endTimeUnixNano:Ii(r.endTime),flags:_g(r)};r.parentSpanId&&(t.parentSpanId=r.parentSpanId),r.traceState&&(t.traceState=kn(r.traceState));let n=ge(r.attributes,e);n.length&&(t.attributes=n),r.events.length&&(t.events=r.events.map(o=>yg(o,e)));let s=Qe(r.droppedAttributesCount);s&&(t.droppedAttributesCount=s);let i=Qe(r.droppedEventsCount);return i&&(t.droppedEventsCount=i),r.status&&(t.status={code:pg[r.status.code],...r.status.message&&{message:kn(r.status.message)}}),t}function Yc(r,e,t){return Jt(r,e,t)}function Jc(r,e,t,n,s){return{resourceSpans:[{resource:{attributes:Xt(e,s)},scopeSpans:[{scope:{name:t,version:n},spans:r}]}]}}var Xc=8;function Dn(){return On()??Date.now()}function Ri(r){try{return r instanceof yt}catch{return!1}}function Qc(r,e){let t=Nc(r);if(t)return{traceId:t.traceId,parentSpanId:t.spanId,traceState:Rn(e),traceFlags:t.flags,isRemote:!0}}function Sg(r){try{return typeof r.traceparent=="function"}catch{return!1}}function bg(r){return!!r.attributes&&typeof r.attributes=="object"&&!Array.isArray(r.attributes)&&Array.isArray(r.events)&&r.name!==void 0&&r.kind!==void 0&&r.startTime!==void 0&&r.endTime!==void 0}function Ln(r,e,t){r[e]!==t&&(r[e]=t)}function wg(r,e){try{let t=Object.getOwnPropertyDescriptors(r);for(let n of["traceId","spanId","parentSpanId","traceState"])t[n]={value:e[n],enumerable:!0,writable:!0,configurable:!0};return Object.create(Object.getPrototypeOf(r),t)}catch{return r}}var ir=class{constructor(e,t,n,s,i,o){this._instance=e,this._config=t,this._logger=n,this._getContext=s,this._contextManager=i,this._onSpanQueued=o,this._queue=[],this._flushTimer=new Je(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=te,this._retryAfter=new ze,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=t.maxExportBatchSize}startSpan(e,t){if(this._instance.isDisabled||this._instance.optedOut)return We(t,this._contextManager.active());let n=Pn(t?.parent);if(n&&typeof n!="string"&&!Ri(n)){if(Sg(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),We(t,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let s=this._resolveParent(n,t);if(this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),We(t,this._contextManager.active());let i=Date.now(),o=jc(t?.startTime,i,this._logger),a=Fc();this._liveSpans.set(a,Dn());let c=this._autoContextAttributes();return new yt({traceId:s?.traceId??xc(),spanId:a,parentSpanId:s?.parentSpanId,traceState:s?.traceState,traceFlags:s?.traceFlags,parentIsRemote:s?.isRemote,name:Xe(e,"Span name",this._config.maxAttributeValueLength,this._logger),kind:t?.kind??"internal",attributes:Re({...c},t?.attributes),autoAttributeKeys:Object.keys(c),maxAttributes:this._config.maxAttributesPerSpan,maxEvents:this._config.maxEventsPerSpan,maxAttributesPerEvent:this._config.maxAttributesPerEvent,maxAttributeValueLength:this._config.maxAttributeValueLength,startTime:o,backdated:o!==i,clockAnchor:Et(t?.startTime)===void 0?s?.clockAnchor:void 0},(l,u)=>this._onSpanEnd(l,u),this._logger)}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this.startSpan(e,s);try{let a=sr(this._contextManager,o,i);return Ja(a)?a.then(c=>(o.end(),c),c=>{throw this._recordCallbackError(o,c),o.end(),c}):(o.end(),a)}catch(a){throw this._recordCallbackError(o,a),o.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let e=this._generation,t=Promise.resolve().then(()=>e===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===t&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=t,t}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=te,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(e,t){if(typeof e=="string"){let s=Qc(e,t?.tracestate);return s||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),s}if(Ri(e))return e.childContext();let n=this._contextManager.active();if(Ri(n))return n.childContext();if(n instanceof nr)return Qc(n.traceparent(),n.tracestate()??void 0)}_autoContextAttributes(){let e;try{e=this._getContext()}catch(n){return this._logger.debug("Failed to read tracing context; span will carry no PostHog attributes",n),{}}let t={};return e.distinctId&&(t.posthogDistinctId=e.distinctId),e.sessionId&&(t.sessionId=e.sessionId),e.currentUrl&&(t["url.full"]=e.currentUrl),e.screenName&&(t["screen.name"]=e.screenName),e.appState&&(t["app.state"]=e.appState),t}_recordCallbackError(e,t){if(!(e instanceof yt))return;let{type:n,message:s,stack:i}=Ti(t);e.addEvent("exception",{"exception.type":n,"exception.message":s,...i&&{"exception.stacktrace":i}}),e.statusIsExplicitlyOk||e.setStatus("error",s)}_evictAgedSpans(){let e=Dn()-this._config.maxSpanAgeMs,t=0;for(let[n,s]of this._liveSpans){if(s>e)break;this._liveSpans.delete(n),t++}t&&this._recordDrop(t,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(e,t){if(!this._liveSpans.delete(e.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(e,t);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(s){this._logger.debug("Span queue notification failed",s)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(e){let t=e.droppedAttributesCount??0,n=e.droppedEventsCount??0,s=0;for(let i of e.events)s+=i.droppedAttributesCount??0;(t||n||s)&&this._logger.debug(`Span limits discarded data from "${e.name}": ${t} attributes, ${n} events, ${s} event attributes`)}_runBeforeSpanSend(e,t){if(!this._config.beforeSpanSend.length)return e;let n={traceId:e.traceId,spanId:e.spanId,parentSpanId:e.parentSpanId,traceState:e.traceState},s={startTime:e.startTime,endTime:e.endTime},i={attributes:e.droppedAttributesCount,events:e.droppedEventsCount},o=Object.keys(e.attributes),a={traceFlags:e.traceFlags,parentIsRemote:e.parentIsRemote},c=e.status&&{...e.status},l=e,u=e;try{for(let g of this._config.beforeSpanSend){let h=g(l);if(!h)return this._recordDrop(1,"beforeSpanSend dropped it"),null;l=this._keepSpanIdentity(h,n)}if(u={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:l.name,kind:l.kind,status:l.status,attributes:l.attributes,events:l.events,startTime:l.startTime,endTime:l.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:i.attributes,droppedEventsCount:i.events},!bg(u))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;u.name=Xe(u.name,"Span name",this._config.maxAttributeValueLength,this._logger),u.status&&u.status.code!=="ok"&&u.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),u.status=c),u.startTime=Et(u.startTime)??s.startTime,u.endTime=Cn(Et(u.endTime)??s.endTime,u.startTime);let p=[];for(let g of u.events)try{p.push({...g,name:Xe(g.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:rr(g.timestamp,u.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return u.events=p,Gc(u,t,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,o),u}catch(f){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",f),this._recordDrop(1,"beforeSpanSend failed"),null}}_keepSpanIdentity(e,t){(e.traceId!==t.traceId||e.spanId!==t.spanId||e.parentSpanId!==t.parentSpanId)&&this._logger.debug("beforeSpanSend changed a span identity field; keeping the original ids");try{Ln(e,"traceId",t.traceId),Ln(e,"spanId",t.spanId),Ln(e,"parentSpanId",t.parentSpanId),Ln(e,"traceState",t.traceState)}catch{return wg(e,t)}return e}_recordDrop(e,t){this._droppedSinceWarning+=e,this._dropReasons.add(t),Date.now()-this._lastDropWarningAt>=this._config.flushIntervalMs&&this._warnAboutDrops()}_warnAboutDrops(){this._droppedSinceWarning&&(this._lastDropWarningAt=Date.now(),this._logger.warn(`Dropping ${this._droppedSinceWarning} span(s): ${[...this._dropReasons].join("; ")}`),this._droppedSinceWarning=0,this._dropReasons.clear())}_encodeBatch(e){let t=[];for(let n of e)try{t.push(zc(n,this._logger))}catch(s){this._logger.debug("Failed to encode a span; dropping it",s),this._recordDrop(1,"its attributes could not be encoded")}return t}_discardQueueIfConsentWithdrawn(){if(!this._instance.isDisabled&&!this._instance.optedOut)return 0;let e=this._queue.length;return this._queue=[],this._resetHeadBatchBudget(),this._recordDrop(e,"the user has opted out"),this._warnAboutDrops(),e}async _flushInner(){if(!this._queue.length)return 0;let e=this._discardQueueIfConsentWithdrawn();if(e)return e;let t=qc(Yc(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._config.maxAttributeValueLength),n=this._instance.getLibraryId(),s=this._instance.getLibraryVersion(),i=this._queue.length,o=0,a=1/0,c=this._generation;try{for(;i>0&&this._queue.length>0;){let l=this._discardQueueIfConsentWithdrawn();if(l)return o+l;let u=this._headBatchFailures>0?Math.min(this._maxExportBatchSize,this._headBatchSize):this._maxExportBatchSize,f=Math.max(1,Math.min(u,a,i,this._queue.length)),p=this._queue.slice(0,f),g=this._encodeBatch(p);if(!g.length){this._queue.splice(0,f),i-=f,o+=f,this._resetHeadBatchBudget();continue}let h=Dn()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),m=await this._instance._sendTracesBatch(Jc(g,t,n,s,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(m),m.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=te,this._resetHeadBatchBudget(),this._queue.splice(0,f),i-=f,o+=f,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(m.kind==="too-large"){if(f===1){this._queue.splice(0,1),i-=1,o+=1,this._recordDrop(1,"it is too large for the ingestion endpoint"),this._consecutiveFlushFailures=0,this._flushJitter=te,this._resetHeadBatchBudget();continue}let E=Math.max(1,Math.floor(f/2));m.measuredLocally?a=E:this._maxExportBatchSize=E,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${E}`);continue}if(m.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=Qt(),this._headBatchSize=f,h&&(this._headBatchFailures++,this._headBatchChargeableAt=Dn()+this._nextFlushDelay()),this._headBatchFailures<Xc)return this._logger.debug("Span export failed; retrying on the next flush",m.error),o;if(this._queue.splice(0,f),i-=f,o+=f,this._consecutiveFlushFailures=0,this._flushJitter=te,this._resetHeadBatchBudget(),this._recordDrop(f,`the ingestion endpoint failed ${Xc} times in a row`),this._retryAfter.isOpen())return o;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",m.error),this._queue.splice(0,f),i-=f,o+=f,this._consecutiveFlushFailures=0,this._flushJitter=te,this._resetHeadBatchBudget(),this._recordDrop(f,"the ingestion endpoint rejected the batch")}return o}finally{this._warnAboutDrops()}}_flushInBackground(){this._backgroundFlush||(this._backgroundFlush=this.flush().catch(e=>{this._logger.debug("Background span flush failed",e)}).finally(()=>{this._backgroundFlush=void 0,this._armFlushTimerIfQueuedNoEarlierThan()}))}_armFlushTimerIfQueued(){this._flushTimer.pending||!this._queue.length||this._flushTimer.arm(this._nextFlushDelay())}_armFlushTimerIfQueuedNoEarlierThan(){this._queue.length&&this._flushTimer.armNoEarlierThan(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Zt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var or=class{active(){return this._active}with(e,t){let n=this._active;this._active=e;try{return t()}finally{this._active=n}}};var vg=5e3,Ag=512,Tg=2048,Pg=128,Ig=128,Rg=128,Cg=8192,Mg=1e4,Og=36e5;function je(r,e){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:e}var Zc=["service.name","service.version","deployment.environment"];function xg(r){if(!(!r||typeof r!="object"||Array.isArray(r)))try{if(Zc.every(t=>!(t in r)||typeof r[t]=="string"))return r;let e={...r};for(let t of Zc)t in e&&typeof e[t]!="string"&&delete e[t];return e}catch{return}}function Fg(r,e){if(!r)return[];let t=[r].flat().filter(s=>!!s),n=t.filter(s=>typeof s=="function");return n.length!==t.length&&e?.critical(`beforeSpanSend: ignoring ${t.length-n.length} of ${t.length} entries that are not functions. Spans export without them, so whatever they were redacting is not redacted.`),n}function Ci(r,e,t){let n=Re({...e},xg(r?.resourceAttributes)),s=je(r?.maxExportBatchSize,Ag);return{serviceName:n?.["service.name"]??r?.serviceName,serviceVersion:n?.["service.version"]??r?.serviceVersion,environment:n?.["deployment.environment"]??r?.environment,resourceAttributes:n,beforeSpanSend:Fg(r?.beforeSpanSend,t),maxAttributesPerSpan:je(r?.maxAttributesPerSpan,Pg),maxEventsPerSpan:je(r?.maxEventsPerSpan,Ig),maxAttributesPerEvent:Rg,maxAttributeValueLength:je(r?.maxAttributeValueLength,Cg),flushIntervalMs:je(r?.flushIntervalMs,vg),maxExportBatchSize:s,maxQueueSize:Math.max(je(r?.maxQueueSize,Tg),s),maxLiveSpans:je(r?.maxLiveSpans,Mg),maxSpanAgeMs:je(r?.maxSpanAgeMs,Og)}}var Mi=require("node:fs"),rl=require("node:fs/promises"),xi=require("node:path"),nl=require("node:readline"),Nn=new k.ReduceableCache(25),ar=new k.ReduceableCache(20),Fi=7,kg=1e3,Dg=1e4,Oi=10485760;async function sl(r,e=rl.open,t){let n={},s;try{s=process.cwd()}catch{}for(let a=r.length-1;a>=0;a--){let c=r[a],l=c?.filename;if(!c||typeof l!="string"||typeof c.lineno!="number"||Bg(l)||Wg(c)||!(0,xi.isAbsolute)(l)&&s===void 0)continue;n[l]||(n[l]=[]),n[l].push(c.lineno)}let i=Object.keys(n);if(i.length==0)return r;let o=[];for(let a of i){let c=il(a,s);if(c===void 0||ar.get(c))continue;let l=n[a];if(!l)continue;l.sort((p,g)=>p-g);let u=Hg(l);if(u.every(p=>jg(c,p)))continue;let f=Gg(Nn,c,{});o.push(Ng(a,u,f,c,e,t))}return await Promise.all(o).catch(()=>{}),r&&r.length>0&&Ug(r,Nn,s),Nn.reduce(),r}async function Lg(r,e,t){let n,s=!1;try{n=await e(r,Mi.constants.O_RDONLY|Mi.constants.O_NONBLOCK);let i=await n.stat();return i.isFile()?i.size>Oi?void t?.debug(`Skipping source context for oversized file ${r}: ${i.size} bytes exceeds ${Oi}`):(s=!0,n):void 0}catch{return}finally{n&&!s&&await n.close().catch(()=>{})}}async function Ng(r,e,t,n,s,i){let o=await Lg(r,s,i);if(o===void 0)return void ar.set(n,1);let a=o;return new Promise(c=>{let l=!1;function u(P){l||(l=!0,P?.destroy(),a.close().then(c,c))}let f;try{f=a.createReadStream({autoClose:!1,start:0,end:Oi-1})}catch{ar.set(n,1),u();return}let p;try{p=(0,nl.createInterface)({input:f})}catch{ar.set(n,1),u(f);return}let g=0,h=0,m=e[h];if(m===void 0)return void u(f);let E=m[0],_=m[1];function S(){ar.set(n,1),p.close(),p.removeAllListeners(),u(f)}f.on("error",S),p.on("error",S),p.on("close",()=>u(f)),p.on("line",P=>{if(g++,!(g<E)&&(t[g]=Kg(P,0),g>=_)){if(h===e.length-1){p.close(),p.removeAllListeners();return}h++;let T=e[h];if(T===void 0){p.close(),p.removeAllListeners();return}E=T[0],_=T[1]}})})}function Ug(r,e,t){for(let n of r)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let s=il(n.filename,t),i=s===void 0?void 0:e.get(s);if(i===void 0)continue;$g(n.lineno,n,i)}}function $g(r,e,t){if(e.lineno===void 0||t===void 0)return;e.pre_context=[];for(let s=ol(r);s<r;s++){let i=t[s];if(i===void 0)return void el(e);e.pre_context.push(i)}if(t[r]===void 0)return void el(e);e.context_line=t[r];let n=al(r);e.post_context=[];for(let s=r+1;s<=n;s++){let i=t[s];if(i===void 0)break;e.post_context.push(i)}}function el(r){delete r.pre_context,delete r.context_line,delete r.post_context}function Bg(r){return r.startsWith("node:")||r.endsWith(".min.js")||r.endsWith(".min.cjs")||r.endsWith(".min.mjs")||r.startsWith("data:")}function Wg(r){return r.lineno!==void 0&&r.lineno>Dg||r.colno!==void 0&&r.colno>kg}function il(r,e){return(0,xi.isAbsolute)(r)?JSON.stringify([null,r]):e===void 0?void 0:JSON.stringify([e,r])}function jg(r,e){let t=Nn.get(r);if(t===void 0)return!1;for(let n=e[0];n<=e[1];n++)if(t[n]===void 0)return!1;return!0}function Hg(r){if(!r.length)return[];let e=0,t=r[0];if(typeof t!="number")return[];let n=tl(t),s=[];for(;;){if(e===r.length-1){s.push(n);break}let i=r[e+1];if(typeof i!="number")break;i<=n[1]?n[1]=i+Fi:(s.push(n),n=tl(i)),e++}return s}function tl(r){return[ol(r),al(r)]}function ol(r){return Math.max(1,r-Fi)}function al(r){return r+Fi}function Gg(r,e,t){let n=r.get(e);return n===void 0?(r.set(e,t),t):n}function Kg(r,e){let t=r,n=t.length;if(n<=150)return t;e>n&&(e=n);let s=Math.max(e-60,0);s<5&&(s=0);let i=Math.min(s+140,n);return i>n-5&&(i=n),i===n&&(s=Math.max(i-140,0)),t=t.slice(s,i),s>0&&(t=`...${t}`),i<n&&(t+="..."),t}var St=require("path");function cl(r=process.cwd()){let e=St.sep==="\\",t=s=>e?s.replace(/\\/g,"/"):s,n=t(r);return async s=>{for(let i of s)!i.filename||i.filename.startsWith("node:")||i.filename.startsWith("data:")||(0,St.isAbsolute)(i.filename)&&(i.filename=t((0,St.relative)(n,t(i.filename))));return s}}var ll="5.52.4";var Me={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var He=class r{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e,t={}){let n=this._flags[e];return this._recordAccess(e),n?.enabled??t.defaultValue??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!!t)return t.enabled?t.variant??!0:!1}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let n=this._flags[t];n&&(e[t]=n)}return this._cloneWith(e)}only(e){let t={},n=[];for(let s of e){let i=this._flags[s];i?t[s]=i:n.push(s)}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(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[n,s]of Object.entries(this._flags)){let i=s.enabled===!1?!1:s.variant??!0;e[`$feature/${n}`]=i,s.enabled&&t.push(n)}return t.length>0&&(t.sort(),e.$active_feature_flags=t),e}_cloneWith(e){return new r({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId===""||this._isSlice&&!(e in this._flags))return;let t=this._flags[e],n=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,s={$feature_flag:e,$feature_flag_response:n,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};t?.hasExperiment!==void 0&&(s.$feature_flag_has_experiment=t.hasExperiment),t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(s.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let i=[];this._errorsWhileComputing&&i.push(Me.ERRORS_WHILE_COMPUTING),this._quotaLimited&&i.push(Me.QUOTA_LIMITED),t===void 0&&i.push(Me.FLAG_MISSING),i.length>0&&(s.$feature_flag_error=i.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:s})}};var Vg=6e4,bt=class r extends Error{constructor(e){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,r.prototype)}};function qg(r,e){r.name=e.name,Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype)}var he=class r extends Error{constructor(e){super(e),qg(this,r)}},Un=class{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:n,timeout:s,host:i,customHeaders:o,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollerStopped=!1,this.filteredOutFlagKeys=new Set,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=s,this.projectApiKey=n,this.host=i,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=o,this.onLoad=a.onLoad,this.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){this.debugMode&&e()}createEvaluationContext(e,t={},n={},s={},i={}){return{distinctId:e,groups:t,personProperties:n,groupProperties:s,evaluationCache:i}}async getFeatureFlag(e,t,n={},s={},i={}){await this.loadFeatureFlags();let o,a;if(!this.loadedSuccessfullyOnce)return o;if(a=this.featureFlagsByKey[e],a!==void 0){let c=this.createEvaluationContext(t,n,s,i);try{o=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${o}`))}catch(l){l instanceof he||l instanceof b?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${e}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${e}: ${l}`))}}return o}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let n={},s={},i=this.featureFlags.length==0,o=t?t.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a={...e,evaluationCache:e.evaluationCache??{}};return await Promise.all(o.map(async c=>{try{let{value:l,payload:u}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=l,u&&(s[c.key]=u)}catch(l){l instanceof he||l instanceof b?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${c.key}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${l}`)),i=!0}})),{response:n,payloads:s,fallbackToFlags:i}}async computeFlagAndPayloadLocally(e,t,n={}){let{matchValue:s,skipLoadCheck:i=!1}=n;if(i||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let o;o=s!==void 0?s:await this.computeFlagValueLocally(e,t);let a=this.getFeatureFlagPayload(e.key,o);return{value:o,payload:a}}async computeFlagValueLocally(e,t){let{distinctId:n,groups:s,personProperties:i,groupProperties:o}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new b("Flag has experience continuity enabled");let c=(e.filters||{}).aggregation_group_type_index;if(c!=null){let l=this.groupTypeMapping[String(c)];if(!l)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${e.key}`)),new b("Flag has unknown group type index");if(!(l in s))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${e.key} without group names passed in`)),!1;e.bucketing_identifier==="device_id"&&(i?.$device_id===void 0||i?.$device_id===null||i?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${e.key}`));let u=o[l];return await this.matchFeatureFlagProperties(e,s[l],u,t)}{let l=this.getBucketingValueForFlag(e,n,i);if(l===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${e.key} without $device_id, falling back to server evaluation`)),new b(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,l,i,t)}}getBucketingValueForFlag(e,t,n){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let s=n?.$device_id;return s==null||s===""?void 0:s}return t}getFeatureFlagPayload(e,t){return gi(this.featureFlagsByKey?.[e]?.filters?.payloads,t)}async evaluateFlagDependency(e,t,n){let{evaluationCache:s}=n,i=e.key;if(!this.featureFlagsByKey)throw new b("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new b(`Flag dependency property for '${i}' is missing required 'dependency_chain' field`);let o=e.dependency_chain;if(!Array.isArray(o))throw new b(`Flag dependency property for '${i}' has an invalid 'dependency_chain' (expected array, got ${typeof o})`);if(o.length===0)throw new b(`Circular dependency detected for flag '${i}' (empty dependency chain)`);for(let c of o){if(!(c in s)){let u=this.featureFlagsByKey[c];if(u)if(u.active)try{let f=await this.computeFlagValueLocally(u,n);s[c]=f}catch(f){throw new b(`Error evaluating flag dependency '${c}' for flag '${i}': ${f}`)}else s[c]=!1;else if(this.filteredOutFlagKeys.has(c))s[c]=!1;else throw new b(`Missing flag dependency '${c}' for flag '${i}'`)}if(s[c]==null)throw new b(`Dependency '${c}' could not be evaluated`)}let a=s[i];return this.flagEvaluatesToExpectedValue(e.value,a)}flagEvaluatesToExpectedValue(e,t){return typeof e=="boolean"?e===t||typeof t=="string"&&t!==""&&e===!0:typeof e=="string"?t===e:!1}async matchFeatureFlagProperties(e,t,n,s){let i=e.filters||{},o=i.groups||[],a=i.aggregation_group_type_index,c=i.early_exit??!1,{groups:l,groupProperties:u}=s,f=!1,p;for(let g of o)try{let h=g.aggregation_group_type_index!==void 0?g.aggregation_group_type_index:a,m=n,E=t;if(h!==a&&h!=null){let S=this.groupTypeMapping[String(h)];if(!S||!(S in l)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${h} not available`));continue}if(!(S in u)){f=!0;continue}m=u[S],E=l[S]}let _=await this.isConditionMatch(e,E,g,m,s);if(_==="match"){let S=g.variant,P=i.multivariate?.variants||[];p=S&&P.some(T=>T.key===S)?S:await this.getMatchingVariant(e,E)||!0;break}if(c&&_==="out_of_rollout_bound"){if(f)break;return!1}}catch(h){if(h instanceof he)throw h;if(h instanceof b)f=!0;else throw h}if(p!==void 0)return p;if(f)throw new b("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,n,s,i){let o=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let l=c.type,u=!1;if(l==="cohort"){let f=await dl(c,s,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,s,i));u=c.operator==="not_in"?!f:f}else u=l==="flag"?await this.evaluateFlagDependency(c,s,i):ul(c,s,a);if(!u)return"no_match"}if(o==null)return"match"}return o!=null&&await wn(e.key,t)>o/100?"out_of_rollout_bound":"match"}async getMatchingVariant(e,t){return pi(e.key,t,e.filters?.multivariate?.variants||[])}variantLookupTable(e){return vn(e.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(e){if(!this.evaluationContexts||this.evaluationContexts.length===0)return e;let t=new Set(this.evaluationContexts);return e.filter(n=>{let s=n.evaluation_contexts??n.evaluation_tags;return!s||s.length===0?!0:s.some(i=>t.has(i))})}updateFlagState(e){let t=this.filterFlagsByEvaluationContexts(e.flags);this.featureFlags=t,this.featureFlagsByKey=t.reduce((s,i)=>(s[i.key]=i,s),{});let n=new Set(t.map(s=>s.key));this.filteredOutFlagKeys=new Set(e.flags.filter(s=>!n.has(s.key)).map(s=>s.key)),this.groupTypeMapping=e.groupTypeMapping,this.cohorts=e.cohorts,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.(e.minimalFlagCalledEvents===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter(n=>n.ensure_experience_continuity);t.length>0&&console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.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(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();return t?(this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags),!0):!1}catch(t){return this.onError?.(new Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(!(this.loadedSuccessfullyOnce&&!e))return!e&&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(t=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).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(Vg,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);try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!e&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new bt(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new bt(`Your secret key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new bt(`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 t.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let s={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{},minimalFlagCalledEvents:n.minimal_flag_called_events===!0};if(this.updateFlagState(s),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(s)}catch(i){this.onError?.(new Error(`Failed to store in cache: ${i}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(e){e instanceof bt&&this.onError?.(e)}finally{this.pollerStopped||(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}getPersonalApiKeyRequestOptions(e="GET",t){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return t&&(n["If-None-Match"]=t),{method:e,headers:n}}async _requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=W(()=>{i.abort()},this.timeout),t.signal=i.signal}let s=()=>clearTimeout(n);try{let i=this.fetch,o=await i(e,t);return o.status!==200?(s(),o):{status:o.status,headers:o.headers,body:o.body,text:async()=>{try{return await o.text()}finally{s()}},json:async()=>{try{return await o.json()}finally{s()}}}}catch(i){throw s(),i}}async stopPoller(e=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let t=this.cacheProvider.shutdown();t instanceof Promise&&await Be(t,e,()=>{throw new Error(`Cache shutdown timeout after ${e}ms`)})}catch(t){this.onError?.(new Error(`Error during cache shutdown: ${t}`))}}};function ul(r,e,t){return fi(r,e,{warnFunction:t})}function zg(r,e){if(!(r in e))throw new he(`cohort ${r} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function dl(r,e,t,n=!1,s){let i=String(r.value);zg(i,t);let o=t[i];return fl(o,e,t,n,s)}async function fl(r,e,t,n=!1,s){if(!r)return!0;let i=r.type,o=r.values;if(!o||o.length===0)return!0;let a=!1;if("values"in o[0]){for(let c of o)try{let l=await fl(c,e,t,n,s);if(i==="AND"){if(!l)return!1}else if(l)return!0}catch(l){if(l instanceof he)throw l;if(l instanceof b)n&&console.debug(`Failed to compute property ${c} locally: ${l}`),a=!0;else throw l}if(a)throw new b("Can't match cohort without a given cohort property value");return i==="AND"}for(let c of o)try{let l;if(c.type==="cohort")l=await dl(c,e,t,n,s);else if(c.type==="flag"){if(!s)throw new b(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);l=await s(c)}else l=ul(c,e);let u=c.negation||!1;if(i==="AND"){if(!l&&!u||l&&u)return!1}else if(l&&!u||!l&&u)return!0}catch(l){if(l instanceof he)throw l;if(l instanceof b)n&&console.debug(`Failed to compute property ${c} locally: ${l}`),a=!0;else throw l}if(a)throw new b("can't match cohort without a given cohort property value");return i==="AND"}var Yg=["--unhandled-rejections","--unhandled_rejections"],Jg=new Set(["throw","strict","warn","warn-with-error-code","none"]),Xg=[...globalThis.process?.execArgv??[]],Qg=globalThis.process?.env?.NODE_OPTIONS;function Zg(r){let e=[],t="",n=!1;for(let s=0;s<r.length;s++){let i=r[s];i==="\\"&&n&&s+1<r.length?t+=r[++s]:i!==" "||n?i==='"'?n=!n:t+=i:t&&(e.push(t),t="")}return t&&e.push(t),e}function pl(r){let e;for(let t=0;t<r.length;t++){let n=r[t],s=Yg.find(o=>n===o||n.startsWith(`${o}=`));if(!s)continue;let i=n===s?r[++t]:n.slice(s.length+1);Jg.has(i)&&(e=i)}return e}function eh(r=Xg,e=Qg){return pl(r)??pl(Zg(e??""))??"throw"}var gl=eh();function hl(r,e,t){r(e,{mechanism:{type:t==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function th(r,e){let t=!1;return Object.assign((n,s)=>{let i=global.process.listeners("uncaughtException").filter(o=>o.name!=="domainUncaughtExceptionClear"&&o._posthogErrorHandler!==!0).length;hl(r,n,s),!t&&i===0&&(t=!0,e(n))},{_posthogErrorHandler:!0})}function ml(r,e,t=gl){let n=globalThis.process;if(n){if(t==="strict")return void n.on("uncaughtExceptionMonitor",(s,i)=>hl(r,s,i));n.on("uncaughtException",th(r,e))}}function _l(r,e=gl){let t=globalThis.process;!t||e==="throw"||e==="strict"||e==="warn-with-error-code"||t.on("unhandledRejection",n=>{r(n,{mechanism:{type:"onunhandledrejection",handled:!1}})})}var rh=2e3,ki=class r{constructor(e,t,n){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new rn({...Ca(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return Ft(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,n,s,i){let o={...i},a=e.buildFromUnknown(t,n);a.$exception_list=await e.modifyFrames(a.$exception_list);let c=k.getInjectedReleaseId();return c&&(o.$release_id=c),{event:"$exception",distinctId:s,properties:{...a,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(ml(this.onException.bind(this),this.onFatalError.bind(this)),_l(this.onException.bind(this)))}onException(e,t){this.client.addPendingPromise((async()=>{if(!r.isPreviouslyCapturedError(e)){let n=await r.buildEventMessage(this.client.getErrorPropertiesBuilder(),e,t),i=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(i)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:i}):this.client._capturePreparedEvent(n,!1)}})())}async onFatalError(e){console.error(e),await this.client.shutdown(rh),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},Ze=ki;var $n=class{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}};function nh(r){return r==="v0"||r==="v1"}function El(){let r="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return nh(r)?r:"v0"}var sh="$ai_",cr="analytics";function yl(r){return typeof r.event=="string"&&r.event.startsWith(sh)}var wt=class r extends Error{constructor({requestId:e,drops:t,retryExhausted:n,cause:s}){super(r.buildMessage(e,t,n,s)),this.name="CaptureV1Error",this.requestId=e,this.drops=t,this.retryExhausted=n,this.cause=s}static buildMessage(e,t,n,s){let i=`Capture V1 batch ${e} did not fully deliver: ${t.length} dropped, ${n.length} undelivered`;return s instanceof Error&&(i+=` (${s.message})`),i}};function Di(r){if(typeof r=="boolean")return r;if(typeof r=="number")return r!==0;if(typeof r=="string"){let e=r.trim().toLowerCase();if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1}}function ih(r){return typeof r=="string"?r:void 0}var oh=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:Di},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:Di},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:Di},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:ih}],ah=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function ch(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function lh(r){if(typeof r=="string"){let t=new Date(r);if(Number.isNaN(t.getTime()))return new Date().toISOString();let n=t.toISOString(),s=r.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1];return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}if(r instanceof Date)return Number.isNaN(r.getTime())?new Date().toISOString():r.toISOString();let e=r==null?new Date:new Date(r);return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString()}function Sl(r,e,t){t!==void 0&&!(e in r)&&(r[e]=t)}function uh(r){let t={...ch(r.properties)?r.properties:{}},n={};for(let{property:i,optionKey:o,coerce:a}of oh)if(i in t){let c=a(t[i]);c!==void 0&&(n[o]=c),delete t[i]}let s={};for(let{property:i,field:o}of ah)if(i in t){let a=t[i];typeof a=="string"&&(s[o]=a),delete t[i]}return delete t.$lib,delete t.$lib_version,Sl(t,"$set",r.$set),Sl(t,"$set_once",r.$set_once),{event:String(r.event??""),uuid:String(r.uuid??""),distinct_id:String(r.distinct_id??""),timestamp:lh(r.timestamp),...s,options:n,properties:t}}function bl(r,{createdAt:e,historicalMigration:t}){let n={created_at:e,batch:r.map(uh)};return t&&(n.historical_migration=!0),n}var dh="/i/v1/analytics/events",fh=3e4,ph=new Set([408,500,502,503,504]),Bn=class{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??fh,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??(n=>new Promise(s=>W(s,n))),this.generateRequestId=t.generateRequestId??B,this.compress=t.compress??Vt}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:s}=bl(e,{createdAt:n,historicalMigration:this.config.historicalMigration}),i=`${this.config.host}${dh}`,o=[],a=s,c=Math.max(1,this.config.maxAttempts);for(let l=1;l<=c;l++){let u=l===c,f=Ue({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),p,g;try{p=await this.sendOnce(i,f,l,t);let{response:h,signal:m}=p,{status:E}=h;if(E<200||E>=300)if(!u&&ph.has(E)){let _=this.parseRetryAfter(h);await p.waitFor(p.cancelBody()).catch(()=>{}),g=this.backoffDelay(l,_)}else{let _=await this.buildHttpError(h,E,p.waitFor);return this.surfaceBatchFailure(t,o,a,_)}else{let _;try{_=await p.waitFor(this.parseResponse(h))}catch(T){if(m.aborted)throw T;return this.surfaceBatchFailure(t,o,a,new Error(`Capture V1 returned an unparseable ${E} response body`))}let S=this.classify(a,_,o);if(S.length===0)return this.surfacePartialDrops(t,o);if(u)return void this.onError(new wt({requestId:t,drops:o,retryExhausted:S.map(T=>T.uuid)}));a=S;let P=this.parseRetryAfter(h);g=this.backoffDelay(l,P)}}catch(h){if(p&&!p.signal.aborted)throw h;if(u)return this.surfaceBatchFailure(t,o,a,h);g=this.backoffDelay(l)}finally{p?.cleanup()}g!==void 0&&await this.sleep(g)}}async sendOnce(e,t,n,s){let i=this.buildHeaders(n,s),o=t;if(this.config.compressionEnabled){let f=await this.compress(t,this.config.isDebug);f!==null&&(o=f,i["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",l,u=new Promise((f,p)=>{l=W(()=>{let g=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);g.name="AbortError",p(g),a.abort(g)},this.config.requestTimeoutMs)});try{let f=this.fetchFn(e,{method:"POST",headers:i,body:o,signal:a.signal}),p=!1;f.then(_=>{a.signal.aborted&&!p&&this.cancelBody(_)}).catch(()=>{});let g=await Promise.race([f,u]);p=!0,c="while reading the response body";let h=!1,m,E=()=>m??=this.cancelBody(g);return{response:g,signal:a.signal,waitFor:_=>Promise.race([_,u]),cancelBody:E,cleanup:()=>{h||(h=!0,clearTimeout(l),a.signal.aborted&&E())}}}catch(f){throw clearTimeout(l),f}}buildHeaders(e,t){let n=`${this.config.libraryId}/${this.config.libraryVersion}`,s={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":n,"PostHog-Attempt":String(e),"PostHog-Request-Id":t,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};return this.config.userAgent&&(s["User-Agent"]=this.config.userAgent),s}classify(e,t,n){let s=t.results??{},i=[];for(let o of e){let a=s[o.uuid];a&&(a.result==="drop"?n.push({uuid:o.uuid,details:a.details??void 0}):a.result==="retry"&&i.push(o))}return i}backoffDelay(e,t){let n=Math.min(this.config.initialRetryDelayMs*2**(e-1),this.maxBackoffMs);return t===void 0?n:Math.max(n,Math.min(t,this.maxBackoffMs))}parseRetryAfter(e){let t=e.headers?.get("Retry-After");if(!t)return;let n=t.trim();if(/^\d+$/.test(n)){let o=parseInt(n,10);return Number.isFinite(o)&&o>0?1e3*o:void 0}let s=Date.parse(n);if(Number.isNaN(s))return;let i=s-this.now();return i>0?i:void 0}async parseResponse(e){let t=await e.text(),n=JSON.parse(t);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("unexpected response shape");let s=n.results;if(s!==void 0&&(typeof s!="object"||s===null||Array.isArray(s)))throw new Error("unexpected results shape");return{results:s??{}}}async buildHttpError(e,t,n){let s="";try{s=(await n(e.text())).slice(0,512)}catch{}let i=s?`: ${s}`:"";return new Error(`Capture V1 request failed with HTTP ${t}${i}`)}surfaceBatchFailure(e,t,n,s){this.onError(new wt({requestId:e,drops:t,retryExhausted:n.map(i=>i.uuid),cause:s}))}surfacePartialDrops(e,t){t.length>0&&this.onError(new wt({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){try{await e.body?.cancel()}catch{}}};var et="ai-capture",Wn="/i/v0/ai/batch/";var hh=new TextEncoder;function Ni(r){return hh.encode(Ue(r)).length}function wl(r,e=8388608,t=5242880){let n=[],s=[],i=[],o=0;for(let a of r){if(a===void 0)continue;let c=Ni(a);if(c>e){s.push({event:typeof a.event=="string"?a.event:"unknown",bytes:c});continue}i.length>0&&o+c>t&&(n.push(i),i=[],o=0),i.push(a),o+=c}return i.length>0&&n.push(i),{batches:n,dropped:s}}var mh=100,vl=3e4,_h=5e4,Eh=50,yh=500,Sh="https://us.i.posthog.com",Al=new Set;function Hn(r,e){Al.has(r)||(Al.add(r),console.warn(`[PostHog] ${e}`))}function bh(r){return typeof r=="string"?r.trim():""}function wh(r){return(typeof r=="string"?r.trim():"")||void 0}function vh(r){return(typeof r=="string"?r.trim():"")||Sh}function Ah(r){return(Array.isArray(r)?r:[r]).filter(t=>typeof t=="string"&&t.trim().length>0)}function Th(r){if(!r)return{};let e={};for(let[n,s]of Object.entries(r))e[`$feature/${n}`]=s;let t=Object.keys(r).filter(n=>r[n]!==!1).sort();return t.length>0&&(e.$active_feature_flags=t),e}var Gn=class extends qt{constructor(e,t={}){let n=bh(e),s={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5e3,host:vh(t.host),personalApiKey:wh(t.secretKey??t.personalApiKey)};if(super(n,s),this._memoryStorage=new $n,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=s,this.captureMode=El(),this.enableFullAiCapture=s.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof s.featureFlagsPollingInterval=="number"?Math.max(s.featureFlagsPollingInterval,mh):vl,typeof s.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(s.waitUntilDebounceMs,0)),typeof s.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(s.waitUntilMaxWaitMs,0)),!this.disabled&&s.personalApiKey){if(s.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.');s.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new Un({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:s.personalApiKey,projectApiKey:n,timeout:s.requestTimeout??1e4,host:this.host,fetch:s.fetch,onError:o=>{this._events.emit("error",o)},onLoad:o=>{this._events.emit("localEvaluationFlagsLoaded",o)},onMinimalFlagCalledEvents:o=>{this._minimalFlagCalledEvents=o},customHeaders:this.getCustomHeaders(),cacheProvider:s.flagDefinitionCacheProvider,strictLocalEvaluation:s.strictLocalEvaluation,evaluationContexts:s.evaluationContexts??s.evaluationEnvironments}))}this.errorTracking=new Ze(this,s,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=s.maxCacheSize||_h}enqueue(e,t,n,s){super.enqueue(e,t,n,s),this.scheduleDebouncedFlush()}_flushEventsAndSpans(e=!1){let t=this.flushWithPendingPromises();return!this._traces||e&&this._traces.throttled?t:Lt([t,this._traces.flush().catch(()=>{})]).then(([n])=>{if(n.status==="rejected")throw n.reason})}flushAutomatic(){return this._flushKeepingRuntimeAlive(!0)}async flush(){return this._flushKeepingRuntimeAlive(!1)}_flushKeepingRuntimeAlive(e){let t=this._flushEventsAndSpans(e),n=this.options.waitUntil;if(n&&!this._waitUntilCycle)try{n(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let e=this.options.waitUntil;if(!e||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let o,a=new Promise(c=>{o=c});try{e(a)}catch{return}this._waitUntilCycle={resolve:o,startedAt:Date.now(),timer:void 0}}let t=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??yh,s=t>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),s)return void this.resolveWaitUntilFlush();let i=this.options.waitUntilDebounceMs??Eh;this._waitUntilCycle.timer=W(()=>{this.resolveWaitUntilFlush()},i)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;return e&&(clearTimeout(e.timer),this._waitUntilCycle=void 0),e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this._flushEventsAndSpans()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&yl(e)?"ai":cr}persistedQueueKeyForRoute(e){return e===et?G.AiCaptureQueue:e==="ai"?G.AiQueue:G.Queue}getActiveQueueRoutes(){let e=this.captureMode==="v1"?[cr,"ai"]:[cr];return this._aiCaptureRouteActive&&e.push(et),e}getBatchEndpointPath(e){return e===et?Wn:super.getBatchEndpointPath(e)}async sendBatch(e,t,n=cr){if(n===et)return this.sendAiCaptureBatch(e,t);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(e,t,n);let s=e.filter(i=>i!==void 0);await this.getV1Sender().sendV1Batch(s)}async sendAiCaptureBatch(e,t){let{batches:n,dropped:s}=wl(e);for(let{event:i,bytes:o}of s){let a=`Event ${i} (${o} bytes) exceeds the ${8388608/1048576}MiB limit for ${Wn}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let i of n)await this.sendAiSubBatch(i,t)}async sendAiSubBatch(e,t){try{await super.sendBatch(e,t,et)}catch(n){if(!_t(n))throw n;if(e.length===1){let[i]=e,a=`Event ${typeof i.event=="string"?i.event:"unknown"} (${Ni(i)} bytes) was rejected with 413 by ${Wn} on its own, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a));return}let s=Math.ceil(e.length/2);await this.sendAiSubBatch(e.slice(0,s),t),await this.sendAiSubBatch(e.slice(s),t)}}getV1Sender(){return this._v1Sender||(this._v1Sender=new Bn({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3e3,isDebug:this.isDebug},{fetch:(e,t)=>this.fetch(e,t),onError:e=>this._events.emit("error",e),compress:e=>this.compressPayload(e)})),this._v1Sender}getLibraryVersion(){return ll}get metrics(){return this._metrics||(this._metrics=new tr(this,Tn(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new or}hostResourceAttributes(){return{}}get _spanContextManager(){return this._spanContext||(this._spanContext=this.initializeSpanContextManager()),this._spanContext}get _tracesPipeline(){if(this.options.traces)return this._traces||(this._traces=new ir(this,Ci(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let e=this.context?.get();return{distinctId:e?.distinctId,sessionId:e?.sessionId}}startSpan(e,t){return this._tracesPipeline?.startSpan(e,t)??We(t,this._spanContextManager.active())}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this._tracesPipeline;return o?s?o.withSpan(e,s,i):o.withSpan(e,i):sr(this._spanContextManager,We(s,this._spanContextManager.active()),i)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let e=super.getCommonEventProperties();return(this.options.isServer??!0)&&(e.$is_server=!0),e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,n){typeof e=="string"&&this._logger.warn(t),e.event==="$exception"&&!e._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(e,t,n,s,i){return this.addPendingPromise(this._prepareEventMessage(t,s).then(({distinctId:o,event:a,properties:c,options:l})=>{let u={timestamp:l.timestamp,disableGeoip:l.disableGeoip,uuid:l.uuid},f={distinctId:o,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(e,f,u,i):this.enqueue(e,f,u,i)}).catch(o=>{o&&console.error(o)}))}_capturePreparedEvent(e,t){return this._sendPreparedEvent("capture",e,t)}capture(e){this._warnIfInvalidCapture(e,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(e,!1)}async captureImmediate(e){return this._warnIfInvalidCapture(e,"Called captureImmediate() with a string as the first argument when an object was expected.","Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this._capturePreparedEvent(e,!0)}captureAi(e){if(this.disabled)return;let t=Ye(e.uuid,B);return this._sendPreparedAiEvent({...e,uuid:t},!1),t}async captureAiImmediate(e){if(this.disabled)return;let t=Ye(e.uuid,B);return await this._sendPreparedAiEvent({...e,uuid:t},!0),t}_sendPreparedAiEvent(e,t){return typeof e?.event=="string"&&!e.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${e.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",e,t,void 0,et)}identify({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:n={}}){if(Object.keys(t).length===0&&Object.keys(n).length===0)return;let s={};Object.keys(t).length>0&&(s.$set=t),Object.keys(n).length>0&&(s.$set_once=n),this.capture({distinctId:e,event:"$set",properties:s})}unsetPersonProperties({distinctId:e,properties:t}){let n=Ah(t);n.length!==0&&this.capture({distinctId:e,event:"$set",properties:{$unset:n}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}async waitForLocalEvaluationReady(e=vl){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(t=>{let n=setTimeout(()=>{s(),t(!1)},e),s=this._events.on("localEvaluationFlagsLoaded",i=>{clearTimeout(n),s(),t(i>0)})})}_resolveDistinctId(e,t){return typeof e=="string"?{distinctId:e,options:t}:{distinctId:this.context?.get()?.distinctId,options:e}}async _getFeatureFlagResult(e,t,n={},s){if(this.disabled)return void this._logger.warn("The client is disabled");let i=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&e in this._flagOverrides){let y=this._flagOverrides[e];if(y===void 0)return;let w=this._payloadOverrides?.[e];return{key:e,enabled:y!==!1,variant:typeof y=="string"?y:void 0,payload:w}}let{groups:o,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=n,f=this.addLocalPersonAndGroupProperties(t,o,l,u);l=f.allPersonProperties,u=f.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(t,o,this.personPropertiesForLocalEvaluation(t,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g,h=!1,m,E,_,S,P,T,D;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let y=this.featureFlagsPoller?.featureFlagsByKey[e];if(y)try{let w=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(y,p,{matchValue:s});if(w){h=!0;let v=w.value;S=y.id,T="Evaluated locally",D=y.has_experiment,g={key:e,enabled:v!==!1,variant:typeof v=="string"?v:void 0,payload:w.payload??void 0}}}catch(w){if(w instanceof he||w instanceof b)this._logger?.info(`${w.name} when computing flag locally: ${e}: ${w.message}`);else throw w}}if(!h&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,a,[e]);if(y===void 0)_=Me.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,m=y.requestId,E=y.evaluatedAt;let w=[];y.errorsWhileComputingFlags&&w.push(Me.ERRORS_WHILE_COMPUTING),y.quotaLimited?.includes("feature_flags")&&w.push(Me.QUOTA_LIMITED);let v=y.flags[e];if(v===void 0)w.push(Me.FLAG_MISSING);else{S=v.metadata?.id,P=v.metadata?.version,T=v.reason?.description??v.reason?.code,D=v.metadata?.has_experiment;let Ge;if(v.metadata?.payload!==void 0)try{Ge=JSON.parse(v.metadata.payload)}catch{Ge=v.metadata.payload}g={key:e,enabled:v.enabled,variant:v.variant??void 0,payload:Ge}}w.length>0&&(_=w.join(","))}}if(i){let y=g===void 0?void 0:g.enabled===!1?!1:g.variant??!0,w={$feature_flag:e,$feature_flag_response:y,$feature_flag_id:S,$feature_flag_version:P,$feature_flag_reason:T,locally_evaluated:h,[`$feature/${e}`]:y,$feature_flag_request_id:m,$feature_flag_evaluated_at:h?Date.now():E};if(D!==void 0&&(w.$feature_flag_has_experiment=D),h&&this.featureFlagsPoller){let v=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();v!==void 0&&(w.$feature_flag_definitions_loaded_at=v)}_&&(w.$feature_flag_error=_),this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:y,groups:o,disableGeoip:a,properties:w})}return g!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides&&(g={...g,payload:this._payloadOverrides[e]}),g}async getFeatureFlag(e,t,n){Hn("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 s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(s!==void 0)return s.enabled===!1?!1:s.variant??!0}async getFeatureFlagPayload(e,t,n,s){if(Hn("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&&e in this._payloadOverrides)return this._payloadOverrides[e];let i=await this._getFeatureFlagResult(e,t,{...s,sendFeatureFlagEvents:!1},n);if(i!==void 0)return i.payload??null}async getFeatureFlagResult(e,t,n){let{distinctId:s,options:i}=this._resolveDistinctId(t,n);return s?this._getFeatureFlagResult(e,s,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let t=await this._requestRemoteConfigPayload(e);if(!t)return;let n=await t.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(e,t,n){Hn("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 s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return s===void 0?void 0:s.enabled===!1?!1:!!(s.variant??!0)||!1}async getAllFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);return n?(await this.getAllFlagsAndPayloads(n,s)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{featureFlags:{},featureFlagPayloads:{}};let{groups:i,disableGeoip:o,flagKeys:a}=s||{},{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},f=this.addLocalPersonAndGroupProperties(n,i,l,u);l=f.allPersonProperties,u=f.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),h={},m={},E=!0;if(g&&(h=g.response,m=g.payloads,E=g.fallbackToFlags),E&&!c){let _=await super.getFeatureFlagsAndPayloadsStateless(p.distinctId,p.groups,l,u,o,a);h={...h,..._.flags||{}},m={...m,..._.payloads||{}}}return this._flagOverrides!==void 0&&(h={...h,...this._flagOverrides}),this._payloadOverrides!==void 0&&(m={...m,...this._payloadOverrides}),{featureFlags:h,featureFlagPayloads:m}}async evaluateFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new He({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new He({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:i,disableGeoip:o}=s||{},a=s?.flagKeys??void 0;if(a?.length===0)return new He({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:{}});let{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},f=this.addLocalPersonAndGroupProperties(n,i,l,u);l=f.allPersonProperties,u=f.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=a?new Set(a):void 0,h={},m,E,_=!1,S=!1,P=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),T=new Set;if(P)for(let[y,w]of Object.entries(P.response)){let v=this.featureFlagsPoller?.featureFlagsByKey[y];h[y]={key:y,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:P.payloads[y],id:v?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:v?.has_experiment},T.add(y)}let D=g!==void 0&&Array.from(g).some(y=>this.featureFlagsPoller?.featureFlagsByKey[y]===void 0);if((P?P.fallbackToFlags||D:!0)&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,o,a);if(y){this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,m=y.requestId,E=y.evaluatedAt,_=!!y.errorsWhileComputingFlags,S=Array.isArray(y.quotaLimited)&&y.quotaLimited.includes("feature_flags");for(let[w,v]of Object.entries(y.flags)){if(T.has(w))continue;let Ge;if(v.metadata?.payload!==void 0)try{Ge=JSON.parse(v.metadata.payload)}catch{Ge=v.metadata.payload}h[w]={key:w,enabled:v.enabled,variant:v.variant,payload:Ge,id:v.metadata?.id,version:v.metadata?.version,reason:v.reason?.description??v.reason?.code,locallyEvaluated:!1,hasExperiment:v.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[y,w]of Object.entries(this._flagOverrides)){if(w===void 0){delete h[y];continue}let v=h[y];h[y]={key:y,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:v?.payload,id:v?.id,version:v?.version,reason:v?.reason,locallyEvaluated:v?.locallyEvaluated??!1,hasExperiment:v?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[y,w]of Object.entries(this._payloadOverrides)){let v=h[y];v&&(h[y]={...v,payload:w})}if(g!==void 0)for(let y of Object.keys(h))g.has(y)||delete h[y];return new He({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:h,requestId:m,evaluatedAt:E,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:_,quotaLimited:S})}_shouldSendMinimalFlagCalledEvent(e,t){return e==="$feature_flag_called"&&this._minimalFlagCalledEvents&&t.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(e){let{distinctId:t,key:n,response:s,groups:i,disableGeoip:o,properties:a}=e,c=i&&Object.keys(i).length>0?`_${JSON.stringify(Object.entries(i).sort(([u],[f])=>u<f?-1:u>f?1:0))}`:"",l=`${n}_${s}${c}`;t in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[t].has(l)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),this.distinctIdHasSentFlagCalls[t]instanceof Set?this.distinctIdHasSentFlagCalls[t].add(l):this.distinctIdHasSentFlagCalls[t]=new Set([l]),this.capture({distinctId:t,event:"$feature_flag_called",properties:a,groups:i,disableGeoip:o}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:e=>this._captureFlagCalledEventIfNeeded(e),logWarning:e=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${e}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){await this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=n=>Object.fromEntries(n.map(s=>[s,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){"flags"in e&&(e.flags===!1?this._flagOverrides=void 0:Array.isArray(e.flags)?this._flagOverrides=t(e.flags):e.flags!==void 0&&(this._flagOverrides={...e.flags})),"payloads"in e&&(e.payloads===!1?this._payloadOverrides=void 0:e.payloads!==void 0&&(this._payloadOverrides={...e.payloads}));return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let n=t.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in t){let n=t.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(e,t,n){return this.context?this.context.run(e,t,n):t()}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics&&(await Be(this._metrics.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._metrics.reset()),this._traces&&(await Be(this._traces.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},n?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},s=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let i=new AbortController;s=W(()=>{i.abort()},this.options.requestTimeout),n.signal=i.signal}try{return await this.fetch(t,n)}catch(i){this._events.emit("error",i);return}finally{s&&clearTimeout(s)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let n={},s={};for(let[i,o]of Object.entries(e))if(Pa(o)&&t&&i in t){let a={};for(let[c,l]of Object.entries(o))a[String(c)]=String(l);s[String(i)]=a}else n[String(i)]=String(o);return{personProperties:n,groupProperties:s}}async getFeatureFlagsForEvent(e,t,n,s){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");let i=s?.personProperties||{},o=s?.groupProperties||{},a=s?.flagKeys;if(s?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,f]of Object.entries(t||{}))l[u]=String(f);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,f]of Object.entries(t||{}))l[u]=String(f);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(e,t,i,o,n)).flags}addLocalPersonAndGroupProperties(e,t,n,s){let i={...n||{}},o={};if(t)for(let a of Object.keys(t))o[a]={$group_key:t[a],...s?.[a]||{}};return{allPersonProperties:i,allGroupProperties:o}}personPropertiesForLocalEvaluation(e,t){return{distinct_id:e,...t||{}}}createFeatureFlagEvaluationContext(e,t,n,s){return{distinctId:e,groups:t||{},personProperties:n||{},groupProperties:s||{},evaluationCache:{}}}captureException(e,t,n,s,i){if(!Ze.isPreviouslyCapturedError(e)){let o=new Error("PostHog syntheticException");this.addPendingPromise(Ze.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,n).then(a=>this._capturePreparedEvent({...a,uuid:s,flags:i},!1)))}}async captureExceptionImmediate(e,t,n,s){if(!Ze.isPreviouslyCapturedError(e)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(Ze.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:i},t,n).then(o=>this.captureImmediate({...o,flags:s})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:n,event:s,properties:i,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:f}=e,p=this.context?.get(),g=t.includeContextProperties??!0,h=n||p?.distinctId,m=g?{...this.props,...p?.properties||{},...i||{}}:{...i||{}};h||(h=B(),m.$process_person_profile=!1),g&&p?.sessionId&&!m.$session_id&&(m.$session_id=p.sessionId);let E=this._shouldSendMinimalFlagCalledEvent(s,m)?Gt(m):m,_=this._runBeforeSend({distinctId:h,event:s,properties:E,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:f});if(!_)return Promise.reject(null);let S=await Promise.resolve().then(async()=>{if(a)return c&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),a._getEventProperties();if(c){Hn("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 P=typeof c=="object"?c:void 0,T=await this.getFeatureFlagsForEvent(_.distinctId,o,u,P);return Th(T)}return{}}).catch(()=>({})).then(P=>{let T=_.groups||o;return{...P,..._.properties||{},...T!==void 0&&Object.keys(T).length>0?{$groups:T}:{}}});return _.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof S.$raw_user_agent=="string"&&Ra(S.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(_.event="$bot_pageview",S.$browser_type="bot"),{distinctId:_.distinctId,event:_.event,properties:S,options:{timestamp:_.timestamp,disableGeoip:_.disableGeoip,uuid:_.uuid}}}_runBeforeSend(e){let t=this.options.before_send;if(!t)return e;let n=Array.isArray(t)?t:[t],s=e;for(let i of n)try{if(s=i(s),!s)return this._logger.info(`Event '${e.event}' was rejected in beforeSend function`),null;if(!s.properties||Object.keys(s.properties).length===0){let o=`Event '${s.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(o)}}catch(o){return this._logger.error(`Error in before_send function for event '${e.event}':`,o),null}return s}};var Tl=require("node:async_hooks"),Kn=class{constructor(){this.storage=new Tl.AsyncLocalStorage}get(){return this.storage.getStore()}run(e,t,n){return this.storage.run(this.resolve(e,n),t)}enter(e,t){this.storage.enterWith(this.resolve(e,t))}resolve(e,t){if(t?.fresh===!0)return e;let n=this.get()||{};return{distinctId:e.distinctId??n.distinctId,sessionId:e.sessionId??n.sessionId,properties:{...n.properties||{},...e.properties||{}}}}};var Pl=require("node:async_hooks"),Vn=class{active(){return this._storage.getStore()}with(e,t){return this._storage.run(e,t)}constructor(){this._storage=new Pl.AsyncLocalStorage}};var Il=require("node:zlib"),Rl=require("node:util"),Ph=(0,Rl.promisify)(Il.gzip);async function Cl(r,e=!0){try{let t=await Ph(r);return new Uint8Array(t)}catch(t){return e&&console.error("Failed to gzip compress data",t),null}}var qn=require("node:os");function Ml(){let r,e;try{r=(0,qn.platform)(),e=(0,qn.release)()}catch{}return Ei(r,e)}var Ol="posthog-node";function Ih(r,{organization:e,projectId:t,prefix:n,severityAllowList:s=["error"],sendExceptionsToPostHog:i=!0}={}){return o=>{if(!(s==="*"||s.includes(o.level)))return o;o.tags||(o.tags={});let c=o.tags[Ui.POSTHOG_ID_TAG];if(c===void 0)return o;let l=r.options.host??"https://us.i.posthog.com",u=new URL(`/project/${r.apiKey}/person/${c}`,l).toString();o.tags["PostHog Person URL"]=u;let f=o.exception?.values||[],p=f.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(E=>({...E,platform:"node:javascript"}))}:void 0})),g={$exception_message:f[0]?.value||o.message,$exception_type:f[0]?.type,$exception_level:o.level,$exception_list:p,$sentry_event_id:o.event_id,$sentry_exception:o.exception,$sentry_exception_message:f[0]?.value||o.message,$sentry_exception_type:f[0]?.type,$sentry_tags:o.tags},h=k.getInjectedReleaseId();return h&&(g.$release_id=h),e&&t&&(g.$sentry_url=(n||"https://sentry.io/organizations/")+e+"/issues/?project="+t+"&query="+o.event_id),i&&r.capture({event:"$exception",distinctId:c,properties:g}),o}}var Ui=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(e,t,n,s,i){this.name=Ol,this.name=Ol,this.setupOnce=function(o,a){let c=a()?.getClient()?.getDsn()?.projectId;o(Ih(e,{organization:t,projectId:c,prefix:n,severityAllowList:s,sendExceptionsToPostHog:i??!0}))}}};var zn=class extends Gn{getLibraryId(){return"posthog-node"}compressPayload(e){return Cl(e,this.isDebug)}initializeContext(){return new Kn}initializeSpanContextManager(){return new Vn}hostResourceAttributes(){return Ml()}createErrorPropertiesBuilder(){return new k.ErrorPropertiesBuilder([new k.EventCoercer,new k.ErrorCoercer,new k.ObjectCoercer,new k.StringCoercer,new k.PrimitiveCoercer],k.createStackParser("node:javascript",k.nodeStackLineParser),[ba(),e=>sl(e,void 0,this._logger),cl()])}};var kl=_e(require("os"),1);A();var xl=500;var Fl=8192,me="[REDACTED]";function Dl(r){try{if(typeof r!="string"){if(r==null)return"";try{r=String(r)}catch(t){let n=t instanceof Error?t:new Error(String(t));return d.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,n),""}}let e=r;return e.length>Fl?e.slice(0,Fl):e}catch{return""}}function $i(r){if(typeof r!="string"||r.length===0)return r??"";let e="";try{e=kl.default.homedir()||""}catch(n){let s=n instanceof Error?n:new Error(String(n));d.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,s),e=""}if(!e)return r;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return r.replace(new RegExp(t,"g"),"~")}catch(n){let s=n instanceof Error?n:new Error(String(n));return d.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,s),r.split(e).join("~")}}function Bi(r){return typeof r!="string"||r.length===0?r??"":r.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function Rh(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${me}@`))}function Ch(r){if(typeof r!="string"||r.length===0)return r??"";let e=r;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,me),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,me),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,me),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,me),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,me),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,me),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,me),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,me),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,me),e}function Mh(r){return typeof r!="string"||r.length===0?r??"":r.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
|
|
`).trim()}function Oh(r){let e=Dl(r);return e.length===0?"":(e=$i(e),e=Bi(e),e=Rh(e),e=Ch(e),e)}function Ll(r){try{let e=Mh(Oh(Dl(r)));return e.length>xl?e.slice(0,xl):e}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.warn("SYSTEM","error-scrub: message scrub failed; emitting empty message",void 0,t),""}}function Nl(r){return(typeof r=="string"?r:"").replace(/\[REDACTED\]/g,"\xA7").replace(/'[^']*'/g,"'\xA7'").replace(/"[^"]*"/g,'"\xA7"').replace(/\b\d+\b/g,"\xA7").replace(/[ \t]+/g," ").trim().slice(0,200)}var $T=300*1e3,BT=3600*1e3;A();var ji=null,xh=!1,Fh=3e4,Yn=null;function $l(){let r=Date.now();if(Yn&&r<Yn.expiresAt)return Yn.value;let e=Cr(process.env,Mt());return Yn={value:e,expiresAt:r+Fh},e}var kh=!1;function Dh(){if(!ji){let r=kh&&wo(process.env)&&$l();ji=new zn(xr(),{host:Fr(),flushAt:20,flushInterval:1e4,disableGeoip:!1,enableExceptionAutocapture:r,before_send:Hh})}return ji}var Lh=6e4,Nh=500,lr=new Map;function Uh(r,e,t){let n="";try{let s=(t||"").split(`
|
|
`).map(i=>i.trim()).filter(Boolean);n=s.find(i=>i.startsWith("at "))??s[1]??""}catch(s){let i=s instanceof Error?s:new Error(String(s));d.warn("SYSTEM","Telemetry: stack parse failed while fingerprinting; using empty top frame",void 0,i),n=""}return`${r}::${Nl(e)}::${n}`.slice(0,400)}function $h(r,e){try{return Bh(r,e)}catch(t){let n=t instanceof Error?t:new Error(String(t));return d.warn("SYSTEM","Telemetry: error rate-limit bookkeeping failed; failing closed (event dropped)",void 0,n),{send:!1,count:0}}}function Bh(r,e){let t=lr.get(r);if(!t){if(lr.size>=Nh){let n=null,s=1/0;for(let[i,o]of lr){let a=Math.max(o.lastSentTs,o.firstTs);a<s&&(s=a,n=i)}n!==null&&lr.delete(n)}return t={count:1,firstTs:e,lastSentTs:e},lr.set(r,t),{send:!0,count:1}}if(t.count+=1,e-t.lastSentTs>=Lh){t.lastSentTs=e;let n=t.count;return t.count=0,{send:!0,count:n}}return{send:!1,count:t.count}}var Ul="__cm_rate_limited";function Wh(r){try{return typeof r!="string"||r.length===0?"":Bi($i(r))}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.warn("SYSTEM","Telemetry: frame filename redaction failed; stripping value entirely",void 0,t),""}}function jh(r){let e=r.$exception_list;if(Array.isArray(e))for(let t of e){if(!t||typeof t!="object")continue;let n=t;typeof n.value=="string"&&(n.value=Ll(n.value));let i=n.stacktrace?.frames;if(Array.isArray(i))for(let o of i){if(!o||typeof o!="object")continue;let a=o;delete a.context_line,delete a.pre_context,delete a.post_context,typeof a.filename=="string"&&(a.filename=Wh(a.filename))}}}function Hh(r){try{if(!r||typeof r!="object")return r;let e=r;if(e.event!=="$exception")return r;let t=e.properties??{};if(t[Ul]){try{delete t[Ul],e.properties=t}catch{}return r}jh(t),t.$process_person_profile=!1,e.properties=t;let n="Error",s="",i="";try{let c=t.$exception_list;if(Array.isArray(c)&&c[0]&&typeof c[0]=="object"){let l=c[0];typeof l.type=="string"&&(n=l.type),typeof l.value=="string"&&(s=l.value);let u=l.stacktrace?.frames;Array.isArray(u)&&u.length>0&&(i="at "+JSON.stringify(u[u.length-1]).slice(0,200))}}catch{}typeof t.$exception_type=="string"&&(n=t.$exception_type),typeof t.$exception_message=="string"&&(s=t.$exception_message);let o=Uh(n,s,i),a=$h(o,Date.now());if(!a.send)return null;try{t.occurrence_count=a.count,e.properties=t}catch{}return r}catch{return null}}function Wi(r,e,t){try{Gh(r,e,t)}catch(n){let s=n instanceof Error?n:new Error(String(n));d.warn("SYSTEM","Telemetry: captureEvent failed; event dropped",{event:r},s)}}function Gh(r,e,t){if(xh||!$l())return;let n=Or({...Dr(),...e??{}});if(t?.person?n.$set=kr(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
|
|
`);return}Dh().capture({distinctId:Mr(),event:r,properties:n})}var Kh=["babysit","ccs-align","cloud-sync","design-is","do","how-it-works","knowledge-agent","learn-codebase","make-plan","mem-search","mode-creator","oh-my-issues","pathfinder","smart-explore","standup","timeline-report","version-bump","weekly-digests","what-the","wowerpoint"],Vh=new Set(Kh),Bl={skill_id:"other",skill_source:"third_party"};function Wl(r){let e=qh(r);return e&&Vh.has(e)?{skill_id:e,skill_source:"first_party"}:Bl}function jl(r,e){if(r==="Skill"&&!(!e||typeof e!="object"))return e.skill}function qh(r){if(typeof r!="string")return null;let e=r.trim().toLowerCase();if(!e)return null;e=e.replace(/^\/+/,"");let t=e.lastIndexOf(":");return t!==-1&&(e=e.slice(t+1).replace(/^\/+/,"")),e||null}var Hl=null;function zh(){if(!Hl)throw new Error("ingest helpers used before setIngestContext() \u2014 wiring bug");return Hl}async function Gl(r){let{sessionManager:e,dbManager:t,eventBroadcaster:n,ensureGeneratorRunning:s}=zh(),i=de(r.platformSource),o=typeof r.cwd=="string"?r.cwd:"",a=o.trim()?Ve(o).primary:"",c=Y.loadFromFile(st);if(o&&Yr(o,c.CLAUDE_MEM_EXCLUDED_PROJECTS))return{ok:!0,status:"skipped",reason:"project_excluded"};if(new Set(c.CLAUDE_MEM_SKIP_TOOLS.split(",").map(_=>_.trim()).filter(Boolean)).has(r.toolName)){if(r.toolName==="Skill"){let{skill_id:_,skill_source:S}=Wl(jl(r.toolName,r.toolInput));Wi("skill_invoked",{skill_id:_,skill_source:S,skill_trigger:"tool",ide:i})}return{ok:!0,status:"skipped",reason:"tool_excluded"}}if(new Set(["Edit","Write","Read","NotebookEdit"]).has(r.toolName)&&r.toolInput&&typeof r.toolInput=="object"){let _=r.toolInput,S=_.file_path||_.notebook_path;if(S&&S.includes("session-memory"))return{ok:!0,status:"skipped",reason:"session_memory_meta"}}let f=t.getSessionStore(),p,g;try{p=f.createSDKSession(r.contentSessionId,a,"",void 0,i),g=f.getPromptNumberFromUserPrompts(r.contentSessionId,p)}catch(_){let S=_ instanceof Error?_.message:String(_);return d.error("INGEST","Observation session resolution failed",{contentSessionId:r.contentSessionId,toolName:r.toolName},_ instanceof Error?_:new Error(S)),{ok:!1,reason:S,status:500}}if(!Zr.checkUserPromptPrivacy(f,r.contentSessionId,g,"observation",p,{tool_name:r.toolName}).allow)return{ok:!0,status:"skipped",reason:"private"};let m=r.toolInput!==void 0?Fs(JSON.stringify(r.toolInput)):"{}",E=r.toolResponse!==void 0?Fs(JSON.stringify(r.toolResponse)):"{}";if(r.toolUseId)try{f.upsertToolUse({toolUseId:r.toolUseId,contentSessionId:r.contentSessionId,sessionDbId:p,project:a,platformSource:i,toolName:r.toolName,toolInput:m,toolResponse:E,cwd:o||null,promptNumber:g,agentType:typeof r.agentType=="string"?r.agentType:null,agentId:typeof r.agentId=="string"?r.agentId:null,orGenerationId:typeof r.orGenerationId=="string"?r.orGenerationId:null,orSessionId:typeof r.orSessionId=="string"?r.orSessionId:null})}catch(_){d.warn("INGEST","tool_uses backup write failed (observation still queued)",{sessionId:p,toolName:r.toolName,toolUseId:r.toolUseId},_ instanceof Error?_:new Error(String(_)))}return await e.queueObservation(p,{tool_name:r.toolName,tool_input:m,tool_response:E,prompt_number:g,cwd:o||(d.error("INGEST","Missing cwd when ingesting observation",{sessionId:p,toolName:r.toolName}),""),agentId:typeof r.agentId=="string"?r.agentId:void 0,agentType:typeof r.agentType=="string"?r.agentType:void 0,toolUseId:typeof r.toolUseId=="string"?r.toolUseId:void 0}),await s?.(p,"observation"),n.broadcastObservationQueued(p),{ok:!0,sessionDbId:p}}var Yh=/agent-transcripts[/\\]([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/\\]|$)/i;function Jh(r){let e=typeof r.agentId=="string"?r.agentId.trim():"";return e&&e!=="*"?e:r.path.match(Yh)?.[1]}var Jn=class{sessions=new Map;async processEntry(e,t,n,s){for(let i of n.events)ya(e,i.match,n)&&await this.handleEvent(e,t,n,i,s??void 0)}getSessionKey(e,t){return`${e.name}:${t}`}getOrCreateSession(e,t){let n=this.getSessionKey(e,t),s=this.sessions.get(n);return s||(s={sessionId:t,platformSource:de(e.name)},this.sessions.set(n,s)),s}resolveSessionId(e,t,n,s,i){let o={watch:t,schema:n},a=s.fields?.sessionId??(n.sessionIdPath?{path:n.sessionIdPath}:void 0),c=lt(a,e,o);return typeof c=="string"&&c.trim()?c:typeof c=="number"?String(c):i&&i.trim()?i:null}resolveCwd(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.cwd??(n.cwdPath?{path:n.cwdPath}:void 0),c=lt(a,e,o);return typeof c=="string"&&c.trim()?c:t.workspace?t.workspace:i.cwd}resolveProject(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.project??(n.projectPath?{path:n.projectPath}:void 0),c=lt(a,e,o);return typeof c=="string"&&c.trim()?c:t.project?t.project:i.cwd?Ve(i.cwd).primary:i.project}async handleEvent(e,t,n,s,i){let o=this.resolveSessionId(e,t,n,s,i);if(!o){d.debug("TRANSCRIPT","Skipping event without sessionId",{event:s.name,watch:t.name});return}let a=this.getOrCreateSession(t,o),c=this.resolveCwd(e,t,n,s,a);c&&(a.cwd=c);let l=this.resolveProject(e,t,n,s,a);l&&(a.project=l);let u=Ea(s.fields,e,{watch:t,schema:n,session:a});switch(s.action){case"session_context":this.applySessionContext(a,u);break;case"session_init":await this.handleSessionInit(a,u),t.context?.updateOn?.includes("session_start")&&await this.updateContext(a,t);break;case"user_message":typeof u.message=="string"&&(a.lastUserMessage=u.message),typeof u.prompt=="string"&&(a.lastUserMessage=u.prompt);break;case"assistant_message":typeof u.message=="string"&&(a.lastAssistantMessage=u.message);break;case"tool_use":await this.handleToolUse(a,t,u);break;case"tool_result":await this.handleToolResult(a,t,u);break;case"observation":await this.sendObservation(a,t,u);break;case"file_edit":await this.sendFileEdit(a,u);break;case"session_end":await this.handleSessionEnd(a,t);break;default:break}}applySessionContext(e,t){let n=typeof t.cwd=="string"?t.cwd:void 0,s=typeof t.project=="string"?t.project:void 0;n&&(e.cwd=n),s&&(e.project=s)}async handleSessionInit(e,t){let n=typeof t.prompt=="string"?t.prompt:"",s=e.cwd??process.cwd();n&&(e.lastUserMessage=n),await fa.execute({sessionId:e.sessionId,cwd:s,prompt:n,platform:e.platformSource})}async handleToolUse(e,t,n){let s=typeof n.toolId=="string"?n.toolId:void 0,i=typeof n.toolName=="string"?n.toolName:void 0,o=this.maybeParseJson(n.toolInput),a=this.maybeParseJson(n.toolResponse);if(i==="apply_patch"&&typeof o=="string"){let c=this.parseApplyPatchFiles(o);for(let l of c)await this.sendFileEdit(e,{filePath:l,edits:[{type:"apply_patch",patch:o}]})}i&&a!==void 0?await this.sendObservation(e,t,{toolName:i,toolInput:o,toolResponse:a,toolUseId:s}):i&&s&&(e.pendingTools||(e.pendingTools=new Map),e.pendingTools.set(s,{toolName:i,toolInput:o}))}async handleToolResult(e,t,n){let s=typeof n.toolId=="string"?n.toolId:void 0,i=typeof n.toolName=="string"?n.toolName:void 0,o=this.maybeParseJson(n.toolResponse),a=this.maybeParseJson(n.toolInput);if(s&&e.pendingTools){let c=e.pendingTools.get(s);c&&(i||(i=c.toolName),a===void 0&&(a=c.toolInput),e.pendingTools.delete(s))}i?await this.sendObservation(e,t,{toolName:i,toolInput:a,toolResponse:o,toolUseId:s}):d.debug("TRANSCRIPT","Dropping tool_result with no resolvable toolName",{sessionId:e.sessionId,toolId:s})}async sendObservation(e,t,n){let s=typeof n.toolName=="string"?n.toolName:void 0;if(!s)return;let i=await Gl({contentSessionId:e.sessionId,cwd:e.cwd??process.cwd(),toolName:s,toolInput:this.maybeParseJson(n.toolInput),toolResponse:this.maybeParseJson(n.toolResponse),platformSource:e.platformSource,toolUseId:typeof n.toolUseId=="string"?n.toolUseId:void 0,agentId:Jh(t)});if(!i.ok)throw new Error(`ingestObservation failed: ${i.reason}`)}async sendFileEdit(e,t){let n=typeof t.filePath=="string"?t.filePath:void 0;n&&await pa.execute({sessionId:e.sessionId,cwd:e.cwd??process.cwd(),filePath:n,edits:Array.isArray(t.edits)?t.edits:void 0,platform:e.platformSource})}maybeParseJson(e){if(typeof e!="string")return e;let t=e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return e;try{return JSON.parse(t)}catch(n){return d.debug("TRANSCRIPT","Field looked like JSON but did not parse; using raw string",{preview:t.slice(0,120)},n instanceof Error?n:void 0),e}}parseApplyPatchFiles(e){let t=[],n=e.split(`
|
|
`);for(let s of n){let i=s.trim();if(i.startsWith("*** Update File: "))t.push(i.replace("*** Update File: ","").trim());else if(i.startsWith("*** Add File: "))t.push(i.replace("*** Add File: ","").trim());else if(i.startsWith("*** Delete File: "))t.push(i.replace("*** Delete File: ","").trim());else if(i.startsWith("*** Move to: "))t.push(i.replace("*** Move to: ","").trim());else if(i.startsWith("+++ ")){let o=i.replace("+++ ","").replace(/^b\//,"").trim();o&&o!=="/dev/null"&&t.push(o)}}return Array.from(new Set(t))}async handleSessionEnd(e,t){await this.queueSummary(e),await this.updateContext(e,t),e.pendingTools?.clear();let n=this.getSessionKey(t,e.sessionId);this.sessions.delete(n)}async queueSummary(e){if(!await Gr())return;let n=e.lastAssistantMessage??"",s=JSON.stringify({contentSessionId:e.sessionId,last_assistant_message:n,platformSource:e.platformSource});try{await le("/api/sessions/summarize",{method:"POST",headers:{"Content-Type":"application/json"},body:s})}catch(i){d.warn("TRANSCRIPT","Summary request failed",{error:i instanceof Error?i.message:String(i)})}}async updateContext(e,t){if(!t.context||t.context.mode!=="agents"||Zi(t)||!await Gr())return;let s=e.cwd??t.workspace;if(!s)return;let o=Ve(s).allProjects.join(","),a=`/api/context/inject?projects=${encodeURIComponent(o)}&platformSource=${encodeURIComponent(e.platformSource)}`,c=V(t.context.path??`${s}/AGENTS.md`),l=ur.default.resolve(c),u=[ur.default.resolve(s),ur.default.resolve(O)];if(!u.some(h=>l.startsWith(h+ur.default.sep)||l===h)){d.warn("SECURITY","Rejected path traversal attempt in watch.context.path",{original:t.context.path,resolved:l,allowedRoots:u});return}let p;try{p=await le(a)}catch(h){d.warn("TRANSCRIPT","Failed to fetch AGENTS.md context",{error:h instanceof Error?h.message:String(h)});return}if(!p.ok)return;let g=(await p.text()).trim();g&&(ha(c,g),d.debug("TRANSCRIPT","Updated AGENTS.md context",{agentsPath:c,watch:t.name}))}};var Hi=class{constructor(e,t,n,s){this.filePath=e;this.onLine=n;this.onOffset=s;this.tailState={offset:t,partial:""}}filePath;onLine;onOffset;watcher=null;tailState;readTask=null;readPending=!1;start(){this.requestRead(),this.watcher=(0,j.watch)(this.filePath,{persistent:!0},()=>{this.requestRead()})}close(){this.watcher?.close(),this.watcher=null}poke(){this.requestRead()}requestRead(){if(this.readTask){this.readPending=!0;return}this.readTask=this.drainReads().finally(()=>{this.readTask=null})}async drainReads(){do this.readPending=!1,await this.readNewData().catch(()=>{});while(this.readPending)}async readNewData(){if(!(0,j.existsSync)(this.filePath))return;let e=0;try{e=(0,j.statSync)(this.filePath).size}catch(o){d.debug("WORKER","Failed to stat transcript file",{file:this.filePath},o instanceof Error?o:void 0);return}if(e<this.tailState.offset&&(this.tailState.offset=0,this.tailState.partial=""),e===this.tailState.offset)return;let t=(0,j.createReadStream)(this.filePath,{start:this.tailState.offset,end:e-1,encoding:"utf8"}),n="";for await(let o of t)n+=o;this.tailState.offset=e,this.onOffset(this.tailState.offset);let i=(this.tailState.partial+n).split(`
|
|
`);this.tailState.partial=i.pop()??"";for(let o of i){let a=o.trim();a&&await this.onLine(a)}}},Xn=class{constructor(e,t){this.config=e;this.statePath=t;this.state=ro(t)}config;statePath;processor=new Jn;tailers=new Map;state;rootWatchers=[];async start(){for(let e of this.config.watches)await this.setupWatch(e)}stop(){for(let e of this.tailers.values())e.close();this.tailers.clear();for(let e of this.rootWatchers)e.close();this.rootWatchers=[]}async setupWatch(e){let t=this.resolveSchema(e);if(!t){d.warn("TRANSCRIPT","Missing schema for watch",{watch:e.name});return}let n=V(e.path),s=this.resolveWatchFiles(n);for(let o of s)await this.addTailer(o,e,t);let i=this.deepestNonGlobAncestor(n);if(!i||!(0,j.existsSync)(i)){d.debug("TRANSCRIPT","Watch root does not exist, skipping fs.watch",{watch:e.name,watchRoot:i});return}try{let o=(0,j.watch)(i,{recursive:!0,persistent:!0},(a,c)=>{this.handleRootWatchEvent(i,n,e,t,c)});this.rootWatchers.push(o),d.info("TRANSCRIPT","Watching transcript root recursively",{watch:e.name,watchRoot:i})}catch(o){d.warn("TRANSCRIPT","Failed to start recursive fs.watch on transcript root",{watch:e.name,watchRoot:i},o instanceof Error?o:void 0)}}handleRootWatchEvent(e,t,n,s,i){if(!i)return;let o=(0,ie.resolve)(e,i).replace(/\\/g,"/"),a=this.tailers.get(o);if(a){a.poke();return}let c=this.resolveWatchFiles(t);for(let l of c)this.tailers.has(l)||this.addTailer(l,n,s)}deepestNonGlobAncestor(e){if(!this.hasGlob(e)){if((0,j.existsSync)(e))try{return(0,j.statSync)(e).isDirectory()?e:(0,ie.resolve)(e,"..")}catch(s){return d.debug("TRANSCRIPT","Failed to stat watch path ancestor, falling back to parent directory",{path:e},s instanceof Error?s:new Error(String(s))),(0,ie.resolve)(e,"..")}return e}let t=e.split(/[/\\]/),n=[];for(let s of t){if(/[*?[\]{}()]/.test(s))break;n.push(s)}return n.length===0||n.length===1&&n[0]===""?"":n.join(ie.sep)}resolveSchema(e){return typeof e.schema=="string"?this.config.schemas?.[e.schema]??null:e.schema}resolveWatchFiles(e){if(this.hasGlob(e))return this.scanGlob(this.normalizeGlobPattern(e));if((0,j.existsSync)(e))try{if((0,j.statSync)(e).isDirectory()){let n=(0,ie.join)(e,"**","*.jsonl");return this.scanGlob(this.normalizeGlobPattern(n))}return[e]}catch(t){return d.debug("WORKER","Failed to stat watch path",{path:e},t instanceof Error?t:void 0),[]}return[]}scanGlob(e){return Array.from(new Bun.Glob(e).scanSync({absolute:!0,onlyFiles:!0,dot:!0}))}normalizeGlobPattern(e){return e.replace(/\\/g,"/")}hasGlob(e){return/[*?[\]{}()]/.test(e)}async addTailer(e,t,n){if(this.tailers.has(e))return;let s=this.extractSessionIdFromPath(e),i=this.state.offsets[e]??0;if(i===0&&t.startAtEnd)try{i=(0,j.statSync)(e).size}catch(a){d.debug("WORKER","Failed to stat file for startAtEnd offset",{file:e},a instanceof Error?a:void 0),i=0}let o=new Hi(e,i,async a=>{await this.handleLine(a,t,n,e,s)},a=>{this.state.offsets[e]=a,no(this.statePath,this.state)});o.start(),this.tailers.set(e,o),d.info("TRANSCRIPT","Watching transcript file",{file:e,watch:t.name,schema:n.name})}async handleLine(e,t,n,s,i){try{let o=JSON.parse(e);await this.processor.processEntry(o,t,n,i??void 0)}catch(o){o instanceof Error?d.debug("TRANSCRIPT","Failed to parse transcript line",{watch:t.name,file:(0,ie.basename)(s)},o):d.warn("TRANSCRIPT","Failed to parse transcript line (non-Error thrown)",{watch:t.name,file:(0,ie.basename)(s),error:String(o)})}}extractSessionIdFromPath(e){let t=e.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return t?t[0]:null}};function Gi(r,e){let t=r.indexOf(e);return t===-1?null:r[t+1]??null}async function Kl(r,e){switch(r){case"init":{let t=Gi(e,"--config")??it;return _r(t),console.log(`Created sample config: ${V(t)}`),0}case"watch":{let t=Gi(e,"--config")??it,n;try{n=Pt(t)}catch(a){if(a instanceof Error&&a.message.includes("not found"))_r(t),console.log(`Created sample config: ${V(t)}`),n=Pt(t);else throw a}let s=V(n.stateFile??mr),i=new Xn(n,s);await i.start(),console.log("Transcript watcher running. Press Ctrl+C to stop.");let o=()=>{i.stop(),process.exit(0)};return process.on("SIGINT",o),process.on("SIGTERM",o),await new Promise(()=>{})}case"validate":{let t=Gi(e,"--config")??it;try{Pt(t)}catch(n){if(n instanceof Error&&n.message.includes("not found"))_r(t),console.log(`Created sample config: ${V(t)}`),Pt(t);else throw n}return console.log(`Config OK: ${V(t)}`),0}default:return console.log("Usage: claude-mem transcript <init|watch|validate> [--config <path>]"),1}}var Xh=process.argv[2],Qh=process.argv.slice(3);Kl(Xh,Qh).then(r=>{process.exit(r)}).catch(r=>{console.error(r),process.exit(1)});
|
|
/*! Bundled license information:
|
|
|
|
@posthog/core/dist/vendor/uuidv7.mjs:
|
|
(*! LICENSE: uuidv7.mjs.LICENSE.txt *)
|
|
(**
|
|
* uuidv7: An experimental implementation of the proposed UUID Version 7
|
|
*
|
|
* @license Apache-2.0
|
|
* @copyright 2021-2023 LiosK
|
|
* @packageDocumentation
|
|
*)
|
|
*/
|
|
//# sourceMappingURL=transcript-watcher.cjs.map
|