@overlayed/app 0.17.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,4 +2,4 @@ import{createRequire as e}from"node:module";import t from"mitt";import{Type as n
2
2
  `:`
3
3
  `)+n,i=r+1,r=e.indexOf(`
4
4
  `,i)}while(r!==-1);return a+=e.slice(i),a}const{stdout:Ve,stderr:He}=Re,S=Symbol(`GENERATOR`),C=Symbol(`STYLER`),w=Symbol(`IS_EMPTY`),Ue=[`ansi`,`ansi`,`ansi256`,`ansi16m`],T=Object.create(null),We=(e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw Error("The `level` option should be an integer from 0 to 3");let n=Ve?Ve.level:0;e.level=t.level===void 0?n:t.level},Ge=e=>{let t=(...e)=>e.join(` `);return We(t,e),Object.setPrototypeOf(t,E.prototype),t};function E(e){return Ge(e)}Object.setPrototypeOf(E.prototype,Function.prototype);for(let[e,t]of Object.entries(v))T[e]={get(){let n=k(this,O(t.open,t.close,this[C]),this[w]);return Object.defineProperty(this,e,{value:n}),n}};T.visible={get(){let e=k(this,this[C],!0);return Object.defineProperty(this,`visible`,{value:e}),e}};const D=(e,t,n,...r)=>e===`rgb`?t===`ansi16m`?v[n].ansi16m(...r):t===`ansi256`?v[n].ansi256(v.rgbToAnsi256(...r)):v[n].ansi(v.rgbToAnsi(...r)):e===`hex`?D(`rgb`,t,n,...v.hexToRgb(...r)):v[n][e](...r),Ke=[`rgb`,`hex`,`ansi256`];for(let e of Ke){T[e]={get(){let{level:t}=this;return function(...n){let r=O(D(e,Ue[t],`color`,...n),v.color.close,this[C]);return k(this,r,this[w])}}};let t=`bg`+e[0].toUpperCase()+e.slice(1);T[t]={get(){let{level:t}=this;return function(...n){let r=O(D(e,Ue[t],`bgColor`,...n),v.bgColor.close,this[C]);return k(this,r,this[w])}}}}const qe=Object.defineProperties(()=>{},{...T,level:{enumerable:!0,get(){return this[S].level},set(e){this[S].level=e}}}),O=(e,t,n)=>{let r,i;return n===void 0?(r=e,i=t):(r=n.openAll+e,i=t+n.closeAll),{open:e,close:t,openAll:r,closeAll:i,parent:n}},k=(e,t,n)=>{let r=(...e)=>Je(r,e.length===1?``+e[0]:e.join(` `));return Object.setPrototypeOf(r,qe),r[S]=e,r[C]=t,r[w]=n,r},Je=(e,t)=>{if(e.level<=0||!t)return e[w]?``:t;let n=e[C];if(n===void 0)return t;let{openAll:r,closeAll:i}=n;if(t.includes(`\x1B`))for(;n!==void 0;)t=ze(t,n.close,n.open),n=n.parent;let a=t.indexOf(`
5
- `);return a!==-1&&(t=Be(t,i,r,a)),r+t+i};Object.defineProperties(E.prototype,T);const Ye=E();E({level:He?He.level:0});var A=Ye,j=class{emitter;constructor(){this.emitter=t()}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}emit(e,t){this.emitter.emit(e,t)}removeAllListeners(){this.emitter.all.clear()}},Xe=class{listeners;constructor(){this.listeners=new Map}on(e,t){let n=this.listeners.get(e)||new Set;n.add(t),this.listeners.set(e,n)}off(e,t){let n=this.listeners.get(e);n&&n.delete(t)}async emit(e,...t){let n=this.listeners.get(e)||new Set,r=this.listeners.get(`*`)||new Set,i=[...Array.from(n),...Array.from(r)];if(i.length===0)return[];let a=await Promise.all(i.map(async n=>{try{let e=n(...t);return e instanceof Promise?await e:e}catch(t){console.error(`Error in event listener for ${String(e)}:`,t);return}}));return a}removeAllListeners(){this.listeners.clear()}};function M(e,...t){let n=class extends e{static _instance;static getInstance(){return this._instance||(this._instance=new e(...t)),this._instance}static clearInstance(){this._instance=void 0}};return n}var Ze=class extends j{destroy(){this.removeAllListeners()}fatal(e,t,n){this.emit(`fatal`,{code:t,message:e,data:n,timestamp:Date.now()})}error(e,t,n){this.emit(`error`,{code:t,message:e,data:n,timestamp:Date.now()})}warn(e,t,n){this.emit(`warning`,{code:t,message:e,data:n,timestamp:Date.now()})}};const N=M(Ze);var Qe=class{data;_schema;_defaultValue;_path;constructor(e){let{schema:t,default:n,path:r}=e;this._schema=t,this._defaultValue=n,this._path=r}set(e){let t=this._schema[`~standard`].validate(e);if(t instanceof Promise)throw Error(`StructuredConfigFile does not support async validation`);if(t.issues){this.reportInvalidConfigFile(t.issues);return}this.data=this.onBeforeSave(e),this.save(e)}get(){return this.data?this.data:this.load()}getKey(e){let t=this.get();return t[e]}save(e){let t=this.onBeforeSave(e);try{d(this.getFilePath()),i.writeFileSync(this.getFilePath(),JSON.stringify(t,void 0,2))}catch{return}return this.data=t}load(){if(!this.fileExists(this.getFilePath())||!this.canReadWriteFile(this.getFilePath())){this.save(this._defaultValue);let e=this.onAfterLoad(this._defaultValue);return this.data=e,e}try{let e=i.readFileSync(this.getFilePath(),`utf8`),t=this.onAfterLoad(this.parseStoredData(e));return this.data=t,t}catch{return this.data=this._defaultValue}}onBeforeSave(e){return e}onAfterLoad(e){return e}getFilePath(){return this._path}parseStoredData(e){try{let t=r(`string.json.parse`).to(`object`),n=t(e);if(n instanceof r.errors)return this._defaultValue;let i=this._schema[`~standard`].validate(n);if(i instanceof Promise)throw Error(`StructuredConfigFile does not support async validation`);return i.issues?this.migrate(n,this._defaultValue):this.migrate(i.value,this._defaultValue)}catch{return this._defaultValue}}canReadWriteFile(e){try{return i.accessSync(e,i.constants.R_OK|i.constants.W_OK),!0}catch{return!1}}fileExists(e){try{return i.accessSync(e,i.constants.F_OK),!0}catch{return!1}}migrate(e,t){let n={...e};for(let r in t){if(!Object.prototype.hasOwnProperty.call(t,r))continue;r in e?e[r]!==null&&t[r]!==null&&typeof e[r]==`object`&&typeof t[r]==`object`&&!Array.isArray(e[r])&&!Array.isArray(t[r])?n[r]=this.migrate(e[r],t[r]):Array.isArray(t[r])&&(n[r]=e[r]):n[r]=t[r]}return n}reportInvalidConfigFile(e){N.getInstance().error(`Invalid config file`,`INVALID_CONFIG_FILE`,{issues:e.map(e=>e.message),filePath:this._path,data:this.data})}},$e=class e extends j{stream;logPath;baseFileName;currentDate;rotationCheckInterval;isRotating=!1;constructor(e,t){super(),this.logPath=e,this.baseFileName=t.replace(`.log`,``),this.currentDate=this.getDateString(new Date),this.ensureLogDirectory(),this.ensureLogFile(),this.stream=this.createStream(),this.rotationCheckInterval=this.startRotationCheck(),this.cleanupOldLogs()}static scope(t,n){return new e(t,n)}log(...e){this.write(`log`,...e)}error(...e){this.write(`error`,...e)}warn(...e){this.write(`warn`,...e)}info(...e){this.write(`info`,...e)}debug(...e){this.write(`debug`,...e)}async close(){clearInterval(this.rotationCheckInterval),await new Promise(e=>{this.stream.end(()=>e())})}getCurrentFileName(){return this.getFileName(this.currentDate)}static getMessageElements(e,...t){let n=new Date,r=n.toISOString().replace(`T`,` `).replace(/\.\d+Z$/,``)+`.${n.getMilliseconds().toString().padStart(3,`0`)}`,i=t.map(e=>typeof e==`object`?JSON.stringify(e,void 0,2):String(e)).join(` `);return{timestamp:r,level:e,message:i}}getFileName(e){return`${this.baseFileName}-${e}.log`}ensureLogDirectory(){try{s(this.logPath,{recursive:!0})}catch(e){throw console.error(`Failed to create log directory ${this.logPath}:`,e),e}}ensureLogFile(){let e=f(this.logPath,this.getFileName(this.currentDate));if(!o(e))try{u(e,``,`utf8`)}catch(t){throw console.error(`Failed to create log file ${e}:`,t),t}}getDateString(e){return e.toISOString().split(`T`)[0]}createStream(){let e=f(this.logPath,this.getFileName(this.currentDate));return a(e,{flags:`a`,encoding:`utf8`})}async rotateLogs(){if(this.isRotating)return;this.isRotating=!0;let e=this.getDateString(new Date);e!==this.currentDate&&await new Promise(t=>{this.stream.end(()=>{this.currentDate=e,this.stream=this.createStream(),this.cleanupOldLogs(),t()})}),this.isRotating=!1}startRotationCheck(){return setInterval(()=>this.rotateLogs(),6e4)}cleanupOldLogs(){let e=c(this.logPath),t=new Date;t.setDate(t.getDate()-7);let n=e.filter(e=>e.startsWith(this.baseFileName)&&e.endsWith(`.log`)).filter(e=>{let n=e.replace(`${this.baseFileName}-`,``).replace(`.log`,``),r=new Date(n);return r<t});n.forEach(e=>{try{l(f(this.logPath,e))}catch(t){console.error(`Failed to delete old log file ${e}:`,t)}})}write(t,...n){let{timestamp:r,message:i}=e.getMessageElements(t,...n),a=`[${r}] [${t}] ${i}\n`;this.stream.write(a,e=>{e?this.emit(`error`,e):this.emit(`write`,a)})}};const P=()=>p.join(process.env.APPDATA??``,`overlayed`),et=()=>p.join(P(),`logs`),tt=e=>p.join(P(),`apps`,e),nt=e=>p.join(tt(e),`logs`);var rt=class{fileLogger;path;appId;messageQueue=new we;fileName;_debug=!1;silent=!1;constructor(e){this.fileName=e}init(e,t=!1,n=!1){this.appId=e,this._debug=t,this.silent=n,this.path=nt(e),this.fileLogger=new $e(this.path,this.fileName),this.messageQueue.flush().forEach(e=>{this.fileLogger?.[e.type](...e.args)})}scope(e){if(!this.appId||!this.path)throw Error(`Logger not initialized`);let t=`[${e}]`;return{scope:e=>this.scope(e),error:(...e)=>this.error(t,...e),warn:(...e)=>this.warn(t,...e),info:(...e)=>this.info(t,...e),log:(...e)=>this.log(t,...e),debug:(...e)=>this.debug(t,...e)}}error(...e){this.handle(`error`,...e)}warn(...e){this.handle(`warn`,...e)}info(...e){this.handle(`log`,...e)}debug(...e){this._debug&&this.handle(`debug`,...e)}log(...e){this.handle(`log`,...e)}handle(e,...t){(!this.silent||this._debug)&&this.logToConsole(e,...t),this.fileLogger?this.fileLogger[e](...t):this.messageQueue.add({type:e,args:t})}logToConsole(e,...t){let n={error:A.red,warn:A.yellow,debug:A.blue,log:A.white};if(!this.silent||this._debug){let{timestamp:r,message:i}=$e.getMessageElements(e,...t),a=console[e],o=n[e];a(`${A.gray(r)} ${o(i)}`)}}};const F=M(rt,`main.log`);var it=class extends ie{blob;chunkSizeMb;maxConcurrent;shouldStop=!1;constructor(e,t){super(),this.blob=e,this.chunkSizeMb=t.chunkSizeMb,this.maxConcurrent=t.maxConcurrent??3}get totalChunks(){return Math.ceil(this.blob.size/(this.chunkSizeMb*1024*1024))}async chunk(e){let t=this.chunkSizeMb*1024*1024,n=this.totalChunks;if(n===0)return;let r=5,i=new Map,a=new Set,o=new Set,s=[];for(let e=0;e<n;e++)s.push(e);let c=async n=>{let c=n*t,l=Math.min(c+t,this.blob.size),u=this.blob.slice(c,l);try{await e(u,n),o.add(n),this.emit(`chunkComplete`,n),a.delete(n)}catch(e){let t=i.get(n)||0;t<r?(i.set(n,t+1),await new Promise(e=>setTimeout(e,(t+1)*1e3)),s.push(n)):(o.add(n),this.emit(`error`,e),this.shouldStop=!0,a.delete(n))}},l=[],u=async()=>{for(;(s.length>0||a.size>0)&&!this.shouldStop;){if(s.length===0){await new Promise(e=>setTimeout(e,10));continue}let e=s.shift();o.has(e)||a.has(e)||(a.add(e),await c(e))}};for(let e=0;e<this.maxConcurrent;e++)l.push(u());await Promise.all(l)}};function at(e,t){let{recursive:n}=ot(t);return se(e)?n?st(e).map(t=>[e,t]):ue(e).map(t=>[e,t]):[]}function ot(e){return{recursive:e?.recursive??!0}}function st(e){return ue(e,{withFileTypes:!0}).flatMap(t=>{let n=p.join(e,t.name);return t.isDirectory()?st(n):[n]})}function ct(e){return e}const lt=e(import.meta.url),{PipeEventServer:ut,PipeEventClient:dt,PipeEventBase:ft,ProcessMonitor:pt,Process:mt,InjectionMethod:ht,AccessLevel:gt,HardwareInterface:_t}=lt(`@overlayed/app/dist/native-interface/build/overlayed_native_interface_x64.node`);var vt=class extends j{server=null;_hasConnection=!1;pipeId;get hasConnection(){return this._hasConnection}constructor(e){super(),this.pipeId=e,this.init()}destroy(){this.server&&(this._hasConnection=!1,this.server?.removeAllListeners(),this.server=null)}init(){this.server=new ut(this.pipeId,{clientCount:1,access:1}),this.server.on(`event`,e=>{try{let t=JSON.parse(e);this.emit(`data`,[t])}catch(e){this.emit(`error`,e)}}),this.server.on(`connected`,()=>{this._hasConnection=!0}),this.server.on(`disconnected`,()=>{this._hasConnection=!1})}};const I=M(vt,`stats-cc`);var yt=class{logger;initialized=!1;constructor(e){this.logger=F.getInstance().scope(e)}init(){this.logger.log(`Initializing`),this.initialized=!0}destroy(){this.logger.log(`Destroying`),this.initialized=!1}},L=class extends j{logger;initialized=!1;constructor(e){super(),this.logger=F.getInstance().scope(e)}init(){this.logger.log(`Initializing`),this.initialized=!0}destroy(){this.logger.log(`Destroying`),this.initialized=!1,this.removeAllListeners()}},bt=class extends Xe{logger;initialized=!1;constructor(e){super(),this.logger=F.getInstance().scope(e)}init(){this.logger.log(`Initializing`),this.initialized=!0}destroy(){this.logger.log(`Destroying`),this.initialized=!1,this.removeAllListeners()}};const R=fe.create({baseURL:`https://updater.stats.cc`,headers:{Accept:`application/json`,"Accept-Encoding":`gzip, deflate, br`}});let xt;function St(e){xt=e}R.interceptors.request.use(e=>{let t=xt?.();return t?(e.headers??={},e.headers.Authorization=t,e):e});const z=fe.create({baseURL:`https://api.overlayed.gg`,headers:{Accept:`application/json`,"Accept-Encoding":`gzip, deflate, br`}});let Ct,wt;z.interceptors.request.use(e=>{let t=Ct?.(),n=wt?.();return e.headers??={},t&&(e.headers.Authorization=t),n&&(e.headers[`X-Api-Key`]=n),e});function Tt(e,t){if(t<=0)throw Error(`Chunk size must be greater than 0`);if(e.length===0)return[];let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Et(e){return e}function B(e){return e?t=>(e(t),t):Et}B();const Dt=B();function Ot(e){return z.get(`/v1/public/applications/${e}`)}B();function kt(e,t){return R.get(`/v1/native/${jt(e)}/version.txt`,{params:{channel:t},responseType:`text`})}function At(e,t){return R.get(`/v1/native/${jt(e)}/files`,{params:{channel:t},responseType:`arraybuffer`})}function jt(e){return e===`01JXPFK6YQ3N00N2Y9JHFNG55D`||e===`01JZEBPGHT5M4Y6SGY4P7Q9EZT`?`siege-game-module`:e}function Mt(){return z.get(`/v1/public/raven/config`)}const Nt=B();function Pt(e,t){return z.get(`/v1/public/raven/games/${e}/builds/${t}`)}function Ft(e,t){return z.post(`/v1/public/raven/games/${e}/builds/upload`,null,{params:t})}function It(e,t){let n=new FormData;return n.append(`file`,t.chunk),z.patch(`/v1/public/raven/games/${e}/builds/upload`,n,{params:t})}const Lt=250;function Rt(e){let t=Tt(e.messages,Lt),n=Promise.all(t.map(async t=>z.post(`/v1/public/cortex/events`,{...e,messages:t})));return n}function zt(e){return e instanceof Error&&(e.name===`XiorError`||e.name===`XiorTimeoutError`)}function Bt(e){return!!(e&&`kind`in e.data&&`message`in e.data)}let Vt;function Ht(e){Vt=e}var Ut=class extends L{UPDATE_CHECK_INTERVAL_MS=1e3*60*5;targetDir;updateInterval;constructor(){super(`NativeModuleManager`),this.targetDir=p.join(P(),`resources`),this.logger.log(`Target directory`,this.targetDir)}async initWithDlls(e){super.init(),await h.mkdir(this.targetDir,{recursive:!0}),await this.checkForUpdates(e),clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>this.checkForUpdates(e),this.UPDATE_CHECK_INTERVAL_MS)}destroy(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=void 0),super.destroy()}async getCurrentVersion(e){try{let t=p.join(this.targetDir,e,`version.txt`);return this.logger.log(`Version Path`,t),await h.readFile(t,`utf-8`)}catch{return null}}getTargetPath(e){return p.join(this.targetDir,e)}getTargetVersionPath(e,t){return p.join(this.getTargetPath(e),t)}async checkForUpdates(e){let t=global.OVERLAYED.APP_BUILD_CHANNEL;if(this.logger.log(`Checking for updates`),!t){this.logger.error(`Invalid VITE_BUILD_CHANNEL`);return}await Vt?.();for(let n of e)try{let{data:e}=await kt(n,t),r=await this.getCurrentVersion(n);this.logger.log(`${n} > Update Check. current: ${r}, latest: ${e}`);let i=e!==r;this.logger.log(`${n} > Update found: ${r} -> ${e}`),await this.downloadAndExtractDll(n,e,t,i),this.logger.log(`${n} > Downloaded and extracted`),i&&(this.logger.log(`${n} > Cleaning up versions older than ${e}`),await this.cleanupOldVersions(n,e)),this.emit(`dllUpdated`,{identifier:n,version:e})}catch(e){this.logger.error(`${n} > Error checking/updating`,e)}}async downloadAndExtractDll(e,t,n,r){let{data:i}=await At(e,n),a=this.getTargetPath(e),o=this.getTargetVersionPath(e,t);await h.mkdir(o,{recursive:!0});let s=new g;await s.loadAsync(i);let c=Object.keys(s.files).map(async t=>{let n=s.files[t];if(n&&!n.dir){let i=p.join(o,t);if(!r)try{await h.access(i,h.constants.F_OK);return}catch{this.logger.warn(`${e} > File missing, re-downloading: ${i}`)}let a=await n.async(`nodebuffer`);await h.writeFile(i,a)}});await Promise.all(c);let l=p.join(a,`version.txt`);this.logger.log(`Saving version file`,l),await h.writeFile(l,t)}async cleanupOldVersions(e,t){let n=p.join(this.targetDir,e),r=await h.readdir(n,{withFileTypes:!0});for(let e of r)e.isDirectory()&&e.name!==t&&await h.rm(p.join(n,e.name),{recursive:!0,force:!0})}};const V=M(Ut);var Wt=class extends L{REFETCH_INTERVAL=1e3*60*5;FAILED_REFETCH_INTERVAL=1e3*30;_ravenConfig;_executableToGameMap=new Map;_executablesArray=[];_refetchIntervalHandler=null;_failedRefetchTimeoutHandler=null;constructor(){super(`RavenManager`)}init(){super.init(),this.fetchRavenConfig(),this._refetchIntervalHandler=setInterval(()=>{this._failedRefetchTimeoutHandler&&(clearTimeout(this._failedRefetchTimeoutHandler),this._failedRefetchTimeoutHandler=null),this.fetchRavenConfig()},this.REFETCH_INTERVAL)}getExecutableData(e){return this._executableToGameMap.get(e.toLowerCase())??null}get executables(){return this._executablesArray}get executablesMap(){return this._executableToGameMap}destroy(){this._refetchIntervalHandler&&clearInterval(this._refetchIntervalHandler),this._failedRefetchTimeoutHandler&&clearTimeout(this._failedRefetchTimeoutHandler),V.getInstance().destroy(),super.destroy()}async fetchRavenConfig(){try{let e=await Mt(),t={games:[...e.data.games,{name:`Valorant`,identifier:Nt(`valorant`),executables:[`VALORANT-Win64-Shipping.exe`],modules:[]}]};this._ravenConfig=t,this.resetState();let n=new Set;for(let e of this._ravenConfig.games){for(let t of e.executables){let n=t.toLowerCase();this._executableToGameMap.set(n,e),this._executablesArray.push(n)}e.modules.forEach(e=>n.add(e))}await V.getInstance().initWithDlls(Array.from(n)),this.logger.log(`Raven updated`,this._ravenConfig),this.emit(`executablesUpdated`,{executables:this.executables,map:this._executableToGameMap})}catch(e){this.logger.error(`Failed to fetch Raven config`,e),this._failedRefetchTimeoutHandler=setTimeout(()=>this.fetchRavenConfig(),this.FAILED_REFETCH_INTERVAL)}}resetState(){this._executableToGameMap.clear(),this._executablesArray=[]}};const H=M(Wt),Gt=e(import.meta.url),{PipeEventServer:Kt,PipeEventClient:qt,PipeEventBase:Jt,ProcessMonitor:Yt,Process:U,InjectionMethod:Xt,AccessLevel:Zt,HardwareInterface:Qt}=Gt(`@overlayed/app/dist/native-interface/build/overlayed_native_interface_x64.node`);var $t=class extends L{_processMonitor;_processes=new Map;boundOnRavenManagerExecutablesUpdated=this.onRavenManagerExecutablesUpdated.bind(this);constructor(){super(`ProcessManager`),this._processMonitor=new Yt}get hasAnyActiveProcesses(){return this.activeProcesses.length>0}get activeProcesses(){return Array.from(this._processes.values()).flat().filter(e=>!e.destroyedAt)}init(){super.init(),H.getInstance().on(`executablesUpdated`,this.boundOnRavenManagerExecutablesUpdated),this._processMonitor.on(`create`,e=>{this.logger.log(`Process created`,e),this.addProcess(e),this.logger.log(`Active Process Count: ${this._processes.size}`),this.emit(`create`,{process:e})}),this._processMonitor.on(`destroy`,e=>{this.logger.log(`Process destroyed`,e),this.deleteProcess(e),this.logger.log(`Active Process Count: ${this._processes.size}`),this.emit(`destroy`,{process:e})})}destroy(){H.getInstance().off(`executablesUpdated`,this.boundOnRavenManagerExecutablesUpdated),this._processes.clear(),this._processMonitor.removeAllListeners(),super.destroy()}isProcessRunning(e){let t=this._processes.get(e);return t?.some(e=>!e.destroyedAt)??!1}onRavenManagerExecutablesUpdated(e){e.executables.forEach(e=>{this.logger.log(`Monitoring process`,e),this._processMonitor.registerProcess(e)})}addProcess(e){if(!e.name)return;let t=this._processes.get(e.name);if(!t){this._processes.set(e.name,[e]);return}this._processes.set(e.name,t.concat(e))}deleteProcess(e){if(!e.name)return;let t=this._processes.get(e.name),n=t?.filter(t=>t.id!==e.id)??[];n.length===0?this._processes.delete(e.name):this._processes.set(e.name,n)}};const W=M($t),en=e(import.meta.url),{RenderInterface:tn,renderHookPath:nn}=en(`@overlayed/app/dist/render-interface/build/overlayed_render_interface_x64.node`);var rn=class{_instance;_resolution;boundOnResolutionChanged=this.onResolutionChanged.bind(this);constructor(e){this._instance=e,this._resolution={width:0,height:0},this._instance.on(`resolution`,this.boundOnResolutionChanged)}destroy(){this._instance.off(`resolution`,this.boundOnResolutionChanged)}get instance(){return this._instance}get resolution(){return this._resolution}onResolutionChanged(e,t){this._resolution={width:e,height:t}}},an=class{interfaces={};constructor(){}createInterface(e){return this.interfaces[e]||(this.interfaces[e]=new rn(new tn(e,{access:1}))),this.interfaces[e]}getInterface(e){return this.interfaces[e]?this.interfaces[e]:this.createInterface(e)}};const G=M(an);var on=class{options;eventQueue;_meta=null;set meta(e){this._meta=e}constructor(e){this.options=this.resolveOptions(e),this.eventQueue=new we,this.setupFlushInterval()}track(e,t){this.eventQueue.add({type:e,properties:t,created_at:new Date().toISOString()})}flush(){let e=Array.from(this.eventQueue.flush()),t=e.concat({type:`ping`,properties:{},created_at:new Date().toISOString()});if(!this._meta)throw Error(`Tried to flush Cortex events before meta was set`);try{Rt({...this._meta,messages:t})}catch{}return t}setupFlushInterval(){setInterval(()=>{this.flush()},this.options.batchIntervalSeconds*1e3)}resolveOptions(e){return{batchIntervalSeconds:e?.batchIntervalSeconds??15}}};const K=M(on),sn=e(import.meta.url),cn=sn.resolve(`@overlayed/app/dist/render-interface/build/overlayed_render_hook_x64.dll`);var ln=class extends bt{boundOnProcessCreate=this.onProcessCreate.bind(this);boundOnProcessDestroy=this.onProcessDestroy.bind(this);subscribedGames=new Set;constructor(){super(`GameLaunchManager`)}setSubscribedGames(e){this.subscribedGames=new Set(e)}init(){super.init(),G.getInstance().createInterface(`OGG_SIEGE`),W.getInstance().on(`create`,this.boundOnProcessCreate),W.getInstance().on(`destroy`,this.boundOnProcessDestroy)}destroy(){W.getInstance().off(`create`,this.boundOnProcessCreate),W.getInstance().off(`destroy`,this.boundOnProcessDestroy),super.destroy()}async onProcessCreate({process:e}){let t=this.getRavenGame(e);if(!t)return;if(this.subscribedGames.size===0){this.logger.warn(`No subscribed games, skipping`);return}if(!this.subscribedGames.has(t.identifier)&&!this.subscribedGames.has(`*`))return;let n=new AbortController;if(await this.emit(`gameLaunch`,{game:t.identifier,reject:()=>n.abort}),n.signal.aborted)return;if(this.logger.log(`Game Launched`,t),this.logger.log(`Process is elevated: `,e.isElevated),this.logger.log(`Current process is elevated: `,U.currentProcess.isElevated),e.isElevated&&!U.currentProcess.isElevated){N.getInstance().fatal(`Game is elevated but the App is not`,`ELEVATION_MISMATCH`,{appElevated:!!U.currentProcess.isElevated,gameElevated:!!e.isElevated}),this.logger.log(`Game elevated but App is not`,{appElevated:U.currentProcess.isElevated,gameElevated:e.isElevated});return}let r=this.copyDll(cn);if(r)try{await e.injectDll(r),this.logger.log(`Render Interface Injection Successful`,r)}catch(e){this.logger.error(`Render Interface Injection Failed`,e),this.logger.error(`Render Interface Injection Failed`,{renderInterfacePath:r})}let i=t?.modules.map(async t=>{let n=await V.getInstance().getCurrentVersion(t);if(!n)return this.logger.error(`No version found for DLL`,{identifier:t}),Promise.resolve();let r=V.getInstance().getTargetVersionPath(t,n);this.logger.log(`DLL Path`,r);let i=await this.getDllFiles(r);return this.logger.log(`DLL Files`,i),Promise.all(i.map(async t=>{let n=p.basename(t),i=p.join(r,n);if(!i)return Promise.resolve();this.logger.log(`Injecting: `,i);try{return e.injectDll(i).then(()=>{this.logger.log(`Injection Successful`,i)}).catch(e=>{this.logger.error(`Injection Failed [1]`,{targetPath:i},e)})}catch(e){return this.logger.error(`Injection Failed [2]`,{targetPath:i},e),Promise.reject(e)}}))});await Promise.allSettled(i),this.emit(`gameReadyInternal`,{ravenGame:t,process:e}),this.emit(`gameReady`,{game:t.identifier}),K.getInstance().track(`game_launch`,{game:t.identifier})}copyDll(e){let t=p.basename(e),n=te(e),r=p.join(P(),`resources`),i=p.join(r,t);this.logger.info(`Copying`,n,`to`,i);try{se(r)||ce(r,{recursive:!0});let e=le(n);de(i,e),ae(n,i)}catch(e){return e.code===`EBUSY`?i:(this.logger.error(`Failed to copy`,e),this.logger.error(`Failed to copy`,{originalPath:n,targetPath:i}),!1)}return i}async getDllFiles(e){try{let t=await h.readdir(e);return t.filter(e=>e.endsWith(`.dll`)).map(t=>p.join(e,t))}catch(t){return this.logger.error(`Failed to read DLL directory`,t),this.logger.error(`Failed to read DLL directory`,{dllPath:e}),[]}}onProcessDestroy({process:e}){let t=this.getRavenGame(e);t&&(this.emit(`gameCloseInternal`,{ravenGame:t,process:e}),this.emit(`gameClose`,{game:t.identifier}),K.getInstance().track(`game_close`,{game:t.identifier}))}getRavenGame(e){if(!e.name)return;let t=H.getInstance().getExecutableData(e.name);if(!t){this.logger.error(`No raven game found for process`,{process:e});return}return t}};const q=M(ln);var un=class extends yt{boundOnGameLaunch=this.onGameLaunch.bind(this);constructor(){super(`GameBuildManager`)}init(){super.init(),q.getInstance().on(`gameReadyInternal`,this.boundOnGameLaunch)}destroy(){q.getInstance().off(`gameReadyInternal`,this.boundOnGameLaunch),super.destroy()}async onGameLaunch(...e){let[{ravenGame:t,process:n}]=e;if(!n.path||!n.name){this.logger.error(`Process path or name not found, could not check for build hash`,void 0,n);return}let r=le(n.path),i=pe(`sha256`).update(r).digest(`hex`);this.logger.log(`Process Path`,n.path),this.logger.log(`Process Name`,n.name),this.logger.log(`Build Hash`,i);let a=!1;try{let e=await Pt(t.identifier,i);a=e.data.upload}catch(e){this.logger.error(`Error checking game build hash`,e);return}if(!a){this.logger.log(`Build hash already exists, skipping upload`);return}let o=new g;o.file(n.name,r);let s=await o.generateAsync({type:`blob`});try{this.logger.log(`Uploading build (size: `,s.size,` bytes)`);let e=new it(s,{chunkSizeMb:25,maxConcurrent:1}),n=await Ft(t.identifier,{build_hash:i,chunk_count:e.totalChunks,file_size_bytes:s.size});await e.chunk(async(e,r)=>{this.logger.log(`Uploading chunk`,r),await It(t.identifier,{chunk:e,build_hash:i,chunk_index:r,upload_token:n.data.upload_token})}),this.logger.log(`Build uploaded successfully`)}catch(e){zt(e)?Bt(e.response)?this.logger.error(`Error uploading build hash, api error`,e):this.logger.error(`Error uploading build hash, request error`,e):this.logger.error(`Error uploading build hash, unknown error`,e)}}};const dn=M(un);function fn(e=[]){return p.normalize(p.join(tt(global.OVERLAYED.APPLICATION_ID),...e))}const pn=r({game:`string`,type:`string`,creation_time:`number`});var J=function(e){return e[e.LeftButton=1]=`LeftButton`,e[e.RightButton=2]=`RightButton`,e[e.Cancel=3]=`Cancel`,e[e.MiddleButton=4]=`MiddleButton`,e[e.ExtraButton1=5]=`ExtraButton1`,e[e.ExtraButton2=6]=`ExtraButton2`,e[e.Back=8]=`Back`,e[e.Tab=9]=`Tab`,e[e.Clear=12]=`Clear`,e[e.Return=13]=`Return`,e[e.Shift=16]=`Shift`,e[e.Control=17]=`Control`,e[e.Menu=18]=`Menu`,e[e.Pause=19]=`Pause`,e[e.CapsLock=20]=`CapsLock`,e[e.Kana=21]=`Kana`,e[e.Hangeul=21]=`Hangeul`,e[e.Hangul=21]=`Hangul`,e[e.Junja=23]=`Junja`,e[e.Final=24]=`Final`,e[e.Hanja=25]=`Hanja`,e[e.Kanji=25]=`Kanji`,e[e.Escape=27]=`Escape`,e[e.Convert=28]=`Convert`,e[e.NonConvert=29]=`NonConvert`,e[e.Accept=30]=`Accept`,e[e.ModeChange=31]=`ModeChange`,e[e.Space=32]=`Space`,e[e.Prior=33]=`Prior`,e[e.Next=34]=`Next`,e[e.End=35]=`End`,e[e.Home=36]=`Home`,e[e.Left=37]=`Left`,e[e.Up=38]=`Up`,e[e.Right=39]=`Right`,e[e.Down=40]=`Down`,e[e.Select=41]=`Select`,e[e.Print=42]=`Print`,e[e.Execute=43]=`Execute`,e[e.Snapshot=44]=`Snapshot`,e[e.Insert=45]=`Insert`,e[e.Delete=46]=`Delete`,e[e.Help=47]=`Help`,e[e.N0=48]=`N0`,e[e.N1=49]=`N1`,e[e.N2=50]=`N2`,e[e.N3=51]=`N3`,e[e.N4=52]=`N4`,e[e.N5=53]=`N5`,e[e.N6=54]=`N6`,e[e.N7=55]=`N7`,e[e.N8=56]=`N8`,e[e.N9=57]=`N9`,e[e.A=65]=`A`,e[e.B=66]=`B`,e[e.C=67]=`C`,e[e.D=68]=`D`,e[e.E=69]=`E`,e[e.F=70]=`F`,e[e.G=71]=`G`,e[e.H=72]=`H`,e[e.I=73]=`I`,e[e.J=74]=`J`,e[e.K=75]=`K`,e[e.L=76]=`L`,e[e.M=77]=`M`,e[e.N=78]=`N`,e[e.O=79]=`O`,e[e.P=80]=`P`,e[e.Q=81]=`Q`,e[e.R=82]=`R`,e[e.S=83]=`S`,e[e.T=84]=`T`,e[e.U=85]=`U`,e[e.V=86]=`V`,e[e.W=87]=`W`,e[e.X=88]=`X`,e[e.Y=89]=`Y`,e[e.Z=90]=`Z`,e[e.LeftWindows=91]=`LeftWindows`,e[e.RightWindows=92]=`RightWindows`,e[e.Application=93]=`Application`,e[e.Sleep=95]=`Sleep`,e[e.Numpad0=96]=`Numpad0`,e[e.Numpad1=97]=`Numpad1`,e[e.Numpad2=98]=`Numpad2`,e[e.Numpad3=99]=`Numpad3`,e[e.Numpad4=100]=`Numpad4`,e[e.Numpad5=101]=`Numpad5`,e[e.Numpad6=102]=`Numpad6`,e[e.Numpad7=103]=`Numpad7`,e[e.Numpad8=104]=`Numpad8`,e[e.Numpad9=105]=`Numpad9`,e[e.Multiply=106]=`Multiply`,e[e.Add=107]=`Add`,e[e.Separator=108]=`Separator`,e[e.Subtract=109]=`Subtract`,e[e.Decimal=110]=`Decimal`,e[e.Divide=111]=`Divide`,e[e.F1=112]=`F1`,e[e.F2=113]=`F2`,e[e.F3=114]=`F3`,e[e.F4=115]=`F4`,e[e.F5=116]=`F5`,e[e.F6=117]=`F6`,e[e.F7=118]=`F7`,e[e.F8=119]=`F8`,e[e.F9=120]=`F9`,e[e.F10=121]=`F10`,e[e.F11=122]=`F11`,e[e.F12=123]=`F12`,e[e.F13=124]=`F13`,e[e.F14=125]=`F14`,e[e.F15=126]=`F15`,e[e.F16=127]=`F16`,e[e.F17=128]=`F17`,e[e.F18=129]=`F18`,e[e.F19=130]=`F19`,e[e.F20=131]=`F20`,e[e.F21=132]=`F21`,e[e.F22=133]=`F22`,e[e.F23=134]=`F23`,e[e.F24=135]=`F24`,e[e.NumLock=144]=`NumLock`,e[e.ScrollLock=145]=`ScrollLock`,e[e.NEC_Equal=146]=`NEC_Equal`,e[e.Fujitsu_Jisho=146]=`Fujitsu_Jisho`,e[e.Fujitsu_Masshou=147]=`Fujitsu_Masshou`,e[e.Fujitsu_Touroku=148]=`Fujitsu_Touroku`,e[e.Fujitsu_Loya=149]=`Fujitsu_Loya`,e[e.Fujitsu_Roya=150]=`Fujitsu_Roya`,e[e.LeftShift=160]=`LeftShift`,e[e.RightShift=161]=`RightShift`,e[e.LeftControl=162]=`LeftControl`,e[e.RightControl=163]=`RightControl`,e[e.LeftMenu=164]=`LeftMenu`,e[e.RightMenu=165]=`RightMenu`,e[e.BrowserBack=166]=`BrowserBack`,e[e.BrowserForward=167]=`BrowserForward`,e[e.BrowserRefresh=168]=`BrowserRefresh`,e[e.BrowserStop=169]=`BrowserStop`,e[e.BrowserSearch=170]=`BrowserSearch`,e[e.BrowserFavorites=171]=`BrowserFavorites`,e[e.BrowserHome=172]=`BrowserHome`,e[e.VolumeMute=173]=`VolumeMute`,e[e.VolumeDown=174]=`VolumeDown`,e[e.VolumeUp=175]=`VolumeUp`,e[e.MediaNextTrack=176]=`MediaNextTrack`,e[e.MediaPrevTrack=177]=`MediaPrevTrack`,e[e.MediaStop=178]=`MediaStop`,e[e.MediaPlayPause=179]=`MediaPlayPause`,e[e.LaunchMail=180]=`LaunchMail`,e[e.LaunchMediaSelect=181]=`LaunchMediaSelect`,e[e.LaunchApplication1=182]=`LaunchApplication1`,e[e.LaunchApplication2=183]=`LaunchApplication2`,e[e.OEM1=186]=`OEM1`,e[e.OEMPlus=187]=`OEMPlus`,e[e.OEMComma=188]=`OEMComma`,e[e.OEMMinus=189]=`OEMMinus`,e[e.OEMPeriod=190]=`OEMPeriod`,e[e.OEM2=191]=`OEM2`,e[e.OEM3=192]=`OEM3`,e[e.OEM4=219]=`OEM4`,e[e.OEM5=220]=`OEM5`,e[e.OEM6=221]=`OEM6`,e[e.OEM7=222]=`OEM7`,e[e.OEM8=223]=`OEM8`,e[e.OEMAX=225]=`OEMAX`,e[e.OEM102=226]=`OEM102`,e[e.ICOHelp=227]=`ICOHelp`,e[e.ICO00=228]=`ICO00`,e[e.ProcessKey=229]=`ProcessKey`,e[e.ICOClear=230]=`ICOClear`,e[e.Packet=231]=`Packet`,e[e.OEMReset=233]=`OEMReset`,e[e.OEMJump=234]=`OEMJump`,e[e.OEMPA1=235]=`OEMPA1`,e[e.OEMPA2=236]=`OEMPA2`,e[e.OEMPA3=237]=`OEMPA3`,e[e.OEMWSCtrl=238]=`OEMWSCtrl`,e[e.OEMCUSel=239]=`OEMCUSel`,e[e.OEMATTN=240]=`OEMATTN`,e[e.OEMFinish=241]=`OEMFinish`,e[e.OEMCopy=242]=`OEMCopy`,e[e.OEMAuto=243]=`OEMAuto`,e[e.OEMENLW=244]=`OEMENLW`,e[e.OEMBackTab=245]=`OEMBackTab`,e[e.ATTN=246]=`ATTN`,e[e.CRSel=247]=`CRSel`,e[e.EXSel=248]=`EXSel`,e[e.EREOF=249]=`EREOF`,e[e.Play=250]=`Play`,e[e.Zoom=251]=`Zoom`,e[e.Noname=252]=`Noname`,e[e.PA1=253]=`PA1`,e[e.OEMClear=254]=`OEMClear`,e}(J||{});const Y=new Map([[J.LeftButton,`LeftButton`],[J.RightButton,`RightButton`],[J.Cancel,`Cancel`],[J.MiddleButton,`MiddleButton`],[J.ExtraButton1,`ExtraButton1`],[J.ExtraButton2,`ExtraButton2`],[J.Back,`Backspace`],[J.Tab,`Tab`],[J.Clear,`Clear`],[J.Return,`Enter`],[J.Shift,`ShiftLeft`],[J.Control,`ControlLeft`],[J.Menu,`AltLeft`],[J.Pause,`Pause`],[J.CapsLock,`CapsLock`],[J.Kana,`KanaMode`],[J.Junja,`JunjaMode`],[J.Final,`Finalize`],[J.Hanja,`HanjaMode`],[J.Escape,`Escape`],[J.Convert,`Convert`],[J.NonConvert,`NonConvert`],[J.Accept,`Accept`],[J.ModeChange,`ModeChange`],[J.Space,`Space`],[J.Prior,`PageUp`],[J.Next,`PageDown`],[J.End,`End`],[J.Home,`Home`],[J.Left,`ArrowLeft`],[J.Up,`ArrowUp`],[J.Right,`ArrowRight`],[J.Down,`ArrowDown`],[J.Select,`Select`],[J.Print,`PrintScreen`],[J.Execute,`Execute`],[J.Snapshot,`Snapshot`],[J.Insert,`Insert`],[J.Delete,`Delete`],[J.Help,`Help`],[J.N0,`Digit0`],[J.N1,`Digit1`],[J.N2,`Digit2`],[J.N3,`Digit3`],[J.N4,`Digit4`],[J.N5,`Digit5`],[J.N6,`Digit6`],[J.N7,`Digit7`],[J.N8,`Digit8`],[J.N9,`Digit9`],[J.A,`KeyA`],[J.B,`KeyB`],[J.C,`KeyC`],[J.D,`KeyD`],[J.E,`KeyE`],[J.F,`KeyF`],[J.G,`KeyG`],[J.H,`KeyH`],[J.I,`KeyI`],[J.J,`KeyJ`],[J.K,`KeyK`],[J.L,`KeyL`],[J.M,`KeyM`],[J.N,`KeyN`],[J.O,`KeyO`],[J.P,`KeyP`],[J.Q,`KeyQ`],[J.R,`KeyR`],[J.S,`KeyS`],[J.T,`KeyT`],[J.U,`KeyU`],[J.V,`KeyV`],[J.W,`KeyW`],[J.X,`KeyX`],[J.Y,`KeyY`],[J.Z,`KeyZ`],[J.LeftWindows,`MetaLeft`],[J.RightWindows,`MetaRight`],[J.Application,`ContextMenu`],[J.Sleep,`Sleep`],[J.Numpad0,`Numpad0`],[J.Numpad1,`Numpad1`],[J.Numpad2,`Numpad2`],[J.Numpad3,`Numpad3`],[J.Numpad4,`Numpad4`],[J.Numpad5,`Numpad5`],[J.Numpad6,`Numpad6`],[J.Numpad7,`Numpad7`],[J.Numpad8,`Numpad8`],[J.Numpad9,`Numpad9`],[J.Multiply,`NumpadMultiply`],[J.Add,`NumpadAdd`],[J.Separator,`NumpadSeparator`],[J.Subtract,`NumpadSubtract`],[J.Decimal,`NumpadDecimal`],[J.Divide,`NumpadDivide`],[J.F1,`F1`],[J.F2,`F2`],[J.F3,`F3`],[J.F4,`F4`],[J.F5,`F5`],[J.F6,`F6`],[J.F7,`F7`],[J.F8,`F8`],[J.F9,`F9`],[J.F10,`F10`],[J.F11,`F11`],[J.F12,`F12`],[J.F13,`F13`],[J.F14,`F14`],[J.F15,`F15`],[J.F16,`F16`],[J.F17,`F17`],[J.F18,`F18`],[J.F19,`F19`],[J.F20,`F20`],[J.F21,`F21`],[J.F22,`F22`],[J.F23,`F23`],[J.F24,`F24`],[J.NumLock,`NumLock`],[J.ScrollLock,`ScrollLock`],[J.NEC_Equal,`NEC_Equal`],[J.Fujitsu_Masshou,`Fujitsu_Masshou`],[J.Fujitsu_Touroku,`Fujitsu_Touroku`],[J.Fujitsu_Loya,`Fujitsu_Loya`],[J.Fujitsu_Roya,`Fujitsu_Roya`],[J.LeftShift,`ShiftLeft`],[J.RightShift,`ShiftRight`],[J.LeftControl,`ControlLeft`],[J.RightControl,`ControlRight`],[J.LeftMenu,`AltLeft`],[J.RightMenu,`AltRight`],[J.BrowserBack,`BrowserBack`],[J.BrowserForward,`BrowserForward`],[J.BrowserRefresh,`BrowserRefresh`],[J.BrowserStop,`BrowserStop`],[J.BrowserSearch,`BrowserSearch`],[J.BrowserFavorites,`BrowserFavorites`],[J.BrowserHome,`BrowserHome`],[J.VolumeMute,`VolumeMute`],[J.VolumeDown,`VolumeDown`],[J.VolumeUp,`VolumeUp`],[J.MediaNextTrack,`MediaTrackNext`],[J.MediaPrevTrack,`MediaTrackPrevious`],[J.MediaStop,`MediaStop`],[J.MediaPlayPause,`MediaPlayPause`],[J.LaunchMail,`LaunchMail`],[J.LaunchMediaSelect,`LaunchMediaSelect`],[J.LaunchApplication1,`LaunchApplication1`],[J.LaunchApplication2,`LaunchApplication2`],[J.OEM1,`OEM_1`],[J.OEMPlus,`Equal`],[J.OEMComma,`Comma`],[J.OEMMinus,`Minus`],[J.OEMPeriod,`Period`],[J.OEM2,`Slash`],[J.OEM3,`Backquote`],[J.OEM4,`BracketLeft`],[J.OEM5,`Backslash`],[J.OEM6,`BracketRight`],[J.OEM7,`Quote`],[J.OEM8,`IntlRo`],[J.OEMAX,`OEM_AX`],[J.OEM102,`IntlBackslash`],[J.ICOHelp,`ICO_HELP`],[J.ICO00,`ICO_00`],[J.ProcessKey,`Process`],[J.ICOClear,`ICO_CLEAR`],[J.Packet,`Packet`],[J.OEMReset,`OEM_Reset`],[J.OEMJump,`OEM_Jump`],[J.OEMPA1,`OEM_PA1`],[J.OEMPA2,`OEM_PA2`],[J.OEMPA3,`OEM_PA3`],[J.OEMWSCtrl,`OEM_WS_Ctrl`],[J.OEMCUSel,`OEM_CU_Sel`],[J.OEMATTN,`OEM_ATTN`],[J.OEMFinish,`OEM_Finish`],[J.OEMCopy,`OEM_Copy`],[J.OEMAuto,`OEM_Auto`],[J.OEMENLW,`OEM_ENLW`],[J.OEMBackTab,`BackTab`],[J.ATTN,`ATTN`],[J.CRSel,`CRSel`],[J.EXSel,`EXSel`],[J.EREOF,`EREOF`],[J.Play,`MediaPlay`],[J.Zoom,`Zoom`],[J.Noname,`Noname`],[J.PA1,`PA1`],[J.OEMClear,`OEM_Clear`]]),mn=new Map(Y.entries().map(([e,t])=>[t,e])),hn=r({"[string]":{keys:`string[]`,mode:r(`'toggle' | 'hold'`).pipe(e=>e??`toggle`)}});var gn=class extends L{preferencesKeybindToCallbacks=new Map;pressedKeys=new Set;activeKeybinds=new Set;triggeredToggleKeybinds=new Set;boundHandleKeyboardFocus=this.handleKeyboardFocus.bind(this);boundHandleKeyDown=this.handleKeyDown.bind(this);boundHandleKeyUp=this.handleKeyUp.bind(this);keybindsFile;keybindListeningPaused=!1;constructor(e){super(`KeybindManager`),this.keybindsFile=new Qe({path:fn([`keybinds.json`]),schema:hn,default:e})}init(){super.init();let e=G.getInstance().getInterface(`OGG_SIEGE`);e.instance.on(`keyboardFocus`,this.boundHandleKeyboardFocus),e.instance.on(`keyDown`,this.boundHandleKeyDown),e.instance.on(`keyUp`,this.boundHandleKeyUp)}async onKeybindToggled(e,t){let n=this.preferencesKeybindToCallbacks.get(e)||{};n.toggle=t,this.preferencesKeybindToCallbacks.set(e,n)}async onKeybindDown(e,t){let n=this.preferencesKeybindToCallbacks.get(e)||{};n.down=t,this.preferencesKeybindToCallbacks.set(e,n)}async onKeybindUp(e,t){let n=this.preferencesKeybindToCallbacks.get(e)||{};n.up=t,this.preferencesKeybindToCallbacks.set(e,n)}async updateKeybind(e,t){this.keybindsFile.set({[e]:t})}async updateKeybinds(e){let t=Object.fromEntries(Object.entries(e).filter(([e,t])=>t!==void 0));this.keybindsFile.set({...this.keybindsFile.get(),...t})}getConfig(){return this.keybindsFile.get()}destroy(){let e=G.getInstance().getInterface(`OGG_SIEGE`);e.instance.off(`keyboardFocus`,this.boundHandleKeyboardFocus),e.instance.off(`keyDown`,this.boundHandleKeyDown),e.instance.off(`keyUp`,this.boundHandleKeyUp),super.destroy()}handleKeyDown(e){if(this.keybindListeningPaused)return;let t=Y.get(e.key);if(!t){this.logger.error(`Unknown key down`,e);return}this.pressedKeys.add(t),this.checkKeybindings()}handleKeyboardFocus(){this.pressedKeys.clear(),this.activeKeybinds.clear(),this.triggeredToggleKeybinds.clear()}async handleKeyUp(e){if(this.keybindListeningPaused)return;let t=Y.get(e.key);if(!t)return;this.pressedKeys.delete(t);let n=this.keybindsFile.get();for(let[e]of this.preferencesKeybindToCallbacks.entries()){let r=n[e];r.keys.includes(t)&&this.triggeredToggleKeybinds.delete(e)}this.checkKeybindUps()}async checkKeybindUps(){let e=this.keybindsFile.get();for(let[t,n]of this.preferencesKeybindToCallbacks.entries()){if(!n.up)continue;let r=e[t];this.activeKeybinds.has(t)&&r.keys.some(e=>!this.pressedKeys.has(e))&&(this.activeKeybinds.delete(t),n.up(),this.logger.log(`Keybind up triggered`,this.getKeybindToString(r)))}}async checkKeybindings(){let e=this.keybindsFile.get();for(let[t,n]of this.preferencesKeybindToCallbacks.entries()){let r=e[t],i=r.keys.length===this.pressedKeys.size&&r.keys.every(e=>mn.has(e)?this.pressedKeys.has(e):!1);if(i){this.triggerKeybind(r,n,t);return}}for(let[t,n]of this.preferencesKeybindToCallbacks.entries()){let r=e[t],i=r.keys.every(e=>mn.has(e)?this.pressedKeys.has(e):(this.logger.error(`Unknown key`,e,r),!1));i&&this.triggerKeybind(r,n,t)}}triggerKeybind(e,t,n){let r=e.mode;if(r===`toggle`&&t.toggle&&!this.triggeredToggleKeybinds.has(n)){let r=t.toggle();this.triggeredToggleKeybinds.add(n),this.logger.log(r?`Keybind pressed rejected: ${r}`:`Keybind pressed accepted`,this.getKeybindToString(e))}if(r===`hold`&&t.down&&!this.activeKeybinds.has(n)){let r=t.down();r?this.logger.log(`Keybind down rejected: ${r}`,this.getKeybindToString(e)):(this.activeKeybinds.add(n),this.logger.log(`Keybind down accepted`,this.getKeybindToString(e)))}}getKeybindToString(e){return`(${e.keys.join(`+`)}${e.mode?` ${e.mode}`:``})`}},_n=class extends yt{renderInterface;globalCursorOverrideCount=new Set;globalMouseBlockCount=new Set;globalKeyboardBlockCount=new Set;keyInputBlocks={};constructor(e){super(`OverridesManager`),this.renderInterface=G.getInstance().getInterface(e)}scope(e){return{setGlobalCursorOverride:t=>this.setGlobalCursorOverride(e,t),setGlobalMouseBlock:t=>this.setGlobalMouseBlock(e,t),setGlobalKeyboardBlock:t=>this.setGlobalKeyboardBlock(e,t),setKeyInputBlock:(t,n)=>this.setKeyInputBlock(e,t,n)}}setGlobalCursorOverride(e,t){t?this.globalCursorOverrideCount.add(e):this.globalCursorOverrideCount.delete(e),t&&this.globalCursorOverrideCount.size===1?this.renderInterface.instance.setGlobalCursorOverride(!0):!t&&this.globalCursorOverrideCount.size===0&&this.renderInterface.instance.setGlobalCursorOverride(!1)}setGlobalMouseBlock(e,t){t?this.globalMouseBlockCount.add(e):this.globalMouseBlockCount.delete(e),t&&this.globalMouseBlockCount.size===1?this.renderInterface.instance.setGlobalMouseBlock(!0):!t&&this.globalMouseBlockCount.size===0&&this.renderInterface.instance.setGlobalMouseBlock(!1)}setGlobalKeyboardBlock(e,t){t?this.globalKeyboardBlockCount.add(e):this.globalKeyboardBlockCount.delete(e),t&&this.globalKeyboardBlockCount.size===1?this.renderInterface.instance.setGlobalKeyboardBlock(!0):!t&&this.globalKeyboardBlockCount.size===0&&this.renderInterface.instance.setGlobalKeyboardBlock(!1)}setKeyInputBlock(e,t,n){this.keyInputBlocks[t]||(this.keyInputBlocks[t]=new Set),n?this.keyInputBlocks[t].add(e):this.keyInputBlocks[t].delete(e),n&&this.keyInputBlocks[t].size===1?this.renderInterface.instance.setKeyInputBlock(t,!0):!n&&this.keyInputBlocks[t].size===0&&this.renderInterface.instance.setKeyInputBlock(t,!1)}};const vn=M(_n,`OGG_SIEGE`);var yn=xe((exports,t)=>{var n=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),r=n((e,t)=>{var n=new Set([`mouseDown`,`mouseUp`,`pointerDown`,`pointerUp`]),r=new WeakSet;function i(e,t,{allowHosts:i}={}){let{shell:a}=t;if(r.has(e))return;r.add(e);let o=e.webContents;function s(e){return!!(!c(e)||i?.includes(e.host))}function c(e){return new URL(o.getURL()).origin!==e.origin}let l=0;function u(){l=Date.now()}function d(){let e=Date.now()-l,t=e<150;return t||console.warn(`was not recently active`,e),t}if(process.platform===`win32`){let t={KEYDOWN:256,LBUTTONUP:514,MBUTTONUP:520,RBUTTONUP:517,XBUTTONUP:524,TOUCH:576};for(let n of Object.values(t))e.hookWindowMessage(n,u)}o.on(`input-event`,(e,t)=>{n.has(t.type)&&u()}),o.on(`will-navigate`,(e,t)=>{let n=e.url||t;if(console.log(`will-navigate`,n),!n)return;let r=new URL(n);if(!s(r)){if(!d()){console.log(`blocked navigation`,n),e.preventDefault();return}c(r)&&(console.log(`external navigation`,n),e.preventDefault(),a.openExternal(n))}}),o.session.on(`will-download`,(e,t)=>{let n=t.getURL();/^blob:/.test(n)||e.preventDefault()}),o.setWindowOpenHandler(e=>{console.log(`window-open`,e.url);let{url:t}=e,n=new URL(t);if(!s(n))return d()?(c(n)&&a.openExternal(e.url),{action:`deny`}):(console.log(`blocked navigation`,t),{action:`deny`})})}t.exports=i}),i=n((e,t)=>{var n=new Set([`Mozilla`,`AppleWebKit`,`Chrome`,`Safari`,`Gecko`,`Firefox`,`OPR`,`Edg`,`Version`,`Mobile`,`curl`,`PostmanRuntime`]);async function r(e,t,r){let{webContents:i}=e,a=await i.executeJavaScript(`navigator.userAgent`);a=a.match(/[^\/]+\/[^\s]+( \([^\)]+\))?/g).map(e=>e.trim()).filter(e=>{let[t]=e.split(`/`,1);return n.has(t)}).join(` `),i.setUserAgent(a),t.app.userAgentFallback=a}t.exports=r}),a=r(),o=i();function s(e,t,n={}){a(e,t,n.linkHandler),o(e,t,n.userAgent)}t.exports={setupRevUtils:s,setupLinkHandler:a,setUserAgent:o}}),bn=Ce(yn(),1);const xn=1e3;let X=!1,Sn={},Z,Cn=new j;function wn(e){let{init:t=!0,debug:n=!1}=e;if(Tn(e),F.getInstance().init(e.applicationId,n,!0),X)return Z;function r(){zn();let t=new Map,n=new Map,i=On(e.modules,t),a=kn(),o=jn(e.keybinds),s=Mn(),c=Nn(),l=Fn(),u=Pn(),d=In(e);En(e),An(e,t,n),X=!0,Z={...i,...a,ads:l,keybinds:o,windows:s,input:c,cortex:u,hasAnyActiveProcesses:()=>W.getInstance().hasAnyActiveProcesses,init:r,log:d,initialized:X}}return t?(r(),Z):new Proxy({init:r},{get:(e,t)=>{if(t!==`init`&&!X)throw Error(`overlayed was called before initialized: ${t}`);return t===`init`?e[t]:Z[t]}})}global.OVERLAYED=new Proxy({},{get:()=>{throw Error(`function overlayed was not called`)}});function Tn(e){global.OVERLAYED={APPLICATION_ID:Dt(e.applicationId),APP_BUILD_CHANNEL:e.channel??`alpha`,APP_VERSION:e.version??`0.0.0`,PACKAGE_VERSION:`0.17.0`,FRONTEND_VERSION:`0.0.0`,sessionId:crypto.randomUUID(),electron:e.electron}}function En(e){let t=e.universal?[`*`]:e.modules.map(e=>e.key);q.getInstance().setSubscribedGames(t),dn.getInstance().init(),q.getInstance().init(),W.getInstance().init(),H.getInstance().init();async function n(){let e=Ot(global.OVERLAYED.APPLICATION_ID).then(e=>e.data),t=Qt.generateUniqueIdentifier();F.getInstance().log(`userId`,t);let n={...await e,userId:t};return F.getInstance().log(`appInfo`,n),n}let r;global.OVERLAYED.electron.ipcMain.handle(`getAppInfo`,async()=>(r=r??n(),r)),K.getInstance().track(`start`,{}),me.on(`quit`,()=>{K.getInstance().track(`electron_quit`,{}),Dn()}),process.on(`exit`,()=>{K.getInstance().track(`exit`,{}),Dn()})}async function Dn(){await K.getInstance().flush(),H.getInstance().destroy(),q.getInstance().destroy(),dn.getInstance().destroy(),W.getInstance().destroy(),G.getInstance().getInterface(`OGG_SIEGE`).destroy(),I.getInstance().destroy(),N.getInstance().destroy()}function On(e,t){return e.reduce((e,n)=>{let r=n.key;return e[r]={on(e,n){let i=Q(r,e),a=t.get(i)??new Set;a.add(n),t.set(i,a)},onAny(e){let n=Q(r,`*`),i=t.get(n)??new Set;i.add(e),t.set(n,i)},off(e,n){let i=Q(r,e),a=t.get(i)??new Set;a.delete(n),t.set(i,a)},offAny(e){let n=Q(r,`*`),i=t.get(n)??new Set;i.delete(e),t.set(n,i)},readyForGameEvents:()=>{Cn.emit(`flushEvents`,[r])}},e},{})}function kn(){let e=N.getInstance(),t=q.getInstance();return{on:(n,r)=>{switch(n){case`fatal`:e.on(`fatal`,r);break;case`error`:e.on(`error`,r);break;case`warning`:e.on(`warning`,r);break;case`gameLaunch`:t.on(`gameLaunch`,r);break;case`gameClose`:t.on(`gameClose`,r);break;case`gameReady`:t.on(`gameReady`,r);break;default:throw Error(`Event type not implemented ${n}`,{cause:[n,r]})}},off:(n,r)=>{switch(n){case`fatal`:e.off(`fatal`,r);break;case`error`:e.off(`error`,r);break;case`warning`:e.off(`warning`,r);break;case`gameLaunch`:t.off(`gameLaunch`,r);break;case`gameClose`:t.off(`gameClose`,r);break;case`gameReady`:t.off(`gameReady`,r);break;default:throw Error(`Event type not implemented ${n}`,{cause:[n,r]})}}}}function Q(e,t){return`${e}:${t}`}function An(e,t,n){let i=I.getInstance();function a(e,t){let r=n.get(t);if(!r)n.set(t,[e]);else{if(r.length>=xn){N.getInstance().warn(`Event buffer full, removing oldest event`,`EVENT_BUFFER_FULL`,{summary:`Event buffer overflow for module ${t}. Buffer size: ${r.length}, max: ${xn}`});return}r.push(e)}}function o(n){let i=pn(n);if(i instanceof r.errors){K.getInstance().track(`invalid_game_event`,{}),N.getInstance().warn(`Invalid event`,`INVALID_EVENT`,{summary:i.summary});return}let o=e.modules.find(e=>e.key===i.game),s=o?.events.event;if(!s)return;let c=s(n);if(c instanceof r.errors){K.getInstance().track(`invalid_game_event`,{game:i.game,type:i.type}),N.getInstance().warn(`Invalid event`,`INVALID_EVENT`,{summary:c.summary});return}if(!Sn[o.key]){a(c,o.key);return}K.getInstance().track(`game_event`,{game:i.game,type:c.type});let l=Q(o.key,c.type),u=Q(o.key,`*`),d=t.get(l),f=t.get(u),p=[...Array.from(d??[]),...Array.from(f??[])];p.length!==0&&p.forEach(e=>{e(c)})}return Cn.on(`flushEvents`,([e])=>{if(Sn[e])return;Sn[e]=!0;let t=n.get(e);t&&(F.getInstance().info(`Flushing ${t.length} events for module ${e}`),t.forEach(e=>o(e)),n.delete(e))}),i.on(`data`,e=>e.forEach(o)),i.on(`error`,e=>{N.getInstance().error(`Pipe server error`,`PIPE_SERVER_ERROR`,{error:e})}),i}function jn(e){let t=new gn(e),n={};for(let r in e)n[r]={on:(e,n)=>{switch(e){case`down`:t.onKeybindDown(r,n);break;case`up`:t.onKeybindUp(r,n);break;case`toggle`:t.onKeybindToggled(r,n);break;default:throw Error(`Event type not implemented ${e}`,{cause:[e,n]})}}};let r={...n,getConfig:()=>t.getConfig(),pauseKeybindListening:()=>{t.keybindListeningPaused=!0},resumeKeybindListening:()=>{t.keybindListeningPaused=!1},updateKeybind:(e,n)=>{t.updateKeybind(e,n)},updateKeybinds:e=>{t.updateKeybinds(e)}};return t.init(),me.on(`quit`,()=>{t.destroy()}),r}function Mn(){function e(e,t){return e.once(`closed`,()=>{e.isDestroyed()||K.getInstance().track(`window_closed`,{url:e.webContents.getURL(),in_game:t})}),e.on(`unresponsive`,()=>{e.isDestroyed()||K.getInstance().track(`window_unresponsive`,{url:e.webContents.getURL(),in_game:t})}),K.getInstance().track(`window_created`,{url:e.webContents.getURL(),in_game:t}),e}return{createWindow:t=>e(new global.OVERLAYED.electron.BrowserWindow(t),!1),createInGameWindow:t=>e($().instance.newWindowInternal(global.OVERLAYED.electron.BrowserWindow,t),!0),on:(e,t)=>$().instance.on(e,t),off:(e,t)=>$().instance.off(e,t),once:(e,t)=>$().instance.once(e,t),addListener:(e,t)=>$().instance.addListener(e,t),removeListener:(e,t)=>$().instance.removeListener(e,t),removeAllListeners:()=>$().instance.removeAllListeners(),prependListener:(e,t)=>$().instance.prependListener(e,t),prependOnceListener:(e,t)=>$().instance.prependOnceListener(e,t),getActiveGameInfo:()=>{let e=$(),t=I.getInstance();return{resolution:e.resolution,isConnected:t.hasConnection}}}}function Nn(){return{scope:e=>vn.getInstance().scope(e),raw:{setGlobalMouseBlock:e=>$().instance.setGlobalMouseBlock(e),setGlobalKeyboardBlock:e=>$().instance.setGlobalKeyboardBlock(e),setGlobalCursorOverride:e=>$().instance.setGlobalCursorOverride(e),setKeyInputBlock:(e,t)=>$().instance.setKeyInputBlock(e,t),getGlobalMouseBlock:()=>$().instance.getGlobalMouseBlock(),getGlobalKeyboardBlock:()=>$().instance.getGlobalKeyboardBlock(),getGlobalCursorOverride:()=>$().instance.getGlobalCursorOverride(),getKeyInputBlock:e=>$().instance.getKeyInputBlock(e)}}}function Pn(){return{track:(e,t)=>K.getInstance().track(`custom__${e}`,t)}}function Fn(){return{registerWindow:e=>{(0,bn.setupRevUtils)(e,global.OVERLAYED.electron)}}}function In(e){let t=new rt(`app.log`);return t.init(global.OVERLAYED.APPLICATION_ID,e.debug),{scope:e=>t.scope(e),info:e=>t.info(e),warn:e=>t.warn(e),error:e=>t.error(e),debug:e=>t.debug(e),submitBugReport:async(e,t)=>{K.getInstance().track(`bug_report_submitted`,{version:e.version,category:e.category});let n=Ln(t),r=await n.generateAsync({type:`base64`});await Rn(e,r)}}}function Ln(e){let t=nt(global.OVERLAYED.APPLICATION_ID),n=at(t,{recursive:!0}),r=et(),i=at(r,{recursive:!0});F.getInstance().info(`Logs path: `,t),F.getInstance().info(`Overlayed logs path: `,r);let a=new g;return[...n,...i].forEach(([e,t])=>{F.getInstance().info(`Zipping: `,t);let n=oe(t),r=ee(t);a.file(r,n,{compression:`DEFLATE`})}),Object.entries(e?.additionalFiles??{}).forEach(([e,t])=>{F.getInstance().info(`Zipping extra file: `,e),a.file(e,t,{compression:`DEFLATE`})}),a}async function Rn(e,t){let n={...e,version:`${global.OVERLAYED.APP_VERSION}@${global.OVERLAYED.APP_BUILD_CHANNEL}`,log_zip:`data:application/zip;base64,${t}`};await fetch(`https://api.stats.cc/v1/overlay/contact`,{method:`POST`,body:JSON.stringify(n),redirect:`follow`,headers:{"Content-Type":`application/json`}})}function zn(){K.getInstance().meta={app_id:global.OVERLAYED.APPLICATION_ID,user_id:Qt.generateUniqueIdentifier(),app_channel:global.OVERLAYED.APP_BUILD_CHANNEL,app_version:global.OVERLAYED.APP_VERSION,package_version:global.OVERLAYED.PACKAGE_VERSION,frontend_version:global.OVERLAYED.FRONTEND_VERSION,session_id:global.OVERLAYED.sessionId},N.getInstance().on(`fatal`,e=>{K.getInstance().track(`fatal`,{message:e.message,code:e.code,data:e.data})}),N.getInstance().on(`error`,e=>{K.getInstance().track(`error`,{message:e.message,code:e.code,data:e.data})}),N.getInstance().on(`warning`,e=>{K.getInstance().track(`warning`,{message:e.message,code:e.code,data:e.data})})}function $(){return G.getInstance().getInterface(`OGG_SIEGE`)}export{ct as defineConfig,wn as overlayed,Ht as setFetchLatestTokenCallback,St as setUpdaterTokenResolver};
5
+ `);return a!==-1&&(t=Be(t,i,r,a)),r+t+i};Object.defineProperties(E.prototype,T);const Ye=E();E({level:He?He.level:0});var A=Ye,j=class{emitter;constructor(){this.emitter=t()}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}emit(e,t){this.emitter.emit(e,t)}removeAllListeners(){this.emitter.all.clear()}},Xe=class{listeners;constructor(){this.listeners=new Map}on(e,t){let n=this.listeners.get(e)||new Set;n.add(t),this.listeners.set(e,n)}off(e,t){let n=this.listeners.get(e);n&&n.delete(t)}async emit(e,...t){let n=this.listeners.get(e)||new Set,r=this.listeners.get(`*`)||new Set,i=[...Array.from(n),...Array.from(r)];if(i.length===0)return[];let a=await Promise.all(i.map(async n=>{try{let e=n(...t);return e instanceof Promise?await e:e}catch(t){console.error(`Error in event listener for ${String(e)}:`,t);return}}));return a}removeAllListeners(){this.listeners.clear()}};function M(e,...t){let n=class extends e{static _instance;static getInstance(){return this._instance||(this._instance=new e(...t)),this._instance}static clearInstance(){this._instance=void 0}};return n}var Ze=class extends j{destroy(){this.removeAllListeners()}fatal(e,t,n){this.emit(`fatal`,{code:t,message:e,data:n,timestamp:Date.now()})}error(e,t,n){this.emit(`error`,{code:t,message:e,data:n,timestamp:Date.now()})}warn(e,t,n){this.emit(`warning`,{code:t,message:e,data:n,timestamp:Date.now()})}};const N=M(Ze);var Qe=class{data;_schema;_defaultValue;_path;constructor(e){let{schema:t,default:n,path:r}=e;this._schema=t,this._defaultValue=n,this._path=r}set(e){let t=this._schema[`~standard`].validate(e);if(t instanceof Promise)throw Error(`StructuredConfigFile does not support async validation`);if(t.issues){this.reportInvalidConfigFile(t.issues);return}this.data=this.onBeforeSave(e),this.save(e)}get(){return this.data?this.data:this.load()}getKey(e){let t=this.get();return t[e]}save(e){let t=this.onBeforeSave(e);try{d(this.getFilePath()),i.writeFileSync(this.getFilePath(),JSON.stringify(t,void 0,2))}catch{return}return this.data=t}load(){if(!this.fileExists(this.getFilePath())||!this.canReadWriteFile(this.getFilePath())){this.save(this._defaultValue);let e=this.onAfterLoad(this._defaultValue);return this.data=e,e}try{let e=i.readFileSync(this.getFilePath(),`utf8`),t=this.onAfterLoad(this.parseStoredData(e));return this.data=t,t}catch{return this.data=this._defaultValue}}onBeforeSave(e){return e}onAfterLoad(e){return e}getFilePath(){return this._path}parseStoredData(e){try{let t=r(`string.json.parse`).to(`object`),n=t(e);if(n instanceof r.errors)return this._defaultValue;let i=this._schema[`~standard`].validate(n);if(i instanceof Promise)throw Error(`StructuredConfigFile does not support async validation`);return i.issues?this.migrate(n,this._defaultValue):this.migrate(i.value,this._defaultValue)}catch{return this._defaultValue}}canReadWriteFile(e){try{return i.accessSync(e,i.constants.R_OK|i.constants.W_OK),!0}catch{return!1}}fileExists(e){try{return i.accessSync(e,i.constants.F_OK),!0}catch{return!1}}migrate(e,t){let n={...e};for(let r in t){if(!Object.prototype.hasOwnProperty.call(t,r))continue;r in e?e[r]!==null&&t[r]!==null&&typeof e[r]==`object`&&typeof t[r]==`object`&&!Array.isArray(e[r])&&!Array.isArray(t[r])?n[r]=this.migrate(e[r],t[r]):Array.isArray(t[r])&&(n[r]=e[r]):n[r]=t[r]}return n}reportInvalidConfigFile(e){N.getInstance().error(`Invalid config file`,`INVALID_CONFIG_FILE`,{issues:e.map(e=>e.message),filePath:this._path,data:this.data})}},$e=class e extends j{stream;logPath;baseFileName;currentDate;rotationCheckInterval;isRotating=!1;constructor(e,t){super(),this.logPath=e,this.baseFileName=t.replace(`.log`,``),this.currentDate=this.getDateString(new Date),this.ensureLogDirectory(),this.ensureLogFile(),this.stream=this.createStream(),this.rotationCheckInterval=this.startRotationCheck(),this.cleanupOldLogs()}static scope(t,n){return new e(t,n)}log(...e){this.write(`log`,...e)}error(...e){this.write(`error`,...e)}warn(...e){this.write(`warn`,...e)}info(...e){this.write(`info`,...e)}debug(...e){this.write(`debug`,...e)}async close(){clearInterval(this.rotationCheckInterval),await new Promise(e=>{this.stream.end(()=>e())})}getCurrentFileName(){return this.getFileName(this.currentDate)}static getMessageElements(e,...t){let n=new Date,r=n.toISOString().replace(`T`,` `).replace(/\.\d+Z$/,``)+`.${n.getMilliseconds().toString().padStart(3,`0`)}`,i=t.map(e=>typeof e==`object`?JSON.stringify(e,void 0,2):String(e)).join(` `);return{timestamp:r,level:e,message:i}}getFileName(e){return`${this.baseFileName}-${e}.log`}ensureLogDirectory(){try{s(this.logPath,{recursive:!0})}catch(e){throw console.error(`Failed to create log directory ${this.logPath}:`,e),e}}ensureLogFile(){let e=f(this.logPath,this.getFileName(this.currentDate));if(!o(e))try{u(e,``,`utf8`)}catch(t){throw console.error(`Failed to create log file ${e}:`,t),t}}getDateString(e){return e.toISOString().split(`T`)[0]}createStream(){let e=f(this.logPath,this.getFileName(this.currentDate));return a(e,{flags:`a`,encoding:`utf8`})}async rotateLogs(){if(this.isRotating)return;this.isRotating=!0;let e=this.getDateString(new Date);e!==this.currentDate&&await new Promise(t=>{this.stream.end(()=>{this.currentDate=e,this.stream=this.createStream(),this.cleanupOldLogs(),t()})}),this.isRotating=!1}startRotationCheck(){return setInterval(()=>this.rotateLogs(),6e4)}cleanupOldLogs(){let e=c(this.logPath),t=new Date;t.setDate(t.getDate()-7);let n=e.filter(e=>e.startsWith(this.baseFileName)&&e.endsWith(`.log`)).filter(e=>{let n=e.replace(`${this.baseFileName}-`,``).replace(`.log`,``),r=new Date(n);return r<t});n.forEach(e=>{try{l(f(this.logPath,e))}catch(t){console.error(`Failed to delete old log file ${e}:`,t)}})}write(t,...n){let{timestamp:r,message:i}=e.getMessageElements(t,...n),a=`[${r}] [${t}] ${i}\n`;this.stream.write(a,e=>{e?this.emit(`error`,e):this.emit(`write`,a)})}};const P=()=>p.join(process.env.APPDATA??``,`overlayed`),et=()=>p.join(P(),`logs`),tt=e=>p.join(P(),`apps`,e),nt=e=>p.join(tt(e),`logs`);var rt=class{fileLogger;path;appId;messageQueue=new we;fileName;_debug=!1;silent=!1;constructor(e){this.fileName=e}init(e,t=!1,n=!1){this.appId=e,this._debug=t,this.silent=n,this.path=nt(e),this.fileLogger=new $e(this.path,this.fileName),this.messageQueue.flush().forEach(e=>{this.fileLogger?.[e.type](...e.args)})}scope(e){if(!this.appId||!this.path)throw Error(`Logger not initialized`);let t=`[${e}]`;return{scope:e=>this.scope(e),error:(...e)=>this.error(t,...e),warn:(...e)=>this.warn(t,...e),info:(...e)=>this.info(t,...e),log:(...e)=>this.log(t,...e),debug:(...e)=>this.debug(t,...e)}}error(...e){this.handle(`error`,...e)}warn(...e){this.handle(`warn`,...e)}info(...e){this.handle(`log`,...e)}debug(...e){this._debug&&this.handle(`debug`,...e)}log(...e){this.handle(`log`,...e)}handle(e,...t){(!this.silent||this._debug)&&this.logToConsole(e,...t),this.fileLogger?this.fileLogger[e](...t):this.messageQueue.add({type:e,args:t})}logToConsole(e,...t){let n={error:A.red,warn:A.yellow,debug:A.blue,log:A.white};if(!this.silent||this._debug){let{timestamp:r,message:i}=$e.getMessageElements(e,...t),a=console[e],o=n[e];a(`${A.gray(r)} ${o(i)}`)}}};const F=M(rt,`main.log`);var it=class extends ie{blob;chunkSizeMb;maxConcurrent;shouldStop=!1;constructor(e,t){super(),this.blob=e,this.chunkSizeMb=t.chunkSizeMb,this.maxConcurrent=t.maxConcurrent??3}get totalChunks(){return Math.ceil(this.blob.size/(this.chunkSizeMb*1024*1024))}async chunk(e){let t=this.chunkSizeMb*1024*1024,n=this.totalChunks;if(n===0)return;let r=5,i=new Map,a=new Set,o=new Set,s=[];for(let e=0;e<n;e++)s.push(e);let c=async n=>{let c=n*t,l=Math.min(c+t,this.blob.size),u=this.blob.slice(c,l);try{await e(u,n),o.add(n),this.emit(`chunkComplete`,n),a.delete(n)}catch(e){let t=i.get(n)||0;t<r?(i.set(n,t+1),await new Promise(e=>setTimeout(e,(t+1)*1e3)),s.push(n)):(o.add(n),this.emit(`error`,e),this.shouldStop=!0,a.delete(n))}},l=[],u=async()=>{for(;(s.length>0||a.size>0)&&!this.shouldStop;){if(s.length===0){await new Promise(e=>setTimeout(e,10));continue}let e=s.shift();o.has(e)||a.has(e)||(a.add(e),await c(e))}};for(let e=0;e<this.maxConcurrent;e++)l.push(u());await Promise.all(l)}};function at(e,t){let{recursive:n}=ot(t);return se(e)?n?st(e).map(t=>[e,t]):ue(e).map(t=>[e,t]):[]}function ot(e){return{recursive:e?.recursive??!0}}function st(e){return ue(e,{withFileTypes:!0}).flatMap(t=>{let n=p.join(e,t.name);return t.isDirectory()?st(n):[n]})}function ct(e){return e}const lt=e(import.meta.url),{PipeEventServer:ut,PipeEventClient:dt,PipeEventBase:ft,ProcessMonitor:pt,Process:mt,InjectionMethod:ht,AccessLevel:gt,HardwareInterface:_t}=lt(`@overlayed/app/dist/native-interface/build/overlayed_native_interface_x64.node`);var vt=class extends j{server=null;_hasConnection=!1;pipeId;get hasConnection(){return this._hasConnection}constructor(e){super(),this.pipeId=e,this.init()}destroy(){this.server&&(this._hasConnection=!1,this.server?.removeAllListeners(),this.server=null)}init(){this.server=new ut(this.pipeId,{clientCount:1,access:1}),this.server.on(`event`,e=>{try{let t=JSON.parse(e);this.emit(`data`,[t])}catch(e){this.emit(`error`,e)}}),this.server.on(`connected`,()=>{this._hasConnection=!0}),this.server.on(`disconnected`,()=>{this._hasConnection=!1})}};const I=M(vt,`stats-cc`);var yt=class{logger;initialized=!1;constructor(e){this.logger=F.getInstance().scope(e)}init(){this.logger.log(`Initializing`),this.initialized=!0}destroy(){this.logger.log(`Destroying`),this.initialized=!1}},L=class extends j{logger;initialized=!1;constructor(e){super(),this.logger=F.getInstance().scope(e)}init(){this.logger.log(`Initializing`),this.initialized=!0}destroy(){this.logger.log(`Destroying`),this.initialized=!1,this.removeAllListeners()}},bt=class extends Xe{logger;initialized=!1;constructor(e){super(),this.logger=F.getInstance().scope(e)}init(){this.logger.log(`Initializing`),this.initialized=!0}destroy(){this.logger.log(`Destroying`),this.initialized=!1,this.removeAllListeners()}};const R=fe.create({baseURL:`https://updater.stats.cc`,headers:{Accept:`application/json`,"Accept-Encoding":`gzip, deflate, br`}});let xt;function St(e){xt=e}R.interceptors.request.use(e=>{let t=xt?.();return t?(e.headers??={},e.headers.Authorization=t,e):e});const z=fe.create({baseURL:`https://api.overlayed.gg`,headers:{Accept:`application/json`,"Accept-Encoding":`gzip, deflate, br`}});let Ct,wt;z.interceptors.request.use(e=>{let t=Ct?.(),n=wt?.();return e.headers??={},t&&(e.headers.Authorization=t),n&&(e.headers[`X-Api-Key`]=n),e});function Tt(e,t){if(t<=0)throw Error(`Chunk size must be greater than 0`);if(e.length===0)return[];let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}function Et(e){return e}function B(e){return e?t=>(e(t),t):Et}B();const Dt=B();function Ot(e){return z.get(`/v1/public/applications/${e}`)}B();function kt(e,t){return R.get(`/v1/native/${jt(e)}/version.txt`,{params:{channel:t},responseType:`text`})}function At(e,t){return R.get(`/v1/native/${jt(e)}/files`,{params:{channel:t},responseType:`arraybuffer`})}function jt(e){return e===`01JXPFK6YQ3N00N2Y9JHFNG55D`||e===`01JZEBPGHT5M4Y6SGY4P7Q9EZT`?`siege-game-module`:e}function Mt(){return z.get(`/v1/public/raven/config`)}B();function Nt(e,t){return z.get(`/v1/public/raven/games/${e}/builds/${t}`)}function Pt(e,t){return z.post(`/v1/public/raven/games/${e}/builds/upload`,null,{params:t})}function Ft(e,t){let n=new FormData;return n.append(`file`,t.chunk),z.patch(`/v1/public/raven/games/${e}/builds/upload`,n,{params:t})}const It=250;function Lt(e){let t=Tt(e.messages,It),n=Promise.all(t.map(async t=>z.post(`/v1/public/cortex/events`,{...e,messages:t})));return n}function Rt(e){return e instanceof Error&&(e.name===`XiorError`||e.name===`XiorTimeoutError`)}function zt(e){return!!(e&&`kind`in e.data&&`message`in e.data)}let Bt;function Vt(e){Bt=e}var Ht=class extends L{UPDATE_CHECK_INTERVAL_MS=1e3*60*5;targetDir;updateInterval;constructor(){super(`NativeModuleManager`),this.targetDir=p.join(P(),`resources`),this.logger.log(`Target directory`,this.targetDir)}async initWithDlls(e){super.init(),await h.mkdir(this.targetDir,{recursive:!0}),await this.checkForUpdates(e),clearInterval(this.updateInterval),this.updateInterval=setInterval(()=>this.checkForUpdates(e),this.UPDATE_CHECK_INTERVAL_MS)}destroy(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=void 0),super.destroy()}async getCurrentVersion(e){try{let t=p.join(this.targetDir,e,`version.txt`);return this.logger.log(`Version Path`,t),await h.readFile(t,`utf-8`)}catch{return null}}getTargetPath(e){return p.join(this.targetDir,e)}getTargetVersionPath(e,t){return p.join(this.getTargetPath(e),t)}async checkForUpdates(e){let t=global.OVERLAYED.APP_BUILD_CHANNEL;if(this.logger.log(`Checking for updates`),!t){this.logger.error(`Invalid VITE_BUILD_CHANNEL`);return}await Bt?.();for(let n of e)try{let{data:e}=await kt(n,t),r=await this.getCurrentVersion(n);this.logger.log(`${n} > Update Check. current: ${r}, latest: ${e}`);let i=e!==r;this.logger.log(`${n} > Update found: ${r} -> ${e}`),await this.downloadAndExtractDll(n,e,t,i),this.logger.log(`${n} > Downloaded and extracted`),i&&(this.logger.log(`${n} > Cleaning up versions older than ${e}`),await this.cleanupOldVersions(n,e)),this.emit(`dllUpdated`,{identifier:n,version:e})}catch(e){this.logger.error(`${n} > Error checking/updating`,e)}}async downloadAndExtractDll(e,t,n,r){let{data:i}=await At(e,n),a=this.getTargetPath(e),o=this.getTargetVersionPath(e,t);await h.mkdir(o,{recursive:!0});let s=new g;await s.loadAsync(i);let c=Object.keys(s.files).map(async t=>{let n=s.files[t];if(n&&!n.dir){let i=p.join(o,t);if(!r)try{await h.access(i,h.constants.F_OK);return}catch{this.logger.warn(`${e} > File missing, re-downloading: ${i}`)}let a=await n.async(`nodebuffer`);await h.writeFile(i,a)}});await Promise.all(c);let l=p.join(a,`version.txt`);this.logger.log(`Saving version file`,l),await h.writeFile(l,t)}async cleanupOldVersions(e,t){let n=p.join(this.targetDir,e),r=await h.readdir(n,{withFileTypes:!0});for(let e of r)e.isDirectory()&&e.name!==t&&await h.rm(p.join(n,e.name),{recursive:!0,force:!0})}};const V=M(Ht);var Ut=class extends L{REFETCH_INTERVAL=1e3*60*5;FAILED_REFETCH_INTERVAL=1e3*30;_ravenConfig;_executableToGameMap=new Map;_executablesArray=[];_refetchIntervalHandler=null;_failedRefetchTimeoutHandler=null;constructor(){super(`RavenManager`)}init(){super.init(),this.fetchRavenConfig(),this._refetchIntervalHandler=setInterval(()=>{this._failedRefetchTimeoutHandler&&(clearTimeout(this._failedRefetchTimeoutHandler),this._failedRefetchTimeoutHandler=null),this.fetchRavenConfig()},this.REFETCH_INTERVAL)}getExecutableData(e){return this._executableToGameMap.get(e.toLowerCase())??null}get executables(){return this._executablesArray}get executablesMap(){return this._executableToGameMap}destroy(){this._refetchIntervalHandler&&clearInterval(this._refetchIntervalHandler),this._failedRefetchTimeoutHandler&&clearTimeout(this._failedRefetchTimeoutHandler),V.getInstance().destroy(),super.destroy()}async fetchRavenConfig(){try{let e=await Mt(),t={games:e.data.games};this._ravenConfig=t,this.resetState();let n=new Set;for(let e of this._ravenConfig.games){for(let t of e.executables){let n=t.toLowerCase();this._executableToGameMap.set(n,e),this._executablesArray.push(n)}e.modules.forEach(e=>n.add(e))}await V.getInstance().initWithDlls(Array.from(n)),this.logger.log(`Raven updated`,this._ravenConfig),this.emit(`executablesUpdated`,{executables:this.executables,map:this._executableToGameMap})}catch(e){this.logger.error(`Failed to fetch Raven config`,e),this._failedRefetchTimeoutHandler=setTimeout(()=>this.fetchRavenConfig(),this.FAILED_REFETCH_INTERVAL)}}resetState(){this._executableToGameMap.clear(),this._executablesArray=[]}};const H=M(Ut),Wt=e(import.meta.url),{PipeEventServer:Gt,PipeEventClient:Kt,PipeEventBase:qt,ProcessMonitor:Jt,Process:U,InjectionMethod:Yt,AccessLevel:Xt,HardwareInterface:Zt}=Wt(`@overlayed/app/dist/native-interface/build/overlayed_native_interface_x64.node`);var Qt=class extends L{_processMonitor;_processes=new Map;boundOnRavenManagerExecutablesUpdated=this.onRavenManagerExecutablesUpdated.bind(this);constructor(){super(`ProcessManager`),this._processMonitor=new Jt}get hasAnyActiveProcesses(){return this.activeProcesses.length>0}get activeProcesses(){return Array.from(this._processes.values()).flat().filter(e=>!e.destroyedAt)}init(){super.init(),H.getInstance().on(`executablesUpdated`,this.boundOnRavenManagerExecutablesUpdated),this._processMonitor.on(`create`,e=>{this.logger.log(`Process created`,e),this.addProcess(e),this.logger.log(`Active Process Count: ${this._processes.size}`),this.emit(`create`,{process:e})}),this._processMonitor.on(`destroy`,e=>{this.logger.log(`Process destroyed`,e),this.deleteProcess(e),this.logger.log(`Active Process Count: ${this._processes.size}`),this.emit(`destroy`,{process:e})})}destroy(){H.getInstance().off(`executablesUpdated`,this.boundOnRavenManagerExecutablesUpdated),this._processes.clear(),this._processMonitor.removeAllListeners(),super.destroy()}isProcessRunning(e){let t=this._processes.get(e);return t?.some(e=>!e.destroyedAt)??!1}onRavenManagerExecutablesUpdated(e){e.executables.forEach(e=>{this.logger.log(`Monitoring process`,e),this._processMonitor.registerProcess(e)})}addProcess(e){if(!e.name)return;let t=this._processes.get(e.name);if(!t){this._processes.set(e.name,[e]);return}this._processes.set(e.name,t.concat(e))}deleteProcess(e){if(!e.name)return;let t=this._processes.get(e.name),n=t?.filter(t=>t.id!==e.id)??[];n.length===0?this._processes.delete(e.name):this._processes.set(e.name,n)}};const W=M(Qt),$t=e(import.meta.url),{RenderInterface:en,renderHookPath:tn}=$t(`@overlayed/app/dist/render-interface/build/overlayed_render_interface_x64.node`);var nn=class{_instance;_resolution;boundOnResolutionChanged=this.onResolutionChanged.bind(this);constructor(e){this._instance=e,this._resolution={width:0,height:0},this._instance.on(`resolution`,this.boundOnResolutionChanged)}destroy(){this._instance.off(`resolution`,this.boundOnResolutionChanged)}get instance(){return this._instance}get resolution(){return this._resolution}onResolutionChanged(e,t){this._resolution={width:e,height:t}}},rn=class{interfaces={};constructor(){}createInterface(e){return this.interfaces[e]||(this.interfaces[e]=new nn(new en(e,{access:1}))),this.interfaces[e]}getInterface(e){return this.interfaces[e]?this.interfaces[e]:this.createInterface(e)}};const G=M(rn);var an=class{options;eventQueue;_meta=null;set meta(e){this._meta=e}constructor(e){this.options=this.resolveOptions(e),this.eventQueue=new we,this.setupFlushInterval()}track(e,t){this.eventQueue.add({type:e,properties:t,created_at:new Date().toISOString()})}flush(){let e=Array.from(this.eventQueue.flush()),t=e.concat({type:`ping`,properties:{},created_at:new Date().toISOString()});if(!this._meta)throw Error(`Tried to flush Cortex events before meta was set`);try{Lt({...this._meta,messages:t})}catch{}return t}setupFlushInterval(){setInterval(()=>{this.flush()},this.options.batchIntervalSeconds*1e3)}resolveOptions(e){return{batchIntervalSeconds:e?.batchIntervalSeconds??15}}};const K=M(an),on=e(import.meta.url),sn=on.resolve(`@overlayed/app/dist/render-interface/build/overlayed_render_hook_x64.dll`);var cn=class extends bt{boundOnProcessCreate=this.onProcessCreate.bind(this);boundOnProcessDestroy=this.onProcessDestroy.bind(this);subscribedGames=new Set;constructor(){super(`GameLaunchManager`)}setSubscribedGames(e){this.subscribedGames=new Set(e)}init(){super.init(),G.getInstance().createInterface(`OGG_SIEGE`),W.getInstance().on(`create`,this.boundOnProcessCreate),W.getInstance().on(`destroy`,this.boundOnProcessDestroy)}destroy(){W.getInstance().off(`create`,this.boundOnProcessCreate),W.getInstance().off(`destroy`,this.boundOnProcessDestroy),super.destroy()}async onProcessCreate({process:e}){let t=this.getRavenGame(e);if(!t)return;if(this.subscribedGames.size===0){this.logger.warn(`No subscribed games, skipping`);return}if(!this.subscribedGames.has(t.identifier)&&!this.subscribedGames.has(`*`))return;let n=new AbortController;if(await this.emit(`gameLaunch`,{game:t.identifier,reject:()=>n.abort}),n.signal.aborted)return;if(this.logger.log(`Game Launched`,t),this.logger.log(`Process is elevated: `,e.isElevated),this.logger.log(`Current process is elevated: `,U.currentProcess.isElevated),e.isElevated&&!U.currentProcess.isElevated){N.getInstance().fatal(`Game is elevated but the App is not`,`ELEVATION_MISMATCH`,{appElevated:!!U.currentProcess.isElevated,gameElevated:!!e.isElevated}),this.logger.log(`Game elevated but App is not`,{appElevated:U.currentProcess.isElevated,gameElevated:e.isElevated});return}let r=this.copyDll(sn);if(r)try{await e.injectDll(r),this.logger.log(`Render Interface Injection Successful`,r)}catch(e){this.logger.error(`Render Interface Injection Failed`,e),this.logger.error(`Render Interface Injection Failed`,{renderInterfacePath:r})}let i=t?.modules.map(async t=>{let n=await V.getInstance().getCurrentVersion(t);if(!n)return this.logger.error(`No version found for DLL`,{identifier:t}),Promise.resolve();let r=V.getInstance().getTargetVersionPath(t,n);this.logger.log(`DLL Path`,r);let i=await this.getDllFiles(r);return this.logger.log(`DLL Files`,i),Promise.all(i.map(async t=>{let n=p.basename(t),i=p.join(r,n);if(!i)return Promise.resolve();this.logger.log(`Injecting: `,i);try{return e.injectDll(i).then(()=>{this.logger.log(`Injection Successful`,i)}).catch(e=>{this.logger.error(`Injection Failed [1]`,{targetPath:i},e)})}catch(e){return this.logger.error(`Injection Failed [2]`,{targetPath:i},e),Promise.reject(e)}}))});await Promise.allSettled(i),this.emit(`gameReadyInternal`,{ravenGame:t,process:e}),this.emit(`gameReady`,{game:t.identifier}),K.getInstance().track(`game_launch`,{game:t.identifier})}copyDll(e){let t=p.basename(e),n=te(e),r=p.join(P(),`resources`),i=p.join(r,t);this.logger.info(`Copying`,n,`to`,i);try{se(r)||ce(r,{recursive:!0});let e=le(n);de(i,e),ae(n,i)}catch(e){return e.code===`EBUSY`?i:(this.logger.error(`Failed to copy`,e),this.logger.error(`Failed to copy`,{originalPath:n,targetPath:i}),!1)}return i}async getDllFiles(e){try{let t=await h.readdir(e);return t.filter(e=>e.endsWith(`.dll`)).map(t=>p.join(e,t))}catch(t){return this.logger.error(`Failed to read DLL directory`,t),this.logger.error(`Failed to read DLL directory`,{dllPath:e}),[]}}onProcessDestroy({process:e}){let t=this.getRavenGame(e);t&&(this.emit(`gameCloseInternal`,{ravenGame:t,process:e}),this.emit(`gameClose`,{game:t.identifier}),K.getInstance().track(`game_close`,{game:t.identifier}))}getRavenGame(e){if(!e.name)return;let t=H.getInstance().getExecutableData(e.name);if(!t){this.logger.error(`No raven game found for process`,{process:e});return}return t}};const q=M(cn);var ln=class extends yt{boundOnGameLaunch=this.onGameLaunch.bind(this);constructor(){super(`GameBuildManager`)}init(){super.init(),q.getInstance().on(`gameReadyInternal`,this.boundOnGameLaunch)}destroy(){q.getInstance().off(`gameReadyInternal`,this.boundOnGameLaunch),super.destroy()}async onGameLaunch(...e){let[{ravenGame:t,process:n}]=e;if(!n.path||!n.name){this.logger.error(`Process path or name not found, could not check for build hash`,void 0,n);return}let r=le(n.path),i=pe(`sha256`).update(r).digest(`hex`);this.logger.log(`Process Path`,n.path),this.logger.log(`Process Name`,n.name),this.logger.log(`Build Hash`,i);let a=!1;try{let e=await Nt(t.identifier,i);a=e.data.upload}catch(e){this.logger.error(`Error checking game build hash`,e);return}if(!a){this.logger.log(`Build hash already exists, skipping upload`);return}let o=new g;o.file(n.name,r);let s=await o.generateAsync({type:`blob`});try{this.logger.log(`Uploading build (size: `,s.size,` bytes)`);let e=new it(s,{chunkSizeMb:25,maxConcurrent:1}),n=await Pt(t.identifier,{build_hash:i,chunk_count:e.totalChunks,file_size_bytes:s.size});await e.chunk(async(e,r)=>{this.logger.log(`Uploading chunk`,r),await Ft(t.identifier,{chunk:e,build_hash:i,chunk_index:r,upload_token:n.data.upload_token})}),this.logger.log(`Build uploaded successfully`)}catch(e){Rt(e)?zt(e.response)?this.logger.error(`Error uploading build hash, api error`,e):this.logger.error(`Error uploading build hash, request error`,e):this.logger.error(`Error uploading build hash, unknown error`,e)}}};const un=M(ln);function dn(e=[]){return p.normalize(p.join(tt(global.OVERLAYED.APPLICATION_ID),...e))}const fn=r({game:`string`,type:`string`,creation_time:`number`});var J=function(e){return e[e.LeftButton=1]=`LeftButton`,e[e.RightButton=2]=`RightButton`,e[e.Cancel=3]=`Cancel`,e[e.MiddleButton=4]=`MiddleButton`,e[e.ExtraButton1=5]=`ExtraButton1`,e[e.ExtraButton2=6]=`ExtraButton2`,e[e.Back=8]=`Back`,e[e.Tab=9]=`Tab`,e[e.Clear=12]=`Clear`,e[e.Return=13]=`Return`,e[e.Shift=16]=`Shift`,e[e.Control=17]=`Control`,e[e.Menu=18]=`Menu`,e[e.Pause=19]=`Pause`,e[e.CapsLock=20]=`CapsLock`,e[e.Kana=21]=`Kana`,e[e.Hangeul=21]=`Hangeul`,e[e.Hangul=21]=`Hangul`,e[e.Junja=23]=`Junja`,e[e.Final=24]=`Final`,e[e.Hanja=25]=`Hanja`,e[e.Kanji=25]=`Kanji`,e[e.Escape=27]=`Escape`,e[e.Convert=28]=`Convert`,e[e.NonConvert=29]=`NonConvert`,e[e.Accept=30]=`Accept`,e[e.ModeChange=31]=`ModeChange`,e[e.Space=32]=`Space`,e[e.Prior=33]=`Prior`,e[e.Next=34]=`Next`,e[e.End=35]=`End`,e[e.Home=36]=`Home`,e[e.Left=37]=`Left`,e[e.Up=38]=`Up`,e[e.Right=39]=`Right`,e[e.Down=40]=`Down`,e[e.Select=41]=`Select`,e[e.Print=42]=`Print`,e[e.Execute=43]=`Execute`,e[e.Snapshot=44]=`Snapshot`,e[e.Insert=45]=`Insert`,e[e.Delete=46]=`Delete`,e[e.Help=47]=`Help`,e[e.N0=48]=`N0`,e[e.N1=49]=`N1`,e[e.N2=50]=`N2`,e[e.N3=51]=`N3`,e[e.N4=52]=`N4`,e[e.N5=53]=`N5`,e[e.N6=54]=`N6`,e[e.N7=55]=`N7`,e[e.N8=56]=`N8`,e[e.N9=57]=`N9`,e[e.A=65]=`A`,e[e.B=66]=`B`,e[e.C=67]=`C`,e[e.D=68]=`D`,e[e.E=69]=`E`,e[e.F=70]=`F`,e[e.G=71]=`G`,e[e.H=72]=`H`,e[e.I=73]=`I`,e[e.J=74]=`J`,e[e.K=75]=`K`,e[e.L=76]=`L`,e[e.M=77]=`M`,e[e.N=78]=`N`,e[e.O=79]=`O`,e[e.P=80]=`P`,e[e.Q=81]=`Q`,e[e.R=82]=`R`,e[e.S=83]=`S`,e[e.T=84]=`T`,e[e.U=85]=`U`,e[e.V=86]=`V`,e[e.W=87]=`W`,e[e.X=88]=`X`,e[e.Y=89]=`Y`,e[e.Z=90]=`Z`,e[e.LeftWindows=91]=`LeftWindows`,e[e.RightWindows=92]=`RightWindows`,e[e.Application=93]=`Application`,e[e.Sleep=95]=`Sleep`,e[e.Numpad0=96]=`Numpad0`,e[e.Numpad1=97]=`Numpad1`,e[e.Numpad2=98]=`Numpad2`,e[e.Numpad3=99]=`Numpad3`,e[e.Numpad4=100]=`Numpad4`,e[e.Numpad5=101]=`Numpad5`,e[e.Numpad6=102]=`Numpad6`,e[e.Numpad7=103]=`Numpad7`,e[e.Numpad8=104]=`Numpad8`,e[e.Numpad9=105]=`Numpad9`,e[e.Multiply=106]=`Multiply`,e[e.Add=107]=`Add`,e[e.Separator=108]=`Separator`,e[e.Subtract=109]=`Subtract`,e[e.Decimal=110]=`Decimal`,e[e.Divide=111]=`Divide`,e[e.F1=112]=`F1`,e[e.F2=113]=`F2`,e[e.F3=114]=`F3`,e[e.F4=115]=`F4`,e[e.F5=116]=`F5`,e[e.F6=117]=`F6`,e[e.F7=118]=`F7`,e[e.F8=119]=`F8`,e[e.F9=120]=`F9`,e[e.F10=121]=`F10`,e[e.F11=122]=`F11`,e[e.F12=123]=`F12`,e[e.F13=124]=`F13`,e[e.F14=125]=`F14`,e[e.F15=126]=`F15`,e[e.F16=127]=`F16`,e[e.F17=128]=`F17`,e[e.F18=129]=`F18`,e[e.F19=130]=`F19`,e[e.F20=131]=`F20`,e[e.F21=132]=`F21`,e[e.F22=133]=`F22`,e[e.F23=134]=`F23`,e[e.F24=135]=`F24`,e[e.NumLock=144]=`NumLock`,e[e.ScrollLock=145]=`ScrollLock`,e[e.NEC_Equal=146]=`NEC_Equal`,e[e.Fujitsu_Jisho=146]=`Fujitsu_Jisho`,e[e.Fujitsu_Masshou=147]=`Fujitsu_Masshou`,e[e.Fujitsu_Touroku=148]=`Fujitsu_Touroku`,e[e.Fujitsu_Loya=149]=`Fujitsu_Loya`,e[e.Fujitsu_Roya=150]=`Fujitsu_Roya`,e[e.LeftShift=160]=`LeftShift`,e[e.RightShift=161]=`RightShift`,e[e.LeftControl=162]=`LeftControl`,e[e.RightControl=163]=`RightControl`,e[e.LeftMenu=164]=`LeftMenu`,e[e.RightMenu=165]=`RightMenu`,e[e.BrowserBack=166]=`BrowserBack`,e[e.BrowserForward=167]=`BrowserForward`,e[e.BrowserRefresh=168]=`BrowserRefresh`,e[e.BrowserStop=169]=`BrowserStop`,e[e.BrowserSearch=170]=`BrowserSearch`,e[e.BrowserFavorites=171]=`BrowserFavorites`,e[e.BrowserHome=172]=`BrowserHome`,e[e.VolumeMute=173]=`VolumeMute`,e[e.VolumeDown=174]=`VolumeDown`,e[e.VolumeUp=175]=`VolumeUp`,e[e.MediaNextTrack=176]=`MediaNextTrack`,e[e.MediaPrevTrack=177]=`MediaPrevTrack`,e[e.MediaStop=178]=`MediaStop`,e[e.MediaPlayPause=179]=`MediaPlayPause`,e[e.LaunchMail=180]=`LaunchMail`,e[e.LaunchMediaSelect=181]=`LaunchMediaSelect`,e[e.LaunchApplication1=182]=`LaunchApplication1`,e[e.LaunchApplication2=183]=`LaunchApplication2`,e[e.OEM1=186]=`OEM1`,e[e.OEMPlus=187]=`OEMPlus`,e[e.OEMComma=188]=`OEMComma`,e[e.OEMMinus=189]=`OEMMinus`,e[e.OEMPeriod=190]=`OEMPeriod`,e[e.OEM2=191]=`OEM2`,e[e.OEM3=192]=`OEM3`,e[e.OEM4=219]=`OEM4`,e[e.OEM5=220]=`OEM5`,e[e.OEM6=221]=`OEM6`,e[e.OEM7=222]=`OEM7`,e[e.OEM8=223]=`OEM8`,e[e.OEMAX=225]=`OEMAX`,e[e.OEM102=226]=`OEM102`,e[e.ICOHelp=227]=`ICOHelp`,e[e.ICO00=228]=`ICO00`,e[e.ProcessKey=229]=`ProcessKey`,e[e.ICOClear=230]=`ICOClear`,e[e.Packet=231]=`Packet`,e[e.OEMReset=233]=`OEMReset`,e[e.OEMJump=234]=`OEMJump`,e[e.OEMPA1=235]=`OEMPA1`,e[e.OEMPA2=236]=`OEMPA2`,e[e.OEMPA3=237]=`OEMPA3`,e[e.OEMWSCtrl=238]=`OEMWSCtrl`,e[e.OEMCUSel=239]=`OEMCUSel`,e[e.OEMATTN=240]=`OEMATTN`,e[e.OEMFinish=241]=`OEMFinish`,e[e.OEMCopy=242]=`OEMCopy`,e[e.OEMAuto=243]=`OEMAuto`,e[e.OEMENLW=244]=`OEMENLW`,e[e.OEMBackTab=245]=`OEMBackTab`,e[e.ATTN=246]=`ATTN`,e[e.CRSel=247]=`CRSel`,e[e.EXSel=248]=`EXSel`,e[e.EREOF=249]=`EREOF`,e[e.Play=250]=`Play`,e[e.Zoom=251]=`Zoom`,e[e.Noname=252]=`Noname`,e[e.PA1=253]=`PA1`,e[e.OEMClear=254]=`OEMClear`,e}(J||{});const Y=new Map([[J.LeftButton,`LeftButton`],[J.RightButton,`RightButton`],[J.Cancel,`Cancel`],[J.MiddleButton,`MiddleButton`],[J.ExtraButton1,`ExtraButton1`],[J.ExtraButton2,`ExtraButton2`],[J.Back,`Backspace`],[J.Tab,`Tab`],[J.Clear,`Clear`],[J.Return,`Enter`],[J.Shift,`ShiftLeft`],[J.Control,`ControlLeft`],[J.Menu,`AltLeft`],[J.Pause,`Pause`],[J.CapsLock,`CapsLock`],[J.Kana,`KanaMode`],[J.Junja,`JunjaMode`],[J.Final,`Finalize`],[J.Hanja,`HanjaMode`],[J.Escape,`Escape`],[J.Convert,`Convert`],[J.NonConvert,`NonConvert`],[J.Accept,`Accept`],[J.ModeChange,`ModeChange`],[J.Space,`Space`],[J.Prior,`PageUp`],[J.Next,`PageDown`],[J.End,`End`],[J.Home,`Home`],[J.Left,`ArrowLeft`],[J.Up,`ArrowUp`],[J.Right,`ArrowRight`],[J.Down,`ArrowDown`],[J.Select,`Select`],[J.Print,`PrintScreen`],[J.Execute,`Execute`],[J.Snapshot,`Snapshot`],[J.Insert,`Insert`],[J.Delete,`Delete`],[J.Help,`Help`],[J.N0,`Digit0`],[J.N1,`Digit1`],[J.N2,`Digit2`],[J.N3,`Digit3`],[J.N4,`Digit4`],[J.N5,`Digit5`],[J.N6,`Digit6`],[J.N7,`Digit7`],[J.N8,`Digit8`],[J.N9,`Digit9`],[J.A,`KeyA`],[J.B,`KeyB`],[J.C,`KeyC`],[J.D,`KeyD`],[J.E,`KeyE`],[J.F,`KeyF`],[J.G,`KeyG`],[J.H,`KeyH`],[J.I,`KeyI`],[J.J,`KeyJ`],[J.K,`KeyK`],[J.L,`KeyL`],[J.M,`KeyM`],[J.N,`KeyN`],[J.O,`KeyO`],[J.P,`KeyP`],[J.Q,`KeyQ`],[J.R,`KeyR`],[J.S,`KeyS`],[J.T,`KeyT`],[J.U,`KeyU`],[J.V,`KeyV`],[J.W,`KeyW`],[J.X,`KeyX`],[J.Y,`KeyY`],[J.Z,`KeyZ`],[J.LeftWindows,`MetaLeft`],[J.RightWindows,`MetaRight`],[J.Application,`ContextMenu`],[J.Sleep,`Sleep`],[J.Numpad0,`Numpad0`],[J.Numpad1,`Numpad1`],[J.Numpad2,`Numpad2`],[J.Numpad3,`Numpad3`],[J.Numpad4,`Numpad4`],[J.Numpad5,`Numpad5`],[J.Numpad6,`Numpad6`],[J.Numpad7,`Numpad7`],[J.Numpad8,`Numpad8`],[J.Numpad9,`Numpad9`],[J.Multiply,`NumpadMultiply`],[J.Add,`NumpadAdd`],[J.Separator,`NumpadSeparator`],[J.Subtract,`NumpadSubtract`],[J.Decimal,`NumpadDecimal`],[J.Divide,`NumpadDivide`],[J.F1,`F1`],[J.F2,`F2`],[J.F3,`F3`],[J.F4,`F4`],[J.F5,`F5`],[J.F6,`F6`],[J.F7,`F7`],[J.F8,`F8`],[J.F9,`F9`],[J.F10,`F10`],[J.F11,`F11`],[J.F12,`F12`],[J.F13,`F13`],[J.F14,`F14`],[J.F15,`F15`],[J.F16,`F16`],[J.F17,`F17`],[J.F18,`F18`],[J.F19,`F19`],[J.F20,`F20`],[J.F21,`F21`],[J.F22,`F22`],[J.F23,`F23`],[J.F24,`F24`],[J.NumLock,`NumLock`],[J.ScrollLock,`ScrollLock`],[J.NEC_Equal,`NEC_Equal`],[J.Fujitsu_Masshou,`Fujitsu_Masshou`],[J.Fujitsu_Touroku,`Fujitsu_Touroku`],[J.Fujitsu_Loya,`Fujitsu_Loya`],[J.Fujitsu_Roya,`Fujitsu_Roya`],[J.LeftShift,`ShiftLeft`],[J.RightShift,`ShiftRight`],[J.LeftControl,`ControlLeft`],[J.RightControl,`ControlRight`],[J.LeftMenu,`AltLeft`],[J.RightMenu,`AltRight`],[J.BrowserBack,`BrowserBack`],[J.BrowserForward,`BrowserForward`],[J.BrowserRefresh,`BrowserRefresh`],[J.BrowserStop,`BrowserStop`],[J.BrowserSearch,`BrowserSearch`],[J.BrowserFavorites,`BrowserFavorites`],[J.BrowserHome,`BrowserHome`],[J.VolumeMute,`VolumeMute`],[J.VolumeDown,`VolumeDown`],[J.VolumeUp,`VolumeUp`],[J.MediaNextTrack,`MediaTrackNext`],[J.MediaPrevTrack,`MediaTrackPrevious`],[J.MediaStop,`MediaStop`],[J.MediaPlayPause,`MediaPlayPause`],[J.LaunchMail,`LaunchMail`],[J.LaunchMediaSelect,`LaunchMediaSelect`],[J.LaunchApplication1,`LaunchApplication1`],[J.LaunchApplication2,`LaunchApplication2`],[J.OEM1,`OEM_1`],[J.OEMPlus,`Equal`],[J.OEMComma,`Comma`],[J.OEMMinus,`Minus`],[J.OEMPeriod,`Period`],[J.OEM2,`Slash`],[J.OEM3,`Backquote`],[J.OEM4,`BracketLeft`],[J.OEM5,`Backslash`],[J.OEM6,`BracketRight`],[J.OEM7,`Quote`],[J.OEM8,`IntlRo`],[J.OEMAX,`OEM_AX`],[J.OEM102,`IntlBackslash`],[J.ICOHelp,`ICO_HELP`],[J.ICO00,`ICO_00`],[J.ProcessKey,`Process`],[J.ICOClear,`ICO_CLEAR`],[J.Packet,`Packet`],[J.OEMReset,`OEM_Reset`],[J.OEMJump,`OEM_Jump`],[J.OEMPA1,`OEM_PA1`],[J.OEMPA2,`OEM_PA2`],[J.OEMPA3,`OEM_PA3`],[J.OEMWSCtrl,`OEM_WS_Ctrl`],[J.OEMCUSel,`OEM_CU_Sel`],[J.OEMATTN,`OEM_ATTN`],[J.OEMFinish,`OEM_Finish`],[J.OEMCopy,`OEM_Copy`],[J.OEMAuto,`OEM_Auto`],[J.OEMENLW,`OEM_ENLW`],[J.OEMBackTab,`BackTab`],[J.ATTN,`ATTN`],[J.CRSel,`CRSel`],[J.EXSel,`EXSel`],[J.EREOF,`EREOF`],[J.Play,`MediaPlay`],[J.Zoom,`Zoom`],[J.Noname,`Noname`],[J.PA1,`PA1`],[J.OEMClear,`OEM_Clear`]]),pn=new Map(Y.entries().map(([e,t])=>[t,e])),mn=r({"[string]":{keys:`string[]`,mode:r(`'toggle' | 'hold'`).pipe(e=>e??`toggle`)}});var hn=class extends L{preferencesKeybindToCallbacks=new Map;pressedKeys=new Set;activeKeybinds=new Set;triggeredToggleKeybinds=new Set;boundHandleKeyboardFocus=this.handleKeyboardFocus.bind(this);boundHandleKeyDown=this.handleKeyDown.bind(this);boundHandleKeyUp=this.handleKeyUp.bind(this);keybindsFile;keybindListeningPaused=!1;constructor(e){super(`KeybindManager`),this.keybindsFile=new Qe({path:dn([`keybinds.json`]),schema:mn,default:e})}init(){super.init();let e=G.getInstance().getInterface(`OGG_SIEGE`);e.instance.on(`keyboardFocus`,this.boundHandleKeyboardFocus),e.instance.on(`keyDown`,this.boundHandleKeyDown),e.instance.on(`keyUp`,this.boundHandleKeyUp)}async onKeybindToggled(e,t){let n=this.preferencesKeybindToCallbacks.get(e)||{};n.toggle=t,this.preferencesKeybindToCallbacks.set(e,n)}async onKeybindDown(e,t){let n=this.preferencesKeybindToCallbacks.get(e)||{};n.down=t,this.preferencesKeybindToCallbacks.set(e,n)}async onKeybindUp(e,t){let n=this.preferencesKeybindToCallbacks.get(e)||{};n.up=t,this.preferencesKeybindToCallbacks.set(e,n)}async updateKeybind(e,t){this.keybindsFile.set({[e]:t})}async updateKeybinds(e){let t=Object.fromEntries(Object.entries(e).filter(([e,t])=>t!==void 0));this.keybindsFile.set({...this.keybindsFile.get(),...t})}getConfig(){return this.keybindsFile.get()}destroy(){let e=G.getInstance().getInterface(`OGG_SIEGE`);e.instance.off(`keyboardFocus`,this.boundHandleKeyboardFocus),e.instance.off(`keyDown`,this.boundHandleKeyDown),e.instance.off(`keyUp`,this.boundHandleKeyUp),super.destroy()}handleKeyDown(e){if(this.keybindListeningPaused)return;let t=Y.get(e.key);if(!t){this.logger.error(`Unknown key down`,e);return}this.pressedKeys.add(t),this.checkKeybindings()}handleKeyboardFocus(){this.pressedKeys.clear(),this.activeKeybinds.clear(),this.triggeredToggleKeybinds.clear()}async handleKeyUp(e){if(this.keybindListeningPaused)return;let t=Y.get(e.key);if(!t)return;this.pressedKeys.delete(t);let n=this.keybindsFile.get();for(let[e]of this.preferencesKeybindToCallbacks.entries()){let r=n[e];r.keys.includes(t)&&this.triggeredToggleKeybinds.delete(e)}this.checkKeybindUps()}async checkKeybindUps(){let e=this.keybindsFile.get();for(let[t,n]of this.preferencesKeybindToCallbacks.entries()){if(!n.up)continue;let r=e[t];this.activeKeybinds.has(t)&&r.keys.some(e=>!this.pressedKeys.has(e))&&(this.activeKeybinds.delete(t),n.up(),this.logger.log(`Keybind up triggered`,this.getKeybindToString(r)))}}async checkKeybindings(){let e=this.keybindsFile.get();for(let[t,n]of this.preferencesKeybindToCallbacks.entries()){let r=e[t],i=r.keys.length===this.pressedKeys.size&&r.keys.every(e=>pn.has(e)?this.pressedKeys.has(e):!1);if(i){this.triggerKeybind(r,n,t);return}}for(let[t,n]of this.preferencesKeybindToCallbacks.entries()){let r=e[t],i=r.keys.every(e=>pn.has(e)?this.pressedKeys.has(e):(this.logger.error(`Unknown key`,e,r),!1));i&&this.triggerKeybind(r,n,t)}}triggerKeybind(e,t,n){let r=e.mode;if(r===`toggle`&&t.toggle&&!this.triggeredToggleKeybinds.has(n)){let r=t.toggle();this.triggeredToggleKeybinds.add(n),this.logger.log(r?`Keybind pressed rejected: ${r}`:`Keybind pressed accepted`,this.getKeybindToString(e))}if(r===`hold`&&t.down&&!this.activeKeybinds.has(n)){let r=t.down();r?this.logger.log(`Keybind down rejected: ${r}`,this.getKeybindToString(e)):(this.activeKeybinds.add(n),this.logger.log(`Keybind down accepted`,this.getKeybindToString(e)))}}getKeybindToString(e){return`(${e.keys.join(`+`)}${e.mode?` ${e.mode}`:``})`}},gn=class extends yt{renderInterface;globalCursorOverrideCount=new Set;globalMouseBlockCount=new Set;globalKeyboardBlockCount=new Set;keyInputBlocks={};constructor(e){super(`OverridesManager`),this.renderInterface=G.getInstance().getInterface(e)}scope(e){return{setGlobalCursorOverride:t=>this.setGlobalCursorOverride(e,t),setGlobalMouseBlock:t=>this.setGlobalMouseBlock(e,t),setGlobalKeyboardBlock:t=>this.setGlobalKeyboardBlock(e,t),setKeyInputBlock:(t,n)=>this.setKeyInputBlock(e,t,n)}}setGlobalCursorOverride(e,t){t?this.globalCursorOverrideCount.add(e):this.globalCursorOverrideCount.delete(e),t&&this.globalCursorOverrideCount.size===1?this.renderInterface.instance.setGlobalCursorOverride(!0):!t&&this.globalCursorOverrideCount.size===0&&this.renderInterface.instance.setGlobalCursorOverride(!1)}setGlobalMouseBlock(e,t){t?this.globalMouseBlockCount.add(e):this.globalMouseBlockCount.delete(e),t&&this.globalMouseBlockCount.size===1?this.renderInterface.instance.setGlobalMouseBlock(!0):!t&&this.globalMouseBlockCount.size===0&&this.renderInterface.instance.setGlobalMouseBlock(!1)}setGlobalKeyboardBlock(e,t){t?this.globalKeyboardBlockCount.add(e):this.globalKeyboardBlockCount.delete(e),t&&this.globalKeyboardBlockCount.size===1?this.renderInterface.instance.setGlobalKeyboardBlock(!0):!t&&this.globalKeyboardBlockCount.size===0&&this.renderInterface.instance.setGlobalKeyboardBlock(!1)}setKeyInputBlock(e,t,n){this.keyInputBlocks[t]||(this.keyInputBlocks[t]=new Set),n?this.keyInputBlocks[t].add(e):this.keyInputBlocks[t].delete(e),n&&this.keyInputBlocks[t].size===1?this.renderInterface.instance.setKeyInputBlock(t,!0):!n&&this.keyInputBlocks[t].size===0&&this.renderInterface.instance.setKeyInputBlock(t,!1)}};const _n=M(gn,`OGG_SIEGE`);var vn=xe((exports,t)=>{var n=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),r=n((e,t)=>{var n=new Set([`mouseDown`,`mouseUp`,`pointerDown`,`pointerUp`]),r=new WeakSet;function i(e,t,{allowHosts:i}={}){let{shell:a}=t;if(r.has(e))return;r.add(e);let o=e.webContents;function s(e){return!!(!c(e)||i?.includes(e.host))}function c(e){return new URL(o.getURL()).origin!==e.origin}let l=0;function u(){l=Date.now()}function d(){let e=Date.now()-l,t=e<150;return t||console.warn(`was not recently active`,e),t}if(process.platform===`win32`){let t={KEYDOWN:256,LBUTTONUP:514,MBUTTONUP:520,RBUTTONUP:517,XBUTTONUP:524,TOUCH:576};for(let n of Object.values(t))e.hookWindowMessage(n,u)}o.on(`input-event`,(e,t)=>{n.has(t.type)&&u()}),o.on(`will-navigate`,(e,t)=>{let n=e.url||t;if(console.log(`will-navigate`,n),!n)return;let r=new URL(n);if(!s(r)){if(!d()){console.log(`blocked navigation`,n),e.preventDefault();return}c(r)&&(console.log(`external navigation`,n),e.preventDefault(),a.openExternal(n))}}),o.session.on(`will-download`,(e,t)=>{let n=t.getURL();/^blob:/.test(n)||e.preventDefault()}),o.setWindowOpenHandler(e=>{console.log(`window-open`,e.url);let{url:t}=e,n=new URL(t);if(!s(n))return d()?(c(n)&&a.openExternal(e.url),{action:`deny`}):(console.log(`blocked navigation`,t),{action:`deny`})})}t.exports=i}),i=n((e,t)=>{var n=new Set([`Mozilla`,`AppleWebKit`,`Chrome`,`Safari`,`Gecko`,`Firefox`,`OPR`,`Edg`,`Version`,`Mobile`,`curl`,`PostmanRuntime`]);async function r(e,t,r){let{webContents:i}=e,a=await i.executeJavaScript(`navigator.userAgent`);a=a.match(/[^\/]+\/[^\s]+( \([^\)]+\))?/g).map(e=>e.trim()).filter(e=>{let[t]=e.split(`/`,1);return n.has(t)}).join(` `),i.setUserAgent(a),t.app.userAgentFallback=a}t.exports=r}),a=r(),o=i();function s(e,t,n={}){a(e,t,n.linkHandler),o(e,t,n.userAgent)}t.exports={setupRevUtils:s,setupLinkHandler:a,setUserAgent:o}}),yn=Ce(vn(),1);const bn=1e3;let X=!1,xn={},Z,Sn=new j;function Cn(e){let{init:t=!0,debug:n=!1}=e;if(wn(e),F.getInstance().init(e.applicationId,n,!0),X)return Z;function r(){Rn();let t=new Map,n=new Map,i=Dn(e.modules,t),a=On(),o=An(e.keybinds),s=jn(),c=Mn(),l=Pn(),u=Nn(),d=Fn(e);Tn(e),kn(e,t,n),X=!0,Z={...i,...a,ads:l,keybinds:o,windows:s,input:c,cortex:u,hasAnyActiveProcesses:()=>W.getInstance().hasAnyActiveProcesses,init:r,log:d,initialized:X}}return t?(r(),Z):new Proxy({init:r},{get:(e,t)=>{if(t!==`init`&&!X)throw Error(`overlayed was called before initialized: ${t}`);return t===`init`?e[t]:Z[t]}})}global.OVERLAYED=new Proxy({},{get:()=>{throw Error(`function overlayed was not called`)}});function wn(e){global.OVERLAYED={APPLICATION_ID:Dt(e.applicationId),APP_BUILD_CHANNEL:e.channel??`alpha`,APP_VERSION:e.version??`0.0.0`,PACKAGE_VERSION:`0.17.1`,FRONTEND_VERSION:`0.0.0`,sessionId:crypto.randomUUID(),electron:e.electron}}function Tn(e){let t=e.universal?[`*`]:e.modules.map(e=>e.key);q.getInstance().setSubscribedGames(t),un.getInstance().init(),q.getInstance().init(),W.getInstance().init(),H.getInstance().init();async function n(){let e=Ot(global.OVERLAYED.APPLICATION_ID).then(e=>e.data),t=Zt.generateUniqueIdentifier();F.getInstance().log(`userId`,t);let n={...await e,userId:t};return F.getInstance().log(`appInfo`,n),n}let r;global.OVERLAYED.electron.ipcMain.handle(`getAppInfo`,async()=>(r=r??n(),r)),K.getInstance().track(`start`,{}),me.on(`quit`,()=>{K.getInstance().track(`electron_quit`,{}),En()}),process.on(`exit`,()=>{K.getInstance().track(`exit`,{}),En()})}async function En(){await K.getInstance().flush(),H.getInstance().destroy(),q.getInstance().destroy(),un.getInstance().destroy(),W.getInstance().destroy(),G.getInstance().getInterface(`OGG_SIEGE`).destroy(),I.getInstance().destroy(),N.getInstance().destroy()}function Dn(e,t){return e.reduce((e,n)=>{let r=n.key;return e[r]={on(e,n){let i=Q(r,e),a=t.get(i)??new Set;a.add(n),t.set(i,a)},onAny(e){let n=Q(r,`*`),i=t.get(n)??new Set;i.add(e),t.set(n,i)},off(e,n){let i=Q(r,e),a=t.get(i)??new Set;a.delete(n),t.set(i,a)},offAny(e){let n=Q(r,`*`),i=t.get(n)??new Set;i.delete(e),t.set(n,i)},readyForGameEvents:()=>{Sn.emit(`flushEvents`,[r])}},e},{})}function On(){let e=N.getInstance(),t=q.getInstance();return{on:(n,r)=>{switch(n){case`fatal`:e.on(`fatal`,r);break;case`error`:e.on(`error`,r);break;case`warning`:e.on(`warning`,r);break;case`gameLaunch`:t.on(`gameLaunch`,r);break;case`gameClose`:t.on(`gameClose`,r);break;case`gameReady`:t.on(`gameReady`,r);break;default:throw Error(`Event type not implemented ${n}`,{cause:[n,r]})}},off:(n,r)=>{switch(n){case`fatal`:e.off(`fatal`,r);break;case`error`:e.off(`error`,r);break;case`warning`:e.off(`warning`,r);break;case`gameLaunch`:t.off(`gameLaunch`,r);break;case`gameClose`:t.off(`gameClose`,r);break;case`gameReady`:t.off(`gameReady`,r);break;default:throw Error(`Event type not implemented ${n}`,{cause:[n,r]})}}}}function Q(e,t){return`${e}:${t}`}function kn(e,t,n){let i=I.getInstance();function a(e,t){let r=n.get(t);if(!r)n.set(t,[e]);else{if(r.length>=bn){N.getInstance().warn(`Event buffer full, removing oldest event`,`EVENT_BUFFER_FULL`,{summary:`Event buffer overflow for module ${t}. Buffer size: ${r.length}, max: ${bn}`});return}r.push(e)}}function o(n){let i=fn(n);if(i instanceof r.errors){K.getInstance().track(`invalid_game_event`,{}),N.getInstance().warn(`Invalid event`,`INVALID_EVENT`,{summary:i.summary});return}let o=e.modules.find(e=>e.key===i.game),s=o?.events.event;if(!s)return;let c=s(n);if(c instanceof r.errors){K.getInstance().track(`invalid_game_event`,{game:i.game,type:i.type}),N.getInstance().warn(`Invalid event`,`INVALID_EVENT`,{summary:c.summary});return}if(!xn[o.key]){a(c,o.key);return}K.getInstance().track(`game_event`,{game:i.game,type:c.type});let l=Q(o.key,c.type),u=Q(o.key,`*`),d=t.get(l),f=t.get(u),p=[...Array.from(d??[]),...Array.from(f??[])];p.length!==0&&p.forEach(e=>{e(c)})}return Sn.on(`flushEvents`,([e])=>{if(xn[e])return;xn[e]=!0;let t=n.get(e);t&&(F.getInstance().info(`Flushing ${t.length} events for module ${e}`),t.forEach(e=>o(e)),n.delete(e))}),i.on(`data`,e=>e.forEach(o)),i.on(`error`,e=>{N.getInstance().error(`Pipe server error`,`PIPE_SERVER_ERROR`,{error:e})}),i}function An(e){let t=new hn(e),n={};for(let r in e)n[r]={on:(e,n)=>{switch(e){case`down`:t.onKeybindDown(r,n);break;case`up`:t.onKeybindUp(r,n);break;case`toggle`:t.onKeybindToggled(r,n);break;default:throw Error(`Event type not implemented ${e}`,{cause:[e,n]})}}};let r={...n,getConfig:()=>t.getConfig(),pauseKeybindListening:()=>{t.keybindListeningPaused=!0},resumeKeybindListening:()=>{t.keybindListeningPaused=!1},updateKeybind:(e,n)=>{t.updateKeybind(e,n)},updateKeybinds:e=>{t.updateKeybinds(e)}};return t.init(),me.on(`quit`,()=>{t.destroy()}),r}function jn(){function e(e,t){return e.once(`closed`,()=>{e.isDestroyed()||K.getInstance().track(`window_closed`,{url:e.webContents.getURL(),in_game:t})}),e.on(`unresponsive`,()=>{e.isDestroyed()||K.getInstance().track(`window_unresponsive`,{url:e.webContents.getURL(),in_game:t})}),K.getInstance().track(`window_created`,{url:e.webContents.getURL(),in_game:t}),e}return{createWindow:t=>e(new global.OVERLAYED.electron.BrowserWindow(t),!1),createInGameWindow:t=>e($().instance.newWindowInternal(global.OVERLAYED.electron.BrowserWindow,t),!0),on:(e,t)=>$().instance.on(e,t),off:(e,t)=>$().instance.off(e,t),once:(e,t)=>$().instance.once(e,t),addListener:(e,t)=>$().instance.addListener(e,t),removeListener:(e,t)=>$().instance.removeListener(e,t),removeAllListeners:()=>$().instance.removeAllListeners(),prependListener:(e,t)=>$().instance.prependListener(e,t),prependOnceListener:(e,t)=>$().instance.prependOnceListener(e,t),getActiveGameInfo:()=>{let e=$(),t=I.getInstance();return{resolution:e.resolution,isConnected:t.hasConnection}}}}function Mn(){return{scope:e=>_n.getInstance().scope(e),raw:{setGlobalMouseBlock:e=>$().instance.setGlobalMouseBlock(e),setGlobalKeyboardBlock:e=>$().instance.setGlobalKeyboardBlock(e),setGlobalCursorOverride:e=>$().instance.setGlobalCursorOverride(e),setKeyInputBlock:(e,t)=>$().instance.setKeyInputBlock(e,t),getGlobalMouseBlock:()=>$().instance.getGlobalMouseBlock(),getGlobalKeyboardBlock:()=>$().instance.getGlobalKeyboardBlock(),getGlobalCursorOverride:()=>$().instance.getGlobalCursorOverride(),getKeyInputBlock:e=>$().instance.getKeyInputBlock(e)}}}function Nn(){return{track:(e,t)=>K.getInstance().track(`custom__${e}`,t)}}function Pn(){return{registerWindow:e=>{(0,yn.setupRevUtils)(e,global.OVERLAYED.electron)}}}function Fn(e){let t=new rt(`app.log`);return t.init(global.OVERLAYED.APPLICATION_ID,e.debug),{scope:e=>t.scope(e),info:e=>t.info(e),warn:e=>t.warn(e),error:e=>t.error(e),debug:e=>t.debug(e),submitBugReport:async(e,t)=>{K.getInstance().track(`bug_report_submitted`,{version:e.version,category:e.category});let n=In(t),r=await n.generateAsync({type:`base64`});await Ln(e,r)}}}function In(e){let t=nt(global.OVERLAYED.APPLICATION_ID),n=at(t,{recursive:!0}),r=et(),i=at(r,{recursive:!0});F.getInstance().info(`Logs path: `,t),F.getInstance().info(`Overlayed logs path: `,r);let a=new g;return[...n,...i].forEach(([e,t])=>{F.getInstance().info(`Zipping: `,t);let n=oe(t),r=ee(t);a.file(r,n,{compression:`DEFLATE`})}),Object.entries(e?.additionalFiles??{}).forEach(([e,t])=>{F.getInstance().info(`Zipping extra file: `,e),a.file(e,t,{compression:`DEFLATE`})}),a}async function Ln(e,t){let n={...e,version:`${global.OVERLAYED.APP_VERSION}@${global.OVERLAYED.APP_BUILD_CHANNEL}`,log_zip:`data:application/zip;base64,${t}`};await fetch(`https://api.stats.cc/v1/overlay/contact`,{method:`POST`,body:JSON.stringify(n),redirect:`follow`,headers:{"Content-Type":`application/json`}})}function Rn(){K.getInstance().meta={app_id:global.OVERLAYED.APPLICATION_ID,user_id:Zt.generateUniqueIdentifier(),app_channel:global.OVERLAYED.APP_BUILD_CHANNEL,app_version:global.OVERLAYED.APP_VERSION,package_version:global.OVERLAYED.PACKAGE_VERSION,frontend_version:global.OVERLAYED.FRONTEND_VERSION,session_id:global.OVERLAYED.sessionId},N.getInstance().on(`fatal`,e=>{K.getInstance().track(`fatal`,{message:e.message,code:e.code,data:e.data})}),N.getInstance().on(`error`,e=>{K.getInstance().track(`error`,{message:e.message,code:e.code,data:e.data})}),N.getInstance().on(`warning`,e=>{K.getInstance().track(`warning`,{message:e.message,code:e.code,data:e.data})})}function $(){return G.getInstance().getInterface(`OGG_SIEGE`)}export{ct as defineConfig,Cn as overlayed,Vt as setFetchLatestTokenCallback,St as setUpdaterTokenResolver};
package/dist/siege.d.ts CHANGED
@@ -100,22 +100,22 @@ declare const SiegeItemObjectId: Brander<SiegeItemObjectId>;
100
100
  //#region src/consts.d.ts
101
101
  declare const SIEGE_BOT_ID = "00000000-0000-0000-0000-000000000000";
102
102
  declare const SIEGE_GAME_MODE_PHASES: readonly ["intro", "planning", "prep", "action", "results", "invalid"];
103
- declare const SiegeGameModePhaseSchema: arktype_internal_methods_string_ts0.StringType<"invalid" | "intro" | "planning" | "prep" | "action" | "results", {}>;
103
+ declare const SiegeGameModePhaseSchema: arktype_internal_methods_string_ts0.StringType<"intro" | "planning" | "prep" | "action" | "results" | "invalid", {}>;
104
104
  type SiegeGameModePhase = typeof SiegeGameModePhaseSchema.infer;
105
105
  declare const SIEGE_TEAMS: readonly [0, 1];
106
106
  declare const SiegeTeamSchema: arktype_internal_methods_number_ts0.NumberType<0 | 1, {}>;
107
107
  type SiegeTeam = typeof SiegeTeamSchema.infer;
108
108
  declare const SIEGE_SIDES: readonly ["attacker", "defender", "both", "invalid"];
109
- declare const SiegeSideSchema: arktype_internal_methods_string_ts0.StringType<"attacker" | "defender" | "both" | "invalid", {}>;
109
+ declare const SiegeSideSchema: arktype_internal_methods_string_ts0.StringType<"invalid" | "attacker" | "defender" | "both", {}>;
110
110
  type SiegeSide = typeof SiegeSideSchema.infer;
111
111
  declare const SIEGE_PLAYER_LIFE_STATES: readonly ["normal", "overhealed", "low_health", "downed", "dead", "respawning"];
112
- declare const SiegePlayerLifeStateSchema: arktype_internal_methods_string_ts0.StringType<"downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning", {}>;
112
+ declare const SiegePlayerLifeStateSchema: arktype_internal_methods_string_ts0.StringType<"normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning", {}>;
113
113
  type SiegePlayerLifeState = typeof SiegePlayerLifeStateSchema.infer;
114
114
  declare const SIEGE_DAMAGE_TYPES: readonly ["bullet", "melee", "explosive", "falling", "regeneration", "unknown", "debris", "projectile", "downed", "gas", "thermal_explosion", "melee_gadget", "barbed_wire", "electric", "reinforcement", "frag", "paralyzed", "emp", "break", "cleanup", "interrogation", "melee-finisher", "toxic", "toxic-explosion", "pneumatic", "body-contact", "contact-explosion", "flash", "parasite-spike", "laser", "concussion", "blowtorch", "taser-shield", "reverse-friendly-fire", "self-destroyed", "area-control", "fire", "breach-kick", "break-wall", "blade-mine", "invalid"];
115
- declare const SiegeDamageTypeSchema: arktype_internal_methods_string_ts0.StringType<"unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine", {}>;
115
+ declare const SiegeDamageTypeSchema: arktype_internal_methods_string_ts0.StringType<"invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine", {}>;
116
116
  type SiegeDamageType = typeof SiegeDamageTypeSchema.infer;
117
117
  declare const SIEGE_DAMAGE_TEAM_TYPES: readonly ["unknown", "enemy", "friendly", "invalid"];
118
- declare const SiegeDamageTeamTypeSchema: arktype_internal_methods_string_ts0.StringType<"unknown" | "invalid" | "enemy" | "friendly", {}>;
118
+ declare const SiegeDamageTeamTypeSchema: arktype_internal_methods_string_ts0.StringType<"invalid" | "unknown" | "enemy" | "friendly", {}>;
119
119
  type SiegeDamageTeamType = typeof SiegeDamageTeamTypeSchema.infer;
120
120
  declare const SIEGE_GAME_MODE_TYPES_TO_ID: Readonly<{
121
121
  readonly ranked: SiegeGameModeTypeNameId;
@@ -645,11 +645,11 @@ declare function module(): {
645
645
  segment_size: number;
646
646
  segment_index: number;
647
647
  team_0: {
648
- role: "attacker" | "defender" | "both" | "invalid";
648
+ role: "invalid" | "attacker" | "defender" | "both";
649
649
  state: SiegeRoundState;
650
650
  };
651
651
  team_1: {
652
- role: "attacker" | "defender" | "both" | "invalid";
652
+ role: "invalid" | "attacker" | "defender" | "both";
653
653
  state: SiegeRoundState;
654
654
  };
655
655
  }[];
@@ -682,7 +682,7 @@ declare function module(): {
682
682
  content: {
683
683
  index: number;
684
684
  team: 0 | 1;
685
- side: "attacker" | "defender" | "both" | "invalid";
685
+ side: "invalid" | "attacker" | "defender" | "both";
686
686
  operator_name: {
687
687
  id: SiegeOperatorNameId;
688
688
  value: string;
@@ -699,11 +699,11 @@ declare function module(): {
699
699
  segment_size: number;
700
700
  segment_index: number;
701
701
  team_0: {
702
- role: "attacker" | "defender" | "both" | "invalid";
702
+ role: "invalid" | "attacker" | "defender" | "both";
703
703
  state: SiegeRoundState;
704
704
  };
705
705
  team_1: {
706
- role: "attacker" | "defender" | "both" | "invalid";
706
+ role: "invalid" | "attacker" | "defender" | "both";
707
707
  state: SiegeRoundState;
708
708
  };
709
709
  };
@@ -714,15 +714,15 @@ declare function module(): {
714
714
  remaining_health: number;
715
715
  pre_damage_health: number;
716
716
  max_health: number;
717
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
718
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
717
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
718
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
719
719
  damage_item_id: SiegeItemObjectId | null;
720
720
  damage_time: number;
721
721
  }[];
722
722
  players: {
723
723
  player_id: SiegePlayerId;
724
724
  final_health: number;
725
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
725
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
726
726
  operator_name: {
727
727
  id: SiegeOperatorNameId;
728
728
  value: string;
@@ -734,7 +734,7 @@ declare function module(): {
734
734
  type: "phase_changed";
735
735
  creation_time: number;
736
736
  content: {
737
- phase: "invalid" | "intro" | "planning" | "prep" | "action" | "results";
737
+ phase: "intro" | "planning" | "prep" | "action" | "results" | "invalid";
738
738
  };
739
739
  } | ((In: {
740
740
  game: "siege";
@@ -748,7 +748,7 @@ declare function module(): {
748
748
  is_squad_member: boolean;
749
749
  is_local_player: boolean;
750
750
  username: string;
751
- side: "attacker" | "defender" | "both" | "invalid";
751
+ side: "invalid" | "attacker" | "defender" | "both";
752
752
  team: 0 | 1;
753
753
  is_privacy_username: boolean;
754
754
  has_avatar_hidden: boolean;
@@ -761,12 +761,12 @@ declare function module(): {
761
761
  plants: number;
762
762
  score: number;
763
763
  };
764
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
764
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
765
765
  ping: number;
766
766
  };
767
767
  }) => arktype2.Out<{
768
768
  content: {
769
- starting_side: "attacker" | "defender" | "both" | "invalid";
769
+ starting_side: "invalid" | "attacker" | "defender" | "both";
770
770
  player_id: SiegePlayerId;
771
771
  profile_id: string;
772
772
  is_bot: boolean;
@@ -774,7 +774,7 @@ declare function module(): {
774
774
  is_squad_member: boolean;
775
775
  is_local_player: boolean;
776
776
  username: string;
777
- side: "attacker" | "defender" | "both" | "invalid";
777
+ side: "invalid" | "attacker" | "defender" | "both";
778
778
  team: 0 | 1;
779
779
  is_privacy_username: boolean;
780
780
  has_avatar_hidden: boolean;
@@ -787,7 +787,7 @@ declare function module(): {
787
787
  plants: number;
788
788
  score: number;
789
789
  };
790
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
790
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
791
791
  ping: number;
792
792
  };
793
793
  game: "siege";
@@ -825,7 +825,7 @@ declare function module(): {
825
825
  creation_time: number;
826
826
  content: {
827
827
  player_id: SiegePlayerId;
828
- side: "attacker" | "defender" | "both" | "invalid";
828
+ side: "invalid" | "attacker" | "defender" | "both";
829
829
  };
830
830
  } | {
831
831
  game: "siege";
@@ -884,7 +884,7 @@ declare function module(): {
884
884
  creation_time: number;
885
885
  content: {
886
886
  player_id: SiegePlayerId;
887
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
887
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
888
888
  };
889
889
  } | {
890
890
  game: "siege";
@@ -995,11 +995,11 @@ declare function module(): {
995
995
  segment_size: number;
996
996
  segment_index: number;
997
997
  team_0: {
998
- role: "attacker" | "defender" | "both" | "invalid";
998
+ role: "invalid" | "attacker" | "defender" | "both";
999
999
  state: SiegeRoundState;
1000
1000
  };
1001
1001
  team_1: {
1002
- role: "attacker" | "defender" | "both" | "invalid";
1002
+ role: "invalid" | "attacker" | "defender" | "both";
1003
1003
  state: SiegeRoundState;
1004
1004
  };
1005
1005
  }[];
@@ -1035,7 +1035,7 @@ declare function module(): {
1035
1035
  content: {
1036
1036
  index: number;
1037
1037
  team: 0 | 1;
1038
- side: "attacker" | "defender" | "both" | "invalid";
1038
+ side: "invalid" | "attacker" | "defender" | "both";
1039
1039
  operator_name: {
1040
1040
  id: SiegeOperatorNameId;
1041
1041
  value: string;
@@ -1053,11 +1053,11 @@ declare function module(): {
1053
1053
  segment_size: number;
1054
1054
  segment_index: number;
1055
1055
  team_0: {
1056
- role: "attacker" | "defender" | "both" | "invalid";
1056
+ role: "invalid" | "attacker" | "defender" | "both";
1057
1057
  state: SiegeRoundState;
1058
1058
  };
1059
1059
  team_1: {
1060
- role: "attacker" | "defender" | "both" | "invalid";
1060
+ role: "invalid" | "attacker" | "defender" | "both";
1061
1061
  state: SiegeRoundState;
1062
1062
  };
1063
1063
  };
@@ -1068,15 +1068,15 @@ declare function module(): {
1068
1068
  remaining_health: number;
1069
1069
  pre_damage_health: number;
1070
1070
  max_health: number;
1071
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1072
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
1071
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1072
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
1073
1073
  damage_item_id: SiegeItemObjectId | null;
1074
1074
  damage_time: number;
1075
1075
  }[];
1076
1076
  players: {
1077
1077
  player_id: SiegePlayerId;
1078
1078
  final_health: number;
1079
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1079
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1080
1080
  operator_name: {
1081
1081
  id: SiegeOperatorNameId;
1082
1082
  value: string;
@@ -1089,7 +1089,7 @@ declare function module(): {
1089
1089
  type: "phase_changed";
1090
1090
  creation_time: number;
1091
1091
  content: {
1092
- phase: "invalid" | "intro" | "planning" | "prep" | "action" | "results";
1092
+ phase: "intro" | "planning" | "prep" | "action" | "results" | "invalid";
1093
1093
  };
1094
1094
  };
1095
1095
  player_joined: (In: {
@@ -1104,7 +1104,7 @@ declare function module(): {
1104
1104
  is_squad_member: boolean;
1105
1105
  is_local_player: boolean;
1106
1106
  username: string;
1107
- side: "attacker" | "defender" | "both" | "invalid";
1107
+ side: "invalid" | "attacker" | "defender" | "both";
1108
1108
  team: 0 | 1;
1109
1109
  is_privacy_username: boolean;
1110
1110
  has_avatar_hidden: boolean;
@@ -1117,12 +1117,12 @@ declare function module(): {
1117
1117
  plants: number;
1118
1118
  score: number;
1119
1119
  };
1120
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1120
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1121
1121
  ping: number;
1122
1122
  };
1123
1123
  }) => arktype2.Out<{
1124
1124
  content: {
1125
- starting_side: "attacker" | "defender" | "both" | "invalid";
1125
+ starting_side: "invalid" | "attacker" | "defender" | "both";
1126
1126
  player_id: SiegePlayerId;
1127
1127
  profile_id: string;
1128
1128
  is_bot: boolean;
@@ -1130,7 +1130,7 @@ declare function module(): {
1130
1130
  is_squad_member: boolean;
1131
1131
  is_local_player: boolean;
1132
1132
  username: string;
1133
- side: "attacker" | "defender" | "both" | "invalid";
1133
+ side: "invalid" | "attacker" | "defender" | "both";
1134
1134
  team: 0 | 1;
1135
1135
  is_privacy_username: boolean;
1136
1136
  has_avatar_hidden: boolean;
@@ -1143,7 +1143,7 @@ declare function module(): {
1143
1143
  plants: number;
1144
1144
  score: number;
1145
1145
  };
1146
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1146
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1147
1147
  ping: number;
1148
1148
  };
1149
1149
  game: "siege";
@@ -1185,7 +1185,7 @@ declare function module(): {
1185
1185
  creation_time: number;
1186
1186
  content: {
1187
1187
  player_id: SiegePlayerId;
1188
- side: "attacker" | "defender" | "both" | "invalid";
1188
+ side: "invalid" | "attacker" | "defender" | "both";
1189
1189
  };
1190
1190
  };
1191
1191
  player_stats_changed: {
@@ -1251,7 +1251,7 @@ declare function module(): {
1251
1251
  creation_time: number;
1252
1252
  content: {
1253
1253
  player_id: SiegePlayerId;
1254
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1254
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1255
1255
  };
1256
1256
  };
1257
1257
  player_died: {
@@ -1338,8 +1338,8 @@ declare const PlayerDamageDataSchema: arktype_internal_methods_object_ts0.Object
1338
1338
  remaining_health: number;
1339
1339
  pre_damage_health: number;
1340
1340
  max_health: number;
1341
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1342
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
1341
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1342
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
1343
1343
  damage_item_id: SiegeItemObjectId | null;
1344
1344
  damage_time: number;
1345
1345
  }, {}>;
@@ -1350,11 +1350,11 @@ declare const MatchRoundDataSchema: arktype_internal_methods_object_ts0.ObjectTy
1350
1350
  segment_size: number;
1351
1351
  segment_index: number;
1352
1352
  team_0: {
1353
- role: "attacker" | "defender" | "both" | "invalid";
1353
+ role: "invalid" | "attacker" | "defender" | "both";
1354
1354
  state: SiegeRoundState;
1355
1355
  };
1356
1356
  team_1: {
1357
- role: "attacker" | "defender" | "both" | "invalid";
1357
+ role: "invalid" | "attacker" | "defender" | "both";
1358
1358
  state: SiegeRoundState;
1359
1359
  };
1360
1360
  }, {}>;
@@ -1374,7 +1374,7 @@ type MapData = typeof MapDataSchema.infer;
1374
1374
  declare const RoundEndPlayerDataSchema: arktype_internal_methods_object_ts0.ObjectType<{
1375
1375
  player_id: SiegePlayerId;
1376
1376
  final_health: number;
1377
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1377
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1378
1378
  operator_name: {
1379
1379
  id: SiegeOperatorNameId;
1380
1380
  value: string;
@@ -1388,11 +1388,11 @@ declare const RoundEndDataSchema: arktype_internal_methods_object_ts0.ObjectType
1388
1388
  segment_size: number;
1389
1389
  segment_index: number;
1390
1390
  team_0: {
1391
- role: "attacker" | "defender" | "both" | "invalid";
1391
+ role: "invalid" | "attacker" | "defender" | "both";
1392
1392
  state: SiegeRoundState;
1393
1393
  };
1394
1394
  team_1: {
1395
- role: "attacker" | "defender" | "both" | "invalid";
1395
+ role: "invalid" | "attacker" | "defender" | "both";
1396
1396
  state: SiegeRoundState;
1397
1397
  };
1398
1398
  };
@@ -1403,15 +1403,15 @@ declare const RoundEndDataSchema: arktype_internal_methods_object_ts0.ObjectType
1403
1403
  remaining_health: number;
1404
1404
  pre_damage_health: number;
1405
1405
  max_health: number;
1406
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1407
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
1406
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1407
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
1408
1408
  damage_item_id: SiegeItemObjectId | null;
1409
1409
  damage_time: number;
1410
1410
  }[];
1411
1411
  players: {
1412
1412
  player_id: SiegePlayerId;
1413
1413
  final_health: number;
1414
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1414
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1415
1415
  operator_name: {
1416
1416
  id: SiegeOperatorNameId;
1417
1417
  value: string;
@@ -1465,11 +1465,11 @@ declare const MatchStarted: arktype_internal_methods_object_ts0.ObjectType<{
1465
1465
  segment_size: number;
1466
1466
  segment_index: number;
1467
1467
  team_0: {
1468
- role: "attacker" | "defender" | "both" | "invalid";
1468
+ role: "invalid" | "attacker" | "defender" | "both";
1469
1469
  state: SiegeRoundState;
1470
1470
  };
1471
1471
  team_1: {
1472
- role: "attacker" | "defender" | "both" | "invalid";
1472
+ role: "invalid" | "attacker" | "defender" | "both";
1473
1473
  state: SiegeRoundState;
1474
1474
  };
1475
1475
  }[];
@@ -1574,7 +1574,7 @@ declare const OperatorBanned: arktype_internal_methods_object_ts0.ObjectType<{
1574
1574
  content: {
1575
1575
  index: number;
1576
1576
  team: 0 | 1;
1577
- side: "attacker" | "defender" | "both" | "invalid";
1577
+ side: "invalid" | "attacker" | "defender" | "both";
1578
1578
  operator_name: {
1579
1579
  id: SiegeOperatorNameId;
1580
1580
  value: string;
@@ -1596,11 +1596,11 @@ declare const RoundEnded: arktype_internal_methods_object_ts0.ObjectType<{
1596
1596
  segment_size: number;
1597
1597
  segment_index: number;
1598
1598
  team_0: {
1599
- role: "attacker" | "defender" | "both" | "invalid";
1599
+ role: "invalid" | "attacker" | "defender" | "both";
1600
1600
  state: SiegeRoundState;
1601
1601
  };
1602
1602
  team_1: {
1603
- role: "attacker" | "defender" | "both" | "invalid";
1603
+ role: "invalid" | "attacker" | "defender" | "both";
1604
1604
  state: SiegeRoundState;
1605
1605
  };
1606
1606
  };
@@ -1611,15 +1611,15 @@ declare const RoundEnded: arktype_internal_methods_object_ts0.ObjectType<{
1611
1611
  remaining_health: number;
1612
1612
  pre_damage_health: number;
1613
1613
  max_health: number;
1614
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1615
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
1614
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
1615
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
1616
1616
  damage_item_id: SiegeItemObjectId | null;
1617
1617
  damage_time: number;
1618
1618
  }[];
1619
1619
  players: {
1620
1620
  player_id: SiegePlayerId;
1621
1621
  final_health: number;
1622
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1622
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1623
1623
  operator_name: {
1624
1624
  id: SiegeOperatorNameId;
1625
1625
  value: string;
@@ -1636,7 +1636,7 @@ declare const PhaseChanged: arktype_internal_methods_object_ts0.ObjectType<{
1636
1636
  type: "phase_changed";
1637
1637
  creation_time: number;
1638
1638
  content: {
1639
- phase: "invalid" | "intro" | "planning" | "prep" | "action" | "results";
1639
+ phase: "intro" | "planning" | "prep" | "action" | "results" | "invalid";
1640
1640
  };
1641
1641
  }, {}>;
1642
1642
  type PhaseChangedEvent = typeof PhaseChanged.infer;
@@ -1655,7 +1655,7 @@ declare const PlayerJoined: arktype_internal_methods_object_ts0.ObjectType<(In:
1655
1655
  is_squad_member: boolean;
1656
1656
  is_local_player: boolean;
1657
1657
  username: string;
1658
- side: "attacker" | "defender" | "both" | "invalid";
1658
+ side: "invalid" | "attacker" | "defender" | "both";
1659
1659
  team: 0 | 1;
1660
1660
  is_privacy_username: boolean;
1661
1661
  has_avatar_hidden: boolean;
@@ -1668,12 +1668,12 @@ declare const PlayerJoined: arktype_internal_methods_object_ts0.ObjectType<(In:
1668
1668
  plants: number;
1669
1669
  score: number;
1670
1670
  };
1671
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1671
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1672
1672
  ping: number;
1673
1673
  };
1674
1674
  }) => arktype2.Out<{
1675
1675
  content: {
1676
- starting_side: "attacker" | "defender" | "both" | "invalid";
1676
+ starting_side: "invalid" | "attacker" | "defender" | "both";
1677
1677
  player_id: SiegePlayerId;
1678
1678
  profile_id: string;
1679
1679
  is_bot: boolean;
@@ -1681,7 +1681,7 @@ declare const PlayerJoined: arktype_internal_methods_object_ts0.ObjectType<(In:
1681
1681
  is_squad_member: boolean;
1682
1682
  is_local_player: boolean;
1683
1683
  username: string;
1684
- side: "attacker" | "defender" | "both" | "invalid";
1684
+ side: "invalid" | "attacker" | "defender" | "both";
1685
1685
  team: 0 | 1;
1686
1686
  is_privacy_username: boolean;
1687
1687
  has_avatar_hidden: boolean;
@@ -1694,7 +1694,7 @@ declare const PlayerJoined: arktype_internal_methods_object_ts0.ObjectType<(In:
1694
1694
  plants: number;
1695
1695
  score: number;
1696
1696
  };
1697
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1697
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1698
1698
  ping: number;
1699
1699
  };
1700
1700
  game: "siege";
@@ -1752,7 +1752,7 @@ declare const PlayerSideChanged: arktype_internal_methods_object_ts0.ObjectType<
1752
1752
  creation_time: number;
1753
1753
  content: {
1754
1754
  player_id: SiegePlayerId;
1755
- side: "attacker" | "defender" | "both" | "invalid";
1755
+ side: "invalid" | "attacker" | "defender" | "both";
1756
1756
  };
1757
1757
  }, {}>;
1758
1758
  type PlayerSideChangedEvent = typeof PlayerSideChanged.infer;
@@ -1846,7 +1846,7 @@ declare const PlayerLifeStateChanged: arktype_internal_methods_object_ts0.Object
1846
1846
  creation_time: number;
1847
1847
  content: {
1848
1848
  player_id: SiegePlayerId;
1849
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
1849
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
1850
1850
  };
1851
1851
  }, {}>;
1852
1852
  type PlayerLifeStateChangedEvent = typeof PlayerLifeStateChanged.infer;
@@ -1977,11 +1977,11 @@ declare const events: arktype2.Module<{
1977
1977
  segment_size: number;
1978
1978
  segment_index: number;
1979
1979
  team_0: {
1980
- role: "attacker" | "defender" | "both" | "invalid";
1980
+ role: "invalid" | "attacker" | "defender" | "both";
1981
1981
  state: SiegeRoundState;
1982
1982
  };
1983
1983
  team_1: {
1984
- role: "attacker" | "defender" | "both" | "invalid";
1984
+ role: "invalid" | "attacker" | "defender" | "both";
1985
1985
  state: SiegeRoundState;
1986
1986
  };
1987
1987
  }[];
@@ -2014,7 +2014,7 @@ declare const events: arktype2.Module<{
2014
2014
  content: {
2015
2015
  index: number;
2016
2016
  team: 0 | 1;
2017
- side: "attacker" | "defender" | "both" | "invalid";
2017
+ side: "invalid" | "attacker" | "defender" | "both";
2018
2018
  operator_name: {
2019
2019
  id: SiegeOperatorNameId;
2020
2020
  value: string;
@@ -2031,11 +2031,11 @@ declare const events: arktype2.Module<{
2031
2031
  segment_size: number;
2032
2032
  segment_index: number;
2033
2033
  team_0: {
2034
- role: "attacker" | "defender" | "both" | "invalid";
2034
+ role: "invalid" | "attacker" | "defender" | "both";
2035
2035
  state: SiegeRoundState;
2036
2036
  };
2037
2037
  team_1: {
2038
- role: "attacker" | "defender" | "both" | "invalid";
2038
+ role: "invalid" | "attacker" | "defender" | "both";
2039
2039
  state: SiegeRoundState;
2040
2040
  };
2041
2041
  };
@@ -2046,15 +2046,15 @@ declare const events: arktype2.Module<{
2046
2046
  remaining_health: number;
2047
2047
  pre_damage_health: number;
2048
2048
  max_health: number;
2049
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
2050
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
2049
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
2050
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
2051
2051
  damage_item_id: SiegeItemObjectId | null;
2052
2052
  damage_time: number;
2053
2053
  }[];
2054
2054
  players: {
2055
2055
  player_id: SiegePlayerId;
2056
2056
  final_health: number;
2057
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2057
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2058
2058
  operator_name: {
2059
2059
  id: SiegeOperatorNameId;
2060
2060
  value: string;
@@ -2066,7 +2066,7 @@ declare const events: arktype2.Module<{
2066
2066
  type: "phase_changed";
2067
2067
  creation_time: number;
2068
2068
  content: {
2069
- phase: "invalid" | "intro" | "planning" | "prep" | "action" | "results";
2069
+ phase: "intro" | "planning" | "prep" | "action" | "results" | "invalid";
2070
2070
  };
2071
2071
  } | ((In: {
2072
2072
  game: "siege";
@@ -2080,7 +2080,7 @@ declare const events: arktype2.Module<{
2080
2080
  is_squad_member: boolean;
2081
2081
  is_local_player: boolean;
2082
2082
  username: string;
2083
- side: "attacker" | "defender" | "both" | "invalid";
2083
+ side: "invalid" | "attacker" | "defender" | "both";
2084
2084
  team: 0 | 1;
2085
2085
  is_privacy_username: boolean;
2086
2086
  has_avatar_hidden: boolean;
@@ -2093,12 +2093,12 @@ declare const events: arktype2.Module<{
2093
2093
  plants: number;
2094
2094
  score: number;
2095
2095
  };
2096
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2096
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2097
2097
  ping: number;
2098
2098
  };
2099
2099
  }) => arktype2.Out<{
2100
2100
  content: {
2101
- starting_side: "attacker" | "defender" | "both" | "invalid";
2101
+ starting_side: "invalid" | "attacker" | "defender" | "both";
2102
2102
  player_id: SiegePlayerId;
2103
2103
  profile_id: string;
2104
2104
  is_bot: boolean;
@@ -2106,7 +2106,7 @@ declare const events: arktype2.Module<{
2106
2106
  is_squad_member: boolean;
2107
2107
  is_local_player: boolean;
2108
2108
  username: string;
2109
- side: "attacker" | "defender" | "both" | "invalid";
2109
+ side: "invalid" | "attacker" | "defender" | "both";
2110
2110
  team: 0 | 1;
2111
2111
  is_privacy_username: boolean;
2112
2112
  has_avatar_hidden: boolean;
@@ -2119,7 +2119,7 @@ declare const events: arktype2.Module<{
2119
2119
  plants: number;
2120
2120
  score: number;
2121
2121
  };
2122
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2122
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2123
2123
  ping: number;
2124
2124
  };
2125
2125
  game: "siege";
@@ -2157,7 +2157,7 @@ declare const events: arktype2.Module<{
2157
2157
  creation_time: number;
2158
2158
  content: {
2159
2159
  player_id: SiegePlayerId;
2160
- side: "attacker" | "defender" | "both" | "invalid";
2160
+ side: "invalid" | "attacker" | "defender" | "both";
2161
2161
  };
2162
2162
  } | {
2163
2163
  game: "siege";
@@ -2216,7 +2216,7 @@ declare const events: arktype2.Module<{
2216
2216
  creation_time: number;
2217
2217
  content: {
2218
2218
  player_id: SiegePlayerId;
2219
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2219
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2220
2220
  };
2221
2221
  } | {
2222
2222
  game: "siege";
@@ -2327,11 +2327,11 @@ declare const events: arktype2.Module<{
2327
2327
  segment_size: number;
2328
2328
  segment_index: number;
2329
2329
  team_0: {
2330
- role: "attacker" | "defender" | "both" | "invalid";
2330
+ role: "invalid" | "attacker" | "defender" | "both";
2331
2331
  state: SiegeRoundState;
2332
2332
  };
2333
2333
  team_1: {
2334
- role: "attacker" | "defender" | "both" | "invalid";
2334
+ role: "invalid" | "attacker" | "defender" | "both";
2335
2335
  state: SiegeRoundState;
2336
2336
  };
2337
2337
  }[];
@@ -2367,7 +2367,7 @@ declare const events: arktype2.Module<{
2367
2367
  content: {
2368
2368
  index: number;
2369
2369
  team: 0 | 1;
2370
- side: "attacker" | "defender" | "both" | "invalid";
2370
+ side: "invalid" | "attacker" | "defender" | "both";
2371
2371
  operator_name: {
2372
2372
  id: SiegeOperatorNameId;
2373
2373
  value: string;
@@ -2385,11 +2385,11 @@ declare const events: arktype2.Module<{
2385
2385
  segment_size: number;
2386
2386
  segment_index: number;
2387
2387
  team_0: {
2388
- role: "attacker" | "defender" | "both" | "invalid";
2388
+ role: "invalid" | "attacker" | "defender" | "both";
2389
2389
  state: SiegeRoundState;
2390
2390
  };
2391
2391
  team_1: {
2392
- role: "attacker" | "defender" | "both" | "invalid";
2392
+ role: "invalid" | "attacker" | "defender" | "both";
2393
2393
  state: SiegeRoundState;
2394
2394
  };
2395
2395
  };
@@ -2400,15 +2400,15 @@ declare const events: arktype2.Module<{
2400
2400
  remaining_health: number;
2401
2401
  pre_damage_health: number;
2402
2402
  max_health: number;
2403
- damage_type: "unknown" | "invalid" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "downed" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
2404
- damage_team_type: "unknown" | "invalid" | "enemy" | "friendly";
2403
+ damage_type: "invalid" | "unknown" | "downed" | "bullet" | "melee" | "explosive" | "falling" | "regeneration" | "debris" | "projectile" | "gas" | "thermal_explosion" | "melee_gadget" | "barbed_wire" | "electric" | "reinforcement" | "frag" | "paralyzed" | "emp" | "break" | "cleanup" | "interrogation" | "melee-finisher" | "toxic" | "toxic-explosion" | "pneumatic" | "body-contact" | "contact-explosion" | "flash" | "parasite-spike" | "laser" | "concussion" | "blowtorch" | "taser-shield" | "reverse-friendly-fire" | "self-destroyed" | "area-control" | "fire" | "breach-kick" | "break-wall" | "blade-mine";
2404
+ damage_team_type: "invalid" | "unknown" | "enemy" | "friendly";
2405
2405
  damage_item_id: SiegeItemObjectId | null;
2406
2406
  damage_time: number;
2407
2407
  }[];
2408
2408
  players: {
2409
2409
  player_id: SiegePlayerId;
2410
2410
  final_health: number;
2411
- final_life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2411
+ final_life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2412
2412
  operator_name: {
2413
2413
  id: SiegeOperatorNameId;
2414
2414
  value: string;
@@ -2421,7 +2421,7 @@ declare const events: arktype2.Module<{
2421
2421
  type: "phase_changed";
2422
2422
  creation_time: number;
2423
2423
  content: {
2424
- phase: "invalid" | "intro" | "planning" | "prep" | "action" | "results";
2424
+ phase: "intro" | "planning" | "prep" | "action" | "results" | "invalid";
2425
2425
  };
2426
2426
  };
2427
2427
  player_joined: (In: {
@@ -2436,7 +2436,7 @@ declare const events: arktype2.Module<{
2436
2436
  is_squad_member: boolean;
2437
2437
  is_local_player: boolean;
2438
2438
  username: string;
2439
- side: "attacker" | "defender" | "both" | "invalid";
2439
+ side: "invalid" | "attacker" | "defender" | "both";
2440
2440
  team: 0 | 1;
2441
2441
  is_privacy_username: boolean;
2442
2442
  has_avatar_hidden: boolean;
@@ -2449,12 +2449,12 @@ declare const events: arktype2.Module<{
2449
2449
  plants: number;
2450
2450
  score: number;
2451
2451
  };
2452
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2452
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2453
2453
  ping: number;
2454
2454
  };
2455
2455
  }) => arktype2.Out<{
2456
2456
  content: {
2457
- starting_side: "attacker" | "defender" | "both" | "invalid";
2457
+ starting_side: "invalid" | "attacker" | "defender" | "both";
2458
2458
  player_id: SiegePlayerId;
2459
2459
  profile_id: string;
2460
2460
  is_bot: boolean;
@@ -2462,7 +2462,7 @@ declare const events: arktype2.Module<{
2462
2462
  is_squad_member: boolean;
2463
2463
  is_local_player: boolean;
2464
2464
  username: string;
2465
- side: "attacker" | "defender" | "both" | "invalid";
2465
+ side: "invalid" | "attacker" | "defender" | "both";
2466
2466
  team: 0 | 1;
2467
2467
  is_privacy_username: boolean;
2468
2468
  has_avatar_hidden: boolean;
@@ -2475,7 +2475,7 @@ declare const events: arktype2.Module<{
2475
2475
  plants: number;
2476
2476
  score: number;
2477
2477
  };
2478
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2478
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2479
2479
  ping: number;
2480
2480
  };
2481
2481
  game: "siege";
@@ -2517,7 +2517,7 @@ declare const events: arktype2.Module<{
2517
2517
  creation_time: number;
2518
2518
  content: {
2519
2519
  player_id: SiegePlayerId;
2520
- side: "attacker" | "defender" | "both" | "invalid";
2520
+ side: "invalid" | "attacker" | "defender" | "both";
2521
2521
  };
2522
2522
  };
2523
2523
  player_stats_changed: {
@@ -2583,7 +2583,7 @@ declare const events: arktype2.Module<{
2583
2583
  creation_time: number;
2584
2584
  content: {
2585
2585
  player_id: SiegePlayerId;
2586
- life_state: "downed" | "normal" | "overhealed" | "low_health" | "dead" | "respawning";
2586
+ life_state: "normal" | "overhealed" | "low_health" | "downed" | "dead" | "respawning";
2587
2587
  };
2588
2588
  };
2589
2589
  player_died: {
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@overlayed/app",
3
3
  "author": "overlayed.gg",
4
4
  "homepage": "https://overlayed.gg",
5
- "version": "0.17.0",
5
+ "version": "0.17.1",
6
6
  "description": "Overlayed app",
7
7
  "license": "SEE LICENSE IN LICENSE.md",
8
8
  "repository": {