From 6fa0f0600a912e1cbb9860768f30b407bd02dc41 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 27 Jun 2024 02:42:45 +0100 Subject: [PATCH] app: add a function for direct6 downloads --- app/bun.lockb | Bin 141764 -> 141772 bytes .../{index-DtKEzot0.js => index-B75594vm.js} | 18 +-- app/dist/index.html | 2 +- app/package.json | 74 +++++----- app/src/lib/Util/functions.ts | 128 ++++++++++++++++++ app/src/lib/Util/interfaces.ts | 9 ++ src/browser/app.cxx | 1 + 7 files changed, 185 insertions(+), 47 deletions(-) rename app/dist/assets/{index-DtKEzot0.js => index-B75594vm.js} (52%) diff --git a/app/bun.lockb b/app/bun.lockb index 940848c340163f683ba0818c34fff33aba488e29..8badd4fed0e0c8bac59f7c14593af9918c0482de 100755 GIT binary patch delta 623 zcmXw#zb`{k6vyvD=_@L2{V0n>7{y{~qKU~ss2@T7tXjltQ#2My6Os4>Y%VfnB5|FELD%B8Biv6?rT6YVD5{G^MbFz9_%sf zSgH{@2k?v~aZO+g%rllrISY-KJO#CBC8N}5qqP2Ap-@i>mfz|J5XZk!qS*NU%+6KCPlzn(Fh)R$9SM-W59I6g7^S}-B(CzwGpC* zB`bJDv9eI}1cHS}qi^7Uvg5Fm{mpMCv)5D2|4{QEj!}F+RZdYNo0uS_aHv)!$A8@b ze&GgUQf3;#ui~ckU6#z`G)f-zA%__dGcw);K9ccSam{d};^uVN!isrm8EEYyITpkP zz+ZKv)S|c+)bHY!bcR=?r4@ue2J@Ad#f8A9V2+HqHt-;r?`B1pup+i9tuRys55n(b zOjYndIks@-*VBb8i?d{|8?FjAan6bB0bhf8 z$F{g$umk2Dc~YVJce~|(AZ(|YqY+=Qgz^H(7cT419ZDN~U%dZOX9{FS?}0bS3i70Y tA4H#XP#|p>StFEWvN4dROrW0SDqYj-dy_5{{g?kNzniR diff --git a/app/dist/assets/index-DtKEzot0.js b/app/dist/assets/index-B75594vm.js similarity index 52% rename from app/dist/assets/index-DtKEzot0.js rename to app/dist/assets/index-B75594vm.js index 2309f3b..f84c159 100644 --- a/app/dist/assets/index-DtKEzot0.js +++ b/app/dist/assets/index-B75594vm.js @@ -1,11 +1,11 @@ -var Xt=Object.defineProperty;var zt=(t,e,n)=>e in t?Xt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var We=(t,e,n)=>(zt(t,typeof e!="symbol"?e+"":e,n),n);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const c of l.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&r(c)}).observe(document,{childList:!0,subtree:!0});function n(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(o){if(o.ep)return;o.ep=!0;const l=n(o);fetch(o.href,l)}})();function N(){}function Ft(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}function Et(t){return t()}function dt(){return Object.create(null)}function re(t){t.forEach(Et)}function Nt(t){return typeof t=="function"}function oe(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let De;function $t(t,e){return t===e?!0:(De||(De=document.createElement("a")),De.href=e,t===De.href)}function Vt(t){return Object.keys(t).length===0}function It(t,...e){if(t==null){for(const r of e)r(void 0);return N}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function K(t){let e;return It(t,n=>e=n)(),e}function F(t,e,n){t.$$.on_destroy.push(It(e,n))}function I(t,e,n){return t.set(n),e}function h(t,e){t.appendChild(e)}function S(t,e,n){t.insertBefore(e,n||null)}function v(t){t.parentNode&&t.parentNode.removeChild(t)}function Oe(t,e){for(let n=0;nt.removeEventListener(e,n,r)}function _(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Wt(t){return Array.from(t.childNodes)}function ie(t,e){e=""+e,t.data!==e&&(t.data=e)}function ke(t,e){t.value=e??""}function ft(t,e,n){for(let r=0;r{const o=t.$$.callbacks[e];if(o){const l=Yt(e,n,{cancelable:r});return o.slice().forEach(c=>{c.call(t,l)}),!l.defaultPrevented}return!0}}const Pe=[],X=[];let Re=[];const Ke=[],en=Promise.resolve();let Qe=!1;function tn(){Qe||(Qe=!0,en.then(ot))}function Be(t){Re.push(t)}function Ne(t){Ke.push(t)}const Ze=new Set;let xe=0;function ot(){if(xe!==0)return;const t=Ee;do{try{for(;xet.indexOf(r)===-1?e.push(r):n.push(r)),n.forEach(r=>r()),Re=e}const qe=new Set;let we;function ve(){we={r:0,c:[],p:we}}function Se(){we.r||re(we.c),we=we.p}function H(t,e){t&&t.i&&(qe.delete(t),t.i(e))}function D(t,e,n,r){if(t&&t.o){if(qe.has(t))return;qe.add(t),we.c.push(()=>{qe.delete(t),r&&(n&&t.d(1),r())}),t.o(e)}else r&&r()}function Te(t,e){const n=e.token={};function r(o,l,c,i){if(e.token!==n)return;e.resolved=i;let u=e.ctx;c!==void 0&&(u=u.slice(),u[c]=i);const a=o&&(e.current=o)(u);let d=!1;e.block&&(e.blocks?e.blocks.forEach((f,p)=>{p!==l&&f&&(ve(),D(f,1,1,()=>{e.blocks[p]===f&&(e.blocks[p]=null)}),Se())}):e.block.d(1),a.c(),H(a,1),a.m(e.mount(),e.anchor),d=!0),e.block=a,e.blocks&&(e.blocks[l]=a),d&&ot()}if(Ft(t)){const o=He();if(t.then(l=>{he(o),r(e.then,1,e.value,l),he(null)},l=>{if(he(o),r(e.catch,2,e.error,l),he(null),!e.hasCatch)throw l}),e.current!==e.pending)return r(e.pending,0),!0}else{if(e.current!==e.then)return r(e.then,1,e.value,t),!0;e.resolved=t}}function lt(t,e,n){const r=e.slice(),{resolved:o}=t;t.current===t.then&&(r[t.value]=o),t.current===t.catch&&(r[t.error]=o),t.block.p(r,n)}function pe(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function Ie(t,e,n){const r=t.$$.props[e];r!==void 0&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function ne(t){t&&t.c()}function ee(t,e,n){const{fragment:r,after_update:o}=t.$$;r&&r.m(e,n),Be(()=>{const l=t.$$.on_mount.map(Et).filter(Nt);t.$$.on_destroy?t.$$.on_destroy.push(...l):re(l),t.$$.on_mount=[]}),o.forEach(Be)}function te(t,e){const n=t.$$;n.fragment!==null&&(sn(n.after_update),re(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function rn(t,e){t.$$.dirty[0]===-1&&(Pe.push(t),tn(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const g=k.length?k[0]:p;return a.ctx&&o(a.ctx[f],a.ctx[f]=g)&&(!a.skip_bound&&a.bound[f]&&a.bound[f](g),d&&rn(t,f)),p}):[],a.update(),d=!0,re(a.before_update),a.fragment=r?r(a.ctx):!1,e.target){if(e.hydrate){const f=Wt(e.target);a.fragment&&a.fragment.l(f),f.forEach(v)}else a.fragment&&a.fragment.c();e.intro&&H(t.$$.fragment),ee(t,e.target,e.anchor),ot()}he(u)}class ce{constructor(){We(this,"$$");We(this,"$$set")}$destroy(){te(this,1),this.$destroy=N}$on(e,n){if(!Nt(n))return N;const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{const o=r.indexOf(n);o!==-1&&r.splice(o,1)}}$set(e){this.$$set&&!Vt(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const on="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(on);const Ce=[];function jt(t,e){return{subscribe:Y(t,e).subscribe}}function Y(t,e=N){let n;const r=new Set;function o(i){if(oe(t,i)&&(t=i,n)){const u=!Ce.length;for(const a of r)a[1](),Ce.push(a,t);if(u){for(let a=0;a{r.delete(a),r.size===0&&n&&(n(),n=null)}}return{set:o,update:l,subscribe:c}}function Ot(t){if(t.ok)return t.value;throw t.error}var Q=(t=>(t[t.rs3=0]="rs3",t[t.osrs=1]="osrs",t))(Q||{}),de=(t=>(t[t.runeLite=0]="runeLite",t[t.hdos=1]="hdos",t[t.rs3=2]="rs3",t))(de||{});const ln={use_dark_theme:!0,flatpak_rich_presence:!1,rs_config_uri:"",runelite_custom_jar:"",runelite_use_custom_jar:!1,selected_account:"",selected_characters:new Map,selected_game_accounts:new Map,selected_game_index:1,selected_client_index:1},Ht=jt("https://bolt-internal"),cn=jt("1fddee4e-b100-4f4e-b2b0-097f9088f9d2"),ct=Y(),ze=Y(""),U=Y({...ln}),ye=Y(new Map),be=Y(!1),fe=Y(),et=Y(),Le=Y([]),Fe=Y({}),it=Y([]),tt=Y(""),nt=Y(""),st=Y(""),W=Y(!1),Je=Y(new Map),V=Y({game:Q.osrs,client:de.runeLite}),Ge=Y(!1);function an(){se.use_dark_theme==!1&&document.documentElement.classList.remove("dark")}function un(t,e){e&&t.win.close(),it.update(n=>(n.splice(ut.indexOf(t),1),n))}function At(){if(ue&&ue.win&&!ue.win.closed)ue.win.focus();else if(ue&&ue.win&&ue.win.closed||ue){const t=Ut(),e=pn();fn({origin:atob(Z.origin),redirect:atob(Z.redirect),authMethod:"",loginType:"",clientid:atob(Z.clientid),flow:"launcher",pkceState:t,pkceCodeVerifier:e}).then(n=>{const r=window.open(n,"","width=480,height=720");Fe.set({state:t,verifier:e,win:r})})}}function dn(){const t=new URLSearchParams(window.location.search);ze.set(t.get("platform")),tt.set(t.get("rs3_linux_installed_hash")),nt.set(t.get("runelite_installed_id")),st.set(t.get("hdos_installed_version"));const e=t.get("plugins");e!==null?(be.set(!0),fe.set(JSON.parse(e))):be.set(!1);const n=t.get("credentials");if(n)try{JSON.parse(n).forEach(l=>{ye.update(c=>(c.set(l.sub,l),c))})}catch(o){G(`Couldn't parse credentials file: ${o}`,!1)}const r=t.get("config");if(r)try{const o=JSON.parse(r);U.set(o),U.update(l=>(l.selected_game_accounts?(l.selected_characters=new Map(Object.entries(l.selected_game_accounts)),delete l.selected_game_accounts):l.selected_characters&&(l.selected_characters=new Map(Object.entries(l.selected_characters))),l))}catch(o){G(`Couldn't parse config file: ${o}`,!1)}}async function Dt(t,e,n){return new Promise(r=>{if(t.expiry-Date.now()<3e4){const o=new URLSearchParams({grant_type:"refresh_token",client_id:n,refresh_token:t.refresh_token}),l=new XMLHttpRequest;l.onreadystatechange=()=>{if(l.readyState==4)if(l.status==200){const c=qt(l.response),i=Ot(c);i?(t.access_token=i.access_token,t.expiry=i.expiry,t.id_token=i.id_token,t.login_provider=i.login_provider,t.refresh_token=i.refresh_token,i.session_id&&(t.session_id=i.session_id),t.sub=i.sub,r(null)):r(0)}else r(l.status)},l.onerror=()=>{r(0)},l.open("POST",e,!0),l.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),l.setRequestHeader("Accept","application/json"),l.send(o)}else r(null)})}function qt(t){const e=JSON.parse(t),n=e.id_token.split(".");if(n.length!==3){const l=`Malformed id_token: ${n.length} sections, expected 3`;return G(l,!1),{ok:!1,error:new Error(l)}}const r=JSON.parse(atob(n[0]));if(r.typ!=="JWT"){const l=`Bad id_token header: typ ${r.typ}, expected JWT`;return G(l,!1),{ok:!1,error:new Error(l)}}const o=JSON.parse(atob(n[1]));return{ok:!0,value:{access_token:e.access_token,id_token:e.id_token,refresh_token:e.refresh_token,sub:o.sub,login_provider:o.login_provider||null,expiry:Date.now()+e.expires_in*1e3,session_id:e.session_id}}}async function fn(t){const e=new TextEncoder().encode(t.pkceCodeVerifier),n=await crypto.subtle.digest("SHA-256",e);let r="";const o=new Uint8Array(n);for(let c=0;cMath.round(o*(n-0)/255+0)).map(o=>e[o]).join("")}async function Bt(t,e,n){return new Promise(r=>{const o=new XMLHttpRequest;o.onreadystatechange=()=>{o.readyState==4&&(o.status==200?n.then(l=>{if(typeof l!="number"){const c={id:l.id,userId:l.userId,displayName:l.displayName,suffix:l.suffix,characters:new Map};B(`Successfully added login for ${c.displayName}`),JSON.parse(o.response).forEach(i=>{c.characters.set(i.accountId,{accountId:i.accountId,displayName:i.displayName,userHash:i.userHash})}),bn(c),r(!0)}else G(`Error getting account info: ${l}`,!1),r(!1)}):(G(`Error: from ${e}: ${o.status}: ${o.response}`,!1),r(!1)))},o.open("GET",e,!0),o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Authorization","Bearer ".concat(t.session_id)),o.send()})}async function pt(t,e){return await _n(t,e)}async function _n(t,e){const n=Ut(),r=crypto.randomUUID(),o=atob(Z.origin).concat("/oauth2/auth?").concat(new URLSearchParams({id_token_hint:e.id_token,nonce:btoa(r),prompt:"consent",redirect_uri:"http://localhost",response_type:"id_token code",state:n,client_id:K(cn),scope:"openid offline"}).toString()),l=hn(e);return t?(t.location.href=o,it.update(c=>(c.push({state:n,nonce:r,creds:e,win:t,account_info_promise:l}),c)),!1):e.session_id?await Bt(e,atob(Z.auth_api).concat("/accounts"),l):(G("Rejecting stored credentials with missing session_id",!1),!1)}function hn(t){return new Promise(e=>{const n=`${atob(Z.api)}/users/${t.sub}/displayName`,r=new XMLHttpRequest;r.onreadystatechange=()=>{r.readyState==4&&(r.status==200?e(JSON.parse(r.response)):e(r.status))},r.open("GET",n,!0),r.setRequestHeader("Authorization","Bearer ".concat(t.access_token)),r.send()})}function bn(t){const e=()=>{V.update(n=>{n.account=t;const[r]=t.characters.keys();return n.character=t.characters.get(r),me.size>0&&(n.credentials=me.get(t.userId)),n})};Je.update(n=>(n.set(t.userId,t),n)),Xe.account&&se.selected_account?t.userId==se.selected_account&&e():Xe.account||e(),Fe.set({})}function gn(t,e,n){return new Promise(r=>{const o=new XMLHttpRequest;o.open("POST",e,!0),o.onreadystatechange=()=>{o.readyState==4&&r(o.status)},o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(new URLSearchParams({token:t,client_id:n}))})}async function Me(){const t=new XMLHttpRequest;t.open("POST","/save-credentials",!0),t.setRequestHeader("Content-Type","application/json"),t.onreadystatechange=()=>{t.readyState==4&&B(`Save-credentials status: ${t.responseText.trim()}`)},V.update(n=>{var r;return n.credentials=me.get((r=Xe.account)==null?void 0:r.userId),n});const e=[];me.forEach(n=>{e.push(n)}),t.send(JSON.stringify(e))}function mn(t,e,n){$e();const r=(i,u)=>{const a=new XMLHttpRequest,d={};i&&(d.hash=i),t&&(d.jx_session_id=t),e&&(d.jx_character_id=e),n&&(d.jx_display_name=n),se.rs_plugin_loader&&(d.plugin_loader="1"),se.rs_config_uri?d.config_uri=se.rs_config_uri:d.config_uri=atob(Z.default_config_uri),a.open("POST","/launch-rs3-deb?".concat(new URLSearchParams(d).toString()),!0),a.onreadystatechange=()=>{a.readyState==4&&(B(`Game launch status: '${a.responseText.trim()}'`),a.status==200&&i&&tt.set(i))},a.send(u)},o=new XMLHttpRequest,l=atob(Z.content_url),c=l.concat("dists/trusty/non-free/binary-amd64/Packages");o.open("GET",c,!0),o.onreadystatechange=()=>{if(o.readyState==4&&o.status==200){const i=Object.fromEntries(o.response.split(` -`).map(u=>u.split(": ")));if(!i.Filename||!i.Size){G(`Could not parse package data from URL: ${c}`,!1),r();return}if(i.SHA256!==K(tt)){B("Downloading RS3 client...");const u=new XMLHttpRequest;u.open("GET",l.concat(i.Filename),!0),u.responseType="arraybuffer",u.onprogress=a=>{a.loaded&&Le.update(d=>(d[0].text=`Downloading RS3 client... ${(Math.round(1e3*a.loaded/a.total)/10).toFixed(1)}%`,d))},u.onreadystatechange=()=>{u.readyState==4&&u.status==200&&r(i.SHA256,u.response)},u.onerror=()=>{G(`Error downloading game client: from ${c}: non-http error`,!1),r()},u.send()}else B("Latest client is already installed"),r()}},o.onerror=()=>{G(`Error: from ${c}: non-http error`,!1),r()},o.send()}function Jt(t,e,n,r){$e();const o=r?"/launch-runelite-jar-configure?":"/launch-runelite-jar?",l=(u,a,d)=>{const f=new XMLHttpRequest,p={};u&&(p.id=u),d&&(p.jar_path=d),t&&(p.jx_session_id=t),e&&(p.jx_character_id=e),n&&(p.jx_display_name=n),se.flatpak_rich_presence&&(p.flatpak_rich_presence=""),f.open(a?"POST":"GET",o.concat(new URLSearchParams(p).toString()),!0),f.onreadystatechange=()=>{f.readyState==4&&(B(`Game launch status: '${f.responseText.trim()}'`),f.status==200&&u&&nt.set(u))},f.send(a)};if(se.runelite_use_custom_jar){l(null,null,se.runelite_custom_jar);return}const c=new XMLHttpRequest,i="https://api.github.com/repos/runelite/launcher/releases";c.open("GET",i,!0),c.onreadystatechange=()=>{if(c.readyState==4)if(c.status==200){const u=JSON.parse(c.responseText).map(a=>a.assets).flat().find(a=>a.name.toLowerCase()=="runelite.jar");if(u.id!=K(nt)){B("Downloading RuneLite...");const a=new XMLHttpRequest;a.open("GET",u.browser_download_url,!0),a.responseType="arraybuffer",a.onreadystatechange=()=>{a.readyState==4&&(a.status==200?l(u.id,a.response):G(`Error downloading from ${u.url}: ${a.status}: ${a.responseText}`,!1))},a.onprogress=d=>{d.loaded&&d.lengthComputable&&Le.update(f=>(f[0].text=`Downloading RuneLite... ${(Math.round(1e3*d.loaded/d.total)/10).toFixed(1)}%`,f))},a.send()}else B("Latest JAR is already installed"),l()}else G(`Error from ${i}: ${c.status}: ${c.responseText}`,!1)},c.send()}function kn(t,e,n){return Jt(t,e,n,!1)}function wn(t,e,n){return Jt(t,e,n,!0)}function yn(t,e,n){$e();const r=(c,i)=>{const u=new XMLHttpRequest,a={};c&&(a.version=c),t&&(a.jx_session_id=t),e&&(a.jx_character_id=e),n&&(a.jx_display_name=n),u.open("POST","/launch-hdos-jar?".concat(new URLSearchParams(a).toString()),!0),u.onreadystatechange=()=>{u.readyState==4&&(B(`Game launch status: '${u.responseText.trim()}'`),u.status==200&&c&&st.set(c))},u.send(i)},o=new XMLHttpRequest,l="https://cdn.hdos.dev/client/getdown.txt";o.open("GET",l,!0),o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const c=o.responseText.match(/^launcher\.version *= *(.*?)$/m);if(c&&c.length>=2){const i=c[1];if(i!==K(st)){const u=`https://cdn.hdos.dev/launcher/v${i}/hdos-launcher.jar`;B("Downloading HDOS...");const a=new XMLHttpRequest;a.open("GET",u,!0),a.responseType="arraybuffer",a.onreadystatechange=()=>{if(a.readyState==4)if(a.status==200)r(i,a.response);else{const d=JSON.parse(o.responseText).map(f=>f.assets).flat().find(f=>f.name.toLowerCase()=="runelite.jar");G(`Error downloading from ${d.url}: ${a.status}: ${a.responseText}`,!1)}},a.onprogress=d=>{d.loaded&&d.lengthComputable&&Le.update(f=>(f[0].text=`Downloading HDOS... ${(Math.round(1e3*d.loaded/d.total)/10).toFixed(1)}%`,f))},a.send()}else B("Latest JAR is already installed"),r()}else B("Couldn't parse latest launcher version"),r()}else G(`Error from ${l}: ${o.status}: ${o.responseText}`,!1)},o.send()}let Ye=!1;function $e(){var t;if(K(W)&&!Ye){Ye=!0;const e=new XMLHttpRequest;e.open("POST","/save-config",!0),e.onreadystatechange=()=>{e.readyState==4&&(B(`Save config status: '${e.responseText.trim()}'`),e.status==200&&W.set(!1),Ye=!1)},e.setRequestHeader("Content-Type","application/json");const n={};(t=se.selected_characters)==null||t.forEach((l,c)=>{n[c]=l});const r={};Object.assign(r,se),r.selected_characters=n;const o=JSON.stringify(r,null,4);e.send(o)}}function Gt(){return new Promise((t,e)=>{const n=new XMLHttpRequest,r=K(Ht).concat("/list-game-clients");n.open("GET",r,!0),n.onreadystatechange=()=>{if(n.readyState==4)if(n.status==200&&n.getResponseHeader("content-type")==="application/json"){const o=JSON.parse(n.responseText);t(Object.keys(o).map(l=>({uid:l,identity:o[l].identity||null})))}else e(`error (${n.responseText})`)},n.send()})}function vn(){const t=new XMLHttpRequest;t.open("POST","/save-plugin-config",!0),t.setRequestHeader("Content-Type","application/json"),t.onreadystatechange=()=>{t.readyState==4&&B(`Save-plugin-config status: ${t.responseText.trim()}`)},t.send(JSON.stringify(K(fe)))}function _t(t,e,n){const r=t.slice();return r[22]=e[n],r}function ht(t){let e,n=t[22][1].displayName+"",r,o,l;return{c(){e=b("option"),r=J(n),_(e,"data-id",o=t[22][1].userId),_(e,"class","dark:bg-slate-900"),e.__value=l=t[22][1].displayName,ke(e,e.__value)},m(c,i){S(c,e,i),h(e,r)},p(c,i){i&4&&n!==(n=c[22][1].displayName+"")&&ie(r,n),i&4&&o!==(o=c[22][1].userId)&&_(e,"data-id",o),i&4&&l!==(l=c[22][1].displayName)&&(e.__value=l,ke(e,e.__value))},d(c){c&&v(e)}}}function Sn(t){let e,n,r,o,l,c,i,u,a,d=pe(t[2]),f=[];for(let p=0;pn(13,r=m)),F(t,ye,m=>n(14,o=m)),F(t,Je,m=>n(2,l=m)),F(t,U,m=>n(15,c=m));let{showAccountDropdown:i}=e,{hoverAccountButton:u}=e;const a=atob(Z.origin),d=atob(Z.clientid),f=a.concat("/oauth2/token"),p=a.concat("/oauth2/revoke");let k=!1,g;function E(m){u||m.button===0&&i&&!k&&n(5,i=!1)}function R(){var q;if(g.options.length==0){B("Logout unsuccessful: no account selected");return}let m=r.credentials;r.account&&(l.delete((q=r.account)==null?void 0:q.userId),Je.set(l));const P=g.selectedIndex;P>0?n(1,g.selectedIndex=P-1,g):P==0&&l.size>0?n(1,g.selectedIndex=P+1,g):(delete r.account,delete r.character,delete r.credentials),L(),m&&Dt(m,f,d).then(O=>{O===null?gn(m.access_token,p,d).then($=>{$===200?(B("Successful logout"),C(m)):G(`Logout unsuccessful: status ${$}`,!1)}):O===400||O===401?(B("Logout unsuccessful: credentials are invalid, so discarding them anyway"),m&&C(m)):G("Logout unsuccessful: unable to verify credentials due to a network error",!1)})}function C(m){o.delete(m.sub),Me()}function L(){var P;W.set(!0);const m=g[g.selectedIndex].getAttribute("data-id");if(I(V,r.account=l.get(m),r),I(U,c.selected_account=m,c),I(V,r.credentials=o.get((P=r.account)==null?void 0:P.userId),r),r.account&&r.account.characters){const q=document.getElementById("character_select");q.selectedIndex=0;const[O]=r.account.characters.keys();I(V,r.character=r.account.characters.get(O),r)}}addEventListener("mousedown",E),Ae(()=>{var P;let m=0;l.forEach(q=>{var O;q.displayName==((O=r.account)==null?void 0:O.displayName)&&n(1,g.selectedIndex=m,g),m++}),I(V,r.credentials=o.get((P=r.account)==null?void 0:P.userId),r)}),rt(()=>{removeEventListener("mousedown",E)});function y(m){X[m?"unshift":"push"](()=>{g=m,n(1,g)})}const x=()=>{L()},T=()=>{At()},A=()=>{R()},z=()=>{n(0,k=!0)},w=()=>{n(0,k=!1)};return t.$$set=m=>{"showAccountDropdown"in m&&n(5,i=m.showAccountDropdown),"hoverAccountButton"in m&&n(6,u=m.hoverAccountButton)},[k,g,l,R,L,i,u,y,x,T,A,z,w]}class xn extends ce{constructor(e){super(),le(this,e,Ln,Sn,oe,{showAccountDropdown:5,hoverAccountButton:6})}}function Cn(t){let e;return{c(){e=J("Log In")},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function Pn(t){var r;let e=((r=t[6].account)==null?void 0:r.displayName)+"",n;return{c(){n=J(e)},m(o,l){S(o,n,l)},p(o,l){var c;l&64&&e!==(e=((c=o[6].account)==null?void 0:c.displayName)+"")&&ie(n,e)},d(o){o&&v(n)}}}function bt(t){let e,n,r,o;function l(i){t[20](i)}let c={hoverAccountButton:t[2]};return t[1]!==void 0&&(c.showAccountDropdown=t[1]),n=new xn({props:c}),X.push(()=>Ie(n,"showAccountDropdown",l)),{c(){e=b("div"),ne(n.$$.fragment),_(e,"class","absolute right-2 top-[72px]")},m(i,u){S(i,e,u),ee(n,e,null),o=!0},p(i,u){const a={};u&4&&(a.hoverAccountButton=i[2]),!r&&u&2&&(r=!0,a.showAccountDropdown=i[1],Ne(()=>r=!1)),n.$set(a)},i(i){o||(H(n.$$.fragment,i),o=!0)},o(i){D(n.$$.fragment,i),o=!1},d(i){i&&v(e),te(n)}}}function Rn(t){let e,n,r,o,l,c,i,u,a,d,f,p,k,g,E,R;function C(T,A){return T[6].account?Pn:Cn}let L=C(t),y=L(t),x=t[1]&&bt(t);return{c(){e=b("div"),n=b("div"),r=b("button"),r.textContent="RS3",o=M(),l=b("button"),l.textContent="OSRS",c=M(),i=b("div"),u=b("button"),u.innerHTML='Change Theme',a=M(),d=b("button"),d.innerHTML='Settings',f=M(),p=b("button"),y.c(),k=M(),x&&x.c(),_(r,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),_(l,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 bg-blue-500 p-2 text-black duration-200 hover:opacity-75"),_(n,"class","m-3 ml-9 font-bold"),_(u,"class","my-3 h-10 w-10 rounded-full bg-blue-500 p-2 duration-200 hover:rotate-45 hover:opacity-75"),_(d,"class","m-3 h-10 w-10 rounded-full bg-blue-500 p-2 duration-200 hover:rotate-45 hover:opacity-75"),_(p,"class","m-2 w-48 rounded-lg border-2 border-slate-300 bg-inherit p-2 text-center font-bold text-black duration-200 hover:opacity-75 dark:border-slate-800 dark:text-slate-50"),_(i,"class","ml-auto flex"),_(e,"class","fixed top-0 flex h-16 w-screen border-b-2 border-slate-300 bg-slate-100 duration-200 dark:border-slate-800 dark:bg-slate-900")},m(T,A){S(T,e,A),h(e,n),h(n,r),t[10](r),h(n,o),h(n,l),t[12](l),h(e,c),h(e,i),h(i,u),h(i,a),h(i,d),h(i,f),h(i,p),y.m(p,null),t[16](p),h(e,k),x&&x.m(e,null),g=!0,E||(R=[j(r,"click",t[11]),j(l,"click",t[13]),j(u,"click",t[14]),j(d,"click",t[15]),j(p,"mouseenter",t[17]),j(p,"mouseleave",t[18]),j(p,"click",t[19])],E=!0)},p(T,[A]){L===(L=C(T))&&y?y.p(T,A):(y.d(1),y=L(T),y&&(y.c(),y.m(p,null))),T[1]?x?(x.p(T,A),A&2&&H(x,1)):(x=bt(T),x.c(),H(x,1),x.m(e,null)):x&&(ve(),D(x,1,1,()=>{x=null}),Se())},i(T){g||(H(x),g=!0)},o(T){D(x),g=!1},d(T){T&&v(e),t[10](null),t[12](null),y.d(),t[16](null),x&&x.d(),E=!1,re(R)}}}function Tn(t,e,n){let r,o,l;F(t,U,P=>n(21,r=P)),F(t,W,P=>n(22,o=P)),F(t,V,P=>n(6,l=P));let{showSettings:c}=e,i=!1,u=!1,a,d,f;function p(){let P=document.documentElement;P.classList.contains("dark")?P.classList.remove("dark"):P.classList.add("dark"),I(U,r.use_dark_theme=!r.use_dark_theme,r),I(W,o=!0,o)}function k(P){switch(P){case Q.osrs:I(V,l.game=Q.osrs,l),I(V,l.client=r.selected_client_index,l),I(U,r.selected_game_index=Q.osrs,r),I(W,o=!0,o),d.classList.add("bg-blue-500","text-black"),a.classList.remove("bg-blue-500","text-black");break;case Q.rs3:I(V,l.game=Q.rs3,l),I(U,r.selected_game_index=Q.rs3,r),I(W,o=!0,o),d.classList.remove("bg-blue-500","text-black"),a.classList.add("bg-blue-500","text-black");break}}function g(){if(f.innerHTML=="Log In"){At();return}n(1,i=!i)}Ae(()=>{k(r.selected_game_index)});function E(P){X[P?"unshift":"push"](()=>{a=P,n(3,a)})}const R=()=>{k(Q.rs3)};function C(P){X[P?"unshift":"push"](()=>{d=P,n(4,d)})}const L=()=>{k(Q.osrs)},y=()=>p(),x=()=>{n(0,c=!0)};function T(P){X[P?"unshift":"push"](()=>{f=P,n(5,f)})}const A=()=>{n(2,u=!0)},z=()=>{n(2,u=!1)},w=()=>g();function m(P){i=P,n(1,i)}return t.$$set=P=>{"showSettings"in P&&n(0,c=P.showSettings)},[c,i,u,a,d,f,l,p,k,g,E,R,C,L,y,x,T,A,z,w,m]}class Mn extends ce{constructor(e){super(),le(this,e,Tn,Rn,oe,{showSettings:0})}}function En(t){let e,n,r,o,l,c;return{c(){e=b("div"),n=b("div"),r=M(),o=b("div"),_(n,"class","absolute left-0 top-0 z-10 h-screen w-screen backdrop-blur-sm backdrop-filter"),_(o,"class","absolute left-0 top-0 z-10 h-screen w-screen bg-black opacity-75"),_(o,"role","none")},m(i,u){S(i,e,u),h(e,n),h(e,r),h(e,o),l||(c=j(o,"click",t[1]),l=!0)},p:N,i:N,o:N,d(i){i&&v(e),l=!1,c()}}}function Nn(t){const e=Qt();return[e,r=>{e("click",r)}]}class at extends ce{constructor(e){super(),le(this,e,Nn,En,oe,{})}}function In(t){let e,n,r,o,l,c,i,u,a,d,f,p;return n=new at({}),{c(){e=b("div"),ne(n.$$.fragment),r=M(),o=b("div"),l=b("p"),l.textContent=`${t[1]}`,c=M(),i=b("p"),i.textContent=`${t[2]}`,u=M(),a=b("button"),a.textContent="I Understand",_(l,"class","p-2"),_(i,"class","p-2"),_(a,"class","m-5 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),_(o,"class","absolute left-1/4 top-1/4 z-20 w-1/2 rounded-lg bg-slate-100 p-5 text-center shadow-lg dark:bg-slate-900"),_(e,"id","disclaimer")},m(k,g){S(k,e,g),ee(n,e,null),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),h(o,u),h(o,a),d=!0,f||(p=j(a,"click",t[3]),f=!0)},p:N,i(k){d||(H(n.$$.fragment,k),d=!0)},o(k){D(n.$$.fragment,k),d=!1},d(k){k&&v(e),te(n),f=!1,p()}}}function jn(t,e,n){let r;F(t,Ge,i=>n(0,r=i));const o=atob("Qm9sdCBpcyBhbiB1bm9mZmljaWFsIHRoaXJkLXBhcnR5IGxhdW5jaGVyLiBJdCdzIGZyZWUgYW5kIG9wZW4tc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIEFHUEwgMy4wLg=="),l=atob("SmFnZXggaXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgcHJvYmxlbXMgb3IgZGFtYWdlIGNhdXNlZCBieSB1c2luZyB0aGlzIHByb2R1Y3Qu");return[r,o,l,()=>{I(Ge,r=!1,r)}]}class On extends ce{constructor(e){super(),le(this,e,jn,In,oe,{})}}function Hn(t){let e,n,r,o;return{c(){e=b("div"),n=b("button"),n.innerHTML=`
Browse app data - Browse App Data
`,_(n,"id","data_dir_button"),_(n,"class","p-2 hover:opacity-75"),_(e,"id","general_options"),_(e,"class","col-span-3 p-5 pt-10")},m(l,c){S(l,e,c),h(e,n),r||(o=j(n,"click",t[1]),r=!0)},p:N,i:N,o:N,d(l){l&&v(e),r=!1,o()}}}function An(t){function e(){var r=new XMLHttpRequest;r.open("GET","/browse-data"),r.onreadystatechange=()=>{r.readyState==4&&B(`Browse status: '${r.responseText.trim()}'`)},r.send()}return[e,()=>{e()}]}class Dn extends ce{constructor(e){super(),le(this,e,An,Hn,oe,{})}}function qn(t){let e,n,r,o,l,c,i,u,a,d,f,p,k,g,E,R;return{c(){e=b("div"),n=b("button"),n.innerHTML=`
Configure RuneLite - Configure RuneLite
`,r=M(),o=b("div"),l=b("label"),l.textContent="Use custom RuneLite JAR:",c=M(),i=b("input"),u=M(),a=b("div"),d=b("textarea"),f=M(),p=b("br"),k=M(),g=b("button"),g.textContent="Select File",_(n,"id","rl_configure"),_(n,"class","p-2 pb-5 hover:opacity-75"),_(l,"for","use_custom_jar"),_(i,"type","checkbox"),_(i,"name","use_custom_jar"),_(i,"id","use_custom_jar"),_(i,"class","ml-2"),_(o,"class","mx-auto border-t-2 border-slate-300 p-2 pt-5 dark:border-slate-800"),d.disabled=!0,_(d,"name","custom_jar_file"),_(d,"id","custom_jar_file"),_(d,"class","h-10 rounded border-2 border-slate-300 bg-slate-100 text-slate-950 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50"),g.disabled=!0,_(g,"id","custom_jar_file_button"),_(g,"class","mt-1 rounded-lg border-2 border-blue-500 p-1 duration-200 hover:opacity-75"),_(a,"id","custom_jar_div"),_(a,"class","mx-auto p-2 opacity-25"),_(e,"id","osrs_options"),_(e,"class","col-span-3 p-5 pt-10")},m(C,L){S(C,e,L),h(e,n),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),t[9](i),h(e,u),h(e,a),h(a,d),t[11](d),h(a,f),h(a,p),h(a,k),h(a,g),t[13](g),t[15](a),E||(R=[j(n,"click",t[8]),j(i,"change",t[10]),j(d,"change",t[12]),j(g,"click",t[14])],E=!0)},p:N,i:N,o:N,d(C){C&&v(e),t[9](null),t[11](null),t[13](null),t[15](null),E=!1,re(R)}}}function Un(t,e,n){let r,o,l,c;F(t,ze,w=>n(16,r=w)),F(t,U,w=>n(17,o=w)),F(t,V,w=>n(18,l=w)),F(t,W,w=>n(19,c=w));let i,u,a,d,f;function p(){i.classList.toggle("opacity-25"),n(1,u.disabled=!u.disabled,u),n(2,a.disabled=!a.disabled,a),I(U,o.runelite_use_custom_jar=d.checked,o),o.runelite_use_custom_jar?u.value&&I(U,o.runelite_custom_jar=u.value,o):(n(1,u.value="",u),I(U,o.runelite_custom_jar="",o),I(U,o.runelite_use_custom_jar=!1,o)),I(W,c=!0,c)}function k(){I(U,o.runelite_custom_jar=u.value,o),I(W,c=!0,c)}function g(){n(3,d.disabled=!0,d),n(2,a.disabled=!0,a);var w=new XMLHttpRequest;w.onreadystatechange=()=>{w.readyState==4&&(w.status==200&&(n(1,u.value=w.responseText,u),I(U,o.runelite_custom_jar=w.responseText,o),I(W,c=!0,c)),n(2,a.disabled=!1,a),n(3,d.disabled=!1,d))},w.open("GET","/jar-file-picker",!0),w.send()}function E(){var w,m,P;if(!l.account||!l.character){B("Please log in to configure RuneLite");return}wn((w=l.credentials)==null?void 0:w.session_id,(m=l.character)==null?void 0:m.accountId,(P=l.character)==null?void 0:P.displayName)}Ae(()=>{n(3,d.checked=o.runelite_use_custom_jar,d),d.checked&&o.runelite_custom_jar?(i.classList.remove("opacity-25"),n(1,u.disabled=!1,u),n(2,a.disabled=!1,a),n(1,u.value=o.runelite_custom_jar,u)):(n(3,d.checked=!1,d),I(U,o.runelite_use_custom_jar=!1,o)),r!=="linux"&&f.remove()});const R=()=>E();function C(w){X[w?"unshift":"push"](()=>{d=w,n(3,d)})}const L=()=>{p()};function y(w){X[w?"unshift":"push"](()=>{u=w,n(1,u)})}const x=()=>{k()};function T(w){X[w?"unshift":"push"](()=>{a=w,n(2,a)})}const A=()=>{g()};function z(w){X[w?"unshift":"push"](()=>{i=w,n(0,i)})}return[i,u,a,d,p,k,g,E,R,C,L,y,x,T,A,z]}class Bn extends ce{constructor(e){super(),le(this,e,Un,qn,oe,{})}}function Jn(t){let e,n,r,o,l,c;return{c(){e=b("div"),n=b("label"),n.textContent="Enable Bolt plugin loader:",r=M(),o=b("input"),_(n,"for","enable_plugins"),_(o,"type","checkbox"),_(o,"name","enable_plugins"),_(o,"id","enable_plugins"),_(o,"class","ml-2"),_(e,"class","mx-auto p-2")},m(i,u){S(i,e,u),h(e,n),h(e,r),h(e,o),o.checked=t[3].rs_plugin_loader,l||(c=[j(o,"change",t[6]),j(o,"change",t[7])],l=!0)},p(i,u){u&8&&(o.checked=i[3].rs_plugin_loader)},d(i){i&&v(e),l=!1,re(c)}}}function Gn(t){let e,n,r,o,l,c,i,u,a,d,f,p=be&&Jn(t);return{c(){e=b("div"),p&&p.c(),n=M(),r=b("div"),o=b("label"),o.textContent="Use custom config URI:",l=M(),c=b("input"),i=M(),u=b("div"),a=b("textarea"),_(o,"for","use_custom_uri"),_(c,"type","checkbox"),_(c,"name","use_custom_uri"),_(c,"id","use_custom_uri"),_(c,"class","ml-2"),_(r,"class","mx-auto p-2"),a.disabled=!0,_(a,"name","config_uri_address"),_(a,"id","config_uri_address"),_(a,"rows","4"),_(a,"class","rounded border-2 border-slate-300 bg-slate-100 text-slate-950 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50"),a.value=" ",_(u,"id","config_uri_div"),_(u,"class","mx-auto p-2 opacity-25"),_(e,"id","rs3_options"),_(e,"class","col-span-3 p-5 pt-10")},m(k,g){S(k,e,g),p&&p.m(e,null),h(e,n),h(e,r),h(r,o),h(r,l),h(r,c),t[8](c),h(e,i),h(e,u),h(u,a),t[11](a),t[12](u),d||(f=[j(c,"change",t[9]),j(a,"change",t[10])],d=!0)},p(k,[g]){be&&p.p(k,g)},i:N,o:N,d(k){k&&v(e),p&&p.d(),t[8](null),t[11](null),t[12](null),d=!1,re(f)}}}function Xn(t,e,n){let r,o,l;F(t,ct,L=>n(13,r=L)),F(t,U,L=>n(3,o=L)),F(t,W,L=>n(14,l=L));let c,i,u;function a(){c.classList.toggle("opacity-25"),n(1,i.disabled=!i.disabled,i),I(W,l=!0,l),u.checked||(n(1,i.value=atob(r.default_config_uri),i),I(U,o.rs_config_uri="",o))}function d(){I(U,o.rs_config_uri=i.value,o),I(W,l=!0,l)}Ae(()=>{o.rs_config_uri?(n(1,i.value=o.rs_config_uri,i),n(2,u.checked=!0,u),a()):n(1,i.value=atob(r.default_config_uri),i)});function f(){o.rs_plugin_loader=this.checked,U.set(o)}const p=()=>W.set(!0);function k(L){X[L?"unshift":"push"](()=>{u=L,n(2,u)})}const g=()=>{a()},E=()=>{d()};function R(L){X[L?"unshift":"push"](()=>{i=L,n(1,i)})}function C(L){X[L?"unshift":"push"](()=>{c=L,n(0,c)})}return[c,i,u,o,a,d,f,p,k,g,E,R,C]}class zn extends ce{constructor(e){super(),le(this,e,Xn,Gn,oe,{})}}function Fn(t){let e,n;return e=new zn({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(H(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function $n(t){let e,n;return e=new Bn({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(H(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Vn(t){let e,n;return e=new Dn({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(H(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Wn(t){let e,n,r,o,l,c,i,u,a,d,f,p,k,g,E,R,C,L,y,x,T,A,z,w;n=new at({}),n.$on("click",t[7]);const m=[Vn,$n,Fn],P=[];function q(O,$){return O[1]==O[5].general?0:O[1]==O[5].osrs?1:O[1]==O[5].rs3?2:-1}return~(x=q(t))&&(T=P[x]=m[x](t)),{c(){e=b("div"),ne(n.$$.fragment),r=M(),o=b("div"),l=b("button"),l.innerHTML='Close',c=M(),i=b("div"),u=b("div"),a=b("button"),d=J("General"),f=b("br"),p=M(),k=b("button"),g=J("OSRS"),E=b("br"),R=M(),C=b("button"),L=J("RS3"),y=M(),T&&T.c(),_(l,"class","absolute right-3 top-3 rounded-full bg-rose-500 p-[2px] shadow-lg duration-200 hover:rotate-90 hover:opacity-75"),_(a,"id","general_button"),_(a,"class",ge),_(k,"id","osrs_button"),_(k,"class",Ue),_(C,"id","rs3_button"),_(C,"class",ge),_(u,"class","relative h-full border-r-2 border-slate-300 pt-10 dark:border-slate-800"),_(i,"class","grid h-full grid-cols-4"),_(o,"class","absolute left-[13%] top-[13%] z-20 h-3/4 w-3/4 rounded-lg bg-slate-100 text-center shadow-lg dark:bg-slate-900"),_(e,"id","settings")},m(O,$){S(O,e,$),ee(n,e,null),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),h(i,u),h(u,a),h(a,d),t[9](a),h(u,f),h(u,p),h(u,k),h(k,g),t[11](k),h(u,E),h(u,R),h(u,C),h(C,L),t[13](C),h(i,y),~x&&P[x].m(i,null),A=!0,z||(w=[j(l,"click",t[8]),j(a,"click",t[10]),j(k,"click",t[12]),j(C,"click",t[14])],z=!0)},p(O,[$]){let Ve=x;x=q(O),x!==Ve&&(T&&(ve(),D(P[Ve],1,1,()=>{P[Ve]=null}),Se()),~x?(T=P[x],T||(T=P[x]=m[x](O),T.c()),H(T,1),T.m(i,null)):T=null)},i(O){A||(H(n.$$.fragment,O),H(T),A=!0)},o(O){D(n.$$.fragment,O),D(T),A=!1},d(O){O&&v(e),te(n),t[9](null),t[11](null),t[13](null),~x&&P[x].d(),z=!1,re(w)}}}let Ue="border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 mx-auto my-1 w-3/4",ge="border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 mx-auto my-1 w-3/4";function Zn(t,e,n){let{showSettings:r}=e;var o=(y=>(y[y.general=0]="general",y[y.osrs=1]="osrs",y[y.rs3=2]="rs3",y))(o||{});let l=1,c,i,u;function a(y){switch(y){case 0:n(1,l=0),n(2,c.classList.value=Ue,c),n(3,i.classList.value=ge,i),n(4,u.classList.value=ge,u);break;case 1:n(1,l=1),n(2,c.classList.value=ge,c),n(3,i.classList.value=Ue,i),n(4,u.classList.value=ge,u);break;case 2:n(1,l=2),n(2,c.classList.value=ge,c),n(3,i.classList.value=ge,i),n(4,u.classList.value=Ue,u);break}}function d(y){y.key==="Escape"&&n(0,r=!1)}addEventListener("keydown",d),rt(()=>{removeEventListener("keydown",d)});const f=()=>{n(0,r=!1)},p=()=>{n(0,r=!1)};function k(y){X[y?"unshift":"push"](()=>{c=y,n(2,c)})}const g=()=>{a(o.general)};function E(y){X[y?"unshift":"push"](()=>{i=y,n(3,i)})}const R=()=>{a(o.osrs)};function C(y){X[y?"unshift":"push"](()=>{u=y,n(4,u)})}const L=()=>{a(o.rs3)};return t.$$set=y=>{"showSettings"in y&&n(0,r=y.showSettings)},[r,l,c,i,u,o,a,f,p,k,g,E,R,C,L]}class Yn extends ce{constructor(e){super(),le(this,e,Zn,Wn,oe,{showSettings:0})}}function gt(t,e,n){const r=t.slice();return r[1]=e[n],r}function Kn(t){var u;let e,n=((u=t[1].time)==null?void 0:u.toLocaleTimeString())+"",r,o,l=t[1].text+"",c,i;return{c(){e=b("li"),r=J(n),o=J(` - - `),c=J(l),i=M()},m(a,d){S(a,e,d),h(e,r),h(e,o),h(e,c),h(e,i)},p(a,d){var f;d&1&&n!==(n=((f=a[1].time)==null?void 0:f.toLocaleTimeString())+"")&&ie(r,n),d&1&&l!==(l=a[1].text+"")&&ie(c,l)},d(a){a&&v(e)}}}function Qn(t){var u;let e,n=((u=t[1].time)==null?void 0:u.toLocaleTimeString())+"",r,o,l=t[1].text+"",c,i;return{c(){e=b("li"),r=J(n),o=J(` - - `),c=J(l),i=M(),_(e,"class","text-rose-500")},m(a,d){S(a,e,d),h(e,r),h(e,o),h(e,c),h(e,i)},p(a,d){var f;d&1&&n!==(n=((f=a[1].time)==null?void 0:f.toLocaleTimeString())+"")&&ie(r,n),d&1&&l!==(l=a[1].text+"")&&ie(c,l)},d(a){a&&v(e)}}}function mt(t){let e;function n(l,c){return l[1].isError?Qn:Kn}let r=n(t),o=r(t);return{c(){o.c(),e=_e()},m(l,c){o.m(l,c),S(l,e,c)},p(l,c){r===(r=n(l))&&o?o.p(l,c):(o.d(1),o=r(l),o&&(o.c(),o.m(e.parentNode,e)))},d(l){l&&v(e),o.d(l)}}}function es(t){let e,n,r,o,l=pe(t[0]),c=[];for(let i=0;i',r=M(),o=b("ol");for(let i=0;in(0,r=o)),[r]}class ns extends ce{constructor(e){super(),le(this,e,ts,es,oe,{})}}function kt(t,e,n){const r=t.slice();return r[13]=e[n],r}function ss(t){let e,n,r;return{c(){e=b("button"),e.textContent="Plugin menu",e.disabled=!K(be),_(e,"title",K(be)?null:"Coming soon..."),_(e,"class","mx-auto mb-2 w-52 rounded-lg p-2 font-bold text-black duration-200 enabled:bg-blue-500 enabled:hover:opacity-75 disabled:bg-gray-500")},m(o,l){S(o,e,l),n||(r=j(e,"click",t[8]),n=!0)},p:N,d(o){o&&v(e),n=!1,r()}}}function rs(t){let e,n,r,o,l,c,i,u,a;return{c(){e=b("label"),e.textContent="Game Client",n=M(),r=b("br"),o=M(),l=b("select"),c=b("option"),c.textContent="RuneLite",i=b("option"),i.textContent="HDOS",_(e,"for","game_client_select"),_(e,"class","text-sm"),_(c,"data-id",de.runeLite),_(c,"class","dark:bg-slate-900"),c.__value="RuneLite",ke(c,c.__value),_(i,"data-id",de.hdos),_(i,"class","dark:bg-slate-900"),i.__value="HDOS",ke(i,i.__value),_(l,"id","game_client_select"),_(l,"class","mx-auto w-52 cursor-pointer rounded-lg border-2 border-slate-300 bg-inherit p-2 text-inherit duration-200 hover:opacity-75 dark:border-slate-800")},m(d,f){S(d,e,f),S(d,n,f),S(d,r,f),S(d,o,f),S(d,l,f),h(l,c),h(l,i),t[7](l),u||(a=j(l,"change",t[5]),u=!0)},p:N,d(d){d&&(v(e),v(n),v(r),v(o),v(l)),t[7](null),u=!1,a()}}}function wt(t){let e,n=pe(t[4].account.characters),r=[];for(let o=0;oe in t?Xt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Ve=(t,e,n)=>(zt(t,typeof e!="symbol"?e+"":e,n),n);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const l of o)if(l.type==="childList")for(const c of l.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&r(c)}).observe(document,{childList:!0,subtree:!0});function n(o){const l={};return o.integrity&&(l.integrity=o.integrity),o.referrerPolicy&&(l.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?l.credentials="include":o.crossOrigin==="anonymous"?l.credentials="omit":l.credentials="same-origin",l}function r(o){if(o.ep)return;o.ep=!0;const l=n(o);fetch(o.href,l)}})();function I(){}function Ft(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}function Et(t){return t()}function dt(){return Object.create(null)}function re(t){t.forEach(Et)}function Nt(t){return typeof t=="function"}function oe(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let De;function $t(t,e){return t===e?!0:(De||(De=document.createElement("a")),De.href=e,t===De.href)}function Vt(t){return Object.keys(t).length===0}function It(t,...e){if(t==null){for(const r of e)r(void 0);return I}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function K(t){let e;return It(t,n=>e=n)(),e}function F(t,e,n){t.$$.on_destroy.push(It(e,n))}function j(t,e,n){return t.set(n),e}function h(t,e){t.appendChild(e)}function v(t,e,n){t.insertBefore(e,n||null)}function y(t){t.parentNode&&t.parentNode.removeChild(t)}function Oe(t,e){for(let n=0;nt.removeEventListener(e,n,r)}function _(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Wt(t){return Array.from(t.childNodes)}function ie(t,e){e=""+e,t.data!==e&&(t.data=e)}function ke(t,e){t.value=e??""}function ft(t,e,n){for(let r=0;r{const o=t.$$.callbacks[e];if(o){const l=Yt(e,n,{cancelable:r});return o.slice().forEach(c=>{c.call(t,l)}),!l.defaultPrevented}return!0}}const Pe=[],z=[];let Re=[];const Ye=[],en=Promise.resolve();let Ke=!1;function tn(){Ke||(Ke=!0,en.then(rt))}function Be(t){Re.push(t)}function Ne(t){Ye.push(t)}const We=new Set;let Ce=0;function rt(){if(Ce!==0)return;const t=Ee;do{try{for(;Cet.indexOf(r)===-1?e.push(r):n.push(r)),n.forEach(r=>r()),Re=e}const qe=new Set;let we;function ve(){we={r:0,c:[],p:we}}function Se(){we.r||re(we.c),we=we.p}function A(t,e){t&&t.i&&(qe.delete(t),t.i(e))}function D(t,e,n,r){if(t&&t.o){if(qe.has(t))return;qe.add(t),we.c.push(()=>{qe.delete(t),r&&(n&&t.d(1),r())}),t.o(e)}else r&&r()}function Te(t,e){const n=e.token={};function r(o,l,c,i){if(e.token!==n)return;e.resolved=i;let u=e.ctx;c!==void 0&&(u=u.slice(),u[c]=i);const a=o&&(e.current=o)(u);let d=!1;e.block&&(e.blocks?e.blocks.forEach((f,p)=>{p!==l&&f&&(ve(),D(f,1,1,()=>{e.blocks[p]===f&&(e.blocks[p]=null)}),Se())}):e.block.d(1),a.c(),A(a,1),a.m(e.mount(),e.anchor),d=!0),e.block=a,e.blocks&&(e.blocks[l]=a),d&&rt()}if(Ft(t)){const o=He();if(t.then(l=>{he(o),r(e.then,1,e.value,l),he(null)},l=>{if(he(o),r(e.catch,2,e.error,l),he(null),!e.hasCatch)throw l}),e.current!==e.pending)return r(e.pending,0),!0}else{if(e.current!==e.then)return r(e.then,1,e.value,t),!0;e.resolved=t}}function ot(t,e,n){const r=e.slice(),{resolved:o}=t;t.current===t.then&&(r[t.value]=o),t.current===t.catch&&(r[t.error]=o),t.block.p(r,n)}function pe(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function Ie(t,e,n){const r=t.$$.props[e];r!==void 0&&(t.$$.bound[r]=n,n(t.$$.ctx[r]))}function ne(t){t&&t.c()}function ee(t,e,n){const{fragment:r,after_update:o}=t.$$;r&&r.m(e,n),Be(()=>{const l=t.$$.on_mount.map(Et).filter(Nt);t.$$.on_destroy?t.$$.on_destroy.push(...l):re(l),t.$$.on_mount=[]}),o.forEach(Be)}function te(t,e){const n=t.$$;n.fragment!==null&&(sn(n.after_update),re(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function rn(t,e){t.$$.dirty[0]===-1&&(Pe.push(t),tn(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const g=m.length?m[0]:p;return a.ctx&&o(a.ctx[f],a.ctx[f]=g)&&(!a.skip_bound&&a.bound[f]&&a.bound[f](g),d&&rn(t,f)),p}):[],a.update(),d=!0,re(a.before_update),a.fragment=r?r(a.ctx):!1,e.target){if(e.hydrate){const f=Wt(e.target);a.fragment&&a.fragment.l(f),f.forEach(y)}else a.fragment&&a.fragment.c();e.intro&&A(t.$$.fragment),ee(t,e.target,e.anchor),rt()}he(u)}class ce{constructor(){Ve(this,"$$");Ve(this,"$$set")}$destroy(){te(this,1),this.$destroy=I}$on(e,n){if(!Nt(n))return I;const r=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return r.push(n),()=>{const o=r.indexOf(n);o!==-1&&r.splice(o,1)}}$set(e){this.$$set&&!Vt(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const on="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(on);const xe=[];function jt(t,e){return{subscribe:Y(t,e).subscribe}}function Y(t,e=I){let n;const r=new Set;function o(i){if(oe(t,i)&&(t=i,n)){const u=!xe.length;for(const a of r)a[1](),xe.push(a,t);if(u){for(let a=0;a{r.delete(a),r.size===0&&n&&(n(),n=null)}}return{set:o,update:l,subscribe:c}}function Ot(t){if(t.ok)return t.value;throw t.error}var Q=(t=>(t[t.rs3=0]="rs3",t[t.osrs=1]="osrs",t))(Q||{}),de=(t=>(t[t.runeLite=0]="runeLite",t[t.hdos=1]="hdos",t[t.rs3=2]="rs3",t))(de||{});const ln={use_dark_theme:!0,flatpak_rich_presence:!1,rs_config_uri:"",runelite_custom_jar:"",runelite_use_custom_jar:!1,selected_account:"",selected_characters:new Map,selected_game_accounts:new Map,selected_game_index:1,selected_client_index:1},Ht=jt("https://bolt-internal"),cn=jt("1fddee4e-b100-4f4e-b2b0-097f9088f9d2"),lt=Y(),ct=Y(""),U=Y({...ln}),ye=Y(new Map),be=Y(!1),fe=Y(),Qe=Y(),Le=Y([]),ze=Y({}),it=Y([]),et=Y(""),tt=Y(""),nt=Y(""),W=Y(!1),Je=Y(new Map),V=Y({game:Q.osrs,client:de.runeLite}),Ge=Y(!1);function an(){se.use_dark_theme==!1&&document.documentElement.classList.remove("dark")}function un(t,e){e&&t.win.close(),it.update(n=>(n.splice(ut.indexOf(t),1),n))}function At(){if(ue&&ue.win&&!ue.win.closed)ue.win.focus();else if(ue&&ue.win&&ue.win.closed||ue){const t=Ut(),e=pn();fn({origin:atob(Z.origin),redirect:atob(Z.redirect),authMethod:"",loginType:"",clientid:atob(Z.clientid),flow:"launcher",pkceState:t,pkceCodeVerifier:e}).then(n=>{const r=window.open(n,"","width=480,height=720");ze.set({state:t,verifier:e,win:r})})}}function dn(){const t=new URLSearchParams(window.location.search);ct.set(t.get("platform")),et.set(t.get("rs3_linux_installed_hash")),tt.set(t.get("runelite_installed_id")),nt.set(t.get("hdos_installed_version"));const e=t.get("plugins");e!==null?(be.set(!0),fe.set(JSON.parse(e))):be.set(!1);const n=t.get("credentials");if(n)try{JSON.parse(n).forEach(l=>{ye.update(c=>(c.set(l.sub,l),c))})}catch(o){X(`Couldn't parse credentials file: ${o}`,!1)}const r=t.get("config");if(r)try{const o=JSON.parse(r);U.set(o),U.update(l=>(l.selected_game_accounts?(l.selected_characters=new Map(Object.entries(l.selected_game_accounts)),delete l.selected_game_accounts):l.selected_characters&&(l.selected_characters=new Map(Object.entries(l.selected_characters))),l))}catch(o){X(`Couldn't parse config file: ${o}`,!1)}}async function Dt(t,e,n){return new Promise(r=>{if(t.expiry-Date.now()<3e4){const o=new URLSearchParams({grant_type:"refresh_token",client_id:n,refresh_token:t.refresh_token}),l=new XMLHttpRequest;l.onreadystatechange=()=>{if(l.readyState==4)if(l.status==200){const c=qt(l.response),i=Ot(c);i?(t.access_token=i.access_token,t.expiry=i.expiry,t.id_token=i.id_token,t.login_provider=i.login_provider,t.refresh_token=i.refresh_token,i.session_id&&(t.session_id=i.session_id),t.sub=i.sub,r(null)):r(0)}else r(l.status)},l.onerror=()=>{r(0)},l.open("POST",e,!0),l.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),l.setRequestHeader("Accept","application/json"),l.send(o)}else r(null)})}function qt(t){const e=JSON.parse(t),n=e.id_token.split(".");if(n.length!==3){const l=`Malformed id_token: ${n.length} sections, expected 3`;return X(l,!1),{ok:!1,error:new Error(l)}}const r=JSON.parse(atob(n[0]));if(r.typ!=="JWT"){const l=`Bad id_token header: typ ${r.typ}, expected JWT`;return X(l,!1),{ok:!1,error:new Error(l)}}const o=JSON.parse(atob(n[1]));return{ok:!0,value:{access_token:e.access_token,id_token:e.id_token,refresh_token:e.refresh_token,sub:o.sub,login_provider:o.login_provider||null,expiry:Date.now()+e.expires_in*1e3,session_id:e.session_id}}}async function fn(t){const e=new TextEncoder().encode(t.pkceCodeVerifier),n=await crypto.subtle.digest("SHA-256",e);let r="";const o=new Uint8Array(n);for(let c=0;cMath.round(o*(n-0)/255+0)).map(o=>e[o]).join("")}async function Bt(t,e,n){return new Promise(r=>{const o=new XMLHttpRequest;o.onreadystatechange=()=>{o.readyState==4&&(o.status==200?n.then(l=>{if(typeof l!="number"){const c={id:l.id,userId:l.userId,displayName:l.displayName,suffix:l.suffix,characters:new Map};B(`Successfully added login for ${c.displayName}`),JSON.parse(o.response).forEach(i=>{c.characters.set(i.accountId,{accountId:i.accountId,displayName:i.displayName,userHash:i.userHash})}),bn(c),r(!0)}else X(`Error getting account info: ${l}`,!1),r(!1)}):(X(`Error: from ${e}: ${o.status}: ${o.response}`,!1),r(!1)))},o.open("GET",e,!0),o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Authorization","Bearer ".concat(t.session_id)),o.send()})}async function pt(t,e){return await _n(t,e)}async function _n(t,e){const n=Ut(),r=crypto.randomUUID(),o=atob(Z.origin).concat("/oauth2/auth?").concat(new URLSearchParams({id_token_hint:e.id_token,nonce:btoa(r),prompt:"consent",redirect_uri:"http://localhost",response_type:"id_token code",state:n,client_id:K(cn),scope:"openid offline"}).toString()),l=hn(e);return t?(t.location.href=o,it.update(c=>(c.push({state:n,nonce:r,creds:e,win:t,account_info_promise:l}),c)),!1):e.session_id?await Bt(e,atob(Z.auth_api).concat("/accounts"),l):(X("Rejecting stored credentials with missing session_id",!1),!1)}function hn(t){return new Promise(e=>{const n=`${atob(Z.api)}/users/${t.sub}/displayName`,r=new XMLHttpRequest;r.onreadystatechange=()=>{r.readyState==4&&(r.status==200?e(JSON.parse(r.response)):e(r.status))},r.open("GET",n,!0),r.setRequestHeader("Authorization","Bearer ".concat(t.access_token)),r.send()})}function bn(t){const e=()=>{V.update(n=>{n.account=t;const[r]=t.characters.keys();return n.character=t.characters.get(r),me.size>0&&(n.credentials=me.get(t.userId)),n})};Je.update(n=>(n.set(t.userId,t),n)),Xe.account&&se.selected_account?t.userId==se.selected_account&&e():Xe.account||e(),ze.set({})}function gn(t,e,n){return new Promise(r=>{const o=new XMLHttpRequest;o.open("POST",e,!0),o.onreadystatechange=()=>{o.readyState==4&&r(o.status)},o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(new URLSearchParams({token:t,client_id:n}))})}async function Me(){const t=new XMLHttpRequest;t.open("POST","/save-credentials",!0),t.setRequestHeader("Content-Type","application/json"),t.onreadystatechange=()=>{t.readyState==4&&B(`Save-credentials status: ${t.responseText.trim()}`)},V.update(n=>{var r;return n.credentials=me.get((r=Xe.account)==null?void 0:r.userId),n});const e=[];me.forEach(n=>{e.push(n)}),t.send(JSON.stringify(e))}function mn(t,e,n){Fe();const r=(i,u)=>{const a=new XMLHttpRequest,d={};i&&(d.hash=i),t&&(d.jx_session_id=t),e&&(d.jx_character_id=e),n&&(d.jx_display_name=n),se.rs_plugin_loader&&(d.plugin_loader="1"),se.rs_config_uri?d.config_uri=se.rs_config_uri:d.config_uri=atob(Z.default_config_uri),a.open("POST","/launch-rs3-deb?".concat(new URLSearchParams(d).toString()),!0),a.onreadystatechange=()=>{a.readyState==4&&(B(`Game launch status: '${a.responseText.trim()}'`),a.status==200&&i&&et.set(i))},a.send(u)},o=new XMLHttpRequest,l=atob(Z.content_url),c=l.concat("dists/trusty/non-free/binary-amd64/Packages");o.open("GET",c,!0),o.onreadystatechange=()=>{if(o.readyState==4&&o.status==200){const i=Object.fromEntries(o.response.split(` +`).map(u=>u.split(": ")));if(!i.Filename||!i.Size){X(`Could not parse package data from URL: ${c}`,!1),r();return}if(i.SHA256!==K(et)){B("Downloading RS3 client...");const u=new XMLHttpRequest;u.open("GET",l.concat(i.Filename),!0),u.responseType="arraybuffer",u.onprogress=a=>{a.loaded&&Le.update(d=>(d[0].text=`Downloading RS3 client... ${(Math.round(1e3*a.loaded/a.total)/10).toFixed(1)}%`,d))},u.onreadystatechange=()=>{u.readyState==4&&u.status==200&&r(i.SHA256,u.response)},u.onerror=()=>{X(`Error downloading game client: from ${c}: non-http error`,!1),r()},u.send()}else B("Latest client is already installed"),r()}},o.onerror=()=>{X(`Error: from ${c}: non-http error`,!1),r()},o.send()}function Jt(t,e,n,r){Fe();const o=r?"/launch-runelite-jar-configure?":"/launch-runelite-jar?",l=(u,a,d)=>{const f=new XMLHttpRequest,p={};u&&(p.id=u),d&&(p.jar_path=d),t&&(p.jx_session_id=t),e&&(p.jx_character_id=e),n&&(p.jx_display_name=n),se.flatpak_rich_presence&&(p.flatpak_rich_presence=""),f.open(a?"POST":"GET",o.concat(new URLSearchParams(p).toString()),!0),f.onreadystatechange=()=>{f.readyState==4&&(B(`Game launch status: '${f.responseText.trim()}'`),f.status==200&&u&&tt.set(u))},f.send(a)};if(se.runelite_use_custom_jar){l(null,null,se.runelite_custom_jar);return}const c=new XMLHttpRequest,i="https://api.github.com/repos/runelite/launcher/releases";c.open("GET",i,!0),c.onreadystatechange=()=>{if(c.readyState==4)if(c.status==200){const u=JSON.parse(c.responseText).map(a=>a.assets).flat().find(a=>a.name.toLowerCase()=="runelite.jar");if(u.id!=K(tt)){B("Downloading RuneLite...");const a=new XMLHttpRequest;a.open("GET",u.browser_download_url,!0),a.responseType="arraybuffer",a.onreadystatechange=()=>{a.readyState==4&&(a.status==200?l(u.id,a.response):X(`Error downloading from ${u.url}: ${a.status}: ${a.responseText}`,!1))},a.onprogress=d=>{d.loaded&&d.lengthComputable&&Le.update(f=>(f[0].text=`Downloading RuneLite... ${(Math.round(1e3*d.loaded/d.total)/10).toFixed(1)}%`,f))},a.send()}else B("Latest JAR is already installed"),l()}else X(`Error from ${i}: ${c.status}: ${c.responseText}`,!1)},c.send()}function kn(t,e,n){return Jt(t,e,n,!1)}function wn(t,e,n){return Jt(t,e,n,!0)}function yn(t,e,n){Fe();const r=(c,i)=>{const u=new XMLHttpRequest,a={};c&&(a.version=c),t&&(a.jx_session_id=t),e&&(a.jx_character_id=e),n&&(a.jx_display_name=n),u.open("POST","/launch-hdos-jar?".concat(new URLSearchParams(a).toString()),!0),u.onreadystatechange=()=>{u.readyState==4&&(B(`Game launch status: '${u.responseText.trim()}'`),u.status==200&&c&&nt.set(c))},u.send(i)},o=new XMLHttpRequest,l="https://cdn.hdos.dev/client/getdown.txt";o.open("GET",l,!0),o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const c=o.responseText.match(/^launcher\.version *= *(.*?)$/m);if(c&&c.length>=2){const i=c[1];if(i!==K(nt)){const u=`https://cdn.hdos.dev/launcher/v${i}/hdos-launcher.jar`;B("Downloading HDOS...");const a=new XMLHttpRequest;a.open("GET",u,!0),a.responseType="arraybuffer",a.onreadystatechange=()=>{if(a.readyState==4)if(a.status==200)r(i,a.response);else{const d=JSON.parse(o.responseText).map(f=>f.assets).flat().find(f=>f.name.toLowerCase()=="runelite.jar");X(`Error downloading from ${d.url}: ${a.status}: ${a.responseText}`,!1)}},a.onprogress=d=>{d.loaded&&d.lengthComputable&&Le.update(f=>(f[0].text=`Downloading HDOS... ${(Math.round(1e3*d.loaded/d.total)/10).toFixed(1)}%`,f))},a.send()}else B("Latest JAR is already installed"),r()}else B("Couldn't parse latest launcher version"),r()}else X(`Error from ${l}: ${o.status}: ${o.responseText}`,!1)},o.send()}let Ze=!1;function Fe(){var t;if(K(W)&&!Ze){Ze=!0;const e=new XMLHttpRequest;e.open("POST","/save-config",!0),e.onreadystatechange=()=>{e.readyState==4&&(B(`Save config status: '${e.responseText.trim()}'`),e.status==200&&W.set(!1),Ze=!1)},e.setRequestHeader("Content-Type","application/json");const n={};(t=se.selected_characters)==null||t.forEach((l,c)=>{n[c]=l});const r={};Object.assign(r,se),r.selected_characters=n;const o=JSON.stringify(r,null,4);e.send(o)}}function Gt(){return new Promise((t,e)=>{const n=new XMLHttpRequest,r=K(Ht).concat("/list-game-clients");n.open("GET",r,!0),n.onreadystatechange=()=>{if(n.readyState==4)if(n.status==200&&n.getResponseHeader("content-type")==="application/json"){const o=JSON.parse(n.responseText);t(Object.keys(o).map(l=>({uid:l,identity:o[l].identity||null})))}else e(`error (${n.responseText})`)},n.send()})}function vn(){const t=new XMLHttpRequest;t.open("POST","/save-plugin-config",!0),t.setRequestHeader("Content-Type","application/json"),t.onreadystatechange=()=>{t.readyState==4&&B(`Save-plugin-config status: ${t.responseText.trim()}`)},t.send(JSON.stringify(K(fe)))}function _t(t,e,n){const r=t.slice();return r[22]=e[n],r}function ht(t){let e,n=t[22][1].displayName+"",r,o,l;return{c(){e=b("option"),r=J(n),_(e,"data-id",o=t[22][1].userId),_(e,"class","dark:bg-slate-900"),e.__value=l=t[22][1].displayName,ke(e,e.__value)},m(c,i){v(c,e,i),h(e,r)},p(c,i){i&4&&n!==(n=c[22][1].displayName+"")&&ie(r,n),i&4&&o!==(o=c[22][1].userId)&&_(e,"data-id",o),i&4&&l!==(l=c[22][1].displayName)&&(e.__value=l,ke(e,e.__value))},d(c){c&&y(e)}}}function Sn(t){let e,n,r,o,l,c,i,u,a,d=pe(t[2]),f=[];for(let p=0;pn(13,r=k)),F(t,ye,k=>n(14,o=k)),F(t,Je,k=>n(2,l=k)),F(t,U,k=>n(15,c=k));let{showAccountDropdown:i}=e,{hoverAccountButton:u}=e;const a=atob(Z.origin),d=atob(Z.clientid),f=a.concat("/oauth2/token"),p=a.concat("/oauth2/revoke");let m=!1,g;function N(k){u||k.button===0&&i&&!m&&n(5,i=!1)}function R(){var q;if(g.options.length==0){B("Logout unsuccessful: no account selected");return}let k=r.credentials;r.account&&(l.delete((q=r.account)==null?void 0:q.userId),Je.set(l));const P=g.selectedIndex;P>0?n(1,g.selectedIndex=P-1,g):P==0&&l.size>0?n(1,g.selectedIndex=P+1,g):(delete r.account,delete r.character,delete r.credentials),S(),k&&Dt(k,f,d).then(H=>{H===null?gn(k.access_token,p,d).then($=>{$===200?(B("Successful logout"),C(k)):X(`Logout unsuccessful: status ${$}`,!1)}):H===400||H===401?(B("Logout unsuccessful: credentials are invalid, so discarding them anyway"),k&&C(k)):X("Logout unsuccessful: unable to verify credentials due to a network error",!1)})}function C(k){o.delete(k.sub),Me()}function S(){var P;W.set(!0);const k=g[g.selectedIndex].getAttribute("data-id");if(j(V,r.account=l.get(k),r),j(U,c.selected_account=k,c),j(V,r.credentials=o.get((P=r.account)==null?void 0:P.userId),r),r.account&&r.account.characters){const q=document.getElementById("character_select");q.selectedIndex=0;const[H]=r.account.characters.keys();j(V,r.character=r.account.characters.get(H),r)}}addEventListener("mousedown",N),Ae(()=>{var P;let k=0;l.forEach(q=>{var H;q.displayName==((H=r.account)==null?void 0:H.displayName)&&n(1,g.selectedIndex=k,g),k++}),j(V,r.credentials=o.get((P=r.account)==null?void 0:P.userId),r)}),st(()=>{removeEventListener("mousedown",N)});function w(k){z[k?"unshift":"push"](()=>{g=k,n(1,g)})}const L=()=>{S()},T=()=>{At()},M=()=>{R()},G=()=>{n(0,m=!0)},x=()=>{n(0,m=!1)};return t.$$set=k=>{"showAccountDropdown"in k&&n(5,i=k.showAccountDropdown),"hoverAccountButton"in k&&n(6,u=k.hoverAccountButton)},[m,g,l,R,S,i,u,w,L,T,M,G,x]}class Cn extends ce{constructor(e){super(),le(this,e,Ln,Sn,oe,{showAccountDropdown:5,hoverAccountButton:6})}}function xn(t){let e;return{c(){e=J("Log In")},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function Pn(t){var r;let e=((r=t[6].account)==null?void 0:r.displayName)+"",n;return{c(){n=J(e)},m(o,l){v(o,n,l)},p(o,l){var c;l&64&&e!==(e=((c=o[6].account)==null?void 0:c.displayName)+"")&&ie(n,e)},d(o){o&&y(n)}}}function bt(t){let e,n,r,o;function l(i){t[20](i)}let c={hoverAccountButton:t[2]};return t[1]!==void 0&&(c.showAccountDropdown=t[1]),n=new Cn({props:c}),z.push(()=>Ie(n,"showAccountDropdown",l)),{c(){e=b("div"),ne(n.$$.fragment),_(e,"class","absolute right-2 top-[72px]")},m(i,u){v(i,e,u),ee(n,e,null),o=!0},p(i,u){const a={};u&4&&(a.hoverAccountButton=i[2]),!r&&u&2&&(r=!0,a.showAccountDropdown=i[1],Ne(()=>r=!1)),n.$set(a)},i(i){o||(A(n.$$.fragment,i),o=!0)},o(i){D(n.$$.fragment,i),o=!1},d(i){i&&y(e),te(n)}}}function Rn(t){let e,n,r,o,l,c,i,u,a,d,f,p,m,g,N,R;function C(T,M){return T[6].account?Pn:xn}let S=C(t),w=S(t),L=t[1]&&bt(t);return{c(){e=b("div"),n=b("div"),r=b("button"),r.textContent="RS3",o=E(),l=b("button"),l.textContent="OSRS",c=E(),i=b("div"),u=b("button"),u.innerHTML='Change Theme',a=E(),d=b("button"),d.innerHTML='Settings',f=E(),p=b("button"),w.c(),m=E(),L&&L.c(),_(r,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),_(l,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 bg-blue-500 p-2 text-black duration-200 hover:opacity-75"),_(n,"class","m-3 ml-9 font-bold"),_(u,"class","my-3 h-10 w-10 rounded-full bg-blue-500 p-2 duration-200 hover:rotate-45 hover:opacity-75"),_(d,"class","m-3 h-10 w-10 rounded-full bg-blue-500 p-2 duration-200 hover:rotate-45 hover:opacity-75"),_(p,"class","m-2 w-48 rounded-lg border-2 border-slate-300 bg-inherit p-2 text-center font-bold text-black duration-200 hover:opacity-75 dark:border-slate-800 dark:text-slate-50"),_(i,"class","ml-auto flex"),_(e,"class","fixed top-0 flex h-16 w-screen border-b-2 border-slate-300 bg-slate-100 duration-200 dark:border-slate-800 dark:bg-slate-900")},m(T,M){v(T,e,M),h(e,n),h(n,r),t[10](r),h(n,o),h(n,l),t[12](l),h(e,c),h(e,i),h(i,u),h(i,a),h(i,d),h(i,f),h(i,p),w.m(p,null),t[16](p),h(e,m),L&&L.m(e,null),g=!0,N||(R=[O(r,"click",t[11]),O(l,"click",t[13]),O(u,"click",t[14]),O(d,"click",t[15]),O(p,"mouseenter",t[17]),O(p,"mouseleave",t[18]),O(p,"click",t[19])],N=!0)},p(T,[M]){S===(S=C(T))&&w?w.p(T,M):(w.d(1),w=S(T),w&&(w.c(),w.m(p,null))),T[1]?L?(L.p(T,M),M&2&&A(L,1)):(L=bt(T),L.c(),A(L,1),L.m(e,null)):L&&(ve(),D(L,1,1,()=>{L=null}),Se())},i(T){g||(A(L),g=!0)},o(T){D(L),g=!1},d(T){T&&y(e),t[10](null),t[12](null),w.d(),t[16](null),L&&L.d(),N=!1,re(R)}}}function Tn(t,e,n){let r,o,l;F(t,U,P=>n(21,r=P)),F(t,W,P=>n(22,o=P)),F(t,V,P=>n(6,l=P));let{showSettings:c}=e,i=!1,u=!1,a,d,f;function p(){let P=document.documentElement;P.classList.contains("dark")?P.classList.remove("dark"):P.classList.add("dark"),j(U,r.use_dark_theme=!r.use_dark_theme,r),j(W,o=!0,o)}function m(P){switch(P){case Q.osrs:j(V,l.game=Q.osrs,l),j(V,l.client=r.selected_client_index,l),j(U,r.selected_game_index=Q.osrs,r),j(W,o=!0,o),d.classList.add("bg-blue-500","text-black"),a.classList.remove("bg-blue-500","text-black");break;case Q.rs3:j(V,l.game=Q.rs3,l),j(U,r.selected_game_index=Q.rs3,r),j(W,o=!0,o),d.classList.remove("bg-blue-500","text-black"),a.classList.add("bg-blue-500","text-black");break}}function g(){if(f.innerHTML=="Log In"){At();return}n(1,i=!i)}Ae(()=>{m(r.selected_game_index)});function N(P){z[P?"unshift":"push"](()=>{a=P,n(3,a)})}const R=()=>{m(Q.rs3)};function C(P){z[P?"unshift":"push"](()=>{d=P,n(4,d)})}const S=()=>{m(Q.osrs)},w=()=>p(),L=()=>{n(0,c=!0)};function T(P){z[P?"unshift":"push"](()=>{f=P,n(5,f)})}const M=()=>{n(2,u=!0)},G=()=>{n(2,u=!1)},x=()=>g();function k(P){i=P,n(1,i)}return t.$$set=P=>{"showSettings"in P&&n(0,c=P.showSettings)},[c,i,u,a,d,f,l,p,m,g,N,R,C,S,w,L,T,M,G,x,k]}class Mn extends ce{constructor(e){super(),le(this,e,Tn,Rn,oe,{showSettings:0})}}function En(t){let e,n,r,o,l,c;return{c(){e=b("div"),n=b("div"),r=E(),o=b("div"),_(n,"class","absolute left-0 top-0 z-10 h-screen w-screen backdrop-blur-sm backdrop-filter"),_(o,"class","absolute left-0 top-0 z-10 h-screen w-screen bg-black opacity-75"),_(o,"role","none")},m(i,u){v(i,e,u),h(e,n),h(e,r),h(e,o),l||(c=O(o,"click",t[1]),l=!0)},p:I,i:I,o:I,d(i){i&&y(e),l=!1,c()}}}function Nn(t){const e=Qt();return[e,r=>{e("click",r)}]}class at extends ce{constructor(e){super(),le(this,e,Nn,En,oe,{})}}function In(t){let e,n,r,o,l,c,i,u,a,d,f,p;return n=new at({}),{c(){e=b("div"),ne(n.$$.fragment),r=E(),o=b("div"),l=b("p"),l.textContent=`${t[1]}`,c=E(),i=b("p"),i.textContent=`${t[2]}`,u=E(),a=b("button"),a.textContent="I Understand",_(l,"class","p-2"),_(i,"class","p-2"),_(a,"class","m-5 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),_(o,"class","absolute left-1/4 top-1/4 z-20 w-1/2 rounded-lg bg-slate-100 p-5 text-center shadow-lg dark:bg-slate-900"),_(e,"id","disclaimer")},m(m,g){v(m,e,g),ee(n,e,null),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),h(o,u),h(o,a),d=!0,f||(p=O(a,"click",t[3]),f=!0)},p:I,i(m){d||(A(n.$$.fragment,m),d=!0)},o(m){D(n.$$.fragment,m),d=!1},d(m){m&&y(e),te(n),f=!1,p()}}}function jn(t,e,n){let r;F(t,Ge,i=>n(0,r=i));const o=atob("Qm9sdCBpcyBhbiB1bm9mZmljaWFsIHRoaXJkLXBhcnR5IGxhdW5jaGVyLiBJdCdzIGZyZWUgYW5kIG9wZW4tc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIEFHUEwgMy4wLg=="),l=atob("SmFnZXggaXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgcHJvYmxlbXMgb3IgZGFtYWdlIGNhdXNlZCBieSB1c2luZyB0aGlzIHByb2R1Y3Qu");return[r,o,l,()=>{j(Ge,r=!1,r)}]}class On extends ce{constructor(e){super(),le(this,e,jn,In,oe,{})}}function Hn(t){let e,n,r,o;return{c(){e=b("div"),n=b("button"),n.innerHTML=`
Browse app data + Browse App Data
`,_(n,"id","data_dir_button"),_(n,"class","p-2 hover:opacity-75"),_(e,"id","general_options"),_(e,"class","col-span-3 p-5 pt-10")},m(l,c){v(l,e,c),h(e,n),r||(o=O(n,"click",t[1]),r=!0)},p:I,i:I,o:I,d(l){l&&y(e),r=!1,o()}}}function An(t){function e(){var r=new XMLHttpRequest;r.open("GET","/browse-data"),r.onreadystatechange=()=>{r.readyState==4&&B(`Browse status: '${r.responseText.trim()}'`)},r.send()}return[e,()=>{e()}]}class Dn extends ce{constructor(e){super(),le(this,e,An,Hn,oe,{})}}function qn(t){let e,n,r,o,l,c,i,u,a,d,f,p,m,g,N,R;return{c(){e=b("div"),n=b("button"),n.innerHTML=`
Configure RuneLite + Configure RuneLite
`,r=E(),o=b("div"),l=b("label"),l.textContent="Use custom RuneLite JAR:",c=E(),i=b("input"),u=E(),a=b("div"),d=b("textarea"),f=E(),p=b("br"),m=E(),g=b("button"),g.textContent="Select File",_(n,"id","rl_configure"),_(n,"class","p-2 pb-5 hover:opacity-75"),_(l,"for","use_custom_jar"),_(i,"type","checkbox"),_(i,"name","use_custom_jar"),_(i,"id","use_custom_jar"),_(i,"class","ml-2"),_(o,"class","mx-auto border-t-2 border-slate-300 p-2 pt-5 dark:border-slate-800"),d.disabled=!0,_(d,"name","custom_jar_file"),_(d,"id","custom_jar_file"),_(d,"class","h-10 rounded border-2 border-slate-300 bg-slate-100 text-slate-950 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50"),g.disabled=!0,_(g,"id","custom_jar_file_button"),_(g,"class","mt-1 rounded-lg border-2 border-blue-500 p-1 duration-200 hover:opacity-75"),_(a,"id","custom_jar_div"),_(a,"class","mx-auto p-2 opacity-25"),_(e,"id","osrs_options"),_(e,"class","col-span-3 p-5 pt-10")},m(C,S){v(C,e,S),h(e,n),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),t[9](i),h(e,u),h(e,a),h(a,d),t[11](d),h(a,f),h(a,p),h(a,m),h(a,g),t[13](g),t[15](a),N||(R=[O(n,"click",t[8]),O(i,"change",t[10]),O(d,"change",t[12]),O(g,"click",t[14])],N=!0)},p:I,i:I,o:I,d(C){C&&y(e),t[9](null),t[11](null),t[13](null),t[15](null),N=!1,re(R)}}}function Un(t,e,n){let r,o,l;F(t,U,M=>n(16,r=M)),F(t,V,M=>n(17,o=M)),F(t,W,M=>n(18,l=M));let c,i,u,a;function d(){c.classList.toggle("opacity-25"),n(1,i.disabled=!i.disabled,i),n(2,u.disabled=!u.disabled,u),j(U,r.runelite_use_custom_jar=a.checked,r),r.runelite_use_custom_jar?i.value&&j(U,r.runelite_custom_jar=i.value,r):(n(1,i.value="",i),j(U,r.runelite_custom_jar="",r),j(U,r.runelite_use_custom_jar=!1,r)),j(W,l=!0,l)}function f(){j(U,r.runelite_custom_jar=i.value,r),j(W,l=!0,l)}function p(){n(3,a.disabled=!0,a),n(2,u.disabled=!0,u);var M=new XMLHttpRequest;M.onreadystatechange=()=>{M.readyState==4&&(M.status==200&&(n(1,i.value=M.responseText,i),j(U,r.runelite_custom_jar=M.responseText,r),j(W,l=!0,l)),n(2,u.disabled=!1,u),n(3,a.disabled=!1,a))},M.open("GET","/jar-file-picker",!0),M.send()}function m(){var M,G,x;if(!o.account||!o.character){B("Please log in to configure RuneLite");return}wn((M=o.credentials)==null?void 0:M.session_id,(G=o.character)==null?void 0:G.accountId,(x=o.character)==null?void 0:x.displayName)}Ae(()=>{n(3,a.checked=r.runelite_use_custom_jar,a),a.checked&&r.runelite_custom_jar?(c.classList.remove("opacity-25"),n(1,i.disabled=!1,i),n(2,u.disabled=!1,u),n(1,i.value=r.runelite_custom_jar,i)):(n(3,a.checked=!1,a),j(U,r.runelite_use_custom_jar=!1,r))});const g=()=>m();function N(M){z[M?"unshift":"push"](()=>{a=M,n(3,a)})}const R=()=>{d()};function C(M){z[M?"unshift":"push"](()=>{i=M,n(1,i)})}const S=()=>{f()};function w(M){z[M?"unshift":"push"](()=>{u=M,n(2,u)})}const L=()=>{p()};function T(M){z[M?"unshift":"push"](()=>{c=M,n(0,c)})}return[c,i,u,a,d,f,p,m,g,N,R,C,S,w,L,T]}class Bn extends ce{constructor(e){super(),le(this,e,Un,qn,oe,{})}}function Jn(t){let e,n,r,o,l,c;return{c(){e=b("div"),n=b("label"),n.textContent="Enable Bolt plugin loader:",r=E(),o=b("input"),_(n,"for","enable_plugins"),_(o,"type","checkbox"),_(o,"name","enable_plugins"),_(o,"id","enable_plugins"),_(o,"class","ml-2"),_(e,"class","mx-auto p-2")},m(i,u){v(i,e,u),h(e,n),h(e,r),h(e,o),o.checked=t[3].rs_plugin_loader,l||(c=[O(o,"change",t[6]),O(o,"change",t[7])],l=!0)},p(i,u){u&8&&(o.checked=i[3].rs_plugin_loader)},d(i){i&&y(e),l=!1,re(c)}}}function Gn(t){let e,n,r,o,l,c,i,u,a,d,f,p=be&&Jn(t);return{c(){e=b("div"),p&&p.c(),n=E(),r=b("div"),o=b("label"),o.textContent="Use custom config URI:",l=E(),c=b("input"),i=E(),u=b("div"),a=b("textarea"),_(o,"for","use_custom_uri"),_(c,"type","checkbox"),_(c,"name","use_custom_uri"),_(c,"id","use_custom_uri"),_(c,"class","ml-2"),_(r,"class","mx-auto p-2"),a.disabled=!0,_(a,"name","config_uri_address"),_(a,"id","config_uri_address"),_(a,"rows","4"),_(a,"class","rounded border-2 border-slate-300 bg-slate-100 text-slate-950 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50"),a.value=" ",_(u,"id","config_uri_div"),_(u,"class","mx-auto p-2 opacity-25"),_(e,"id","rs3_options"),_(e,"class","col-span-3 p-5 pt-10")},m(m,g){v(m,e,g),p&&p.m(e,null),h(e,n),h(e,r),h(r,o),h(r,l),h(r,c),t[8](c),h(e,i),h(e,u),h(u,a),t[11](a),t[12](u),d||(f=[O(c,"change",t[9]),O(a,"change",t[10])],d=!0)},p(m,[g]){be&&p.p(m,g)},i:I,o:I,d(m){m&&y(e),p&&p.d(),t[8](null),t[11](null),t[12](null),d=!1,re(f)}}}function Xn(t,e,n){let r,o,l;F(t,lt,S=>n(13,r=S)),F(t,U,S=>n(3,o=S)),F(t,W,S=>n(14,l=S));let c,i,u;function a(){c.classList.toggle("opacity-25"),n(1,i.disabled=!i.disabled,i),j(W,l=!0,l),u.checked||(n(1,i.value=atob(r.default_config_uri),i),j(U,o.rs_config_uri="",o))}function d(){j(U,o.rs_config_uri=i.value,o),j(W,l=!0,l)}Ae(()=>{o.rs_config_uri?(n(1,i.value=o.rs_config_uri,i),n(2,u.checked=!0,u),a()):n(1,i.value=atob(r.default_config_uri),i)});function f(){o.rs_plugin_loader=this.checked,U.set(o)}const p=()=>W.set(!0);function m(S){z[S?"unshift":"push"](()=>{u=S,n(2,u)})}const g=()=>{a()},N=()=>{d()};function R(S){z[S?"unshift":"push"](()=>{i=S,n(1,i)})}function C(S){z[S?"unshift":"push"](()=>{c=S,n(0,c)})}return[c,i,u,o,a,d,f,p,m,g,N,R,C]}class zn extends ce{constructor(e){super(),le(this,e,Xn,Gn,oe,{})}}function Fn(t){let e,n;return e=new zn({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(A(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function $n(t){let e,n;return e=new Bn({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(A(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Vn(t){let e,n;return e=new Dn({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(A(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Wn(t){let e,n,r,o,l,c,i,u,a,d,f,p,m,g,N,R,C,S,w,L,T,M,G,x;n=new at({}),n.$on("click",t[7]);const k=[Vn,$n,Fn],P=[];function q(H,$){return H[1]==H[5].general?0:H[1]==H[5].osrs?1:H[1]==H[5].rs3?2:-1}return~(L=q(t))&&(T=P[L]=k[L](t)),{c(){e=b("div"),ne(n.$$.fragment),r=E(),o=b("div"),l=b("button"),l.innerHTML='Close',c=E(),i=b("div"),u=b("div"),a=b("button"),d=J("General"),f=b("br"),p=E(),m=b("button"),g=J("OSRS"),N=b("br"),R=E(),C=b("button"),S=J("RS3"),w=E(),T&&T.c(),_(l,"class","absolute right-3 top-3 rounded-full bg-rose-500 p-[2px] shadow-lg duration-200 hover:rotate-90 hover:opacity-75"),_(a,"id","general_button"),_(a,"class",ge),_(m,"id","osrs_button"),_(m,"class",Ue),_(C,"id","rs3_button"),_(C,"class",ge),_(u,"class","relative h-full border-r-2 border-slate-300 pt-10 dark:border-slate-800"),_(i,"class","grid h-full grid-cols-4"),_(o,"class","absolute left-[13%] top-[13%] z-20 h-3/4 w-3/4 rounded-lg bg-slate-100 text-center shadow-lg dark:bg-slate-900"),_(e,"id","settings")},m(H,$){v(H,e,$),ee(n,e,null),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),h(i,u),h(u,a),h(a,d),t[9](a),h(u,f),h(u,p),h(u,m),h(m,g),t[11](m),h(u,N),h(u,R),h(u,C),h(C,S),t[13](C),h(i,w),~L&&P[L].m(i,null),M=!0,G||(x=[O(l,"click",t[8]),O(a,"click",t[10]),O(m,"click",t[12]),O(C,"click",t[14])],G=!0)},p(H,[$]){let $e=L;L=q(H),L!==$e&&(T&&(ve(),D(P[$e],1,1,()=>{P[$e]=null}),Se()),~L?(T=P[L],T||(T=P[L]=k[L](H),T.c()),A(T,1),T.m(i,null)):T=null)},i(H){M||(A(n.$$.fragment,H),A(T),M=!0)},o(H){D(n.$$.fragment,H),D(T),M=!1},d(H){H&&y(e),te(n),t[9](null),t[11](null),t[13](null),~L&&P[L].d(),G=!1,re(x)}}}let Ue="border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 mx-auto my-1 w-3/4",ge="border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 mx-auto my-1 w-3/4";function Zn(t,e,n){let{showSettings:r}=e;var o=(w=>(w[w.general=0]="general",w[w.osrs=1]="osrs",w[w.rs3=2]="rs3",w))(o||{});let l=1,c,i,u;function a(w){switch(w){case 0:n(1,l=0),n(2,c.classList.value=Ue,c),n(3,i.classList.value=ge,i),n(4,u.classList.value=ge,u);break;case 1:n(1,l=1),n(2,c.classList.value=ge,c),n(3,i.classList.value=Ue,i),n(4,u.classList.value=ge,u);break;case 2:n(1,l=2),n(2,c.classList.value=ge,c),n(3,i.classList.value=ge,i),n(4,u.classList.value=Ue,u);break}}function d(w){w.key==="Escape"&&n(0,r=!1)}addEventListener("keydown",d),st(()=>{removeEventListener("keydown",d)});const f=()=>{n(0,r=!1)},p=()=>{n(0,r=!1)};function m(w){z[w?"unshift":"push"](()=>{c=w,n(2,c)})}const g=()=>{a(o.general)};function N(w){z[w?"unshift":"push"](()=>{i=w,n(3,i)})}const R=()=>{a(o.osrs)};function C(w){z[w?"unshift":"push"](()=>{u=w,n(4,u)})}const S=()=>{a(o.rs3)};return t.$$set=w=>{"showSettings"in w&&n(0,r=w.showSettings)},[r,l,c,i,u,o,a,f,p,m,g,N,R,C,S]}class Yn extends ce{constructor(e){super(),le(this,e,Zn,Wn,oe,{showSettings:0})}}function gt(t,e,n){const r=t.slice();return r[1]=e[n],r}function Kn(t){var u;let e,n=((u=t[1].time)==null?void 0:u.toLocaleTimeString())+"",r,o,l=t[1].text+"",c,i;return{c(){e=b("li"),r=J(n),o=J(` + - `),c=J(l),i=E()},m(a,d){v(a,e,d),h(e,r),h(e,o),h(e,c),h(e,i)},p(a,d){var f;d&1&&n!==(n=((f=a[1].time)==null?void 0:f.toLocaleTimeString())+"")&&ie(r,n),d&1&&l!==(l=a[1].text+"")&&ie(c,l)},d(a){a&&y(e)}}}function Qn(t){var u;let e,n=((u=t[1].time)==null?void 0:u.toLocaleTimeString())+"",r,o,l=t[1].text+"",c,i;return{c(){e=b("li"),r=J(n),o=J(` + - `),c=J(l),i=E(),_(e,"class","text-rose-500")},m(a,d){v(a,e,d),h(e,r),h(e,o),h(e,c),h(e,i)},p(a,d){var f;d&1&&n!==(n=((f=a[1].time)==null?void 0:f.toLocaleTimeString())+"")&&ie(r,n),d&1&&l!==(l=a[1].text+"")&&ie(c,l)},d(a){a&&y(e)}}}function mt(t){let e;function n(l,c){return l[1].isError?Qn:Kn}let r=n(t),o=r(t);return{c(){o.c(),e=_e()},m(l,c){o.m(l,c),v(l,e,c)},p(l,c){r===(r=n(l))&&o?o.p(l,c):(o.d(1),o=r(l),o&&(o.c(),o.m(e.parentNode,e)))},d(l){l&&y(e),o.d(l)}}}function es(t){let e,n,r,o,l=pe(t[0]),c=[];for(let i=0;i',r=E(),o=b("ol");for(let i=0;in(0,r=o)),[r]}class ns extends ce{constructor(e){super(),le(this,e,ts,es,oe,{})}}function kt(t,e,n){const r=t.slice();return r[13]=e[n],r}function ss(t){let e,n,r;return{c(){e=b("button"),e.textContent="Plugin menu",e.disabled=!K(be),_(e,"title",K(be)?null:"Coming soon..."),_(e,"class","mx-auto mb-2 w-52 rounded-lg p-2 font-bold text-black duration-200 enabled:bg-blue-500 enabled:hover:opacity-75 disabled:bg-gray-500")},m(o,l){v(o,e,l),n||(r=O(e,"click",t[8]),n=!0)},p:I,d(o){o&&y(e),n=!1,r()}}}function rs(t){let e,n,r,o,l,c,i,u,a;return{c(){e=b("label"),e.textContent="Game Client",n=E(),r=b("br"),o=E(),l=b("select"),c=b("option"),c.textContent="RuneLite",i=b("option"),i.textContent="HDOS",_(e,"for","game_client_select"),_(e,"class","text-sm"),_(c,"data-id",de.runeLite),_(c,"class","dark:bg-slate-900"),c.__value="RuneLite",ke(c,c.__value),_(i,"data-id",de.hdos),_(i,"class","dark:bg-slate-900"),i.__value="HDOS",ke(i,i.__value),_(l,"id","game_client_select"),_(l,"class","mx-auto w-52 cursor-pointer rounded-lg border-2 border-slate-300 bg-inherit p-2 text-inherit duration-200 hover:opacity-75 dark:border-slate-800")},m(d,f){v(d,e,f),v(d,n,f),v(d,r,f),v(d,o,f),v(d,l,f),h(l,c),h(l,i),t[7](l),u||(a=O(l,"change",t[5]),u=!0)},p:I,d(d){d&&(y(e),y(n),y(r),y(o),y(l)),t[7](null),u=!1,a()}}}function wt(t){let e,n=pe(t[4].account.characters),r=[];for(let o=0;on(4,r=R)),F(t,U,R=>n(11,o=R)),F(t,W,R=>n(12,l=R));let{showPluginMenu:c=!1}=e,i,u;function a(){var C,L;if(!r.account)return;const R=i[i.selectedIndex].getAttribute("data-id");I(V,r.character=r.account.characters.get(R),r),r.character&&((L=o.selected_characters)==null||L.set(r.account.userId,(C=r.character)==null?void 0:C.accountId)),I(W,l=!0,l)}function d(){u.value=="RuneLite"?(I(V,r.client=de.runeLite,r),I(U,o.selected_client_index=de.runeLite,o)):u.value=="HDOS"&&(I(V,r.client=de.hdos,r),I(U,o.selected_client_index=de.hdos,o)),I(W,l=!0,l)}function f(){var R,C,L,y,x,T,A,z,w;if(!r.account||!r.character){B("Please log in to launch a client");return}switch(r.game){case Q.osrs:r.client==de.runeLite?kn((R=r.credentials)==null?void 0:R.session_id,(C=r.character)==null?void 0:C.accountId,(L=r.character)==null?void 0:L.displayName):r.client==de.hdos&&yn((y=r.credentials)==null?void 0:y.session_id,(x=r.character)==null?void 0:x.accountId,(T=r.character)==null?void 0:T.displayName);break;case Q.rs3:mn((A=r.credentials)==null?void 0:A.session_id,(z=r.character)==null?void 0:z.accountId,(w=r.character)==null?void 0:w.displayName);break}}Kt(()=>{var R;if(r.game==Q.osrs&&r.client&&n(3,u.selectedIndex=r.client,u),r.account&&((R=o.selected_characters)!=null&&R.has(r.account.userId))){for(let C=0;C{o.selected_game_index==Q.osrs&&(n(3,u.selectedIndex=o.selected_client_index,u),I(V,r.client=u.selectedIndex,r))});function p(R){X[R?"unshift":"push"](()=>{u=R,n(3,u)})}const k=()=>{n(0,c=K(be)??!1)};function g(R){X[R?"unshift":"push"](()=>{i=R,n(2,i)})}const E=()=>a();return t.$$set=R=>{"showPluginMenu"in R&&n(0,c=R.showPluginMenu)},[c,a,i,u,r,d,f,p,k,g,E]}class as extends ce{constructor(e){super(),le(this,e,is,cs,oe,{showPluginMenu:0,characterChanged:1})}get characterChanged(){return this.$$.ctx[1]}}function us(t){let e;return{c(){e=b("div"),e.innerHTML='',_(e,"class","container mx-auto bg-slate-100 p-5 text-center text-slate-900 dark:bg-slate-900 dark:text-slate-50")},m(n,r){S(n,e,r)},p:N,i:N,o:N,d(n){n&&v(e)}}}class ds extends ce{constructor(e){super(),le(this,e,null,us,oe,{})}}function vt(t,e,n){const r=t.slice();return r[23]=e[n][0],r[22]=e[n][1],r}function St(t,e,n){const r=t.slice();return r[27]=e[n],r}function fs(t){let e;return{c(){e=b("p"),e.textContent="error"},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function ps(t){let e;function n(l,c){return l[26].length==0?hs:_s}let r=n(t),o=r(t);return{c(){o.c(),e=_e()},m(l,c){o.m(l,c),S(l,e,c)},p(l,c){r===(r=n(l))&&o?o.p(l,c):(o.d(1),o=r(l),o&&(o.c(),o.m(e.parentNode,e)))},d(l){l&&v(e),o.d(l)}}}function _s(t){let e,n=pe(t[26]),r=[];for(let o=0;ot[15].call(e))},m(f,p){S(f,e,p);for(let k=0;kr.parentNode,l.anchor=r},p(c,i){t=c,l.ctx=t,i&64&&o!==(o=t[6])&&Te(o,l)||lt(l,t,i)},d(c){c&&(v(e),v(n),v(r)),l.block.d(c),l.token=null,l=null}}}function ws(t){let e,n,r,o,l,c,i,u,a;function d(k,g){return g&128&&(c=null),c==null&&(c=Object.entries(k[7]).length!==0),c?Ts:Rs}let f=d(t,-1),p=f(t);return{c(){e=b("button"),n=J("+"),r=M(),o=b("br"),l=M(),p.c(),i=_e(),_(e,"class","aspect-square w-8 rounded-lg border-2 border-blue-500 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:border-gray-500"),e.disabled=t[3]},m(k,g){S(k,e,g),h(e,n),S(k,r,g),S(k,o,g),S(k,l,g),p.m(k,g),S(k,i,g),u||(a=j(e,"click",t[9]),u=!0)},p(k,g){g&8&&(e.disabled=k[3]),f===(f=d(k,g))&&p?p.p(k,g):(p.d(1),p=f(k),p&&(p.c(),p.m(i.parentNode,i)))},d(k){k&&(v(e),v(r),v(o),v(l),v(i)),p.d(k),u=!1,a()}}}function ys(t){let e;return{c(){e=b("p"),e.textContent="error"},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function vs(t){let e,n;function r(c,i){return i&193&&(e=null),e==null&&(e=!!(c[22]&&c[22].main&&Object.keys(c[7]).includes(c[0]))),e?Ls:Ss}let o=r(t,-1),l=o(t);return{c(){l.c(),n=_e()},m(c,i){l.m(c,i),S(c,n,i)},p(c,i){o===(o=r(c,i))&&l?l.p(c,i):(l.d(1),l=o(c),l&&(l.c(),l.m(n.parentNode,n)))},d(c){c&&v(n),l.d(c)}}}function Ss(t){let e;return{c(){e=b("p"),e.textContent="can't start plugin: does not appear to be configured"},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function Ls(t){let e;function n(l,c){return l[7][l[0]].path?Cs:xs}let r=n(t),o=r(t);return{c(){o.c(),e=_e()},m(l,c){o.m(l,c),S(l,e,c)},p(l,c){r===(r=n(l))&&o?o.p(l,c):(o.d(1),o=r(l),o&&(o.c(),o.m(e.parentNode,e)))},d(l){l&&v(e),o.d(l)}}}function xs(t){let e;return{c(){e=b("p"),e.textContent="can't start plugin: no path is configured"},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function Cs(t){let e,n,r=t[22].name+"",o,l,c;function i(){return t[18](t[22])}return{c(){e=b("button"),n=J("Start "),o=J(r),_(e,"class","mx-auto mb-1 w-auto rounded-lg bg-emerald-500 p-2 font-bold text-black duration-200 hover:opacity-75")},m(u,a){S(u,e,a),h(e,n),h(e,o),l||(c=j(e,"click",i),l=!0)},p(u,a){t=u,a&64&&r!==(r=t[22].name+"")&&ie(o,r)},d(u){u&&v(e),l=!1,c()}}}function Ps(t){let e;return{c(){e=b("p"),e.textContent="loading..."},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function Rs(t){let e;return{c(){e=b("p"),e.textContent=`You have no plugins installed. Click the + button and select a plugin's bolt.json file - to add it.`},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function Ts(t){let e=Object.keys(K(fe)).includes(t[0])&&t[6]!==null,n,r=e&&Ct(t);return{c(){r&&r.c(),n=_e()},m(o,l){r&&r.m(o,l),S(o,n,l)},p(o,l){l&65&&(e=Object.keys(K(fe)).includes(o[0])&&o[6]!==null),e?r?r.p(o,l):(r=Ct(o),r.c(),r.m(n.parentNode,n)):r&&(r.d(1),r=null)},d(o){o&&v(n),r&&r.d(o)}}}function Ct(t){let e,n,r,o,l,c,i,u={ctx:t,current:null,token:null,hasCatch:!0,pending:Ns,then:Es,catch:Ms,value:22};return Te(e=t[6],u),{c(){u.block.c(),n=M(),r=b("button"),r.textContent="Remove",o=M(),l=b("button"),l.textContent="Reload",_(r,"class","mx-auto mb-1 w-[min(144px,_25%)] rounded-lg p-2 font-bold text-black duration-200 enabled:bg-rose-500 enabled:hover:opacity-75 disabled:bg-gray-500"),_(l,"class","mx-auto mb-1 w-[min(144px,_25%)] rounded-lg p-2 font-bold text-black duration-200 enabled:bg-blue-500 enabled:hover:opacity-75 disabled:bg-gray-500")},m(a,d){u.block.m(a,u.anchor=d),u.mount=()=>n.parentNode,u.anchor=n,S(a,n,d),S(a,r,d),S(a,o,d),S(a,l,d),c||(i=[j(r,"click",t[16]),j(l,"click",t[17])],c=!0)},p(a,d){t=a,u.ctx=t,d&64&&e!==(e=t[6])&&Te(e,u)||lt(u,t,d)},d(a){a&&(v(n),v(r),v(o),v(l)),u.block.d(a),u.token=null,u=null,c=!1,re(i)}}}function Ms(t){let e,n,r;return{c(){e=b("p"),e.textContent="error",n=M(),r=b("br")},m(o,l){S(o,e,l),S(o,n,l),S(o,r,l)},p:N,d(o){o&&(v(e),v(n),v(r))}}}function Es(t){let e,n=(t[22].name??je)+"",r,o,l,c=(t[22].description??"no description")+"",i,u,a,d;return{c(){e=b("p"),r=J(n),o=M(),l=b("p"),i=J(c),a=M(),d=b("br"),_(e,"class","pb-4 text-xl font-bold"),_(l,"class",u=t[22].description?null:"italic")},m(f,p){S(f,e,p),h(e,r),S(f,o,p),S(f,l,p),h(l,i),S(f,a,p),S(f,d,p)},p(f,p){p&64&&n!==(n=(f[22].name??je)+"")&&ie(r,n),p&64&&c!==(c=(f[22].description??"no description")+"")&&ie(i,c),p&64&&u!==(u=f[22].description?null:"italic")&&_(l,"class",u)},d(f){f&&(v(e),v(o),v(l),v(a),v(d))}}}function Ns(t){let e;return{c(){e=b("p"),e.textContent="loading..."},m(n,r){S(n,e,r)},p:N,d(n){n&&v(e)}}}function Is(t){let e,n,r,o,l,c,i,u,a,d,f,p,k,g,E,R,C,L,y;n=new at({}),n.$on("click",t[11]);let x={ctx:t,current:null,token:null,hasCatch:!0,pending:bs,then:ps,catch:fs,value:26};Te(g=t[2],x);function T(w,m){return be?ms:gs}let z=T()(t);return{c(){e=b("div"),ne(n.$$.fragment),r=M(),o=b("div"),l=b("button"),l.innerHTML='Close',c=M(),i=b("div"),u=b("button"),a=J("Manage Plugins"),f=M(),p=b("hr"),k=M(),x.block.c(),E=M(),R=b("div"),z.c(),_(l,"class","absolute right-3 top-3 rounded-full bg-rose-500 p-[2px] shadow-lg duration-200 hover:rotate-90 hover:opacity-75"),_(u,"class",d="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(t[4]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"),_(p,"class","p-1 dark:border-slate-700"),_(i,"class","left-0 float-left h-full w-[min(180px,_50%)] overflow-hidden border-r-2 border-slate-300 pt-2 dark:border-slate-800"),_(R,"class","h-full pt-10"),_(o,"class","absolute left-[5%] top-[5%] z-20 h-[90%] w-[90%] rounded-lg bg-slate-100 text-center shadow-lg dark:bg-slate-900")},m(w,m){S(w,e,m),ee(n,e,null),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),h(i,u),h(u,a),h(i,f),h(i,p),h(i,k),x.block.m(i,x.anchor=null),x.mount=()=>i,x.anchor=null,h(o,E),h(o,R),z.m(R,null),C=!0,L||(y=[j(l,"click",t[11]),j(u,"click",t[13])],L=!0)},p(w,[m]){t=w,(!C||m&16&&d!==(d="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(t[4]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"))&&_(u,"class",d),x.ctx=t,m&4&&g!==(g=t[2])&&Te(g,x)||lt(x,t,m),z.p(t,m)},i(w){C||(H(n.$$.fragment,w),C=!0)},o(w){D(n.$$.fragment,w),C=!1},d(w){w&&v(e),te(n),x.block.d(),x.token=null,x=null,z.d(),L=!1,re(y)}}}const je="(unnamed)",Pt="(new character)";function js(t,e,n){let r,o,l;F(t,et,m=>n(2,o=m)),F(t,fe,m=>n(7,l=m));let{showPluginMenu:c}=e;const i=m=>new Promise((P,q)=>{const O=m.concat(m.endsWith("/")?"bolt.json":"/bolt.json");var $=new XMLHttpRequest;$.onreadystatechange=()=>{$.readyState==4&&($.status==200?P(JSON.parse($.responseText)):q($.responseText))},$.open("GET","/read-json-file?".concat(new URLSearchParams({path:O}).toString()),!0),$.send()}),u=m=>{const q=K(fe)[m];if(!q)return null;const O=q.path;return O?i(O):null},a=(m,P)=>{i(m).then(q=>{do n(0,E=crypto.randomUUID());while(Object.keys(K(fe)).includes(E));I(fe,l[E]={name:q.name??je,path:m},l),n(5,L=!0)}).catch(q=>{console.error(`Config file '${P}' couldn't be fetched, reason: ${q}`)})};let d=!1;const f=()=>{n(3,d=!0);var m=new XMLHttpRequest;m.onreadystatechange=()=>{if(m.readyState==4&&(n(3,d=!1),m.status==200)){const P=K(ze)==="windows"?m.responseText.replaceAll("\\","/"):m.responseText;if(P.endsWith("/bolt.json")){const q=P.substring(0,P.length-9);a(q,P)}else console.log(`Selection '${P}' is not named bolt.json; ignored`)}},m.open("GET","/json-file-picker",!0),m.send()};et.set(Gt());const p=(m,P,q,O)=>{var $=new XMLHttpRequest;$.onreadystatechange=()=>{$.readyState==4&&B(`Start-plugin status: ${$.statusText.trim()}`)},$.open("GET","/start-plugin?".concat(new URLSearchParams({client:m,id:P,path:q,main:O}).toString()),!0),$.send()},k=()=>{d||n(12,c=!1)};function g(m){m.key==="Escape"&&k()}addEventListener("keydown",g);var E,R=!1,C;let L=!1;rt(()=>{L&&vn(),removeEventListener("keydown",g)});const y=()=>n(4,R=!1),x=m=>{n(1,C=m.uid),n(4,R=!0)};function T(){E=Zt(this),n(0,E)}const A=()=>{n(6,r=null),n(5,L=!0);let m=K(fe);delete m[E],fe.set(m)},z=()=>n(6,r=u(E)),w=m=>p(C,E,l[E].path??"",m.main??"");return t.$$set=m=>{"showPluginMenu"in m&&n(12,c=m.showPluginMenu)},t.$$.update=()=>{t.$$.dirty&6&&o.then(m=>{m.some(P=>P.uid===C)||n(4,R=!1)}),t.$$.dirty&1&&n(6,r=u(E))},[E,C,o,d,R,L,r,l,u,f,p,k,c,y,x,T,A,z,w]}class Os extends ce{constructor(e){super(),le(this,e,js,Is,oe,{showPluginMenu:12})}}function Hs(t){let e,n,r,o,l,c,i,u,a,d,f,p,k,g,E,R,C=t[1]&&Rt(t),L=t[0]&&Tt(t),y=t[3]&&Mt();function x(w){t[6](w)}let T={};t[0]!==void 0&&(T.showSettings=t[0]),o=new Mn({props:T}),X.push(()=>Ie(o,"showSettings",x));function A(w){t[7](w)}let z={};return t[1]!==void 0&&(z.showPluginMenu=t[1]),d=new as({props:z}),X.push(()=>Ie(d,"showPluginMenu",A)),E=new ns({}),{c(){C&&C.c(),e=M(),L&&L.c(),n=M(),y&&y.c(),r=M(),ne(o.$$.fragment),c=M(),i=b("div"),u=b("div"),a=M(),ne(d.$$.fragment),p=M(),k=b("div"),g=M(),ne(E.$$.fragment),_(i,"class","mt-16 grid h-full grid-flow-col grid-cols-3")},m(w,m){C&&C.m(w,m),S(w,e,m),L&&L.m(w,m),S(w,n,m),y&&y.m(w,m),S(w,r,m),ee(o,w,m),S(w,c,m),S(w,i,m),h(i,u),h(i,a),ee(d,i,null),h(i,p),h(i,k),S(w,g,m),ee(E,w,m),R=!0},p(w,m){w[1]?C?(C.p(w,m),m&2&&H(C,1)):(C=Rt(w),C.c(),H(C,1),C.m(e.parentNode,e)):C&&(ve(),D(C,1,1,()=>{C=null}),Se()),w[0]?L?(L.p(w,m),m&1&&H(L,1)):(L=Tt(w),L.c(),H(L,1),L.m(n.parentNode,n)):L&&(ve(),D(L,1,1,()=>{L=null}),Se()),w[3]?y?m&8&&H(y,1):(y=Mt(),y.c(),H(y,1),y.m(r.parentNode,r)):y&&(ve(),D(y,1,1,()=>{y=null}),Se());const P={};!l&&m&1&&(l=!0,P.showSettings=w[0],Ne(()=>l=!1)),o.$set(P);const q={};!f&&m&2&&(f=!0,q.showPluginMenu=w[1],Ne(()=>f=!1)),d.$set(q)},i(w){R||(H(C),H(L),H(y),H(o.$$.fragment,w),H(d.$$.fragment,w),H(E.$$.fragment,w),R=!0)},o(w){D(C),D(L),D(y),D(o.$$.fragment,w),D(d.$$.fragment,w),D(E.$$.fragment,w),R=!1},d(w){w&&(v(e),v(n),v(r),v(c),v(i),v(g)),C&&C.d(w),L&&L.d(w),y&&y.d(w),te(o,w),te(d),te(E,w)}}}function As(t){let e,n;return e=new ds({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},p:N,i(r){n||(H(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Rt(t){let e,n,r;function o(c){t[4](c)}let l={};return t[1]!==void 0&&(l.showPluginMenu=t[1]),e=new Os({props:l}),X.push(()=>Ie(e,"showPluginMenu",o)),{c(){ne(e.$$.fragment)},m(c,i){ee(e,c,i),r=!0},p(c,i){const u={};!n&&i&2&&(n=!0,u.showPluginMenu=c[1],Ne(()=>n=!1)),e.$set(u)},i(c){r||(H(e.$$.fragment,c),r=!0)},o(c){D(e.$$.fragment,c),r=!1},d(c){te(e,c)}}}function Tt(t){let e,n,r;function o(c){t[5](c)}let l={};return t[0]!==void 0&&(l.showSettings=t[0]),e=new Yn({props:l}),X.push(()=>Ie(e,"showSettings",o)),{c(){ne(e.$$.fragment)},m(c,i){ee(e,c,i),r=!0},p(c,i){const u={};!n&&i&1&&(n=!0,u.showSettings=c[0],Ne(()=>n=!1)),e.$set(u)},i(c){r||(H(e.$$.fragment,c),r=!0)},o(c){D(e.$$.fragment,c),r=!1},d(c){te(e,c)}}}function Mt(t){let e,n;return e=new On({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(H(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Ds(t){let e,n,r,o;const l=[As,Hs],c=[];function i(u,a){return u[2]?0:1}return n=i(t),r=c[n]=l[n](t),{c(){e=b("main"),r.c(),_(e,"class","h-full")},m(u,a){S(u,e,a),c[n].m(e,null),o=!0},p(u,[a]){let d=n;n=i(u),n===d?c[n].p(u,a):(ve(),D(c[d],1,1,()=>{c[d]=null}),Se(),r=c[n],r?r.p(u,a):(r=c[n]=l[n](u),r.c()),H(r,1),r.m(e,null))},i(u){o||(H(r),o=!0)},o(u){D(r),o=!1},d(u){u&&v(e),c[n].d()}}}function qs(t,e,n){let r;F(t,Ge,p=>n(3,r=p));let o=!1,l=!1,c=!1;dn();const i=window.opener||window.parent;if(i){const p=new URLSearchParams(window.location.search);p.get("id_token")?(c=!0,i.postMessage({type:"gameSessionServerAuth",code:p.get("code"),id_token:p.get("id_token"),state:p.get("state")},"*")):p.get("code")&&(c=!0,i.postMessage({type:"authCode",code:p.get("code"),state:p.get("state")},"*"))}function u(p){l=p,n(1,l)}function a(p){o=p,n(0,o)}function d(p){o=p,n(0,o)}function f(p){l=p,n(1,l)}return[o,l,c,r,u,a,d,f]}class Us extends ce{constructor(e){super(),le(this,e,qs,Ds,oe,{})}}new Us({target:document.getElementById("app")});const ae=[],Bs=K(Ht);let Z;ae.push(ct.subscribe(t=>Z=t));let se;ae.push(U.subscribe(t=>se=t));ae.push(ze.subscribe(t=>t));let me;ae.push(ye.subscribe(t=>me=t));ae.push(be.subscribe(t=>t??!1));let ue;ae.push(Fe.subscribe(t=>ue=t));let ut;ae.push(it.subscribe(t=>ut=t));ae.push(Le.subscribe(t=>t));ae.push(Je.subscribe(t=>t));let Xe;ae.push(V.subscribe(t=>Xe=t));function Js(){var o;const t=atob(Z.origin),e=atob(Z.clientid),n=t.concat("/oauth2/token");me.size==0&&Ge.set(!0),an(),se.selected_game_accounts&&((o=se.selected_game_accounts)==null?void 0:o.size)>0&&U.update(l=>{var c;return l.selected_characters=l.selected_game_accounts,(c=l.selected_game_accounts)==null||c.clear(),l});const r=[Bs,t,atob(Z.origin_2fa)];window.addEventListener("message",l=>{if(!r.includes(l.origin)){B(`discarding window message from origin ${l.origin}`);return}let c=ue;const i=new XMLHttpRequest;switch(l.data.type){case"authCode":if(c){Fe.set({});const u=new URLSearchParams({grant_type:"authorization_code",client_id:atob(Z.clientid),code:l.data.code,code_verifier:c.verifier,redirect_uri:atob(Z.redirect)});i.onreadystatechange=()=>{if(i.readyState==4)if(i.status==200){const a=qt(i.response),d=Ot(a);d?pt(c==null?void 0:c.win,d).then(f=>{f&&(ye.update(p=>(p.set(d.sub,d),p)),Me())}):(G("Error: invalid credentials received",!1),c.win.close())}else G(`Error: from ${n}: ${i.status}: ${i.response}`,!1),c.win.close()},i.open("POST",n,!0),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.setRequestHeader("Accept","application/json"),i.send(u)}break;case"externalUrl":i.onreadystatechange=()=>{i.readyState==4&&B(`External URL status: '${i.responseText.trim()}'`)},i.open("POST","/open-external-url",!0),i.send(l.data.url);break;case"gameSessionServerAuth":if(c=ut.find(u=>l.data.state==u.state),c){un(c,!0);const u=l.data.id_token.split(".");if(u.length!==3){G(`Malformed id_token: ${u.length} sections, expected 3`,!1);break}const a=JSON.parse(atob(u[0]));if(a.typ!=="JWT"){G(`Bad id_token header: typ ${a.typ}, expected JWT`,!1);break}const d=JSON.parse(atob(u[1]));if(atob(d.nonce)!==c.nonce){G("Incorrect nonce in id_token",!1);break}const f=atob(Z.auth_api).concat("/sessions");i.onreadystatechange=()=>{if(i.readyState==4)if(i.status==200){const p=atob(Z.auth_api).concat("/accounts");c.creds.session_id=JSON.parse(i.response).sessionId,Bt(c.creds,p,c.account_info_promise).then(k=>{k&&(ye.update(g=>{var E;return g.set((E=c==null?void 0:c.creds)==null?void 0:E.sub,c.creds),g}),Me())})}else G(`Error: from ${f}: ${i.status}: ${i.response}`,!1)},i.open("POST",f,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("Accept","application/json"),i.send(`{"idToken": "${l.data.id_token}"}`)}break;case"gameClientListUpdate":et.set(Gt());break;default:B("Unknown message type: ".concat(l.data.type));break}}),(async()=>(me.size>0&&me.forEach(async l=>{const c=await Dt(l,n,e);c!==null&&c!==0&&(G(`Discarding expired login for #${l.sub}`,!1),ye.update(u=>(u.delete(l.sub),u)),Me());let i;if(c===null&&await pt(null,l)?i={creds:l,valid:!0}:i={creds:l,valid:c===0},i.valid){const u=l;ye.update(a=>(a.set(u.sub,u),a)),Me()}}),W.set(!1)))()}function B(t){console.log(t);const e={isError:!1,text:t,time:new Date(Date.now())};Le.update(n=>(n.unshift(e),n))}function G(t,e){const n={isError:!0,text:t,time:new Date(Date.now())};if(Le.update(r=>(r.unshift(n),r)),!e)console.error(t);else throw new Error(t)}ct.set(s());onload=()=>Js();onunload=()=>{for(const t in ae)delete ae[t];$e()}; + `)&&(e.__value=o,ke(e,e.__value))},d(u){u&&y(e),i.d()}}}function cs(t){let e,n,r,o,l,c,i,u,a,d,f,p,m,g,N,R;function C(T,M){if(T[4].game==Q.osrs)return rs;if(T[4].game==Q.rs3)return ss}let S=C(t),w=S&&S(t),L=t[4].account&&wt(t);return{c(){e=b("div"),n=b("img"),o=E(),l=b("button"),l.textContent="Play",c=E(),i=b("div"),w&&w.c(),u=E(),a=b("div"),d=b("label"),d.textContent="Character",f=E(),p=b("br"),m=E(),g=b("select"),L&&L.c(),$t(n.src,r="svgs/rocket-solid.svg")||_(n,"src",r),_(n,"alt","Launch icon"),_(n,"class","mx-auto mb-5 w-24 rounded-3xl bg-gradient-to-br from-rose-500 to-violet-500 p-5"),_(l,"class","mx-auto mb-2 w-52 rounded-lg bg-emerald-500 p-2 font-bold text-black duration-200 hover:opacity-75"),_(i,"class","mx-auto my-2"),_(d,"for","character_select"),_(d,"class","text-sm"),_(g,"id","character_select"),_(g,"class","mx-auto w-52 cursor-pointer rounded-lg border-2 border-slate-300 bg-inherit p-2 text-inherit duration-200 hover:opacity-75 dark:border-slate-800"),_(a,"class","mx-auto my-2"),_(e,"class","bg-grad flex h-full flex-col border-slate-300 p-5 duration-200 dark:border-slate-800")},m(T,M){v(T,e,M),h(e,n),h(e,o),h(e,l),h(e,c),h(e,i),w&&w.m(i,null),h(e,u),h(e,a),h(a,d),h(a,f),h(a,p),h(a,m),h(a,g),L&&L.m(g,null),t[9](g),N||(R=[O(l,"click",t[6]),O(g,"change",t[10])],N=!0)},p(T,[M]){S===(S=C(T))&&w?w.p(T,M):(w&&w.d(1),w=S&&S(T),w&&(w.c(),w.m(i,null))),T[4].account?L?L.p(T,M):(L=wt(T),L.c(),L.m(g,null)):L&&(L.d(1),L=null)},i:I,o:I,d(T){T&&y(e),w&&w.d(),L&&L.d(),t[9](null),N=!1,re(R)}}}function is(t,e,n){let r,o,l;F(t,V,R=>n(4,r=R)),F(t,U,R=>n(11,o=R)),F(t,W,R=>n(12,l=R));let{showPluginMenu:c=!1}=e,i,u;function a(){var C,S;if(!r.account)return;const R=i[i.selectedIndex].getAttribute("data-id");j(V,r.character=r.account.characters.get(R),r),r.character&&((S=o.selected_characters)==null||S.set(r.account.userId,(C=r.character)==null?void 0:C.accountId)),j(W,l=!0,l)}function d(){u.value=="RuneLite"?(j(V,r.client=de.runeLite,r),j(U,o.selected_client_index=de.runeLite,o)):u.value=="HDOS"&&(j(V,r.client=de.hdos,r),j(U,o.selected_client_index=de.hdos,o)),j(W,l=!0,l)}function f(){var R,C,S,w,L,T,M,G,x;if(!r.account||!r.character){B("Please log in to launch a client");return}switch(r.game){case Q.osrs:r.client==de.runeLite?kn((R=r.credentials)==null?void 0:R.session_id,(C=r.character)==null?void 0:C.accountId,(S=r.character)==null?void 0:S.displayName):r.client==de.hdos&&yn((w=r.credentials)==null?void 0:w.session_id,(L=r.character)==null?void 0:L.accountId,(T=r.character)==null?void 0:T.displayName);break;case Q.rs3:mn((M=r.credentials)==null?void 0:M.session_id,(G=r.character)==null?void 0:G.accountId,(x=r.character)==null?void 0:x.displayName);break}}Kt(()=>{var R;if(r.game==Q.osrs&&r.client&&n(3,u.selectedIndex=r.client,u),r.account&&((R=o.selected_characters)!=null&&R.has(r.account.userId))){for(let C=0;C{o.selected_game_index==Q.osrs&&(n(3,u.selectedIndex=o.selected_client_index,u),j(V,r.client=u.selectedIndex,r))});function p(R){z[R?"unshift":"push"](()=>{u=R,n(3,u)})}const m=()=>{n(0,c=K(be)??!1)};function g(R){z[R?"unshift":"push"](()=>{i=R,n(2,i)})}const N=()=>a();return t.$$set=R=>{"showPluginMenu"in R&&n(0,c=R.showPluginMenu)},[c,a,i,u,r,d,f,p,m,g,N]}class as extends ce{constructor(e){super(),le(this,e,is,cs,oe,{showPluginMenu:0,characterChanged:1})}get characterChanged(){return this.$$.ctx[1]}}function us(t){let e;return{c(){e=b("div"),e.innerHTML='',_(e,"class","container mx-auto bg-slate-100 p-5 text-center text-slate-900 dark:bg-slate-900 dark:text-slate-50")},m(n,r){v(n,e,r)},p:I,i:I,o:I,d(n){n&&y(e)}}}class ds extends ce{constructor(e){super(),le(this,e,null,us,oe,{})}}function vt(t,e,n){const r=t.slice();return r[23]=e[n][0],r[22]=e[n][1],r}function St(t,e,n){const r=t.slice();return r[27]=e[n],r}function fs(t){let e;return{c(){e=b("p"),e.textContent="error"},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function ps(t){let e;function n(l,c){return l[26].length==0?hs:_s}let r=n(t),o=r(t);return{c(){o.c(),e=_e()},m(l,c){o.m(l,c),v(l,e,c)},p(l,c){r===(r=n(l))&&o?o.p(l,c):(o.d(1),o=r(l),o&&(o.c(),o.m(e.parentNode,e)))},d(l){l&&y(e),o.d(l)}}}function _s(t){let e,n=pe(t[26]),r=[];for(let o=0;ot[15].call(e))},m(f,p){v(f,e,p);for(let m=0;mr.parentNode,l.anchor=r},p(c,i){t=c,l.ctx=t,i&64&&o!==(o=t[6])&&Te(o,l)||ot(l,t,i)},d(c){c&&(y(e),y(n),y(r)),l.block.d(c),l.token=null,l=null}}}function ws(t){let e,n,r,o,l,c,i,u,a;function d(m,g){return g&128&&(c=null),c==null&&(c=Object.entries(m[7]).length!==0),c?Ts:Rs}let f=d(t,-1),p=f(t);return{c(){e=b("button"),n=J("+"),r=E(),o=b("br"),l=E(),p.c(),i=_e(),_(e,"class","aspect-square w-8 rounded-lg border-2 border-blue-500 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:border-gray-500"),e.disabled=t[3]},m(m,g){v(m,e,g),h(e,n),v(m,r,g),v(m,o,g),v(m,l,g),p.m(m,g),v(m,i,g),u||(a=O(e,"click",t[9]),u=!0)},p(m,g){g&8&&(e.disabled=m[3]),f===(f=d(m,g))&&p?p.p(m,g):(p.d(1),p=f(m),p&&(p.c(),p.m(i.parentNode,i)))},d(m){m&&(y(e),y(r),y(o),y(l),y(i)),p.d(m),u=!1,a()}}}function ys(t){let e;return{c(){e=b("p"),e.textContent="error"},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function vs(t){let e,n;function r(c,i){return i&193&&(e=null),e==null&&(e=!!(c[22]&&c[22].main&&Object.keys(c[7]).includes(c[0]))),e?Ls:Ss}let o=r(t,-1),l=o(t);return{c(){l.c(),n=_e()},m(c,i){l.m(c,i),v(c,n,i)},p(c,i){o===(o=r(c,i))&&l?l.p(c,i):(l.d(1),l=o(c),l&&(l.c(),l.m(n.parentNode,n)))},d(c){c&&y(n),l.d(c)}}}function Ss(t){let e;return{c(){e=b("p"),e.textContent="can't start plugin: does not appear to be configured"},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function Ls(t){let e;function n(l,c){return l[7][l[0]].path?xs:Cs}let r=n(t),o=r(t);return{c(){o.c(),e=_e()},m(l,c){o.m(l,c),v(l,e,c)},p(l,c){r===(r=n(l))&&o?o.p(l,c):(o.d(1),o=r(l),o&&(o.c(),o.m(e.parentNode,e)))},d(l){l&&y(e),o.d(l)}}}function Cs(t){let e;return{c(){e=b("p"),e.textContent="can't start plugin: no path is configured"},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function xs(t){let e,n,r=t[22].name+"",o,l,c;function i(){return t[18](t[22])}return{c(){e=b("button"),n=J("Start "),o=J(r),_(e,"class","mx-auto mb-1 w-auto rounded-lg bg-emerald-500 p-2 font-bold text-black duration-200 hover:opacity-75")},m(u,a){v(u,e,a),h(e,n),h(e,o),l||(c=O(e,"click",i),l=!0)},p(u,a){t=u,a&64&&r!==(r=t[22].name+"")&&ie(o,r)},d(u){u&&y(e),l=!1,c()}}}function Ps(t){let e;return{c(){e=b("p"),e.textContent="loading..."},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function Rs(t){let e;return{c(){e=b("p"),e.textContent=`You have no plugins installed. Click the + button and select a plugin's bolt.json file + to add it.`},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function Ts(t){let e=Object.keys(K(fe)).includes(t[0])&&t[6]!==null,n,r=e&&xt(t);return{c(){r&&r.c(),n=_e()},m(o,l){r&&r.m(o,l),v(o,n,l)},p(o,l){l&65&&(e=Object.keys(K(fe)).includes(o[0])&&o[6]!==null),e?r?r.p(o,l):(r=xt(o),r.c(),r.m(n.parentNode,n)):r&&(r.d(1),r=null)},d(o){o&&y(n),r&&r.d(o)}}}function xt(t){let e,n,r,o,l,c,i,u={ctx:t,current:null,token:null,hasCatch:!0,pending:Ns,then:Es,catch:Ms,value:22};return Te(e=t[6],u),{c(){u.block.c(),n=E(),r=b("button"),r.textContent="Remove",o=E(),l=b("button"),l.textContent="Reload",_(r,"class","mx-auto mb-1 w-[min(144px,_25%)] rounded-lg p-2 font-bold text-black duration-200 enabled:bg-rose-500 enabled:hover:opacity-75 disabled:bg-gray-500"),_(l,"class","mx-auto mb-1 w-[min(144px,_25%)] rounded-lg p-2 font-bold text-black duration-200 enabled:bg-blue-500 enabled:hover:opacity-75 disabled:bg-gray-500")},m(a,d){u.block.m(a,u.anchor=d),u.mount=()=>n.parentNode,u.anchor=n,v(a,n,d),v(a,r,d),v(a,o,d),v(a,l,d),c||(i=[O(r,"click",t[16]),O(l,"click",t[17])],c=!0)},p(a,d){t=a,u.ctx=t,d&64&&e!==(e=t[6])&&Te(e,u)||ot(u,t,d)},d(a){a&&(y(n),y(r),y(o),y(l)),u.block.d(a),u.token=null,u=null,c=!1,re(i)}}}function Ms(t){let e,n,r;return{c(){e=b("p"),e.textContent="error",n=E(),r=b("br")},m(o,l){v(o,e,l),v(o,n,l),v(o,r,l)},p:I,d(o){o&&(y(e),y(n),y(r))}}}function Es(t){let e,n=(t[22].name??je)+"",r,o,l,c=(t[22].description??"no description")+"",i,u,a,d;return{c(){e=b("p"),r=J(n),o=E(),l=b("p"),i=J(c),a=E(),d=b("br"),_(e,"class","pb-4 text-xl font-bold"),_(l,"class",u=t[22].description?null:"italic")},m(f,p){v(f,e,p),h(e,r),v(f,o,p),v(f,l,p),h(l,i),v(f,a,p),v(f,d,p)},p(f,p){p&64&&n!==(n=(f[22].name??je)+"")&&ie(r,n),p&64&&c!==(c=(f[22].description??"no description")+"")&&ie(i,c),p&64&&u!==(u=f[22].description?null:"italic")&&_(l,"class",u)},d(f){f&&(y(e),y(o),y(l),y(a),y(d))}}}function Ns(t){let e;return{c(){e=b("p"),e.textContent="loading..."},m(n,r){v(n,e,r)},p:I,d(n){n&&y(e)}}}function Is(t){let e,n,r,o,l,c,i,u,a,d,f,p,m,g,N,R,C,S,w;n=new at({}),n.$on("click",t[11]);let L={ctx:t,current:null,token:null,hasCatch:!0,pending:bs,then:ps,catch:fs,value:26};Te(g=t[2],L);function T(x,k){return be?ms:gs}let G=T()(t);return{c(){e=b("div"),ne(n.$$.fragment),r=E(),o=b("div"),l=b("button"),l.innerHTML='Close',c=E(),i=b("div"),u=b("button"),a=J("Manage Plugins"),f=E(),p=b("hr"),m=E(),L.block.c(),N=E(),R=b("div"),G.c(),_(l,"class","absolute right-3 top-3 rounded-full bg-rose-500 p-[2px] shadow-lg duration-200 hover:rotate-90 hover:opacity-75"),_(u,"class",d="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(t[4]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"),_(p,"class","p-1 dark:border-slate-700"),_(i,"class","left-0 float-left h-full w-[min(180px,_50%)] overflow-hidden border-r-2 border-slate-300 pt-2 dark:border-slate-800"),_(R,"class","h-full pt-10"),_(o,"class","absolute left-[5%] top-[5%] z-20 h-[90%] w-[90%] rounded-lg bg-slate-100 text-center shadow-lg dark:bg-slate-900")},m(x,k){v(x,e,k),ee(n,e,null),h(e,r),h(e,o),h(o,l),h(o,c),h(o,i),h(i,u),h(u,a),h(i,f),h(i,p),h(i,m),L.block.m(i,L.anchor=null),L.mount=()=>i,L.anchor=null,h(o,N),h(o,R),G.m(R,null),C=!0,S||(w=[O(l,"click",t[11]),O(u,"click",t[13])],S=!0)},p(x,[k]){t=x,(!C||k&16&&d!==(d="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(t[4]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"))&&_(u,"class",d),L.ctx=t,k&4&&g!==(g=t[2])&&Te(g,L)||ot(L,t,k),G.p(t,k)},i(x){C||(A(n.$$.fragment,x),C=!0)},o(x){D(n.$$.fragment,x),C=!1},d(x){x&&y(e),te(n),L.block.d(),L.token=null,L=null,G.d(),S=!1,re(w)}}}const je="(unnamed)",Pt="(new character)";function js(t,e,n){let r,o,l;F(t,Qe,k=>n(2,o=k)),F(t,fe,k=>n(7,l=k));let{showPluginMenu:c}=e;const i=k=>new Promise((P,q)=>{const H=k.concat(k.endsWith("/")?"bolt.json":"/bolt.json");var $=new XMLHttpRequest;$.onreadystatechange=()=>{$.readyState==4&&($.status==200?P(JSON.parse($.responseText)):q($.responseText))},$.open("GET","/read-json-file?".concat(new URLSearchParams({path:H}).toString()),!0),$.send()}),u=k=>{const q=K(fe)[k];if(!q)return null;const H=q.path;return H?i(H):null},a=(k,P)=>{i(k).then(q=>{do n(0,N=crypto.randomUUID());while(Object.keys(K(fe)).includes(N));j(fe,l[N]={name:q.name??je,path:k},l),n(5,S=!0)}).catch(q=>{console.error(`Config file '${P}' couldn't be fetched, reason: ${q}`)})};let d=!1;const f=()=>{n(3,d=!0);var k=new XMLHttpRequest;k.onreadystatechange=()=>{if(k.readyState==4&&(n(3,d=!1),k.status==200)){const P=K(ct)==="windows"?k.responseText.replaceAll("\\","/"):k.responseText;if(P.endsWith("/bolt.json")){const q=P.substring(0,P.length-9);a(q,P)}else console.log(`Selection '${P}' is not named bolt.json; ignored`)}},k.open("GET","/json-file-picker",!0),k.send()};Qe.set(Gt());const p=(k,P,q,H)=>{var $=new XMLHttpRequest;$.onreadystatechange=()=>{$.readyState==4&&B(`Start-plugin status: ${$.statusText.trim()}`)},$.open("GET","/start-plugin?".concat(new URLSearchParams({client:k,id:P,path:q,main:H}).toString()),!0),$.send()},m=()=>{d||n(12,c=!1)};function g(k){k.key==="Escape"&&m()}addEventListener("keydown",g);var N,R=!1,C;let S=!1;st(()=>{S&&vn(),removeEventListener("keydown",g)});const w=()=>n(4,R=!1),L=k=>{n(1,C=k.uid),n(4,R=!0)};function T(){N=Zt(this),n(0,N)}const M=()=>{n(6,r=null),n(5,S=!0);let k=K(fe);delete k[N],fe.set(k)},G=()=>n(6,r=u(N)),x=k=>p(C,N,l[N].path??"",k.main??"");return t.$$set=k=>{"showPluginMenu"in k&&n(12,c=k.showPluginMenu)},t.$$.update=()=>{t.$$.dirty&6&&o.then(k=>{k.some(P=>P.uid===C)||n(4,R=!1)}),t.$$.dirty&1&&n(6,r=u(N))},[N,C,o,d,R,S,r,l,u,f,p,m,c,w,L,T,M,G,x]}class Os extends ce{constructor(e){super(),le(this,e,js,Is,oe,{showPluginMenu:12})}}function Hs(t){let e,n,r,o,l,c,i,u,a,d,f,p,m,g,N,R,C=t[1]&&Rt(t),S=t[0]&&Tt(t),w=t[3]&&Mt();function L(x){t[6](x)}let T={};t[0]!==void 0&&(T.showSettings=t[0]),o=new Mn({props:T}),z.push(()=>Ie(o,"showSettings",L));function M(x){t[7](x)}let G={};return t[1]!==void 0&&(G.showPluginMenu=t[1]),d=new as({props:G}),z.push(()=>Ie(d,"showPluginMenu",M)),N=new ns({}),{c(){C&&C.c(),e=E(),S&&S.c(),n=E(),w&&w.c(),r=E(),ne(o.$$.fragment),c=E(),i=b("div"),u=b("div"),a=E(),ne(d.$$.fragment),p=E(),m=b("div"),g=E(),ne(N.$$.fragment),_(i,"class","mt-16 grid h-full grid-flow-col grid-cols-3")},m(x,k){C&&C.m(x,k),v(x,e,k),S&&S.m(x,k),v(x,n,k),w&&w.m(x,k),v(x,r,k),ee(o,x,k),v(x,c,k),v(x,i,k),h(i,u),h(i,a),ee(d,i,null),h(i,p),h(i,m),v(x,g,k),ee(N,x,k),R=!0},p(x,k){x[1]?C?(C.p(x,k),k&2&&A(C,1)):(C=Rt(x),C.c(),A(C,1),C.m(e.parentNode,e)):C&&(ve(),D(C,1,1,()=>{C=null}),Se()),x[0]?S?(S.p(x,k),k&1&&A(S,1)):(S=Tt(x),S.c(),A(S,1),S.m(n.parentNode,n)):S&&(ve(),D(S,1,1,()=>{S=null}),Se()),x[3]?w?k&8&&A(w,1):(w=Mt(),w.c(),A(w,1),w.m(r.parentNode,r)):w&&(ve(),D(w,1,1,()=>{w=null}),Se());const P={};!l&&k&1&&(l=!0,P.showSettings=x[0],Ne(()=>l=!1)),o.$set(P);const q={};!f&&k&2&&(f=!0,q.showPluginMenu=x[1],Ne(()=>f=!1)),d.$set(q)},i(x){R||(A(C),A(S),A(w),A(o.$$.fragment,x),A(d.$$.fragment,x),A(N.$$.fragment,x),R=!0)},o(x){D(C),D(S),D(w),D(o.$$.fragment,x),D(d.$$.fragment,x),D(N.$$.fragment,x),R=!1},d(x){x&&(y(e),y(n),y(r),y(c),y(i),y(g)),C&&C.d(x),S&&S.d(x),w&&w.d(x),te(o,x),te(d),te(N,x)}}}function As(t){let e,n;return e=new ds({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},p:I,i(r){n||(A(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Rt(t){let e,n,r;function o(c){t[4](c)}let l={};return t[1]!==void 0&&(l.showPluginMenu=t[1]),e=new Os({props:l}),z.push(()=>Ie(e,"showPluginMenu",o)),{c(){ne(e.$$.fragment)},m(c,i){ee(e,c,i),r=!0},p(c,i){const u={};!n&&i&2&&(n=!0,u.showPluginMenu=c[1],Ne(()=>n=!1)),e.$set(u)},i(c){r||(A(e.$$.fragment,c),r=!0)},o(c){D(e.$$.fragment,c),r=!1},d(c){te(e,c)}}}function Tt(t){let e,n,r;function o(c){t[5](c)}let l={};return t[0]!==void 0&&(l.showSettings=t[0]),e=new Yn({props:l}),z.push(()=>Ie(e,"showSettings",o)),{c(){ne(e.$$.fragment)},m(c,i){ee(e,c,i),r=!0},p(c,i){const u={};!n&&i&1&&(n=!0,u.showSettings=c[0],Ne(()=>n=!1)),e.$set(u)},i(c){r||(A(e.$$.fragment,c),r=!0)},o(c){D(e.$$.fragment,c),r=!1},d(c){te(e,c)}}}function Mt(t){let e,n;return e=new On({}),{c(){ne(e.$$.fragment)},m(r,o){ee(e,r,o),n=!0},i(r){n||(A(e.$$.fragment,r),n=!0)},o(r){D(e.$$.fragment,r),n=!1},d(r){te(e,r)}}}function Ds(t){let e,n,r,o;const l=[As,Hs],c=[];function i(u,a){return u[2]?0:1}return n=i(t),r=c[n]=l[n](t),{c(){e=b("main"),r.c(),_(e,"class","h-full")},m(u,a){v(u,e,a),c[n].m(e,null),o=!0},p(u,[a]){let d=n;n=i(u),n===d?c[n].p(u,a):(ve(),D(c[d],1,1,()=>{c[d]=null}),Se(),r=c[n],r?r.p(u,a):(r=c[n]=l[n](u),r.c()),A(r,1),r.m(e,null))},i(u){o||(A(r),o=!0)},o(u){D(r),o=!1},d(u){u&&y(e),c[n].d()}}}function qs(t,e,n){let r;F(t,Ge,p=>n(3,r=p));let o=!1,l=!1,c=!1;dn();const i=window.opener||window.parent;if(i){const p=new URLSearchParams(window.location.search);p.get("id_token")?(c=!0,i.postMessage({type:"gameSessionServerAuth",code:p.get("code"),id_token:p.get("id_token"),state:p.get("state")},"*")):p.get("code")&&(c=!0,i.postMessage({type:"authCode",code:p.get("code"),state:p.get("state")},"*"))}function u(p){l=p,n(1,l)}function a(p){o=p,n(0,o)}function d(p){o=p,n(0,o)}function f(p){l=p,n(1,l)}return[o,l,c,r,u,a,d,f]}class Us extends ce{constructor(e){super(),le(this,e,qs,Ds,oe,{})}}new Us({target:document.getElementById("app")});const ae=[],Bs=K(Ht);let Z;ae.push(lt.subscribe(t=>Z=t));let se;ae.push(U.subscribe(t=>se=t));ae.push(ct.subscribe(t=>t));let me;ae.push(ye.subscribe(t=>me=t));ae.push(be.subscribe(t=>t??!1));let ue;ae.push(ze.subscribe(t=>ue=t));let ut;ae.push(it.subscribe(t=>ut=t));ae.push(Le.subscribe(t=>t));ae.push(Je.subscribe(t=>t));let Xe;ae.push(V.subscribe(t=>Xe=t));function Js(){var o;const t=atob(Z.origin),e=atob(Z.clientid),n=t.concat("/oauth2/token");me.size==0&&Ge.set(!0),an(),se.selected_game_accounts&&((o=se.selected_game_accounts)==null?void 0:o.size)>0&&U.update(l=>{var c;return l.selected_characters=l.selected_game_accounts,(c=l.selected_game_accounts)==null||c.clear(),l});const r=[Bs,t,atob(Z.origin_2fa)];window.addEventListener("message",l=>{if(!r.includes(l.origin)){B(`discarding window message from origin ${l.origin}`);return}let c=ue;const i=new XMLHttpRequest;switch(l.data.type){case"authCode":if(c){ze.set({});const u=new URLSearchParams({grant_type:"authorization_code",client_id:atob(Z.clientid),code:l.data.code,code_verifier:c.verifier,redirect_uri:atob(Z.redirect)});i.onreadystatechange=()=>{if(i.readyState==4)if(i.status==200){const a=qt(i.response),d=Ot(a);d?pt(c==null?void 0:c.win,d).then(f=>{f&&(ye.update(p=>(p.set(d.sub,d),p)),Me())}):(X("Error: invalid credentials received",!1),c.win.close())}else X(`Error: from ${n}: ${i.status}: ${i.response}`,!1),c.win.close()},i.open("POST",n,!0),i.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),i.setRequestHeader("Accept","application/json"),i.send(u)}break;case"externalUrl":i.onreadystatechange=()=>{i.readyState==4&&B(`External URL status: '${i.responseText.trim()}'`)},i.open("POST","/open-external-url",!0),i.send(l.data.url);break;case"gameSessionServerAuth":if(c=ut.find(u=>l.data.state==u.state),c){un(c,!0);const u=l.data.id_token.split(".");if(u.length!==3){X(`Malformed id_token: ${u.length} sections, expected 3`,!1);break}const a=JSON.parse(atob(u[0]));if(a.typ!=="JWT"){X(`Bad id_token header: typ ${a.typ}, expected JWT`,!1);break}const d=JSON.parse(atob(u[1]));if(atob(d.nonce)!==c.nonce){X("Incorrect nonce in id_token",!1);break}const f=atob(Z.auth_api).concat("/sessions");i.onreadystatechange=()=>{if(i.readyState==4)if(i.status==200){const p=atob(Z.auth_api).concat("/accounts");c.creds.session_id=JSON.parse(i.response).sessionId,Bt(c.creds,p,c.account_info_promise).then(m=>{m&&(ye.update(g=>{var N;return g.set((N=c==null?void 0:c.creds)==null?void 0:N.sub,c.creds),g}),Me())})}else X(`Error: from ${f}: ${i.status}: ${i.response}`,!1)},i.open("POST",f,!0),i.setRequestHeader("Content-Type","application/json"),i.setRequestHeader("Accept","application/json"),i.send(`{"idToken": "${l.data.id_token}"}`)}break;case"gameClientListUpdate":Qe.set(Gt());break;default:B("Unknown message type: ".concat(l.data.type));break}}),(async()=>(me.size>0&&me.forEach(async l=>{const c=await Dt(l,n,e);c!==null&&c!==0&&(X(`Discarding expired login for #${l.sub}`,!1),ye.update(u=>(u.delete(l.sub),u)),Me());let i;if(c===null&&await pt(null,l)?i={creds:l,valid:!0}:i={creds:l,valid:c===0},i.valid){const u=l;ye.update(a=>(a.set(u.sub,u),a)),Me()}}),W.set(!1)))()}function B(t){console.log(t);const e={isError:!1,text:t,time:new Date(Date.now())};Le.update(n=>(n.unshift(e),n))}function X(t,e){const n={isError:!0,text:t,time:new Date(Date.now())};if(Le.update(r=>(r.unshift(n),r)),!e)console.error(t);else throw new Error(t)}lt.set(s());onload=()=>Js();onunload=()=>{for(const t in ae)delete ae[t];Fe()}; diff --git a/app/dist/index.html b/app/dist/index.html index 06f662a..c7f8bbb 100644 --- a/app/dist/index.html +++ b/app/dist/index.html @@ -4,7 +4,7 @@ Bolt Launcher - + { + const xml = new XMLHttpRequest(); + const params: Record = {}; + if (hash) params.hash = hash; + if (jx_session_id) params.jx_session_id = jx_session_id; + if (jx_character_id) params.jx_character_id = jx_character_id; + if (jx_display_name) params.jx_display_name = jx_display_name; + xml.open('POST', launchPath.concat(new URLSearchParams(params).toString()), true); + xml.setRequestHeader('Content-Type', 'application/octet-stream'); + xml.onreadystatechange = () => { + if (xml.readyState == 4) { + msg(`Game launch status: '${xml.responseText.trim()}'`); + if (xml.status == 200 && hash) { + // TODO: change installed version to `hash` + } + } + }; + if (exe !== null) { + exe?.arrayBuffer().then((x) => xml.send(x)); + } else { + xml.send(); + } + }; + + // yes, there is way too much nesting happening here + const xml = new XMLHttpRequest(); + xml.open('GET', primaryUrl, true); + xml.onreadystatechange = () => { + if (xml.readyState == 4) { + if (xml.status == 200) { + const metaToken: Direct6Token = JSON.parse(atob(xml.responseText.split('.')[1])).environments.production; + // TODO: check here if metaToken.id matches the already-installed version, if it does, just launch straight away + msg(`Downloading client version ${metaToken.version}...`); + const catalogUrl: string = `${atob(boltSub.direct6_url)}${metaPath}/catalog/${metaToken.id}/catalog.json`; + const xml2 = new XMLHttpRequest(); + xml2.open('GET', catalogUrl, true); + xml2.onreadystatechange = () => { + if (xml2.readyState == 4) { + if (xml2.status == 200) { + const catalog = JSON.parse(atob(xml2.responseText.split('.')[1])); + const metafileUrl = catalog.metafile.replace("http:", "https:"); + const xml3 = new XMLHttpRequest(); + xml3.open('GET', metafileUrl, true); + xml3.onreadystatechange = () => { + if (xml3.readyState == 4) { + if (xml3.status == 200) { + const metafile = JSON.parse(atob(xml3.responseText.split('.')[1])); + const chunk_promises: Promise[] = metafile.pieces.digests.map((x: string) => { + const hex_chunk: string = atob(x).split("").map(c => c.charCodeAt(0).toString(16).padStart(2, "0")).join(""); + const chunk_url: string = catalog.config.remote.baseUrl.replace("http:", "https:").concat(catalog.config.remote.pieceFormat.replace("{SubString:0,2,{TargetDigest}}", hex_chunk.substring(0, 2)).replace("{TargetDigest}", hex_chunk)); + return new Promise((resolve, reject) => { + const xml = new XMLHttpRequest(); + xml.open('GET', chunk_url, true); + xml.responseType = 'blob'; + xml.onreadystatechange = () => { + if (xml.readyState == 4) { + if (xml.status == 200) { + const ds = new DecompressionStream("gzip"); + new Response(xml.response.slice(6).stream().pipeThrough(ds)).blob().then(resolve); + } else { + reject(`Error from ${chunk_url}: ${xml.status}: ${xml.responseText}`); + } + } + } + xml.send(); + }); + }); + + // while all that stuff is downloading, let's read the file list and find the exe's location in the data blob + var exeOffset: number = 0; + var exeSize: number | null = null; + for (let i = 0; i < metafile.files.length; i += 1) { + const isTargetExe: boolean = windows ? metafile.files[i].name.endsWith(".exe") : metafile.files[i].name.includes(".app/Contents/MacOS/"); + if (isTargetExe) { + if (exeSize !== null) { + err(`Error parsing ${metafileUrl}: file list has multiple possibilities for main exe`, false); + return; + } else { + exeSize = metafile.files[i].size; + } + } else if (exeSize === null) { + exeOffset += metafile.files[i].size; + } + } + if (exeSize === null) { + err(`Error parsing ${metafileUrl}: file list has no possibilities for main exe`, false); + return; + } + + Promise.all(chunk_promises).then(x => { + const exeFile = new Blob(x).slice(exeOffset, exeOffset + exeSize); + launch(metafile.id, exeFile); + }); + } else { + err(`Error from ${metafileUrl}: ${xml3.status}: ${xml3.responseText}`, false); + } + } + }; + xml3.send(); + } else { + err(`Error from ${catalogUrl}: ${xml2.status}: ${xml2.responseText}`, false); + } + } + }; + xml2.send(); + } else { + err(`Error from ${primaryUrl}: ${xml.status}: ${xml.responseText}`, false); + } + } + }; + xml.send(); +} diff --git a/app/src/lib/Util/interfaces.ts b/app/src/lib/Util/interfaces.ts index 1043840..28d0034 100644 --- a/app/src/lib/Util/interfaces.ts +++ b/app/src/lib/Util/interfaces.ts @@ -50,6 +50,7 @@ export interface Bolt { profile_api: string; shield_url: string; content_url: string; + direct6_url: string; default_config_uri: string; games: Array; } @@ -142,6 +143,14 @@ export interface SelectedPlay { client?: Client; } +// response token from the official "Direct6" URL +export interface Direct6Token { + id?: string; + version?: string; + promoteTime?: number; + scanTime?: number; +} + // connected game client for plugin management purposes export interface GameClient { uid: string; diff --git a/src/browser/app.cxx b/src/browser/app.cxx index 2f3aab9..327cf47 100644 --- a/src/browser/app.cxx +++ b/src/browser/app.cxx @@ -125,6 +125,7 @@ bool Browser::App::Execute(const CefString&, CefRefPtr, const CefV8V retval->SetValue("shield_url", CefV8Value::CreateString("aHR0cHM6Ly9hdXRoLmphZ2V4LmNvbS9zaGllbGQvb2F1dGgvdG9rZW4"), V8_PROPERTY_ATTRIBUTE_READONLY); retval->SetValue("content_url", CefV8Value::CreateString("aHR0cHM6Ly9jb250ZW50LnJ1bmVzY2FwZS5jb20vZG93bmxvYWRzL3VidW50dS8"), V8_PROPERTY_ATTRIBUTE_READONLY); retval->SetValue("default_config_uri", CefV8Value::CreateString("aHR0cHM6Ly93d3cucnVuZXNjYXBlLmNvbS9rPTUvbD0wL2phdl9jb25maWcud3M"), V8_PROPERTY_ATTRIBUTE_READONLY); + retval->SetValue("direct6_url", CefV8Value::CreateString("aHR0cHM6Ly9qYWdleC5ha2FtYWl6ZWQubmV0L2RpcmVjdDYv"), V8_PROPERTY_ATTRIBUTE_READONLY); CefRefPtr games = CefV8Value::CreateArray(2); games->SetValue(0, CefV8Value::CreateString("UnVuZVNjYXBl"));