overlay-toolkit 0.10.0 → 0.10.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.
@@ -0,0 +1 @@
1
+ (function(n,p){typeof exports=="object"&&typeof module<"u"?p(exports):typeof define=="function"&&define.amd?define(["exports"],p):(n=typeof globalThis<"u"?globalThis:n||self,p(n.overlayToolkit={}))})(this,function(n){"use strict";var Pe=Object.defineProperty;var le=(n,p,u)=>p in n?Pe(n,p,{enumerable:!0,configurable:!0,writable:!0,value:u}):n[p]=u;var t=(n,p,u)=>le(n,typeof p!="symbol"?p+"":p,u);function p(s){return new u(s)}class u extends EventTarget{constructor(e){super();t(this,"onconnect",null);t(this,"ondisconnect",null);t(this,"devices",new Map);this.api=e,this.addListener()}dispatchEvent(e){return e.type==="connect"&&this.onconnect&&this.onconnect.call(this,e),e.type==="disconnect"&&this.ondisconnect&&this.ondisconnect.call(this,e),super.dispatchEvent(e),!e.defaultPrevented}async getDevices(){const e=await this.requestGetDevices();let a=[];return e.forEach(c=>{if(this.devices.has(c.instanceId))a.push(this.devices.get(c.instanceId));else{const h=new I(this.api,c);this.devices.set(c.instanceId,h),a.push(h)}}),a}async requestDevice(e){return e&&console.log("Requesting device with options:",e),this.getDevices()}async requestGetDevices(){return(await o(this.api,"getDevices",{})).devices}addListener(){this.api.addOverlayListener("otk::hid::inputreport",e=>this.callbackInputReport(e)),this.api.addOverlayListener("otk::hid::devicechanged",e=>this.callbackDeviceChanged(e))}callbackInputReport(e){const a=e.instanceId,c=w(e.data),h=this.devices.get(a);h?h.dispatchEvent(new fe("inputreport",h,c[0],new DataView(c.buffer,1))):console.warn("Device not found:",a)}callbackDeviceChanged(e){var a=e.add;const c=new I(this.api,e.device),h=new ye(a?"connect":"disconnect",c);this.dispatchEvent(h)}}async function o(s,r,e){const a={call:"otk::hid",type:r,...e},c=await s.callOverlayHandler(a);return c.error&&console.log("callOverlayHID error:",r,e,c),c}class I extends EventTarget{constructor(e,a){super();t(this,"instanceId");t(this,"opened",!1);t(this,"vendorId");t(this,"productId");t(this,"productName");t(this,"collections");t(this,"oninputreport",null);this.api=e,this.instanceId=a.instanceId,this.vendorId=a.vendorId,this.productId=a.productId,this.productName=a.productName,this.collections=a.collections||[]}dispatchEvent(e){return e.type==="inputreport"&&this.oninputreport&&this.oninputreport.call(this,e),super.dispatchEvent(e),!e.defaultPrevented}async open(){this.opened||(await this.request("open",{}),this.opened=!0)}async close(){this.opened&&(await this.request("close",{}),this.opened=!1)}async forget(){}async sendReport(e,a){if(!this.opened)throw new Error("Device is not opened.");await this.request("send",{reportId:e,data:m(a)})}async sendFeatureReport(e,a){if(!this.opened)throw new Error("Device is not opened.");await this.request("sendFeature",{reportId:e,data:m(a)})}async receiveFeatureReport(e){if(!this.opened)throw new Error("Device is not opened.");const a=await this.request("recvFeature",{reportId:e}),c=w(a.data);return new DataView(c.buffer)}async request(e,a){return o(this.api,e,{instanceId:this.instanceId,...a})}}class ye extends Event{constructor(e,a){super(e);t(this,"device");this.device=a}}class fe extends Event{constructor(e,a,c,h){super(e);t(this,"device");t(this,"reportId");t(this,"data");this.device=a,this.reportId=c,this.data=h}}function m(s){let r=null;return s instanceof ArrayBuffer?r=new Uint8Array(s):r=new Uint8Array(s.buffer,s.byteOffset,s.byteLength),[...r].map(e=>e.toString(16).padStart(2,"0")).join("")}function w(s){const r=new Uint8Array(Math.ceil(s.length/2));for(let e=0;e<s.length;)r[e/2]=Number.parseInt(s.slice(e,e+=2),16);return r}class ve{constructor(r=null){t(this,"subscribers",new Map);t(this,"queue",[]);this.transport=r,r&&this.setTransport(r)}setTransport(r){this.transport=r,this.transport.addEventListener("message",e=>{this.dispatchOverlayEvent(e.detail)}),this.transport.addEventListener("connected",this.onTransportConnected.bind(this))}dispatchOverlayEvent(r){const e=this.subscribers.get(r.type);if(e)for(const a of e)a(r)}addOverlayListener(r,e){this.subscribers.has(r)||this.subscribers.set(r,[]),this.subscribers.get(r).push(e)}removeOverlayListener(r,e){if(!this.subscribers.has(r))return;const a=this.subscribers.get(r),c=a.indexOf(e);c!==-1&&a.splice(c,1)}async callOverlayHandler(r){return!this.transport||!this.transport.connected?(console.warn("OverlayPluginAPI: Transport not connected, queuing message",r),new Promise(a=>{this.queue.push([r,a])})):this.transport.sendMessage(r)}startOverlayEvents(){var r={call:"subscribe",events:Array.from(this.subscribers.keys())};this.callOverlayHandler(r)}onTransportConnected(){if(!this.transport||!this.transport.connected||this.queue.length===0)return;console.log("OverlayPluginAPI: Transport connected, sending queued messages");let r=this.queue;this.queue=[];for(let[e,a]of r)this.transport.sendMessage(e).then(a)}}class De extends EventTarget{constructor(){super(...arguments);t(this,"connected",!1);t(this,"evtHandlerWrapper",e=>{this.dispatchEvent(new CustomEvent("message",{detail:e}))})}get transportType(){return"plugin"}sendMessage(e){return new Promise(a=>{window.OverlayPluginApi.callHandler(JSON.stringify(e),a)})}waitForApi(){if(!window.OverlayPluginApi||!window.OverlayPluginApi.ready){setTimeout(()=>this.waitForApi(),300);return}window.__OverlayCallback=this.evtHandlerWrapper,this.connected=!0,this.dispatchEvent(new Event("connected"))}}class ke extends EventTarget{constructor(e){super();t(this,"ws");t(this,"sequence",0);t(this,"responseResolvers",new Map);t(this,"evtHandler",()=>{});t(this,"connected",!1);this.ws=new WebSocket(e),this.connect(this.ws)}connect(e){e.addEventListener("open",this.onOpen.bind(this)),e.addEventListener("error",this.onError.bind(this)),e.addEventListener("message",this.onMessage.bind(this)),e.addEventListener("close",this.onClosed.bind(this))}onError(e){console.error(e)}onOpen(){console.log("WebSocket connected"),this.connected=!0,this.dispatchEvent(new Event("connected"))}onMessage(e){try{const a=JSON.parse(e.data);if("rseq"in a){const c=a.rseq;this.responseResolvers.has(c)&&(this.responseResolvers.get(c)(a),this.responseResolvers.delete(c))}else this.dispatchEvent(new CustomEvent("message",{detail:a}))}catch{console.error("Failed to parse WebSocket message",e)}}onClosed(e){console.log("WebSocket closed",e),this.connected=!1,setTimeout(()=>{console.log("WebSocket reconnecting..."),this.ws=new WebSocket(this.ws.url),this.connect(this.ws)},3e3)}get transportType(){return"websocket"}sendMessage(e){const a=this.sequence++;return e.rseq=a,new Promise(c=>{this.responseResolvers.set(a,c),this.ws.send(JSON.stringify(e))})}set eventHandler(e){this.evtHandler=e}}class y{constructor(){t(this,"hid");t(this,"api",new ve);t(this,"handlerMap",new Map);this.hid=p(this.api)}Fetch(r,e={}){const a={call:"Fetch",resource:r,options:e};return this.api.callOverlayHandler(a)}async SubscribePacket(r,e,a){const c={call:"otk::packet",action:"subscribe",name:r,filters:e},h=await this.api.callOverlayHandler(c);if(h.error)throw new Error(h.error);return this.handlerMap.set(h.name||r,a),h.name||r}async UnsubscribePacket(r){const e={call:"otk::packet",action:"unsubscribe",name:r},a=await this.api.callOverlayHandler(e);if(a.error)throw new Error(a.error);this.handlerMap.delete(r)}packetHandler(r){let e=r,a=r;a.data=Uint8Array.from(atob(e.msg),h=>h.charCodeAt(0));let c=this.handlerMap.get(e.name);c?c(a):console.warn("No packet handler for name",e.name)}async GetGameVersion(){const r={call:"otk::game_ver"};return this.api.callOverlayHandler(r)}Start(){this.api.addOverlayListener("otk::packet",r=>this.packetHandler(r)),this.api.startOverlayEvents()}Dispatch(r){this.api.dispatchOverlayEvent(r)}AddListener(r,e){this.api.addOverlayListener(r,e)}RemoveListener(r,e){this.api.removeOverlayListener(r,e)}Call(r){return this.api.callOverlayHandler(r)}IsOverlayPluginCEF(){return"OverlayPluginApi"in window}tryConnectToCEF(){if(!this.IsOverlayPluginCEF()){setTimeout(()=>this.tryConnectToCEF(),300);return}const r=new De;this.api.setTransport(r),r.waitForApi()}Connect(r=""){if(this.tryConnectToCEF(),r||(r=new URLSearchParams(location.search).get("OVERLAY_WS")),r){if(this.IsOverlayPluginCEF()){console.warn("OverlayToolkit: Connect wsUrl ignored in OverlayPlugin CEF environment");return}const e=new ke(r);this.api.setTransport(e)}}}class i{constructor(r,e){t(this,"type");t(this,"typeCode");t(this,"time");this.typeCode=parseInt(e[0]),this.time=e[1],this.type=r}get timeDate(){return new Date(this.time)}}class f extends i{constructor(e){super("LogLine",e);t(this,"code");t(this,"name");t(this,"line");this.code=e[2],this.name=e[3],this.line=e[4]}}class v extends i{constructor(e){super("ChangeZone",e);t(this,"zoneID");t(this,"zoneName");this.zoneID=parseInt(e[2],16),this.zoneName=e[3]}}class D extends i{constructor(e){super("ChangePrimaryPlayer",e);t(this,"charID");t(this,"charName");this.charID=parseInt(e[2],16),this.charName=e[3]}get charIDHex(){return this.charID.toString(16).toUpperCase()}}class k extends i{constructor(e){super("AddCombatant",e);t(this,"id");t(this,"name");t(this,"job");t(this,"level");t(this,"ownerID");t(this,"worldID");t(this,"worldName");t(this,"npcNameID");t(this,"npcBaseID");t(this,"currentHP");t(this,"hp");t(this,"currentMP");t(this,"mp");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");this.id=parseInt(e[2],16),this.name=e[3],this.job=parseInt(e[4],16),this.level=parseInt(e[5],16),this.ownerID=parseInt(e[6],16),this.worldID=parseInt(e[7],16),this.worldName=e[8],this.npcNameID=parseInt(e[9]),this.npcBaseID=parseInt(e[10]),this.currentHP=parseInt(e[11]),this.hp=parseInt(e[12]),this.currentMP=parseInt(e[13]),this.mp=parseInt(e[14]),this.x=parseFloat(e[17]),this.y=parseFloat(e[18]),this.z=parseFloat(e[19]),this.heading=parseFloat(e[20])}}class N extends i{constructor(e){super("RemoveCombatant",e);t(this,"id");t(this,"name");t(this,"job");t(this,"level");t(this,"ownerID");t(this,"world");t(this,"npcNameID");t(this,"npcBaseID");t(this,"currentHP");t(this,"hp");t(this,"currentMP");t(this,"mp");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");this.id=parseInt(e[2],16),this.name=e[3],this.job=parseInt(e[4],16),this.level=parseInt(e[5],16),this.ownerID=parseInt(e[6],16),this.world=e[8],this.npcNameID=parseInt(e[9]),this.npcBaseID=parseInt(e[10]),this.currentHP=parseInt(e[11]),this.hp=parseInt(e[12]),this.currentMP=parseInt(e[13]),this.mp=parseInt(e[14]),this.x=parseFloat(e[17]),this.y=parseFloat(e[18]),this.z=parseFloat(e[19]),this.heading=parseFloat(e[20])}}class P extends i{constructor(e){super("PartyChanged",e);t(this,"party");this.party=[];let a=parseInt(e[2]);for(let c=0;c<a;c++)this.party.push(parseInt(e[3+c],16))}}class l extends i{constructor(e){super("PlayerStats",e);t(this,"job");t(this,"strength");t(this,"dexterity");t(this,"vitality");t(this,"intelligence");t(this,"mind");t(this,"piety");t(this,"attackPower");t(this,"directHit");t(this,"criticalHit");t(this,"attakcMagicPotency");t(this,"healingMagicPotency");t(this,"determination");t(this,"skillSpeed");t(this,"spellSpeed");t(this,"tenacity");t(this,"localContentID");this.job=parseInt(e[2],16),this.strength=parseInt(e[3]),this.dexterity=parseInt(e[4]),this.vitality=parseInt(e[5]),this.intelligence=parseInt(e[6]),this.mind=parseInt(e[7]),this.piety=parseInt(e[8]),this.attackPower=parseInt(e[9]),this.directHit=parseInt(e[10]),this.criticalHit=parseInt(e[11]),this.attakcMagicPotency=parseInt(e[12]),this.healingMagicPotency=parseInt(e[13]),this.determination=parseInt(e[14]),this.skillSpeed=parseInt(e[15]),this.spellSpeed=parseInt(e[16]),this.tenacity=parseInt(e[18]),this.localContentID=parseInt(e[19],16)}}class C extends i{constructor(e){super("NetworkStartsCasting",e);t(this,"sourceID");t(this,"sourceName");t(this,"id");t(this,"ability");t(this,"targetID");t(this,"targetName");t(this,"castTime");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");this.sourceID=parseInt(e[2],16),this.sourceName=e[3],this.id=parseInt(e[4],16),this.ability=e[5],this.targetID=parseInt(e[6],16),this.targetName=e[7],this.castTime=parseFloat(e[8]),this.x=parseFloat(e[9]),this.y=parseFloat(e[10]),this.z=parseFloat(e[11]),this.heading=parseFloat(e[12])}}class b extends i{constructor(e){super(e[0]=="22"?"NetworkAOEAbility":"NetworkAbility",e);t(this,"sourceID");t(this,"sourceName");t(this,"id");t(this,"ability");t(this,"targetID");t(this,"targetName");t(this,"effects");t(this,"targetCurrentHP");t(this,"targetMaxHP");t(this,"targetCurrentMP");t(this,"targetMaxMP");t(this,"targetX");t(this,"targetY");t(this,"targetZ");t(this,"targetHeading");t(this,"currentHP");t(this,"maxHP");t(this,"currentMP");t(this,"maxMP");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");t(this,"sequence");t(this,"targetIndex");t(this,"targetCount");t(this,"ownerID");t(this,"ownerName");t(this,"effectDisplayType");t(this,"actionID");t(this,"actionAnimationID");t(this,"animationLockTime");t(this,"rotationHex");this.sourceID=parseInt(e[2],16),this.sourceName=e[3],this.id=parseInt(e[4],16),this.ability=e[5],this.targetID=parseInt(e[6],16),this.targetName=e[7],this.effects=[];for(let a=0;a<8;a++)this.effects[a]={flags:parseInt(e[8+a*2],16),damage:e[9+a*2]};this.targetCurrentHP=parseInt(e[24]),this.targetMaxHP=parseInt(e[25]),this.targetCurrentMP=parseInt(e[26]),this.targetMaxMP=parseInt(e[27]),this.targetX=parseFloat(e[30]),this.targetY=parseFloat(e[31]),this.targetZ=parseFloat(e[32]),this.targetHeading=parseFloat(e[33]),this.currentHP=parseInt(e[34]),this.maxHP=parseInt(e[35]),this.currentMP=parseInt(e[36]),this.maxMP=parseInt(e[37]),this.x=parseFloat(e[40]),this.y=parseFloat(e[41]),this.z=parseFloat(e[42]),this.heading=parseFloat(e[43]),this.sequence=parseInt(e[44],16),this.targetIndex=parseInt(e[45]),this.targetCount=parseInt(e[46]),this.ownerID=parseInt(e[47],16),this.ownerName=e[48],this.effectDisplayType=parseInt(e[49]),this.actionID=parseInt(e[50],16),this.actionAnimationID=parseInt(e[51],16),this.animationLockTime=parseFloat(e[52]),this.rotationHex=parseInt(e[53],16)}}class x extends i{constructor(e){super("NetworkCancelAbility",e);t(this,"sourceID");t(this,"source");t(this,"id");t(this,"name");t(this,"reason");this.sourceID=parseInt(e[2],16),this.source=e[3],this.id=parseInt(e[4],16),this.name=e[5],this.reason=e[6]}}class M extends i{constructor(e){super("NetworkDoT",e);t(this,"id");t(this,"name");t(this,"which");t(this,"effectID");t(this,"damage");t(this,"currentHP");t(this,"maxHP");t(this,"currentMP");t(this,"maxMP");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");t(this,"sourceID");t(this,"sourceName");t(this,"damageType");t(this,"sourceCurrentHP");t(this,"sourceMaxHP");t(this,"sourceCurrentMP");t(this,"sourceMaxMP");t(this,"sourceX");t(this,"sourceY");t(this,"sourceZ");t(this,"sourceHeading");this.id=parseInt(e[2],16),this.name=e[3],this.which=e[4],this.effectID=parseInt(e[5],16),this.damage=parseInt(e[6]),this.currentHP=parseInt(e[7]),this.maxHP=parseInt(e[8]),this.currentMP=parseInt(e[9]),this.maxMP=parseInt(e[10]),this.x=parseFloat(e[13]),this.y=parseFloat(e[14]),this.z=parseFloat(e[15]),this.heading=parseFloat(e[16]),this.sourceID=parseInt(e[17],16),this.sourceName=e[18],this.damageType=parseInt(e[19],16),this.sourceCurrentHP=parseInt(e[20]),this.sourceMaxHP=parseInt(e[21]),this.sourceCurrentMP=parseInt(e[22]),this.sourceMaxMP=parseInt(e[23]),this.sourceX=parseFloat(e[26]),this.sourceY=parseFloat(e[27]),this.sourceZ=parseFloat(e[28]),this.sourceHeading=parseFloat(e[29])}}class F extends i{constructor(e){super("NetworkDeath",e);t(this,"targetID");t(this,"targetName");t(this,"sourceID");t(this,"sourceName");this.targetID=parseInt(e[2],16),this.targetName=e[3],this.sourceID=parseInt(e[4],16),this.sourceName=e[5]}}class E extends i{constructor(e){super("NetworkBuff",e);t(this,"effectID");t(this,"effectName");t(this,"duration");t(this,"sourceID");t(this,"sourceName");t(this,"targetID");t(this,"targetName");t(this,"count");t(this,"targetMaxHP");t(this,"sourceMaxHP");this.effectID=parseInt(e[2],16),this.effectName=e[3],this.duration=parseFloat(e[4]),this.sourceID=parseInt(e[5],16),this.sourceName=e[6],this.targetID=parseInt(e[7],16),this.targetName=e[8],this.count=parseInt(e[9]),this.targetMaxHP=parseInt(e[10]==""?"-1":e[10]),this.sourceMaxHP=parseInt(e[11]==""?"-1":e[11])}}class H extends i{constructor(e){super("NetworkTargetIcon",e);t(this,"targetID");t(this,"targetName");t(this,"id");t(this,"data0");this.targetID=parseInt(e[2],16),this.targetName=e[3],this.id=parseInt(e[6],16),this.data0=parseInt(e[7],16)}}class T extends i{constructor(e){super("NetworkRaidMarker",e);t(this,"operation");t(this,"waymark");t(this,"id");t(this,"name");t(this,"x");t(this,"y");t(this,"z");this.operation=e[2],this.waymark=parseInt(e[3]),this.id=parseInt(e[4],16),this.name=e[5],this.x=parseFloat(e[6]),this.y=parseFloat(e[7]),this.z=parseFloat(e[8])}}class S extends i{constructor(e){super("NetworkTargetMarker",e);t(this,"operation");t(this,"waymark");t(this,"id");t(this,"name");t(this,"targetID");t(this,"targetName");this.operation=e[2],this.waymark=parseInt(e[3]),this.id=parseInt(e[4],16),this.name=e[5],this.targetID=parseInt(e[6],16),this.targetName=e[7]}}class L extends i{constructor(e){super("NetworkBuffRemove",e);t(this,"effectID");t(this,"effectName");t(this,"sourceID");t(this,"sourceName");t(this,"targetID");t(this,"targetName");t(this,"count");this.effectID=parseInt(e[2],16),this.effectName=e[3],this.sourceID=parseInt(e[5],16),this.sourceName=e[6],this.targetID=parseInt(e[7],16),this.targetName=e[8],this.count=parseInt(e[9],16)}}class A extends i{constructor(e){super("NetworkGauge",e);t(this,"id");t(this,"data");this.id=parseInt(e[2],16),this.data=new Uint8Array(16);let a=new DataView(this.data.buffer);for(let c=0;c<4;c++){let h=parseInt(e[3+c]);a.setUint32(c*4,h,!0)}}}class O extends i{constructor(e){super("NetworkActorControl",e);t(this,"instance");t(this,"command");t(this,"data");this.instance=parseInt(e[2],16),this.command=parseInt(e[3],16),this.data=[];for(let a=0;a<4;a++)this.data.push(parseInt(e[4+a],16))}}class z extends i{constructor(e){super("NetworkNameToggle",e);t(this,"id");t(this,"name");t(this,"targetID");t(this,"targetName");t(this,"toggle");this.id=parseInt(e[2],16),this.name=e[3],this.targetID=parseInt(e[4],16),this.targetName=e[5],this.toggle=parseInt(e[6])===1}}class q extends i{constructor(e){super("NetworkTether",e);t(this,"sourceID");t(this,"sourceName");t(this,"targetID");t(this,"targetName");t(this,"id");this.sourceID=parseInt(e[2],16),this.sourceName=e[3],this.targetID=parseInt(e[4],16),this.targetName=e[5],this.id=parseInt(e[8],16)}}class R extends i{constructor(e){super("LimitBreak",e);t(this,"value");t(this,"bars");this.value=parseInt(e[2],16),this.bars=parseInt(e[3])}}class B extends i{constructor(e){super("NetworkActionSync",e);t(this,"id");t(this,"name");t(this,"sequenceID");t(this,"currentHP");t(this,"maxHP");t(this,"currentMP");t(this,"maxMP");t(this,"currentShield");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");this.id=parseInt(e[2],16),this.name=e[3],this.sequenceID=parseInt(e[4],16),this.currentHP=e[5]?parseInt(e[5]):-1,this.maxHP=e[6]?parseInt(e[6]):-1,this.currentMP=e[7]?parseInt(e[7]):-1,this.maxMP=e[8]?parseInt(e[8]):-1,this.currentShield=e[9]?parseInt(e[9]):-1,this.x=parseFloat(e[11]),this.y=parseFloat(e[12]),this.z=parseFloat(e[13]),this.heading=parseFloat(e[14])}}class U extends i{constructor(e){super("NetworkStatusEffects",e);t(this,"targetID");t(this,"targetName");t(this,"jobLevelData");t(this,"currentHP");t(this,"maxHP");t(this,"currentMP");t(this,"maxMP");t(this,"currentShield");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");t(this,"data");this.targetID=parseInt(e[2],16),this.targetName=e[3],this.jobLevelData=parseInt(e[4],16),this.currentHP=parseInt(e[5]),this.maxHP=parseInt(e[6]),this.currentMP=parseInt(e[7]),this.maxMP=parseInt(e[8]),this.currentShield=parseInt(e[9]),this.x=parseFloat(e[11]),this.y=parseFloat(e[12]),this.z=parseFloat(e[13]),this.heading=parseFloat(e[14]),this.data=[];for(let a=0;a<6;a++)this.data.push(parseInt(e[15+a],16))}}class j extends i{constructor(e){super("NetworkUpdateHP",e);t(this,"id");t(this,"name");t(this,"currentHP");t(this,"maxHP");t(this,"currentMP");t(this,"maxMP");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");this.id=parseInt(e[2],16),this.name=e[3],this.currentHP=parseInt(e[4]),this.maxHP=parseInt(e[5]),this.currentMP=parseInt(e[6]),this.maxMP=parseInt(e[7]),this.x=parseFloat(e[10]),this.y=parseFloat(e[11]),this.z=parseFloat(e[12]),this.heading=parseFloat(e[13])}}class G extends i{constructor(e){super("Map",e);t(this,"id");t(this,"regionName");t(this,"placeName");t(this,"placeNameSub");this.id=parseInt(e[2],16),this.regionName=e[3],this.placeName=e[4],this.placeNameSub=e[5]}}class V extends i{constructor(e){super("SystemLogMessage",e);t(this,"instance");t(this,"id");t(this,"params");this.instance=parseInt(e[2],16),this.id=parseInt(e[3],16),this.params=[];for(let a=0;a<3;a++)this.params.push(parseInt(e[4+a],16))}}class W extends i{constructor(e){super("StatusList3",e);t(this,"id");t(this,"name");t(this,"statusList");this.id=parseInt(e[2],16),this.name=e[3],this.statusList=[];for(let a=0;a<e.length-4-1;a++)this.statusList.push(parseInt(e[4+a],16))}}class Y extends i{constructor(e){super("Debug",e);t(this,"message");this.message=e[2]}}class Z extends i{constructor(e){super("PacketDump",e);t(this,"len");t(this,"src");t(this,"dst");t(this,"packetType");t(this,"data");this.len=parseInt(e[2],16),this.src=parseInt(e[3],16),this.dst=parseInt(e[4],16),this.packetType=parseInt(e[5],16)&65535,this.data=new Uint8Array(this.len-16);for(let a=6,c=0;a<e.length-2;a++,c++){const h=parseInt(e[a],16);for(let d=0;d<4;d++)this.data[c*4+d]=h>>d*8&255}}}class _ extends i{constructor(e){super("Version",e);t(this,"message");this.message=e[2]}}let X=class extends i{constructor(e){super("Error",e);t(this,"message");this.message=e[2]}};class J extends i{constructor(e){super("LineRegistration",e);t(this,"id");t(this,"source");t(this,"name");t(this,"version");this.id=parseInt(e[2]),this.source=e[3],this.name=e[4],this.version=e[5]}}class K extends i{constructor(e){super("MapEffect",e);t(this,"instance");t(this,"flags");t(this,"location");t(this,"data0");t(this,"data1");this.instance=parseInt(e[2],16),this.flags=parseInt(e[3],16),this.location=parseInt(e[4],16),this.data0=parseInt(e[5],16),this.data1=parseInt(e[6],16)}}class $ extends i{constructor(e){super("FateDirector",e);t(this,"category");t(this,"unknown");t(this,"id");t(this,"progress");this.category=e[2],this.unknown=parseInt(e[3],16),this.id=parseInt(e[4],16),this.progress=parseInt(e[5],16)}}class Q extends i{constructor(e){super("CEDirector",e);t(this,"popTime");t(this,"timeRemaining");t(this,"unknown");t(this,"ceKey");t(this,"numPlayers");t(this,"status");t(this,"unknown2");t(this,"progress");this.popTime=parseInt(e[2],16),this.timeRemaining=parseInt(e[3],16),this.unknown=parseInt(e[4],16),this.ceKey=parseInt(e[5],16),this.numPlayers=parseInt(e[6],16),this.status=parseInt(e[7],16),this.unknown2=parseInt(e[8],16),this.progress=parseInt(e[9],16)}}class g extends i{constructor(e){super("InCombat",e);t(this,"inACTCombat");t(this,"inGameCombat");t(this,"isACTChanged");t(this,"isGameChanged");this.inACTCombat=parseInt(e[2])===1,this.inGameCombat=parseInt(e[3])===1,this.isACTChanged=parseInt(e[4])===1,this.isGameChanged=parseInt(e[5])===1}}class ee extends i{constructor(e){super("CombatantMemory",e);t(this,"change");t(this,"id");t(this,"data");this.change=e[2],this.id=parseInt(e[3],16),this.data=new Map;for(let a=4;a<e.length-1;a+=2)this.data.set(e[a],e[a+1])}}class te extends i{constructor(e){super("RSVData",e);t(this,"locale");t(this,"unknown");t(this,"key");t(this,"value");this.locale=e[2],this.unknown=parseInt(e[3],16),this.key=e[4],this.value=e[5]}}class se extends i{constructor(e){super("StartsUsingExtra",e);t(this,"sourceID");t(this,"id");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");this.sourceID=parseInt(e[2],16),this.id=parseInt(e[3],16),this.x=parseFloat(e[4]),this.y=parseFloat(e[5]),this.z=parseFloat(e[6]),this.heading=parseFloat(e[7])}}class re extends i{constructor(e){super("AbilityExtra",e);t(this,"sourceID");t(this,"id");t(this,"globalEffectCounter");t(this,"dataFlag");t(this,"x");t(this,"y");t(this,"z");t(this,"heading");t(this,"animationTargetId");this.sourceID=parseInt(e[2],16),this.id=parseInt(e[3],16),this.globalEffectCounter=parseInt(e[4],16),this.dataFlag=parseInt(e[5],16),this.x=parseFloat(e[6]),this.y=parseFloat(e[7]),this.z=parseFloat(e[8]),this.heading=parseFloat(e[9]),this.animationTargetId=parseInt(e[10],16)}}class ae extends i{constructor(e){super("ContentFinderSettings",e);t(this,"zoneID");t(this,"zoneName");t(this,"inContentFinderContent");t(this,"unrestrictedParty");t(this,"minimalItemLevel");t(this,"silenceEcho");t(this,"explorerMode");t(this,"levelSync");this.zoneID=parseInt(e[2],16),this.zoneName=e[3],this.inContentFinderContent=parseInt(e[4])===1,this.unrestrictedParty=parseInt(e[5])===1,this.minimalItemLevel=parseInt(e[6])===1,this.silenceEcho=parseInt(e[7])===1,this.explorerMode=parseInt(e[8])===1,this.levelSync=parseInt(e[9])===1}}class ne extends i{constructor(e){super("NpcYell",e);t(this,"npcId");t(this,"npcNameId");t(this,"npcYellId");this.npcId=parseInt(e[2],16),this.npcNameId=parseInt(e[3],16),this.npcYellId=parseInt(e[4],16)}}class ie extends i{constructor(e){super("BattleTalk2",e);t(this,"npcId");t(this,"instance");t(this,"npcNameId");t(this,"instanceContentTextId");t(this,"displayMs");this.npcId=parseInt(e[2],16),this.instance=parseInt(e[3],16),this.npcNameId=parseInt(e[4],16),this.instanceContentTextId=parseInt(e[5],16),this.displayMs=parseInt(e[6])}}class ce extends i{constructor(e){super("Countdown",e);t(this,"id");t(this,"worldID");t(this,"countdownTime");t(this,"result");t(this,"name");this.id=parseInt(e[2],16),this.worldID=parseInt(e[3],16),this.countdownTime=parseInt(e[4]),this.result=parseInt(e[5],16),this.name=e[6]}}class he extends i{constructor(e){super("CountdownCancel",e);t(this,"id");t(this,"worldID");t(this,"name");this.id=parseInt(e[2],16),this.worldID=parseInt(e[3],16),this.name=e[4]}}class pe extends i{constructor(e){super("ActorMove",e);t(this,"id");t(this,"heading");t(this,"unk1");t(this,"unk2");t(this,"x");t(this,"y");t(this,"z");this.id=parseInt(e[2],16),this.heading=parseFloat(e[3]),this.unk1=parseInt(e[4],16),this.unk2=parseInt(e[5],16),this.x=parseFloat(e[6]),this.y=parseFloat(e[7]),this.z=parseFloat(e[8])}}class ue extends i{constructor(e){super("ActorSetPos",e);t(this,"id");t(this,"heading");t(this,"unk1");t(this,"unk2");t(this,"x");t(this,"y");t(this,"z");this.id=parseInt(e[2],16),this.heading=parseFloat(e[3]),this.unk1=parseInt(e[4],16),this.unk2=parseInt(e[5],16),this.x=parseFloat(e[6]),this.y=parseFloat(e[7]),this.z=parseFloat(e[8])}}class de extends i{constructor(e){super("SpawnNpcExtra",e);t(this,"id");t(this,"parentID");t(this,"tetherID");t(this,"animationState");this.id=parseInt(e[2],16),this.parentID=parseInt(e[3],16),this.tetherID=parseInt(e[4],16),this.animationState=parseInt(e[5],16)}}class oe extends i{constructor(e){super("ActorControlExtra",e);t(this,"id");t(this,"category");t(this,"param1");t(this,"param2");t(this,"param3");t(this,"param4");this.id=parseInt(e[2],16),this.category=parseInt(e[3],16),this.param1=parseInt(e[4],16),this.param2=parseInt(e[5],16),this.param3=parseInt(e[6],16),this.param4=parseInt(e[7],16)}}class Ie extends i{constructor(e){super("ActorControlSelfExtra",e);t(this,"id");t(this,"category");t(this,"param1");t(this,"param2");t(this,"param3");t(this,"param4");t(this,"param5");t(this,"param6");this.id=parseInt(e[2],16),this.category=parseInt(e[3],16),this.param1=parseInt(e[4],16),this.param2=parseInt(e[5],16),this.param3=parseInt(e[6],16),this.param4=parseInt(e[7],16),this.param5=parseInt(e[8],16),this.param6=parseInt(e[9],16)}}class me extends i{constructor(e){super("Unknown",e);t(this,"rawLines");this.rawLines=e}}function Ne(s){switch(parseInt(s[0])){case 0:return new f(s);case 1:return new v(s);case 2:return new D(s);case 3:return new k(s);case 4:return new N(s);case 11:return new P(s);case 12:return new l(s);case 20:return new C(s);case 21:case 22:return new b(s);case 23:return new x(s);case 24:return new M(s);case 25:return new F(s);case 26:return new E(s);case 27:return new H(s);case 28:return new T(s);case 29:return new S(s);case 30:return new L(s);case 31:return new A(s);case 33:return new O(s);case 34:return new z(s);case 35:return new q(s);case 36:return new R(s);case 37:return new B(s);case 38:return new U(s);case 39:return new j(s);case 40:return new G(s);case 41:return new V(s);case 42:return new W(s);case 251:return new Y(s);case 252:return new Z(s);case 253:return new _(s);case 254:return new X(s);case 256:return new J(s);case 257:return new K(s);case 258:return new $(s);case 259:return new Q(s);case 260:return new g(s);case 261:return new ee(s);case 262:return new te(s);case 263:return new se(s);case 264:return new re(s);case 265:return new ae(s);case 266:return new ne(s);case 267:return new ie(s);case 268:return new ce(s);case 269:return new he(s);case 270:return new pe(s);case 271:return new ue(s);case 272:return new de(s);case 273:return new oe(s);case 274:return new Ie(s);default:return new me(s)}}let we=new y;(function(){we.Connect()})(),n.AbilityExtra=re,n.ActorControlExtra=oe,n.ActorControlSelfExtra=Ie,n.ActorMove=pe,n.ActorSetPos=ue,n.AddCombatant=k,n.BattleTalk2=ie,n.CEDirector=Q,n.ChangePrimaryPlayer=D,n.ChangeZone=v,n.CombatantMemory=ee,n.ContentFinderSettings=ae,n.Countdown=ce,n.CountdownCancel=he,n.Debug=Y,n.Error=X,n.FateDirector=$,n.GameLogLine=f,n.InCombat=g,n.LimitBreak=R,n.LineRegistration=J,n.LogLineBase=i,n.MapEffect=K,n.MapLog=G,n.NetowrkStartsCasting=C,n.NetworkAbility=b,n.NetworkActionSync=B,n.NetworkActorControl=O,n.NetworkBuff=E,n.NetworkBuffRemove=L,n.NetworkCancelAbility=x,n.NetworkDeath=F,n.NetworkDoT=M,n.NetworkGauge=A,n.NetworkNameToggle=z,n.NetworkRaidMarker=T,n.NetworkStatusEffects=U,n.NetworkTargetIcon=H,n.NetworkTargetMarker=S,n.NetworkTether=q,n.NetworkUpdateHP=j,n.NpcYell=ne,n.OverlayToolkit=y,n.PacketDump=Z,n.ParseLogLine=Ne,n.PartyList=P,n.PlayerStats=l,n.RSVData=te,n.RemoveCombatant=N,n.SpawnNpcExtra=de,n.StartsUsingExtra=se,n.StatusList3=W,n.SystemLogMessage=V,n.UnknownLogLine=me,n.Version=_,n.default=we,Object.defineProperties(n,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -0,0 +1,46 @@
1
+ import { TypedEventTarget } from './hid.helper';
2
+ export type OverlayTransportTarget = TypedEventTarget<{
3
+ message: CustomEvent<any>;
4
+ connected: Event;
5
+ }>;
6
+ export interface OverlayTransport extends EventTarget {
7
+ get transportType(): string;
8
+ get connected(): boolean;
9
+ sendMessage(message: any): Promise<any>;
10
+ addEventListener(type: "message", listener: (ev: CustomEvent<any>) => void): void;
11
+ addEventListener(type: "connected", listener: (ev: Event) => void): void;
12
+ removeEventListener(type: "message", listener: (ev: CustomEvent<any>) => void): void;
13
+ removeEventListener(type: "connected", listener: (ev: Event) => void): void;
14
+ }
15
+ export interface OverlayCallMessage {
16
+ call: string;
17
+ }
18
+ export interface OverlayEventMessage {
19
+ type: string;
20
+ }
21
+ export interface IOverlayAPI {
22
+ dispatchOverlayEvent(event: OverlayEventMessage): void;
23
+ addOverlayListener(event: string, cb: OverlayEvenetHandler): void;
24
+ removeOverlayListener(event: string, cb: OverlayEvenetHandler): void;
25
+ callOverlayHandler(msg: OverlayCallMessage): Promise<any>;
26
+ startOverlayEvents(): void;
27
+ }
28
+ export type OverlayEvenetHandler = (evt: OverlayEventMessage) => void;
29
+ export declare class OverlayPluginAPI implements IOverlayAPI {
30
+ private transport;
31
+ private subscribers;
32
+ private queue;
33
+ setTransport(transport: OverlayTransport): void;
34
+ constructor(transport?: OverlayTransport | null);
35
+ dispatchOverlayEvent(event: OverlayEventMessage): void;
36
+ addOverlayListener(event: string, cb: OverlayEvenetHandler): void;
37
+ removeOverlayListener(event: string, cb: OverlayEvenetHandler): void;
38
+ callOverlayHandler(msg: OverlayCallMessage): Promise<any>;
39
+ /**
40
+ * Start overlay events
41
+ *
42
+ * Must be called after any listeners are added.
43
+ */
44
+ startOverlayEvents(): void;
45
+ private onTransportConnected;
46
+ }
@@ -0,0 +1,12 @@
1
+ import { OverlayCallMessage } from './overlay';
2
+ export declare const getSortedPartyList: () => OverlayCallMessage;
3
+ export declare const getFFXIVCSAddonSlow: (name: string) => OverlayCallMessage;
4
+ export declare const getLanguage: () => OverlayCallMessage;
5
+ export declare const getVersion: () => OverlayCallMessage;
6
+ export declare const getCombatants: () => OverlayCallMessage;
7
+ export declare const saveData: (key: string, data: any) => OverlayCallMessage;
8
+ export declare const loadData: (key: string) => OverlayCallMessage;
9
+ export declare const say: (text: string) => OverlayCallMessage;
10
+ export declare const playSound: (file: string) => OverlayCallMessage;
11
+ export declare const broadcast: (source: string, message: any) => OverlayCallMessage;
12
+ export declare const openWebsiteWithWS: (url: string) => OverlayCallMessage;
@@ -0,0 +1,10 @@
1
+ import { OverlayTransport, OverlayTransportTarget } from './overlay';
2
+ declare const OverlayPluginCefTransport_base: OverlayTransportTarget;
3
+ export declare class OverlayPluginCefTransport extends OverlayPluginCefTransport_base implements OverlayTransport {
4
+ connected: boolean;
5
+ get transportType(): string;
6
+ sendMessage(message: any): Promise<any>;
7
+ private evtHandlerWrapper;
8
+ waitForApi(): void;
9
+ }
10
+ export {};
@@ -0,0 +1,19 @@
1
+ import { OverlayTransport, OverlayTransportTarget } from './overlay';
2
+ declare const OverlayPluginWebsocketTransport_base: OverlayTransportTarget;
3
+ export declare class OverlayPluginWebsocketTransport extends OverlayPluginWebsocketTransport_base implements OverlayTransport {
4
+ ws: WebSocket;
5
+ sequence: number;
6
+ responseResolvers: Map<number, (response: any) => void>;
7
+ evtHandler: (message: any) => void;
8
+ connected: boolean;
9
+ constructor(url: string);
10
+ connect(ws: WebSocket): void;
11
+ onError(e: Event): void;
12
+ onOpen(): void;
13
+ onMessage(ev: MessageEvent): void;
14
+ onClosed(ev: CloseEvent): void;
15
+ get transportType(): string;
16
+ sendMessage(message: any): Promise<any>;
17
+ set eventHandler(handler: (message: any) => void);
18
+ }
19
+ export {};
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Packet filter
3
+ */
4
+ export interface PacketFilter {
5
+ /**
6
+ * Packet direction, true = to server, false = to client
7
+ */
8
+ direction?: boolean;
9
+ /**
10
+ * Opcode
11
+ */
12
+ opcode?: number;
13
+ /**
14
+ * Packet length
15
+ */
16
+ length?: number;
17
+ }
18
+ /**
19
+ * Shared packet information
20
+ */
21
+ export interface PacketInfo {
22
+ /**
23
+ * Event type (must be "otk::packet")
24
+ */
25
+ type: string;
26
+ /**
27
+ * Subscription name
28
+ */
29
+ name: string;
30
+ /**
31
+ * Packet direction, true = to server, false = to client
32
+ */
33
+ dir: boolean;
34
+ /**
35
+ * Connection
36
+ */
37
+ conn: string;
38
+ /**
39
+ * Packet timestamp
40
+ */
41
+ epoch: number;
42
+ /**
43
+ * Packet opcode
44
+ */
45
+ opcode: number;
46
+ /**
47
+ * Packet length
48
+ */
49
+ length: number;
50
+ }
51
+ /**
52
+ * Packet event from overlay plugin
53
+ */
54
+ export interface PacketEvent extends PacketInfo {
55
+ /**
56
+ * Packet data, encoded as base64
57
+ */
58
+ msg: string;
59
+ }
60
+ export interface PacketSubscribeRequest {
61
+ call: "otk::packet";
62
+ action: "subscribe";
63
+ name: string;
64
+ filters: PacketFilter[];
65
+ }
66
+ export interface PacketSubscribeResponse {
67
+ name?: string;
68
+ error?: string;
69
+ }
70
+ export interface PacketUnsubscribeRequest {
71
+ call: "otk::packet";
72
+ action: "unsubscribe";
73
+ name: string;
74
+ }
75
+ export interface Packet extends PacketInfo {
76
+ /**
77
+ * Packet data
78
+ */
79
+ data: Uint8Array;
80
+ }
81
+ export type PacketHandler = (packet: Packet) => void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "overlay-toolkit",
3
3
  "private": false,
4
- "version": "0.10.0",
4
+ "version": "0.10.1",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist"