diff --git a/app/dist/assets/index-DfbfRdRN.js b/app/dist/assets/index-DfbfRdRN.js deleted file mode 100644 index 3ecf223..0000000 --- a/app/dist/assets/index-DfbfRdRN.js +++ /dev/null @@ -1,7 +0,0 @@ -var gn=Object.defineProperty;var hn=(n,e,t)=>e in n?gn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Je=(n,e,t)=>(hn(n,typeof e!="symbol"?e+"":e,t),t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))l(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&l(i)}).observe(document,{childList:!0,subtree:!0});function t(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(o){if(o.ep)return;o.ep=!0;const r=t(o);fetch(o.href,r)}})();var bt=(n=>(n[n.SECOND=1e3]="SECOND",n[n.MINUTE=6e4]="MINUTE",n[n.HALF_HOUR=18e5]="HALF_HOUR",n[n.HOUR=36e5]="HOUR",n[n.DAY=864e5]="DAY",n[n.WEEK=6048e5]="WEEK",n[n.MONTH=2592e6]="MONTH",n))(bt||{});class De{static set(e,t,l,o){const r=new Date;r.setTime(r.getTime()+l*o);const i=`expires=${r.toUTCString()}`;document.cookie=`${e}=${t};${i};path=/`}static get(e){const t=`${e}=`,l=document.cookie.split(";");for(let o=0;o(n.rs3="rs3",n.osrs="osrs",n))(te||{}),Pe=(n=>(n.official="Official",n.runelite="RuneLite",n.hdos="HDOS",n))(Pe||{});const St={rs3:["Official"],osrs:["Official","RuneLite","HDOS"]};class et{static parseTokenResponse(e){try{const t=JSON.parse(e),l=t.id_token.split(".");if(l.length!==3){const i=`Malformed id_token: ${l.length} sections, expected 3`;return V(i)}const o=JSON.parse(atob(l[0]));if(o.typ!=="JWT"){const i=`Bad id_token header: typ ${o.typ}, expected JWT`;return V(i)}const r=JSON.parse(atob(l[1]));return ve({access_token:t.access_token,id_token:t.id_token,refresh_token:t.refresh_token,sub:r.sub,expiry:Date.now()+t.expires_in*1e3})}catch{return V("Unable to parse token response")}}static parseSessionResponse(e){try{const t=JSON.parse(e);return t.sessionId?ve(t.sessionId):V("sessionId does not exist on parsed object")}catch{return V("Unable to parse session response")}}static decodeBolt(e){const t={};for(const l in e){const o=l,r=e[o];typeof r=="string"?t[o]=atob(r):Array.isArray(r)&&r.every(i=>typeof i=="string")?t[o]=r.map(i=>atob(i)):t[o]=r}return t}}var Xe=(n=>(n.Windows="windows",n.Linux="linux",n.MacOS="mac",n))(Xe||{});const I={env:et.decodeBolt(s()),platform:null,rs3DebInstalledHash:null,rs3ExeInstalledHash:null,rs3AppInstalledHash:null,osrsExeInstalledHash:null,osrsAppInstalledHash:null,runeLiteInstalledId:null,hdosInstalledVersion:null,isFlathub:!1,hasLibArchive:!1,hasBoltPlugins:!1,pluginConfig:{}};class dt{static async makeLoginUrl(e){const t=new TextEncoder().encode(e.pkceCodeVerifier),l=await crypto.subtle.digest("SHA-256",t);let o="";const r=new Uint8Array(l);for(let a=0;aMath.round(r*(l-0)/255+0)).map(r=>t[r]).join("")}}const Be=class Be{static async openLoginWindow(e,t,l){if(Be.pendingLoginWindow!==null)return Be.pendingLoginWindow.window.focus();const o=dt.makeRandomState(),r=dt.makeRandomVerifier(),i=new TextEncoder().encode(r),a=await crypto.subtle.digest("SHA-256",i);let c="";const u=new Uint8Array(a);for(let g=0;g{if(e.expiry-Date.now()<3e4){const l=new URLSearchParams({grant_type:"refresh_token",client_id:I.env.clientid,refresh_token:e.refresh_token}),o=new XMLHttpRequest;o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const i=et.parseTokenResponse(o.response);i.ok?t(ve(i.value)):t(V(0))}else t(V(o.status))},o.onerror=()=>{t(V(0))};const r=I.env.origin.concat("/oauth2/token");o.open("POST",r,!0),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.setRequestHeader("Accept","application/json"),o.send(l)}else t(ve(e))})}static async getOAuthToken(e,t,l,o,r){const i=`${e}/oauth2/token`;return new Promise(a=>{const c=new XMLHttpRequest;c.onreadystatechange=()=>{if(c.readyState==4)if(c.status==200){const f=et.parseTokenResponse(c.response);return f.ok?a(ve(f.value)):a(V(f.error))}else return a(V(`Error: from ${i}: ${c.status}: ${c.response}`))},c.open("POST",i,!0),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.setRequestHeader("Accept","application/json");const u=new URLSearchParams({grant_type:"authorization_code",client_id:t,code:r,code_verifier:l,redirect_uri:o});c.send(u)})}static revokeOauthCreds(e){const t=`${I.env.origin}/oauth2/revoke`;return new Promise(l=>{const o=new XMLHttpRequest;o.open("POST",t,!0),o.onreadystatechange=()=>{o.readyState==4&&l(o.status)},o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");const r=new URLSearchParams({token:e,client_id:I.env.clientid});o.send(r)})}static async getSessionId(e,t){const l=`${e}/sessions`;return new Promise(o=>{const r=new XMLHttpRequest;r.onreadystatechange=()=>{if(r.readyState==4)if(r.status==200){const a=et.parseSessionResponse(r.response);return a.ok?o(ve(a.value)):o(V(a.error))}else V(`Error: from ${l}: ${r.status}: ${r.response}`)},r.open("POST",l,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("Accept","application/json");const i={idToken:t};r.send(JSON.stringify(i))})}static validateIdToken(e,t){const l=e.split(".");if(l.length!==3)return V(`Malformed id_token: ${l.length} sections, expected 3`);const o=JSON.parse(atob(l[0]));return o.typ!=="JWT"?V(`Bad id_token header: typ ${o.typ}, expected JWT`):JSON.parse(atob(l[1])).nonce!==t?V("Incorrect nonce in id_token"):ve(void 0)}};Je(Be,"pendingLoginWindow",null);let ke=Be;class nt{static async buildSession(e,t){const l=await nt.getUser(e.sub,e.access_token);if(!l.ok)return V(`Failed to fetch user. Status: ${l.error}`);const o=await nt.getUserAccounts(t);return o.ok?ve({user:l.value,accounts:o.value,tokens:e,session_id:t}):V(`Failed to fetch game accounts. Status: ${o.error}`)}static getUser(e,t){return new Promise(l=>{const o=`${I.env.api}/users/${e}/displayName`,r=new XMLHttpRequest;r.onreadystatechange=()=>{if(r.readyState==4)if(r.status==200){const i=JSON.parse(r.response);l(ve(i))}else l(V(r.status))},r.open("GET",o,!0),r.setRequestHeader("Authorization","Bearer ".concat(t)),r.send()})}static getUserAccounts(e){const t=`${I.env.auth_api}/accounts`;return new Promise(l=>{const o=new XMLHttpRequest;o.onreadystatechange=async()=>{if(o.readyState==4)if(o.status==200){const r=JSON.parse(o.response);l(ve(r))}else l(V(o.status))},o.open("GET",t,!0),o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Authorization","Bearer ".concat(e)),o.send()})}}function B(){}function mn(n,e){for(const t in e)n[t]=e[t];return n}function bn(n){return!!n&&(typeof n=="object"||typeof n=="function")&&typeof n.then=="function"}function sn(n){return n()}function Ct(){return Object.create(null)}function le(n){n.forEach(sn)}function lt(n){return typeof n=="function"}function ae(n,e){return n!=n?e==e:n!==e||n&&typeof n=="object"||typeof n=="function"}let Ke;function kt(n,e){return n===e?!0:(Ke||(Ke=document.createElement("a")),Ke.href=e,n===Ke.href)}function kn(n){return Object.keys(n).length===0}function ln(n,...e){if(n==null){for(const l of e)l(void 0);return B}const t=n.subscribe(...e);return t.unsubscribe?()=>t.unsubscribe():t}function me(n){let e;return ln(n,t=>e=t)(),e}function pe(n,e,t){n.$$.on_destroy.push(ln(e,t))}function ot(n,e,t,l){if(n){const o=on(n,e,t,l);return n[0](o)}}function on(n,e,t,l){return n[1]&&l?mn(t.ctx.slice(),n[1](l(e))):t.ctx}function rt(n,e,t,l){if(n[2]&&l){const o=n[2](l(t));if(e.dirty===void 0)return o;if(typeof o=="object"){const r=[],i=Math.max(e.dirty.length,o.length);for(let a=0;a32){const e=[],t=n.ctx.length/32;for(let l=0;ln.removeEventListener(e,t,l)}function vn(n){return function(e){e.target===this&&n.call(this,e)}}function h(n,e,t){t==null?n.removeAttribute(e):n.getAttribute(e)!==t&&n.setAttribute(e,t)}function yn(n){return Array.from(n.childNodes)}function _e(n,e){e=""+e,n.data!==e&&(n.data=e)}function ie(n,e){n.value=e??""}function Ie(n,e,t){for(let l=0;l{const o=n.$$.callbacks[e];if(o){const r=$n(e,t,{cancelable:l});return o.slice().forEach(i=>{i.call(n,r)}),!r.defaultPrevented}return!0}}const Ae=[],ye=[];let qe=[];const Lt=[],Ln=Promise.resolve();let wt=!1;function Rn(){wt||(wt=!0,Ln.then($t))}function Ge(n){qe.push(n)}const pt=new Set;let xe=0;function $t(){if(xe!==0)return;const n=ze;do{try{for(;xen.indexOf(l)===-1?e.push(l):t.push(l)),t.forEach(l=>l()),qe=e}const tt=new Set;let He;function Ve(){He={r:0,c:[],p:He}}function Ye(){He.r||le(He.c),He=He.p}function q(n,e){n&&n.i&&(tt.delete(n),n.i(e))}function G(n,e,t,l){if(n&&n.o){if(tt.has(n))return;tt.add(n),He.c.push(()=>{tt.delete(n),l&&(t&&n.d(1),l())}),n.o(e)}else l&&l()}function st(n,e){const t=e.token={};function l(o,r,i,a){if(e.token!==t)return;e.resolved=a;let c=e.ctx;i!==void 0&&(c=c.slice(),c[i]=a);const u=o&&(e.current=o)(c);let f=!1;e.block&&(e.blocks?e.blocks.forEach((d,_)=>{_!==r&&d&&(Ve(),G(d,1,1,()=>{e.blocks[_]===d&&(e.blocks[_]=null)}),Ye())}):e.block.d(1),u.c(),q(u,1),u.m(e.mount(),e.anchor),f=!0),e.block=u,e.blocks&&(e.blocks[r]=u),f&&$t()}if(bn(n)){const o=ct();if(n.then(r=>{Le(o),l(e.then,1,e.value,r),Le(null)},r=>{if(Le(o),l(e.catch,2,e.error,r),Le(null),!e.hasCatch)throw r}),e.current!==e.pending)return l(e.pending,0),!0}else{if(e.current!==e.then)return l(e.then,1,e.value,n),!0;e.resolved=n}}function an(n,e,t){const l=e.slice(),{resolved:o}=n;n.current===n.then&&(l[n.value]=o),n.current===n.catch&&(l[n.error]=o),n.block.p(l,t)}function ce(n){return(n==null?void 0:n.length)!==void 0?n:Array.from(n)}function In(n,e){n.d(1),e.delete(n.key)}function Un(n,e,t,l,o,r,i,a,c,u,f,d){let _=n.length,g=r.length,p=_;const y={};for(;p--;)y[n[p].key]=p;const w=[],S=new Map,C=new Map,D=[];for(p=g;p--;){const R=d(o,r,p),$=t(R);let O=i.get($);O?l&&D.push(()=>O.p(R,e)):(O=u($,R),O.c()),S.set($,w[p]=O),$ in y&&C.set($,Math.abs(p-y[$]))}const H=new Set,T=new Set;function L(R){q(R,1),R.m(a,f),i.set(R.key,R),f=R.first,g--}for(;_&&g;){const R=w[g-1],$=n[_-1],O=R.key,x=$.key;R===$?(f=R.first,_--,g--):S.has(x)?!i.has(O)||H.has(O)?L(R):T.has(x)?_--:C.get(O)>C.get(x)?(T.add(O),L(R)):(H.add(x),_--):(c($,i),_--)}for(;_--;){const R=n[_];S.has(R.key)||c(R,i)}for(;g;)L(w[g-1]);return le(D),w}function se(n){n&&n.c()}function Z(n,e,t){const{fragment:l,after_update:o}=n.$$;l&&l.m(e,t),Ge(()=>{const r=n.$$.on_mount.map(sn).filter(lt);n.$$.on_destroy?n.$$.on_destroy.push(...r):le(r),n.$$.on_mount=[]}),o.forEach(Ge)}function K(n,e){const t=n.$$;t.fragment!==null&&(Tn(t.after_update),le(t.on_destroy),t.fragment&&t.fragment.d(e),t.on_destroy=t.fragment=null,t.ctx=[])}function Hn(n,e){n.$$.dirty[0]===-1&&(Ae.push(n),Rn(),n.$$.dirty.fill(0)),n.$$.dirty[e/31|0]|=1<{const p=g.length?g[0]:_;return u.ctx&&o(u.ctx[d],u.ctx[d]=p)&&(!u.skip_bound&&u.bound[d]&&u.bound[d](p),f&&Hn(n,d)),_}):[],u.update(),f=!0,le(u.before_update),u.fragment=l?l(u.ctx):!1,e.target){if(e.hydrate){const d=yn(e.target);u.fragment&&u.fragment.l(d),d.forEach(b)}else u.fragment&&u.fragment.c();e.intro&&q(n.$$.fragment),Z(n,e.target,e.anchor),$t()}Le(c)}class fe{constructor(){Je(this,"$$");Je(this,"$$set")}$destroy(){K(this,1),this.$destroy=B}$on(e,t){if(!lt(t))return B;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(t),()=>{const o=l.indexOf(t);o!==-1&&l.splice(o,1)}}$set(e){this.$$set&&!kn(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const On="4",Ne=[];function Te(n,e=B){let t;const l=new Set;function o(a){if(ae(n,a)&&(n=a,t)){const c=!Ne.length;for(const u of l)u[1](),Ne.push(u,n);if(c){for(let u=0;u{l.delete(u),l.size===0&&t&&(t(),t=null)}}return{set:o,update:r,subscribe:i}}var We=(n=>(n.info="info",n.warn="warn",n.error="error",n))(We||{});class En{constructor(){Je(this,"logs",Te([]))}_addLog(e,t){this.logs.update(l=>(l.unshift({date:new Date,severity:e,content:t}),l))}info(e){this._addLog("info",e)}warn(e){this._addLog("warn",e)}error(e){this._addLog("error",e)}updateLogAtIndex(e,t){this.logs.update(l=>(l[e]&&(l[e].content=t),l))}}const E=new En;function xn(n,e){let t=!1;return n.subscribe(l=>{t?e(l):t=!0})}const Nn={use_dark_theme:!0,rs_plugin_loader:!1,close_after_launch:!1,check_announcements:!0,flatpak_rich_presence:!1,runelite_use_custom_jar:!1,use_custom_rs_config_uri:!1,selected:{game:te.osrs,client:Pe.runelite,user_id:null},userDetails:{}};function jn(){const e=new URLSearchParams(window.location.search).get("config");function t(o){return typeof o=="object"&&typeof o.use_dark_theme=="boolean"&&typeof o.rs_plugin_loader=="boolean"&&typeof o.close_after_launch=="boolean"&&typeof o.check_announcements=="boolean"&&typeof o.flatpak_rich_presence=="boolean"&&typeof o.runelite_use_custom_jar=="boolean"&&typeof o.selected=="object"&&Object.values(te).includes(o.selected.game)&&Object.values(Pe).includes(o.selected.client)&&(typeof o.selected.user_id=="string"||o.selected.user_id===null)&&typeof o.userDetails=="object"}const{config:l}=N;if(e)try{const o=JSON.parse(e);typeof o.check_announcements>"u"&&(o.check_announcements=!0,N.configHasPendingChanges=!0),typeof o.close_after_launch>"u"&&(o.close_after_launch=!1,N.configHasPendingChanges=!0),t(o)?l.set(o):(E.error("The config saved on disk is not the correct format. It has been restored to default."),N.configHasPendingChanges=!0)}catch{E.error("Unable to parse config, restoring to default"),N.configHasPendingChanges=!0}else N.configHasPendingChanges=!0;xn(N.config,()=>{N.configHasPendingChanges=!0})}const N={initialized:Te(!1),configHasPendingChanges:!1,pluginConfigHasPendingChanges:!1,config:Te(Nn),sessions:Te([])};let _t=!1,gt=!1;class z{static async login(e,t){const l=await nt.buildSession(e,t);if(!l.ok)return V(l.error);const o=l.value,i=me(N.sessions).findIndex(a=>a.user.userId===e.sub);return i!==-1?N.sessions.update(a=>(a[i]=o,a)):(N.sessions.update(a=>(a.push(o),a)),N.config.update(a=>(a.selected.user_id=o.user.userId,a))),ve(o)}static async logout(e){const{sessions:t,config:l}=N;return t.update(o=>{const r=o.findIndex(i=>i.user.userId===e);return r>-1&&(ke.revokeOauthCreds(o[r].tokens.access_token),o.splice(r,1)),o}),l.update(o=>(typeof o.userDetails[e]<"u"&&delete o.userDetails[e],o.selected.user_id===e&&(o.selected.user_id=null),o)),me(t)}static postJSON(e,t,l=null){const o=JSON.stringify(t);return fetch(e,{method:"POST",body:o,headers:{"Content-Type":"application/json"}}).then(i=>{i.ok||i.text().then(a=>E.error(`${e} error: ${i.status}: ${a}`)),l&&l(i)})}static saveConfig(e=!0){if(_t||e&&!N.configHasPendingChanges)return;_t=!0;const t=me(N.config);return this.postJSON("/save-config",t,()=>_t=!1),t}static savePluginConfig(e=!0){gt||e&&!N.pluginConfigHasPendingChanges||(gt=!0,this.postJSON("/save-plugin-config",I.pluginConfig,()=>gt=!1))}static async saveCredentials(){return this.postJSON("/save-credentials",me(N.sessions))}static async openFilePicker(){const e=await fetch("/jar-file-picker");return e.status===200?e.text():null}static findSession(e){return me(N.sessions).find(l=>l.user.userId===e)}static findAccount(e,t){return e.find(l=>l.accountId==t)}}const vt=Te([]),ht=Te(null);typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(On);function Mn(n){let e,t;const l=n[4].default,o=ot(l,n,n[3],null);return{c(){e=m("main"),o&&o.c(),h(e,"class","fixed top-0 h-screen w-screen bg-slate-100 text-xs text-slate-900 duration-200 sm:text-sm md:text-base dark:bg-slate-900 dark:text-slate-50"),ne(e,"dark",n[0])},m(r,i){k(r,e,i),o&&o.m(e,null),t=!0},p(r,[i]){o&&o.p&&(!t||i&8)&&it(o,l,r,r[3],t?rt(l,r[3],i,null):at(r[3]),null),(!t||i&1)&&ne(e,"dark",r[0])},i(r){t||(q(o,r),t=!0)},o(r){G(o,r),t=!1},d(r){r&&b(e),o&&o.d(r)}}}function An(n,e,t){let l,o,{$$slots:r={},$$scope:i}=e;const{config:a}=N;return pe(n,a,c=>t(2,o=c)),n.$$set=c=>{"$$scope"in c&&t(3,i=c.$$scope)},n.$$.update=()=>{n.$$.dirty&4&&t(0,l=o.use_dark_theme)},[l,a,o,i,r]}class cn extends fe{constructor(e){super(),ue(this,e,An,Mn,ae,{})}}function Dn(n){let e;return{c(){e=m("div"),e.innerHTML='loading',h(e,"class","flex h-full items-center justify-center")},m(t,l){k(t,e,l)},p:B,d(t){t&&b(e)}}}function Bn(n){let e,t;return e=new cn({props:{$$slots:{default:[Dn]},$$scope:{ctx:n}}}),{c(){se(e.$$.fragment)},m(l,o){Z(e,l,o),t=!0},p(l,[o]){const r={};o&32&&(r.$$scope={dirty:o,ctx:l}),e.$set(r)},i(l){t||(q(e.$$.fragment,l),t=!0)},o(l){G(e.$$.fragment,l),t=!1},d(l){K(e,l)}}}function qn(n){const e=window.opener;I.env==null&&o("BoltEnv is not defined. Please close and re-open Bolt to try again.");async function t(i){const a=De.get("auth_verifier");if(!a)return o("Verifier token has expired. Please try signing in again."),null;const{clientid:c,redirect:u}=I.env,f=await ke.getOAuthToken(I.env.origin,c,a,u,i);return f.ok?f.value:(o(`Fetching OAuth token failed. ${f.error}`),null)}async function l(i){const a=De.get("auth_nonce"),c=ke.validateIdToken(i,a??"");if(!c.ok)return o(c.error),null;const u=await ke.getSessionId(I.env.auth_api,i);return u.ok?u.value:(o(`Unable to retreive session id. ${u.error}`),null)}function o(i){r({type:"authFailed",reason:i}),fetch("/close")}function r(i){e.postMessage(i,window.location.origin)}return rn(async()=>{const i=new URLSearchParams(window.location.search),a=i.get("code"),c=i.get("state"),u=i.get("id_token");if(u==null&&a&&c){const f=await t(a);if(!f)return o("tokens object is null.");r({type:"authTokenUpdate",tokens:f});const d=crypto.randomUUID();ke.navigateToAuthConsent(I.env.origin,f.id_token,d)}else if(u&&a&&c){const f=await l(u);if(!f)return o("sessionId is null");r({type:"authSessionUpdate",sessionId:f}),fetch("/close")}else o("Authentication server did not response with the appropriate parameters. Please try again later.")}),Sn(()=>{De.remove("auth_verifier"),De.remove("auth_nonce")}),[]}class Gn extends fe{constructor(e){super(),ue(this,e,qn,Bn,ae,{})}}function Rt(n){let e,t,l;return{c(){e=m("button"),e.innerHTML='Close',h(e,"class","absolute right-3 top-3 rounded-full bg-rose-500 p-[2px] shadow-lg duration-200 hover:rotate-90 hover:opacity-75")},m(o,r){k(o,e,r),t||(l=j(e,"click",n[2]),t=!0)},p:B,d(o){o&&b(e),t=!1,l()}}}function Pt(n){let e;const t=n[7].default,l=ot(t,n,n[6],null);return{c(){l&&l.c()},m(o,r){l&&l.m(o,r),e=!0},p(o,r){l&&l.p&&(!e||r&64)&&it(l,t,o,o[6],e?rt(t,o[6],r,null):at(o[6]),null)},i(o){e||(q(l,o),e=!0)},o(o){G(l,o),e=!1},d(o){l&&l.d(o)}}}function Fn(n){let e,t,l,o,r,i,a=n[1]&&Rt(n),c=n[4]&&Pt(n);return{c(){e=m("dialog"),a&&a.c(),t=P(),c&&c.c(),h(e,"class",l=n[0]+" backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none svelte-csux1e"),ne(e,"backdrop:cursor-pointer",n[1])},m(u,f){k(u,e,f),a&&a.m(e,null),v(e,t),c&&c.m(e,null),n[8](e),o=!0,r||(i=[j(e,"keydown",n[9]),j(e,"mousedown",vn(n[10]))],r=!0)},p(u,[f]){u[1]?a?a.p(u,f):(a=Rt(u),a.c(),a.m(e,t)):a&&(a.d(1),a=null),u[4]?c?(c.p(u,f),f&16&&q(c,1)):(c=Pt(u),c.c(),q(c,1),c.m(e,null)):c&&(Ve(),G(c,1,1,()=>{c=null}),Ye()),(!o||f&1&&l!==(l=u[0]+" backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none svelte-csux1e"))&&h(e,"class",l),(!o||f&3)&&ne(e,"backdrop:cursor-pointer",u[1])},i(u){o||(q(c),o=!0)},o(u){G(c),o=!1},d(u){u&&b(e),a&&a.d(),c&&c.d(),n[8](null),r=!1,le(i)}}}function Jn(n,e,t){let{$$slots:l={},$$scope:o}=e,{class:r=""}=e,{canSelfClose:i=!0}=e,a,c=!1;const u=Cn();function f(){a.showModal(),t(4,c=!0)}function d(){u("close"),a.close(),t(4,c=!1)}function _(y){ye[y?"unshift":"push"](()=>{a=y,t(3,a)})}const g=y=>{y.key==="Escape"&&(y.preventDefault(),i&&d())},p=()=>{i&&d()};return n.$$set=y=>{"class"in y&&t(0,r=y.class),"canSelfClose"in y&&t(1,i=y.canSelfClose),"$$scope"in y&&t(6,o=y.$$scope)},[r,i,d,a,c,f,o,l,_,g,p]}class ut extends fe{constructor(e){super(),ue(this,e,Jn,Fn,ae,{class:0,canSelfClose:1,open:5,close:2})}get open(){return this.$$.ctx[5]}get close(){return this.$$.ctx[2]}}function Wn(n){let e,t,l,o,r,i,a;return{c(){e=m("p"),e.textContent=`${atob("Qm9sdCBpcyBhbiB1bm9mZmljaWFsIHRoaXJkLXBhcnR5IGxhdW5jaGVyLiBJdCdzIGZyZWUgYW5kIG9wZW4tc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIEFHUEwgMy4wLg==")}`,t=P(),l=m("p"),l.textContent=`${atob("SmFnZXggaXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgcHJvYmxlbXMgb3IgZGFtYWdlIGNhdXNlZCBieSB1c2luZyB0aGlzIHByb2R1Y3Qu")}`,o=P(),r=m("button"),r.textContent="I Understand",h(e,"class","p-2"),h(l,"class","p-2"),h(r,"class","m-5 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75")},m(c,u){k(c,e,u),k(c,t,u),k(c,l,u),k(c,o,u),k(c,r,u),i||(a=j(r,"click",n[2]),i=!0)},p:B,d(c){c&&(b(e),b(t),b(l),b(o),b(r)),i=!1,a()}}}function Xn(n){let e,t,l={canSelfClose:!1,class:"w-1/2 text-center",$$slots:{default:[Wn]},$$scope:{ctx:n}};return e=new ut({props:l}),n[3](e),{c(){se(e.$$.fragment)},m(o,r){Z(e,o,r),t=!0},p(o,[r]){const i={};r&33&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){t||(q(e.$$.fragment,o),t=!0)},o(o){G(e.$$.fragment,o),t=!1},d(o){n[3](null),K(e,o)}}}function zn(n,e,t){let l;const{sessions:o}=N;pe(n,o,c=>t(4,l=c));let r;rn(()=>{l.length==0&&r.open()});const i=()=>r.close();function a(c){ye[c?"unshift":"push"](()=>{r=c,t(0,r)})}return[r,o,i,a]}class Vn extends fe{constructor(e){super(),ue(this,e,zn,Xn,ae,{})}}function Yn(n,e,t){z.saveConfig();const l=(a,c)=>{const u=new XMLHttpRequest,f={},d=me(N.config);a&&(f.hash=a),n&&(f.jx_session_id=n),e&&(f.jx_character_id=e),t&&(f.jx_display_name=t),d.rs_plugin_loader&&(f.plugin_loader="1"),d.use_custom_rs_config_uri&&d.rs_config_uri?f.config_uri=d.rs_config_uri:f.config_uri=I.env.default_config_uri,u.open("POST","/launch-rs3-deb?".concat(new URLSearchParams(f).toString()),!0),u.onreadystatechange=()=>{u.readyState==4&&(E.info(`Game launch status: '${u.responseText.trim()}'`),u.status==200&&(a&&(I.rs3DebInstalledHash=a),d.close_after_launch&&!d.rs_plugin_loader&&fetch("/close")))},u.send(c)},o=new XMLHttpRequest,r=I.env.content_url,i=r.concat("dists/trusty/non-free/binary-amd64/Packages");o.open("GET",i,!0),o.onreadystatechange=()=>{if(o.readyState==4&&o.status==200){const a=Object.fromEntries(o.response.split(` -`).map(c=>c.split(": ")));if(!a.Filename||!a.Size){E.error(`Could not parse package data from URL: ${i}`),l();return}if(a.SHA256!==I.rs3DebInstalledHash){E.info("Downloading RS3 client...");const c=new XMLHttpRequest;c.open("GET",r.concat(a.Filename),!0),c.responseType="arraybuffer",c.onprogress=u=>{if(u.loaded){const f=(Math.round(1e3*u.loaded/u.total)/10).toFixed(1);E.updateLogAtIndex(0,`Downloading RS3 client... ${f}%`)}},c.onreadystatechange=()=>{c.readyState==4&&c.status==200&&l(a.SHA256,c.response)},c.onerror=()=>{E.error(`Error downloading game client: from ${i}: non-http error`),l()},c.send()}else E.info("Latest client is already installed"),l()}},o.onerror=()=>{E.error(`Error: from ${i}: non-http error`),l()},o.send()}function un(n,e,t,l){z.saveConfig();const o=l?"/launch-runelite-jar-configure?":"/launch-runelite-jar?",r=me(N.config),i=(f,d,_)=>{const g=new XMLHttpRequest,p={};f&&(p.id=f),_&&(p.jar_path=_),n&&(p.jx_session_id=n),e&&(p.jx_character_id=e),t&&(p.jx_display_name=t),r.flatpak_rich_presence&&(p.flatpak_rich_presence=""),g.open(d?"POST":"GET",o.concat(new URLSearchParams(p).toString()),!0),g.onreadystatechange=()=>{g.readyState==4&&(E.info(`Game launch status: '${g.responseText.trim()}'`),g.status==200&&(f&&(I.runeLiteInstalledId=f),r.close_after_launch&&!l&&fetch("/close")))},g.send(d)};if(r.runelite_use_custom_jar){i(null,null,r.runelite_custom_jar);return}const a=2*60*1e3;if(I.runeLiteInstalledId!==null){const f=me(ht);if(f!==null&&f+a>Date.now()){i();return}}const c=new XMLHttpRequest;c.open("GET","https://api.github.com/repos/runelite/launcher/releases",!0),c.onreadystatechange=()=>{if(c.readyState==4)if(c.status==200){const f=JSON.parse(c.responseText).map(d=>d.assets).flat().find(d=>d.name.toLowerCase()=="runelite.jar");if(f.id!=I.runeLiteInstalledId){E.info("Downloading RuneLite...");const d=new XMLHttpRequest;d.open("GET",f.browser_download_url,!0),d.responseType="arraybuffer",d.onreadystatechange=()=>{d.readyState==4&&(d.status==200?(ht.set(Date.now()),i(f.id,d.response)):E.error(`Error downloading from ${f.url}: ${d.status}: ${d.responseText}`))},d.onprogress=_=>{if(_.loaded&&_.lengthComputable){const g=(Math.round(1e3*_.loaded/_.total)/10).toFixed(1);E.updateLogAtIndex(0,`Downloading RuneLite... ${g}%`)}},d.send()}else ht.set(Date.now()),i()}else E.error(`Failed to check for RuneLite updates: ${c.status}: ${c.responseText}`),i()},c.send()}function Zn(n,e,t){z.saveConfig();const l=me(N.config),o=(a,c)=>{const u=new XMLHttpRequest,f={};a&&(f.version=a),n&&(f.jx_session_id=n),e&&(f.jx_character_id=e),t&&(f.jx_display_name=t),u.open("POST","/launch-hdos-jar?".concat(new URLSearchParams(f).toString()),!0),u.onreadystatechange=()=>{u.readyState==4&&(E.info(`Game launch status: '${u.responseText.trim()}'`),u.status==200&&(a&&(I.hdosInstalledVersion=a),l.close_after_launch&&fetch("/close")))},u.send(c)},r=new XMLHttpRequest,i="https://cdn.hdos.dev/client/getdown.txt";r.open("GET",i,!0),r.onreadystatechange=()=>{if(r.readyState==4)if(r.status==200){const a=r.responseText.match(/^launcher\.version *= *(.*?)$/m);if(a&&a.length>=2){const c=a[1];if(c!==I.hdosInstalledVersion){const u=`https://cdn.hdos.dev/launcher/v${c}/hdos-launcher.jar`;E.info("Downloading HDOS...");const f=new XMLHttpRequest;f.open("GET",u,!0),f.responseType="arraybuffer",f.onreadystatechange=()=>{if(f.readyState==4)if(f.status==200)o(c,f.response);else{const d=JSON.parse(r.responseText).map(_=>_.assets).flat().find(_=>_.name.toLowerCase()=="runelite.jar");E.error(`Error downloading from ${d.url}: ${f.status}: ${f.responseText}`)}},f.onprogress=d=>{if(d.loaded&&d.lengthComputable){const _=(Math.round(1e3*d.loaded/d.total)/10).toFixed(1);E.updateLogAtIndex(0,`Downloading HDOS... ${_}%`)}},f.send()}else E.info("Latest JAR is already installed"),o()}else E.info("Couldn't parse latest launcher version"),o()}else E.error(`Error from ${i}: ${r.status}: ${r.responseText}`)},r.send()}function mt(){const n=new XMLHttpRequest;n.open("GET","/list-game-clients",!0),n.onreadystatechange=()=>{n.readyState==4&&n.status!=200&&E.error(`Error requesting client list: ${n.status}: ${n.responseText}`)},n.send()}async function Tt(n,e,t,l,o){z.saveConfig();const r=`${e?"osrs":I.env.provider}-${n?"win":"mac"}`;let i=n?e?I.osrsExeInstalledHash:I.rs3ExeInstalledHash:e?I.osrsAppInstalledHash:I.rs3AppInstalledHash;const a=async($,O)=>{const x={},A=me(N.config);$&&(x.hash=$),t&&(x.jx_session_id=t),l&&(x.jx_character_id=l),o&&(x.jx_display_name=o),e||(A.rs_plugin_loader&&(x.plugin_loader="1"),x.config_uri=A.use_custom_rs_config_uri&&A.rs_config_uri?A.rs_config_uri:I.env.default_config_uri);const de=await fetch(`/launch-${e?"osrs":"rs3"}-${n?"exe":"app"}?${new URLSearchParams(x).toString()}`,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:await O});de.text().then(Q=>E.info(`Game launch status: '${Q.trim()}'`)),de.status==200&&($&&(i=$),A.close_after_launch&&(e||!A.rs_plugin_loader)&&fetch("/close"))},c=`${I.env.direct6_url}${r}/${r}.json`,u=await fetch(c,{method:"GET"}),f=await u.text();if(u.status!==200){E.error(`Error from ${c}: ${u.status}: ${f}`);return}const d=JSON.parse(atob(f.split(".")[1])).environments.production;if(i===d.id){E.info("Latest client is already installed"),a();return}E.info(`Downloading client version ${d.version}`);const _=`${I.env.direct6_url}${r}/catalog/${d.id}/catalog.json`,g=await fetch(_,{method:"GET"}),p=await g.text();if(g.status!==200){E.error(`Error from ${_}: ${g.status}: ${p}`);return}const y=JSON.parse(atob(p.split(".")[1])),w=$=>$.replace(/^http:\/\/(.{5})-akamai\.aws\.snxd\.com\//i,"https://$1.akamaized.net/").replace(/^http:/i,"https:"),S=w(y.metafile),C=await fetch(S,{method:"GET"}),D=await C.text();if(C.status!==200){E.error(`Error from ${S}: ${C.status}: ${D}`);return}const H=JSON.parse(atob(D.split(".")[1])),T=H.pieces.digests.map($=>{const O=atob($).split("").map(A=>A.charCodeAt(0).toString(16).padStart(2,"0")).join(""),x=w(y.config.remote.baseUrl).concat(y.config.remote.pieceFormat.replace("{SubString:0,2,{TargetDigest}}",O.substring(0,2)).replace("{TargetDigest}",O));return fetch(x,{method:"GET"}).then(A=>A.blob().then(de=>{const Q=new DecompressionStream("gzip");return new Response(de.slice(6).stream().pipeThrough(Q)).blob()}))});let L=0,R=null;for(let $=0;${const O=new Blob($).slice(L,L+R);a(H.id,O.arrayBuffer())})}function It(n,e,t){const l=n.slice();return l[41]=e[t],l}function Ut(n,e,t){const l=n.slice();return l[44]=e[t],l}function Ht(n,e,t){const l=n.slice();return l[47]=e[t][0],l[40]=e[t][1],l}function Ot(n,e,t){const l=n.slice();return l[41]=e[t],l}function Kn(n){let e,t=ce(n[5]),l=[];for(let o=0;on[22].call(e))},m(d,_){k(d,e,_);for(let g=0;gl.parentNode,r.anchor=l},p(i,a){n=i,r.ctx=n,a[0]&16&&o!==(o=n[4])&&st(o,r)||an(r,n,a)},d(i){i&&(b(e),b(t),b(l)),r.block.d(i),r.token=null,r=null}}}function ss(n){let e,t,l,o,r,i,a,c,u,f,d,_,g,p,y,w,S,C=n[10]&&At(n);function D(L,R){return R[0]&1&&(p=null),p==null&&(p=Object.entries(L[0].pluginConfig).length!==0),p?ps:ds}let H=D(n,[-1,-1]),T=H(n);return{c(){e=m("span"),t=m("button"),l=m("img"),i=P(),a=m("button"),c=m("img"),f=P(),d=m("br"),_=P(),C&&C.c(),g=P(),T.c(),y=Ce(),kt(l.src,o="svgs/download-solid.svg")||h(l,"src",o),h(l,"alt","Install plugin from updater URL"),h(t,"class","mx-1 aspect-square w-9 rounded-md bg-blue-500 p-1 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:bg-gray-500"),t.disabled=r=!n[0].hasLibArchive||n[8],h(t,"title","Install plugin from updater URL"),kt(c.src,u="svgs/folder-solid.svg")||h(c,"src",u),h(c,"alt","Install plugin from local directory"),h(a,"class","aspect-square w-9 rounded-md bg-blue-500 p-1 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:bg-gray-500"),a.disabled=n[8],h(a,"title","Install plugin from local directory"),h(e,"class","align-middle")},m(L,R){k(L,e,R),v(e,t),v(t,l),v(e,i),v(e,a),v(a,c),k(L,f,R),k(L,d,R),k(L,_,R),C&&C.m(L,R),k(L,g,R),T.m(L,R),k(L,y,R),w||(S=[j(t,"click",n[23]),j(a,"click",n[14])],w=!0)},p(L,R){R[0]&257&&r!==(r=!L[0].hasLibArchive||L[8])&&(t.disabled=r),R[0]&256&&(a.disabled=L[8]),L[10]?C?C.p(L,R):(C=At(L),C.c(),C.m(g.parentNode,g)):C&&(C.d(1),C=null),H===(H=D(L,R))&&T?T.p(L,R):(T.d(1),T=H(L),T&&(T.c(),T.m(y.parentNode,y)))},d(L){L&&(b(e),b(f),b(d),b(_),b(g),b(y)),C&&C.d(L),T.d(L),w=!1,le(S)}}}function ls(n){let e;return{c(){e=m("p"),e.textContent="error"},m(t,l){k(t,e,l)},p:B,d(t){t&&b(e)}}}function os(n){let e,t,l,o,r,i,a,c,u,f;function d(w,S){return S[0]&19&&(e=null),S[0]&1&&(t=null),e==null&&(e=!!(w[40]&&w[40].main&&Object.keys(w[0].pluginConfig).includes(w[1]))),e?as:(t==null&&(t=Object.entries(w[0].pluginConfig).length===0),t?is:rs)}let _=d(n,[-1,-1]),g=_(n),p=ce(n[5]),y=[];for(let w=0;w',i=P(),h(r,"class","rounded-sm bg-rose-500 shadow-lg hover:opacity-75")},m(f,d){k(f,e,d),v(e,l),v(e,o),v(e,r),v(e,i),a||(c=j(r,"click",u),a=!0)},p(f,d){n=f,d[0]&33&&t!==(t=(n[0].pluginConfig[n[44].id].name??n[44].id)+"")&&_e(l,t)},d(f){f&&b(e),a=!1,c()}}}function jt(n){let e,t;function l(i,a){return a[0]&33&&(e=null),e==null&&(e=!!Object.keys(i[0].pluginConfig).includes(i[44].id)),e?us:cs}let o=l(n,[-1,-1]),r=o(n);return{c(){r.c(),t=Ce()},m(i,a){r.m(i,a),k(i,t,a)},p(i,a){o===(o=l(i,a))&&r?r.p(i,a):(r.d(1),r=o(i),r&&(r.c(),r.m(t.parentNode,t)))},d(i){i&&b(t),r.d(i)}}}function Mt(n){let e,t=n[41].uid===n[2]&&Nt(n);return{c(){t&&t.c(),e=Ce()},m(l,o){t&&t.m(l,o),k(l,e,o)},p(l,o){l[41].uid===l[2]?t?t.p(l,o):(t=Nt(l),t.c(),t.m(e.parentNode,e)):t&&(t.d(1),t=null)},d(l){l&&b(e),t&&t.d(l)}}}function fs(n){let e;return{c(){e=m("p"),e.textContent="loading..."},m(t,l){k(t,e,l)},p:B,d(t){t&&b(e)}}}function At(n){let e,t,l,o,r,i,a,c,u,f,d,_;return{c(){e=m("label"),e.textContent="URL:",t=P(),l=m("textarea"),o=P(),r=m("button"),r.innerHTML='Confirm',i=P(),a=m("button"),a.innerHTML='Close',c=P(),u=m("br"),f=m("br"),h(e,"for","plugin-updater-url-input"),h(l,"rows","1"),h(l,"id","plugin-updater-url-input"),h(l,"class","w-[50%] max-w-[60%] resize-x rounded border-2 border-slate-300 bg-slate-100 text-slate-950 dark:border-slate-800"),h(r,"title","Confirm"),h(r,"class","rounded-sm bg-emerald-500 hover:opacity-75"),h(a,"title","Close URL entry"),h(a,"class","rounded-sm bg-rose-500 hover:opacity-75")},m(g,p){k(g,e,p),k(g,t,p),k(g,l,p),ie(l,n[11]),k(g,o,p),k(g,r,p),k(g,i,p),k(g,a,p),k(g,c,p),k(g,u,p),k(g,f,p),d||(_=[j(l,"input",n[24]),j(r,"click",n[25]),j(a,"click",n[26])],d=!0)},p(g,p){p[0]&2048&&ie(l,g[11])},d(g){g&&(b(e),b(t),b(l),b(o),b(r),b(i),b(a),b(c),b(u),b(f)),d=!1,le(_)}}}function ds(n){let e;return{c(){e=m("p"),e.textContent=`You have no plugins installed. You can install plugins either from an updater URL, or by - downloading them onto your computer and selecting the "bolt.json" file.`},m(t,l){k(t,e,l)},p:B,d(t){t&&b(e)}}}function ps(n){let e=Object.keys(n[0].pluginConfig).includes(n[1])&&n[4]!==null,t,l=e&&Dt(n);return{c(){l&&l.c(),t=Ce()},m(o,r){l&&l.m(o,r),k(o,t,r)},p(o,r){r[0]&19&&(e=Object.keys(o[0].pluginConfig).includes(o[1])&&o[4]!==null),e?l?l.p(o,r):(l=Dt(o),l.c(),l.m(t.parentNode,t)):l&&(l.d(1),l=null)},d(o){o&&b(t),l&&l.d(o)}}}function Dt(n){let e,t,l,o,r,i,a,c={ctx:n,current:null,token:null,hasCatch:!0,pending:hs,then:gs,catch:_s,value:40};st(e=n[4],c);let u=n[3].updaterURL&&qt(n);return{c(){c.block.c(),t=P(),l=m("button"),l.textContent="Remove",o=P(),u&&u.c(),r=Ce(),h(l,"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")},m(f,d){c.block.m(f,c.anchor=d),c.mount=()=>t.parentNode,c.anchor=t,k(f,t,d),k(f,l,d),k(f,o,d),u&&u.m(f,d),k(f,r,d),i||(a=j(l,"click",n[27]),i=!0)},p(f,d){n=f,c.ctx=n,d[0]&16&&e!==(e=n[4])&&st(e,c)||an(c,n,d),n[3].updaterURL?u?u.p(n,d):(u=qt(n),u.c(),u.m(r.parentNode,r)):u&&(u.d(1),u=null)},d(f){f&&(b(t),b(l),b(o),b(r)),c.block.d(f),c.token=null,c=null,u&&u.d(f),i=!1,a()}}}function _s(n){let e,t,l;return{c(){e=m("p"),e.textContent="error",t=P(),l=m("br")},m(o,r){k(o,e,r),k(o,t,r),k(o,l,r)},p:B,d(o){o&&(b(e),b(t),b(l))}}}function gs(n){let e,t=(n[40].name??Fe)+"",l,o,r,i,a=(n[40].description??"no description")+"",c,u,f,d,_=n[40].version&&Bt(n);return{c(){e=m("p"),l=F(t),o=P(),_&&_.c(),r=P(),i=m("p"),c=F(a),f=P(),d=m("br"),h(e,"class","pb-4 text-xl font-bold"),h(i,"class",u=n[40].description?null:"italic")},m(g,p){k(g,e,p),v(e,l),v(e,o),_&&_.m(e,null),k(g,r,p),k(g,i,p),v(i,c),k(g,f,p),k(g,d,p)},p(g,p){p[0]&16&&t!==(t=(g[40].name??Fe)+"")&&_e(l,t),g[40].version?_?_.p(g,p):(_=Bt(g),_.c(),_.m(e,null)):_&&(_.d(1),_=null),p[0]&16&&a!==(a=(g[40].description??"no description")+"")&&_e(c,a),p[0]&16&&u!==(u=g[40].description?null:"italic")&&h(i,"class",u)},d(g){g&&(b(e),b(r),b(i),b(f),b(d)),_&&_.d()}}}function Bt(n){let e,t,l,o,r=n[40].version+"",i;return{c(){e=m("br"),t=P(),l=m("span"),o=F("v"),i=F(r),h(l,"class","pb-4 text-xl font-bold italic text-slate-600")},m(a,c){k(a,e,c),k(a,t,c),k(a,l,c),v(l,o),v(l,i)},p(a,c){c[0]&16&&r!==(r=a[40].version+"")&&_e(i,r)},d(a){a&&(b(e),b(t),b(l))}}}function hs(n){let e;return{c(){e=m("p"),e.textContent="loading..."},m(t,l){k(t,e,l)},p:B,d(t){t&&b(e)}}}function qt(n){let e,t,l,o;return{c(){e=F(`  - `),t=m("button"),t.textContent="Check updates",h(t,"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(r,i){k(r,e,i),k(r,t,i),l||(o=j(t,"click",n[28]),l=!0)},p:B,d(r){r&&(b(e),b(t)),l=!1,o()}}}function ms(n){let e,t,l,o,r,i,a,c,u,f,d,_,g,p;function y(T,L){return T[5].length==0?Qn:Kn}let w=y(n),S=w(n);function C(T,L){return T[0].hasBoltPlugins?ts:es}let D=C(n),H=D(n);return{c(){e=m("div"),t=m("button"),l=F("Manage Plugins"),r=P(),i=m("hr"),a=P(),S.c(),c=P(),u=m("div"),H.c(),f=P(),d=m("div"),_=m("button"),_.textContent="about plugins",h(t,"class",o="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(n[9]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"),h(i,"class","p-1 dark:border-slate-700"),h(e,"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"),h(u,"class","h-full pt-10"),h(_,"class","m-0 cursor-pointer border-none bg-transparent p-0 text-sm text-gray-500 underline"),h(d,"class","absolute bottom-2 right-4")},m(T,L){k(T,e,L),v(e,t),v(t,l),v(e,r),v(e,i),v(e,a),S.m(e,null),k(T,c,L),k(T,u,L),H.m(u,null),k(T,f,L),k(T,d,L),v(d,_),g||(p=[j(t,"click",n[20]),j(_,"click",n[18])],g=!0)},p(T,L){L[0]&512&&o!==(o="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(T[9]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75")&&h(t,"class",o),w===(w=y(T))&&S?S.p(T,L):(S.d(1),S=w(T),S&&(S.c(),S.m(e,null))),D===(D=C(T))&&H?H.p(T,L):(H.d(1),H=D(T),H&&(H.c(),H.m(u,null)))},d(T){T&&(b(e),b(c),b(u),b(f),b(d)),S.d(),H.d(),g=!1,le(p)}}}function bs(n){let e,t,l={class:"h-[90%] w-[90%] text-center",$$slots:{default:[ms]},$$scope:{ctx:n}};return e=new ut({props:l}),n[31](e),e.$on("close",n[32]),{c(){se(e.$$.fragment)},m(o,r){Z(e,o,r),t=!0},p(o,r){const i={};r[0]&8063|r[1]&2097152&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){t||(q(e.$$.fragment,o),t=!0)},o(o){G(e.$$.fragment,o),t=!1},d(o){n[31](null),K(e,o)}}}const Qe="bolt.json",ks="main.lua",Fe="(unnamed)",Gt="(new character)";function ws(n,e,t){let l,o,r,i;pe(n,vt,U=>t(5,i=U));let a;const c=I.platform==="windows"?"\\":"/",u=c.concat(Qe);function f(){t(10,x=!1),a.open()}const d=U=>new Promise((J,W)=>{const be=U.concat(U.endsWith(c)?Qe:u);var X=new XMLHttpRequest;X.onreadystatechange=()=>{X.readyState==4&&(X.status==200?J(JSON.parse(X.responseText)):W(X.responseText))},X.open("GET","/read-json-file?".concat(new URLSearchParams({path:be}).toString()),!0),X.send()}),_=U=>fetch("/get-plugindir-json?".concat(new URLSearchParams({id:U}).toString())).then(J=>J.ok?J.json():null),g=U=>{const W=I.pluginConfig[U];if(!W)return null;const be=W.path;return be?d(be):_(U)},p=()=>{const U=Object.keys(I.pluginConfig);let J;do J=crypto.randomUUID();while(U.includes(J));return J},y=(U,J)=>{d(U).then(W=>{t(1,L=p()),t(0,I.pluginConfig[L]={name:W.name??Fe,path:U,version:W.version},I),t(6,N.pluginConfigHasPendingChanges=!0,N)}).catch(W=>{console.error(`Config file '${J}' couldn't be fetched, reason: ${W}`)})},w=U=>{fetch(U).then(async J=>{if(!J.ok)return;const W=await J.json();if(W.url){const be=await fetch(W.url).then(Ee=>Ee.arrayBuffer());if(W.sha256){const Ee=await crypto.subtle.digest("SHA-256",be),Ue=Array.from(new Uint8Array(Ee)).map(ft=>ft.toString(16).padStart(2,"0")).join("");if(W.sha256!==Ue){console.error("not installing plugin: incorrect file hash");return}}const X=p();if(!(await fetch("/install-plugin?".concat(new URLSearchParams({id:X}).toString()),{method:"POST",body:be})).ok)return;const $e=await _(X);$e&&(t(1,L=X),t(0,I.pluginConfig[L]={name:$e.name??Fe,version:$e.version,updaterURL:U,sha256:W.sha256},I),t(6,N.pluginConfigHasPendingChanges=!0,N))}})};let S=!1;const C=()=>{t(8,S=!0);var U=new XMLHttpRequest;U.onreadystatechange=()=>{if(U.readyState==4&&(t(8,S=!1),U.status==200))if(U.responseText.endsWith(u)){const J=U.responseText.substring(0,U.responseText.length-Qe.length);y(J,U.responseText)}else console.log(`Selection '${U.responseText}' is not named ${Qe}; ignored`)},U.open("GET","/json-file-picker",!0),U.send()};mt();const D=(U,J,W,be)=>{let X=null;if(W){const $e=I.platform==="windows"?W.replaceAll("\\","/"):W;X=$e.endsWith(c)?$e:$e.concat("/")}var we=new XMLHttpRequest;we.onreadystatechange=()=>{we.readyState==4&&(mt(),E.info(`Start-plugin status: ${we.statusText.trim()}`))},X?we.open("GET","/start-plugin?".concat(new URLSearchParams({client:U.toString(),id:J,main:be,path:X}).toString()),!0):we.open("GET","/start-plugin?".concat(new URLSearchParams({client:U.toString(),id:J,main:be}).toString()),!0),we.send()},H=(U,J)=>{var W=new XMLHttpRequest;W.onreadystatechange=()=>{W.readyState==4&&(mt(),E.info(`Stop-plugin status: ${W.statusText.trim()}`))},W.open("GET","/stop-plugin?".concat(new URLSearchParams({client:U.toString(),uid:J.toString()}).toString()),!0),W.send()},T=(U,J)=>{const W=U.updaterURL;fetch(W).then(async be=>{let X=await be.json(),we=!1;if(X.sha256?U.sha256!==X.sha256&&(we=!0):X.version&&U.version!==X.version&&(we=!0),we&&X.url){const $e=await fetch(X.url);if(!$e.ok)return null;const Ee=await $e.arrayBuffer();if(X.sha256){const ft=await crypto.subtle.digest("SHA-256",Ee),pn=Array.from(new Uint8Array(ft)).map(_n=>_n.toString(16).padStart(2,"0")).join("");if(X.sha256!==pn){console.error(`not updating plugin '${U.name}': incorrect file hash`);return}}fetch("/install-plugin?".concat(new URLSearchParams({id:J}).toString()),{method:"POST",body:Ee});const Ue=await _(J);Ue&&(X.sha256&&(U.sha256=X.sha256),Ue.name&&(U.name=Ue.name),Ue.version&&(U.version=Ue.version),t(6,N.pluginConfigHasPendingChanges=!0,N))}})};var L;const R=()=>fetch("/open-external-url",{method:"POST",body:"https://bolt.adamcake.com/plugins"});var $=!1,O;let x=!1,A;const de=()=>t(9,$=!1),Q=U=>{t(2,O=U.uid),t(9,$=!0),t(10,x=!1),t(11,A="")};function Y(){L=yt(this),t(1,L),t(0,I)}const he=()=>{t(10,x=!x),t(11,A="")};function oe(){A=this.value,t(11,A)}const re=()=>{w(A),t(10,x=!1),t(11,A="")},M=()=>{t(10,x=!1),t(11,A="")},ee=()=>{t(4,r=null),t(6,N.pluginConfigHasPendingChanges=!0,N);let U=I.pluginConfig;U[L]&&(fetch("/uninstall-plugin?".concat(new URLSearchParams({id:L,delete_data_dir:typeof U[L].updaterURL=="string"?"1":"0"}).toString())),delete U[L],t(0,I.pluginConfig=U,I))},Re=()=>T(l,L),ge=U=>D(O,L,o??null,U.main??ks),Ze=U=>{H(O,U.uid)};function fn(U){ye[U?"unshift":"push"](()=>{a=U,t(7,a)})}const dn=()=>z.savePluginConfig(!0);return n.$$.update=()=>{n.$$.dirty[0]&36&&(i.some(U=>U.uid===O)||t(9,$=!1)),n.$$.dirty[0]&3&&t(3,l=I.pluginConfig[L]),n.$$.dirty[0]&2&&t(4,r=g(L)),n.$$.dirty[0]&24&&r&&r.then(U=>{let J=!1;U.name!==l.name&&(t(3,l.name=U.name,l),J=!0),U.version!==l.version&&(t(3,l.version=U.version,l),J=!0),J&&(t(3,l),t(0,I),t(1,L),t(4,r),t(6,N.pluginConfigHasPendingChanges=!0,N))}),n.$$.dirty[0]&8&&t(12,o=l?l.path:null)},[I,L,O,l,r,i,N,a,S,$,x,A,o,w,C,D,H,T,R,f,de,Q,Y,he,oe,re,M,ee,Re,ge,Ze,fn,dn]}class vs extends fe{constructor(e){super(),ue(this,e,ws,bs,ae,{open:19},null,[-1,-1])}get open(){return this.$$.ctx[19]}}function ys(n){let e,t,l,o,r,i,a,c,u,f,d,_,g;return{c(){e=m("div"),t=m("h2"),t.textContent="Game is offline",l=P(),o=m("br"),r=P(),i=m("p"),i.textContent="This game appears to be offline for maintenance or an update. Launch anyway?",a=P(),c=m("div"),u=m("button"),u.textContent="No",f=P(),d=m("button"),d.textContent="Yes",h(t,"class","text-3xl font-extrabold"),h(u,"class","mx-1 mb-2 mt-5 w-[45%] rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(d,"class","mx-1 mb-2 mt-5 w-[45%] rounded-lg bg-emerald-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(c,"class","align-bottom")},m(p,y){k(p,e,y),v(e,t),v(e,l),v(e,o),v(e,r),v(e,i),v(e,a),v(e,c),v(c,u),v(c,f),v(c,d),_||(g=[j(u,"click",n[5]),j(d,"click",n[6])],_=!0)},p:B,d(p){p&&b(e),_=!1,le(g)}}}function $s(n){let e,t,l={class:"h-fit w-3/5 px-5 py-3 text-center",$$slots:{default:[ys]},$$scope:{ctx:n}};return e=new ut({props:l}),n[7](e),{c(){se(e.$$.fragment)},m(o,r){Z(e,o,r),t=!0},p(o,[r]){const i={};r&271&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){t||(q(e.$$.fragment,o),t=!0)},o(o){G(e.$$.fragment,o),t=!1},d(o){n[7](null),K(e,o)}}}function Ss(n,e,t){let l,o,r,i;function a(d,_,g){t(3,i=d),t(1,o=_),t(2,r=g),l.open()}const c=()=>{l.close()},u=()=>{i(o,r),l.close()};function f(d){ye[d?"unshift":"push"](()=>{l=d,t(0,l)})}return[l,o,r,i,a,c,u,f]}class Cs extends fe{constructor(e){super(),ue(this,e,Ss,$s,ae,{open:4})}get open(){return this.$$.ctx[4]}}function Ft(n,e,t){const l=n.slice();return l[20]=e[t],l}function Jt(n,e,t){const l=n.slice();return l[23]=e[t],l}function Ls(n){let e,t,l={};return e=new vs({props:l}),n[16](e),{c(){se(e.$$.fragment)},m(o,r){Z(e,o,r),t=!0},p(o,r){const i={};e.$set(i)},i(o){t||(q(e.$$.fragment,o),t=!0)},o(o){G(e.$$.fragment,o),t=!1},d(o){n[16](null),K(e,o)}}}function Wt(n){let e,t;return{c(){e=m("div"),t=F(n[7]),h(e,"class","absolute left-[2%] w-[96%] rounded-lg bg-blue-400 px-2 text-black")},m(l,o){k(l,e,o),v(e,t)},p(l,o){o&128&&_e(t,l[7])},d(l){l&&b(e)}}}function Rs(n){let e,t,l;return{c(){e=m("button"),e.textContent="Plugin menu",e.disabled=!I.hasBoltPlugins,h(e,"title",I.hasBoltPlugins?null:"This feature is disabled"),h(e,"class","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,r){k(o,e,r),t||(l=j(e,"click",n[19]),t=!0)},p:B,d(o){o&&b(e),t=!1,l()}}}function Ps(n){let e,t,l,o,r,i,a=ce(St[n[1].selected.game]),c=[];for(let u=0;un[18].call(o)),h(e,"class","flex flex-col")},m(u,f){k(u,e,f),v(e,t),v(e,l),v(e,o);for(let d=0;dt(1,i=R)),pe(n,g,R=>t(8,u=R));let p=Te(null);pe(n,p,R=>t(7,c=R));let y=Te(!0);pe(n,y,R=>t(6,a=R));function w(R,$){if(!l)return E.warn("Please log in or select a user to play.");if(!o)return E.warn("Please select a character from the select menu.");const O=z.findSession(i.selected.user_id);if(!O)return E.warn("Unable to launch game, session was not found.");const{session_id:x}=O,A=z.findAccount(O.accounts,o);if(!A)return E.warn("Unable to launch game, account was not found.");const{accountId:de,displayName:Q}=A,Y=I.platform===Xe.Windows,he=I.platform===Xe.Linux;switch(R){case te.osrs:switch($){case Pe.official:Tt(Y,!0,x,de,Q);break;case Pe.runelite:un(x,de,Q,!1);break;case Pe.hdos:Zn(x,de,Q);break}break;case te.rs3:he?Yn(x,de,Q):Tt(Y,!1,x,de,Q);break}}function S(R){const $=R.target.value;if(!l)return;const O=i.userDetails[l];O?(O.account_id=$,Se(_,i.userDetails[l]=O,i)):Se(_,i.userDetails[l]={account_id:$},i)}function C(R){ye[R?"unshift":"push"](()=>{f=R,t(2,f)})}function D(R){ye[R?"unshift":"push"](()=>{d=R,t(3,d)})}const H=()=>{a?w(i.selected.game,i.selected.client):f.open(w,i.selected.game,i.selected.client)};function T(){i.selected.client=yt(this),_.set(i)}const L=()=>{d.open()};return n.$$.update=()=>{var R,$;if(n.$$.dirty&2&&t(14,l=i.selected.user_id),n.$$.dirty&16386&&t(4,o=(R=i.userDetails[l??""])==null?void 0:R.account_id),n.$$.dirty&2&&t(5,r=(($=z.findSession(i.selected.user_id))==null?void 0:$.accounts)??[]),n.$$.dirty&2)if(i.check_announcements){const O=`${I.env.psa_url}${i.selected.game==te.osrs?"osrs":I.env.provider}.json`;fetch(O,{method:"GET"}).then(x=>x.json()).then(x=>{Se(p,c=x.psa&&x.psa.length>0?x.psa:null,c),Se(y,a=!(x.isDisabled??!1),a)})}else Se(p,c=null,c),Se(y,a=!0,a)},[w,i,f,d,o,r,a,c,u,_,g,p,y,S,l,C,D,H,T,L]}class Os extends fe{constructor(e){super(),ue(this,e,Hs,Us,ae,{launch:0})}get launch(){return this.$$.ctx[0]}}function Yt(n,e,t){const l=n.slice();return l[1]=e[t].date,l[2]=e[t].severity,l[3]=e[t].content,l}function Zt(n){var c;let e,t=((c=n[1])==null?void 0:c.toLocaleTimeString())+"",l,o,r=n[3]+"",i,a;return{c(){e=m("li"),l=F(t),o=F(` - - `),i=F(r),a=P(),ne(e,"text-rose-500",n[2]===We.error),ne(e,"text-orange-700",n[2]===We.warn)},m(u,f){k(u,e,f),v(e,l),v(e,o),v(e,i),v(e,a)},p(u,f){var d;f&1&&t!==(t=((d=u[1])==null?void 0:d.toLocaleTimeString())+"")&&_e(l,t),f&1&&r!==(r=u[3]+"")&&_e(i,r),f&1&&ne(e,"text-rose-500",u[2]===We.error),f&1&&ne(e,"text-orange-700",u[2]===We.warn)},d(u){u&&b(e)}}}function Es(n){let e,t,l,o,r=ce(n[0]),i=[];for(let a=0;a',l=P(),o=m("ol");for(let a=0;a{"logs"in o&&t(0,l=o.logs)},[l]}class Ns extends fe{constructor(e){super(),ue(this,e,xs,Es,ae,{logs:0})}}function Kt(n,e,t){const l=n.slice();return l[7]=e[t],l}function Qt(n,e){let t,l=e[7].user.displayName+"",o,r;return{key:n,first:null,c(){t=m("option"),o=F(l),t.__value=r=e[7].user.userId,ie(t,t.__value),h(t,"class","dark:bg-slate-900"),this.first=t},m(i,a){k(i,t,a),v(t,o)},p(i,a){e=i,a&2&&l!==(l=e[7].user.displayName+"")&&_e(o,l),a&2&&r!==(r=e[7].user.userId)&&(t.__value=r,ie(t,t.__value))},d(i){i&&b(t)}}}function js(n){let e,t,l=[],o=new Map,r,i,a,c,u,f,d,_,g,p=ce(n[1]);const y=w=>w[7].user.userId;for(let w=0;wn[4].call(e)),h(a,"class","mx-auto mr-2 rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(u,"class","mx-auto rounded-lg border-2 border-blue-500 p-2 font-bold duration-200 hover:opacity-75"),u.disabled=d=!n[0].selected.user_id,h(i,"class","mt-5 flex")},m(w,S){k(w,e,S),v(e,t);for(let C=0;Ct(1,o=f)),pe(n,i,f=>t(0,l=f));function a(){l.selected.user_id=yt(this),i.set(l)}return[l,o,r,i,a,()=>{const{origin:f,redirect:d,clientid:_}=I.env;ke.openLoginWindow(f,d,_)},async()=>{l.selected.user_id&&(await z.logout(l.selected.user_id),z.saveCredentials())}]}class As extends fe{constructor(e){super(),ue(this,e,Ms,js,ae,{})}}function Ds(n,{callback:e,ignore:t=[]}){const l=o=>{const r=t.some(i=>i.contains(o.target));n&&!n.contains(o.target)&&!o.defaultPrevented&&!r&&e()};return document.addEventListener("click",l,!0),document.addEventListener("contextmenu",l,!0),{destroy(){document.removeEventListener("click",l,!0),document.removeEventListener("contextmenu",l,!0)}}}const Bs=n=>({}),en=n=>({});function tn(n){let e,t,l,o,r,i;const a=n[9].content,c=ot(a,n,n[8],en);return{c(){e=m("div"),c&&c.c(),h(e,"class",t="dropdown-color absolute z-20 rounded-lg border-2 "+n[1]+" "+n[2]+" svelte-xifudk")},m(u,f){k(u,e,f),c&&c.m(e,null),o=!0,r||(i=wn(l=Ds.call(null,e,{callback:n[3],ignore:[n[5]]})),r=!0)},p(u,f){c&&c.p&&(!o||f&256)&&it(c,a,u,u[8],o?rt(a,u[8],f,Bs):at(u[8]),en),(!o||f&6&&t!==(t="dropdown-color absolute z-20 rounded-lg border-2 "+u[1]+" "+u[2]+" svelte-xifudk"))&&h(e,"class",t),l&<(l.update)&&f&32&&l.update.call(null,{callback:u[3],ignore:[u[5]]})},i(u){o||(q(c,u),o=!0)},o(u){G(c,u),o=!1},d(u){u&&b(e),c&&c.d(u),r=!1,i()}}}function qs(n){let e,t,l,o,r,i,a;const c=n[9].default,u=ot(c,n,n[8],null);let f=n[4]&&tn(n);return{c(){e=m("div"),t=m("button"),u&&u.c(),l=P(),f&&f.c(),h(e,"class",o="relative h-fit w-fit "+n[0]+" svelte-xifudk")},m(d,_){k(d,e,_),v(e,t),u&&u.m(t,null),n[10](t),v(e,l),f&&f.m(e,null),r=!0,i||(a=j(t,"click",n[6]),i=!0)},p(d,[_]){u&&u.p&&(!r||_&256)&&it(u,c,d,d[8],r?rt(c,d[8],_,null):at(d[8]),null),d[4]?f?(f.p(d,_),_&16&&q(f,1)):(f=tn(d),f.c(),q(f,1),f.m(e,null)):f&&(Ve(),G(f,1,1,()=>{f=null}),Ye()),(!r||_&1&&o!==(o="relative h-fit w-fit "+d[0]+" svelte-xifudk"))&&h(e,"class",o)},i(d){r||(q(u,d),q(f),r=!0)},o(d){G(u,d),G(f),r=!1},d(d){d&&b(e),u&&u.d(d),n[10](null),f&&f.d(),i=!1,a()}}}function Gs(n,e,t){let{$$slots:l={},$$scope:o}=e,{class:r=""}=e,{position:i="bottom"}=e,{align:a="start"}=e,c=!1,u;function f(){t(4,c=!0)}function d(){t(4,c=!1)}function _(){c?d():f()}function g(p){ye[p?"unshift":"push"](()=>{u=p,t(5,u)})}return n.$$set=p=>{"class"in p&&t(0,r=p.class),"position"in p&&t(1,i=p.position),"align"in p&&t(2,a=p.align),"$$scope"in p&&t(8,o=p.$$scope)},[r,i,a,d,c,u,_,f,o,l,g]}class Fs extends fe{constructor(e){super(),ue(this,e,Gs,qs,ae,{class:0,position:1,align:2,open:7,close:3})}get open(){return this.$$.ctx[7]}get close(){return this.$$.ctx[3]}}function Js(n){let e,t,l,o,r,i,a,c,u,f,d,_,g;return{c(){e=m("button"),e.innerHTML=`
Browse app data - Browse App Data
`,t=P(),l=m("div"),o=m("label"),o.textContent="Check game announcements:",r=P(),i=m("input"),a=P(),c=m("div"),u=m("label"),u.textContent="Close Bolt after launching a game:",f=P(),d=m("input"),h(e,"id","data_dir_button"),h(e,"class","p-2 hover:opacity-75"),h(o,"for","check_announcements"),h(i,"id","check_announcements"),h(i,"type","checkbox"),h(i,"class","ml-2"),h(l,"class","mx-auto p-2"),h(u,"for","close_after_launch"),h(d,"id","close_after_launch"),h(d,"type","checkbox"),h(d,"class","ml-2"),h(c,"class","mx-auto p-2")},m(p,y){k(p,e,y),k(p,t,y),k(p,l,y),v(l,o),v(l,r),v(l,i),i.checked=n[0].check_announcements,k(p,a,y),k(p,c,y),v(c,u),v(c,f),v(c,d),d.checked=n[0].close_after_launch,_||(g=[j(e,"click",n[3]),j(i,"change",n[4]),j(d,"change",n[5])],_=!0)},p(p,[y]){y&1&&(i.checked=p[0].check_announcements),y&1&&(d.checked=p[0].close_after_launch)},i:B,o:B,d(p){p&&(b(e),b(t),b(l),b(a),b(c)),_=!1,le(g)}}}function Ws(n,e,t){let l;function o(){var u=new XMLHttpRequest;u.open("GET","/browse-data"),u.onreadystatechange=()=>{u.readyState==4&&E.info(`Browse status: '${u.responseText.trim()}'`)},u.send()}const{config:r}=N;pe(n,r,u=>t(0,l=u));const i=()=>{o()};function a(){l.check_announcements=this.checked,r.set(l)}function c(){l.close_after_launch=this.checked,r.set(l)}return[l,o,r,i,a,c]}class Xs extends fe{constructor(e){super(),ue(this,e,Ws,Js,ae,{})}}function zs(n){let e,t,l,o,r,i,a,c,u,f,d,_,g,p,y,w,S,C,D;return{c(){var H,T;e=m("button"),t=m("div"),t.innerHTML=`Configure RuneLite - Configure RuneLite`,o=P(),r=m("div"),i=m("label"),i.textContent="Use custom RuneLite JAR:",a=P(),c=m("input"),u=P(),f=m("div"),d=m("textarea"),g=P(),p=m("br"),y=P(),w=m("button"),S=F("Select File"),h(t,"class","flex"),e.disabled=l=!((H=n[0])!=null&&H.session_id)||!((T=n[3])!=null&&T.accountId),h(e,"class","p-2 pb-5 hover:opacity-75"),h(i,"for","use_custom_jar"),h(c,"id","use_custom_jar"),h(c,"type","checkbox"),h(c,"class","ml-2"),h(r,"class","mx-auto border-t-2 border-slate-300 p-2 pt-5 dark:border-slate-800"),h(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"),d.disabled=_=!n[1].runelite_use_custom_jar,h(w,"class","mt-1 rounded-lg border-2 border-blue-500 p-1 duration-200 hover:opacity-75"),w.disabled=n[2],h(f,"class","mx-auto p-2"),ne(f,"opacity-25",!n[1].runelite_use_custom_jar)},m(H,T){k(H,e,T),v(e,t),k(H,o,T),k(H,r,T),v(r,i),v(r,a),v(r,c),c.checked=n[1].runelite_use_custom_jar,k(H,u,T),k(H,f,T),v(f,d),ie(d,n[1].runelite_custom_jar),v(f,g),v(f,p),v(f,y),v(f,w),v(w,S),C||(D=[j(e,"click",n[7]),j(c,"change",n[8]),j(d,"input",n[9]),j(w,"click",n[10])],C=!0)},p(H,[T]){var L,R;T&9&&l!==(l=!((L=H[0])!=null&&L.session_id)||!((R=H[3])!=null&&R.accountId))&&(e.disabled=l),T&2&&(c.checked=H[1].runelite_use_custom_jar),T&2&&_!==(_=!H[1].runelite_use_custom_jar)&&(d.disabled=_),T&2&&ie(d,H[1].runelite_custom_jar),T&4&&(w.disabled=H[2]),T&2&&ne(f,"opacity-25",!H[1].runelite_use_custom_jar)},i:B,o:B,d(H){H&&(b(e),b(o),b(r),b(u),b(f)),C=!1,le(D)}}}function Vs(n,e,t){let l,o,r;const{config:i}=N;pe(n,i,p=>t(1,r=p));let a=!1;async function c(){t(2,a=!0),Se(i,r.runelite_custom_jar=await z.openFilePicker(),r),console.log("done picking"),t(2,a=!1)}function u(){!(l!=null&&l.session_id)||!(o!=null&&o.accountId)||!(o!=null&&o.displayName)||un(l.session_id,o.accountId,o.displayName,!0)}const f=()=>u();function d(){r.runelite_use_custom_jar=this.checked,i.set(r)}function _(){r.runelite_custom_jar=this.value,i.set(r)}const g=()=>{c()};return n.$$.update=()=>{var p;n.$$.dirty&2&&t(0,l=z.findSession(r.selected.user_id)),n.$$.dirty&3&&t(3,o=z.findAccount((l==null?void 0:l.accounts)??[],(p=r.userDetails[r.selected.user_id??""])==null?void 0:p.account_id))},[l,r,a,o,i,c,u,f,d,_,g]}class Ys extends fe{constructor(e){super(),ue(this,e,Vs,zs,ae,{})}}function Zs(n){let e,t,l,o,r,i;return{c(){e=m("div"),t=m("label"),t.textContent="Enable Bolt plugin loader:",l=P(),o=m("input"),h(t,"for","enable_plugins"),h(o,"type","checkbox"),h(o,"name","enable_plugins"),h(o,"id","enable_plugins"),h(o,"class","ml-2"),h(e,"class","mx-auto p-2")},m(a,c){k(a,e,c),v(e,t),v(e,l),v(e,o),o.checked=n[0].rs_plugin_loader,r||(i=j(o,"change",n[2]),r=!0)},p(a,c){c&1&&(o.checked=a[0].rs_plugin_loader)},d(a){a&&b(e),r=!1,i()}}}function Ks(n){let e,t,l,o,r,i,a,c,u,f,d,_=I.hasBoltPlugins&&Zs(n);return{c(){_&&_.c(),e=P(),t=m("div"),l=m("label"),l.textContent="Use custom config URI:",o=P(),r=m("input"),i=P(),a=m("div"),c=m("textarea"),h(l,"for","use_custom_uri"),h(r,"id","use_custom_uri"),h(r,"type","checkbox"),h(r,"class","ml-2"),h(t,"class","mx-auto p-2"),h(c,"class","rounded border-2 border-slate-300 bg-slate-100 text-slate-950 disabled:opacity-50 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50"),c.disabled=u=!n[0].use_custom_rs_config_uri,h(c,"rows","4"),h(c,"placeholder",I.env.default_config_uri),h(a,"class","p-2")},m(g,p){_&&_.m(g,p),k(g,e,p),k(g,t,p),v(t,l),v(t,o),v(t,r),r.checked=n[0].use_custom_rs_config_uri,k(g,i,p),k(g,a,p),v(a,c),ie(c,n[0].rs_config_uri),f||(d=[j(r,"change",n[3]),j(c,"input",n[4])],f=!0)},p(g,[p]){I.hasBoltPlugins&&_.p(g,p),p&1&&(r.checked=g[0].use_custom_rs_config_uri),p&1&&u!==(u=!g[0].use_custom_rs_config_uri)&&(c.disabled=u),p&1&&ie(c,g[0].rs_config_uri)},i:B,o:B,d(g){g&&(b(e),b(t),b(i),b(a)),_&&_.d(g),f=!1,le(d)}}}function Qs(n,e,t){let l;const{config:o}=N;pe(n,o,c=>t(0,l=c));function r(){l.rs_plugin_loader=this.checked,o.set(l)}function i(){l.use_custom_rs_config_uri=this.checked,o.set(l)}function a(){l.rs_config_uri=this.value,o.set(l)}return[l,o,r,i,a]}class el extends fe{constructor(e){super(),ue(this,e,Qs,Ks,ae,{})}}function tl(n){let e,t;return e=new el({}),{c(){se(e.$$.fragment)},m(l,o){Z(e,l,o),t=!0},i(l){t||(q(e.$$.fragment,l),t=!0)},o(l){G(e.$$.fragment,l),t=!1},d(l){K(e,l)}}}function nl(n){let e,t;return e=new Ys({}),{c(){se(e.$$.fragment)},m(l,o){Z(e,l,o),t=!0},i(l){t||(q(e.$$.fragment,l),t=!0)},o(l){G(e.$$.fragment,l),t=!1},d(l){K(e,l)}}}function sl(n){let e,t;return e=new Xs({}),{c(){se(e.$$.fragment)},m(l,o){Z(e,l,o),t=!0},i(l){t||(q(e.$$.fragment,l),t=!0)},o(l){G(e.$$.fragment,l),t=!1},d(l){K(e,l)}}}function ll(n){let e,t,l,o,r,i,a,c,u,f,d,_,g,p,y,w,S,C,D,H;const T=[sl,nl,tl],L=[];function R($,O){return $[1]==$[2].general?0:$[1]==$[2].osrs?1:$[1]==$[2].rs3?2:-1}return~(w=R(n))&&(S=L[w]=T[w](n)),{c(){e=m("div"),t=m("div"),l=m("button"),o=F("General"),i=P(),a=m("button"),c=F("OSRS"),f=P(),d=m("button"),_=F("RS3"),p=P(),y=m("div"),S&&S.c(),h(l,"class",r=n[1]===n[2].general?je:Me),h(a,"class",u=n[1]===n[2].osrs?je:Me),h(d,"class",g=n[1]===n[2].rs3?je:Me),h(t,"class","flex flex-col items-center gap-2 border-r-2 border-slate-300 pt-10 dark:border-slate-800"),h(y,"class","col-span-3 p-5 pt-10 text-center"),h(e,"class","grid h-full grid-cols-4")},m($,O){k($,e,O),v(e,t),v(t,l),v(l,o),v(t,i),v(t,a),v(a,c),v(t,f),v(t,d),v(d,_),v(e,p),v(e,y),~w&&L[w].m(y,null),C=!0,D||(H=[j(l,"click",n[4]),j(a,"click",n[5]),j(d,"click",n[6])],D=!0)},p($,O){(!C||O&2&&r!==(r=$[1]===$[2].general?je:Me))&&h(l,"class",r),(!C||O&2&&u!==(u=$[1]===$[2].osrs?je:Me))&&h(a,"class",u),(!C||O&2&&g!==(g=$[1]===$[2].rs3?je:Me))&&h(d,"class",g);let x=w;w=R($),w!==x&&(S&&(Ve(),G(L[x],1,1,()=>{L[x]=null}),Ye()),~w?(S=L[w],S||(S=L[w]=T[w]($),S.c()),q(S,1),S.m(y,null)):S=null)},i($){C||(q(S),C=!0)},o($){G(S),C=!1},d($){$&&b(e),~w&&L[w].d(),D=!1,le(H)}}}function ol(n){let e,t,l={class:"h-3/4 w-3/4 select-none",$$slots:{default:[ll]},$$scope:{ctx:n}};return e=new ut({props:l}),n[7](e),{c(){se(e.$$.fragment)},m(o,r){Z(e,o,r),t=!0},p(o,[r]){const i={};r&258&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){t||(q(e.$$.fragment,o),t=!0)},o(o){G(e.$$.fragment,o),t=!1},d(o){n[7](null),K(e,o)}}}let je="border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 w-3/4",Me="border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 w-3/4";function rl(n,e,t){let l;function o(){l.open()}var r=(d=>(d[d.general=0]="general",d[d.osrs=1]="osrs",d[d.rs3=2]="rs3",d))(r||{});let i=0;const a=()=>{t(1,i=r.general)},c=()=>{t(1,i=r.osrs)},u=()=>{t(1,i=r.rs3)};function f(d){ye[d?"unshift":"push"](()=>{l=d,t(0,l)})}return[l,i,r,o,a,c,u,f]}class il extends fe{constructor(e){super(),ue(this,e,rl,ol,ae,{open:3})}get open(){return this.$$.ctx[3]}}function al(n){const e=n.slice(),t=z.findSession(e[1].selected.user_id??"");return e[11]=t,e}function cl(n){let e,t,l;return{c(){e=m("button"),e.textContent="Login",h(e,"class","h-11 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")},m(o,r){k(o,e,r),t||(l=j(e,"click",n[10]),t=!0)},p:B,i:B,o:B,d(o){o&&b(e),t=!1,l()}}}function ul(n){let e,t;return e=new Fs({props:{align:"center",$$slots:{content:[dl],default:[fl]},$$scope:{ctx:n}}}),{c(){se(e.$$.fragment)},m(l,o){Z(e,l,o),t=!0},p(l,o){const r={};o&4098&&(r.$$scope={dirty:o,ctx:l}),e.$set(r)},i(l){t||(q(e.$$.fragment,l),t=!0)},o(l){G(e.$$.fragment,l),t=!1},d(l){K(e,l)}}}function fl(n){var o;let e,t=(((o=n[11])==null?void 0:o.user.displayName)??"No user selected")+"",l;return{c(){e=m("button"),l=F(t),h(e,"class","h-11 w-48 rounded-lg border-2 border-slate-300 bg-inherit text-center font-bold text-black duration-200 hover:opacity-75 dark:border-slate-800 dark:text-slate-50")},m(r,i){k(r,e,i),v(e,l)},p(r,i){var a;i&2&&t!==(t=(((a=r[11])==null?void 0:a.user.displayName)??"No user selected")+"")&&_e(l,t)},d(r){r&&b(e)}}}function dl(n){let e,t,l;return t=new As({}),{c(){e=m("div"),se(t.$$.fragment),h(e,"slot","content"),h(e,"class","w-40")},m(o,r){k(o,e,r),Z(t,e,null),l=!0},p:B,i(o){l||(q(t.$$.fragment,o),l=!0)},o(o){G(t.$$.fragment,o),l=!1},d(o){o&&b(e),K(t)}}}function pl(n){let e,t,l,o,r,i,a,c,u,f,d,_,g,p,y,w,S,C,D={};e=new il({props:D}),n[5](e);const H=[ul,cl],T=[];function L($,O){return $[2].length>0?0:1}function R($,O){return O===0?al($):$}return p=L(n),y=T[p]=H[p](R(n,p)),{c(){se(e.$$.fragment),t=P(),l=m("div"),o=m("div"),r=m("button"),r.textContent="RS3",i=P(),a=m("button"),a.textContent="OSRS",c=P(),u=m("div"),f=m("button"),f.innerHTML='Change Theme',d=P(),_=m("button"),_.innerHTML='Settings',g=P(),y.c(),h(r,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),ne(r,"text-black",n[1].selected.game===te.rs3),ne(r,"bg-blue-500",n[1].selected.game===te.rs3),h(a,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 bg-blue-500 p-2 text-black duration-200 hover:opacity-75"),ne(a,"text-black",n[1].selected.game===te.osrs),ne(a,"bg-blue-500",n[1].selected.game===te.osrs),h(o,"class","m-3 ml-9 font-bold"),h(f,"class","h-10 w-10 rounded-full bg-blue-500 text-center duration-200 hover:rotate-45 hover:opacity-75"),h(_,"class","h-10 w-10 rounded-full bg-blue-500 text-center duration-200 hover:rotate-45 hover:opacity-75"),h(u,"class","m-2 ml-auto flex gap-2"),h(l,"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($,O){Z(e,$,O),k($,t,O),k($,l,O),v(l,o),v(o,r),v(o,i),v(o,a),v(l,c),v(l,u),v(u,f),v(u,d),v(u,_),v(u,g),T[p].m(u,null),w=!0,S||(C=[j(r,"click",n[6]),j(a,"click",n[7]),j(f,"click",n[8]),j(_,"click",n[9])],S=!0)},p($,[O]){const x={};e.$set(x),(!w||O&2)&&ne(r,"text-black",$[1].selected.game===te.rs3),(!w||O&2)&&ne(r,"bg-blue-500",$[1].selected.game===te.rs3),(!w||O&2)&&ne(a,"text-black",$[1].selected.game===te.osrs),(!w||O&2)&&ne(a,"bg-blue-500",$[1].selected.game===te.osrs);let A=p;p=L($),p===A?T[p].p(R($,p),O):(Ve(),G(T[A],1,1,()=>{T[A]=null}),Ye(),y=T[p],y?y.p(R($,p),O):(y=T[p]=H[p](R($,p)),y.c()),q(y,1),y.m(u,null))},i($){w||(q(e.$$.fragment,$),q(y),w=!0)},o($){G(e.$$.fragment,$),G(y),w=!1},d($){$&&(b(t),b(l)),n[5](null),K(e,$),T[p].d(),S=!1,le(C)}}}function _l(n,e,t){let l,o;const{config:r,sessions:i}=N;pe(n,r,p=>t(1,l=p)),pe(n,i,p=>t(2,o=p));let a;function c(p){ye[p?"unshift":"push"](()=>{a=p,t(0,a)})}return[a,l,o,r,i,c,()=>{Se(r,l.selected.game=te.rs3,l)},()=>{Se(r,l.selected.game=te.osrs,l)},()=>Se(r,l.use_dark_theme=!l.use_dark_theme,l),()=>a.open(),()=>{const{origin:p,redirect:y,clientid:w}=I.env;ke.openLoginWindow(p,y,w)}]}class gl extends fe{constructor(e){super(),ue(this,e,_l,pl,ae,{})}}function hl(n){let e,t,l,o,r,i,a,c,u,f,d,_,g;return e=new Vn({}),l=new gl({}),c=new Os({}),_=new Ns({props:{logs:n[0]}}),{c(){se(e.$$.fragment),t=P(),se(l.$$.fragment),o=P(),r=m("div"),i=m("div"),a=P(),se(c.$$.fragment),u=P(),f=m("div"),d=P(),se(_.$$.fragment),h(r,"class","mt-16 grid h-full grid-flow-col grid-cols-3")},m(p,y){Z(e,p,y),k(p,t,y),Z(l,p,y),k(p,o,y),k(p,r,y),v(r,i),v(r,a),Z(c,r,null),v(r,u),v(r,f),k(p,d,y),Z(_,p,y),g=!0},p(p,y){const w={};y&1&&(w.logs=p[0]),_.$set(w)},i(p){g||(q(e.$$.fragment,p),q(l.$$.fragment,p),q(c.$$.fragment,p),q(_.$$.fragment,p),g=!0)},o(p){G(e.$$.fragment,p),G(l.$$.fragment,p),G(c.$$.fragment,p),G(_.$$.fragment,p),g=!1},d(p){p&&(b(t),b(o),b(r),b(d)),K(e,p),K(l,p),K(c),K(_,p)}}}function ml(n){let e,t,l,o;return e=new cn({props:{$$slots:{default:[hl]},$$scope:{ctx:n}}}),{c(){se(e.$$.fragment)},m(r,i){Z(e,r,i),t=!0,l||(o=j(window,"beforeunload",n[2]),l=!0)},p(r,[i]){const a={};i&9&&(a.$$scope={dirty:i,ctx:r}),e.$set(a)},i(r){t||(q(e.$$.fragment,r),t=!0)},o(r){G(e.$$.fragment,r),t=!1},d(r){K(e,r),l=!1,o()}}}function bl(n,e,t){let l;const o=E.logs;return pe(n,o,i=>t(0,l=i)),[l,o,()=>{z.saveConfig(),I.hasBoltPlugins&&z.savePluginConfig(!0)}]}class kl extends fe{constructor(e){super(),ue(this,e,bl,ml,ae,{})}}const nn={target:document.getElementById("app")};window.opener||window.location.search.includes("&id_token")?new Gn(nn):(wl(),jn(),vl(),yl().finally(()=>{N.initialized.set(!0)}),new kl(nn));function wl(){const n=new URLSearchParams(window.location.search);I.platform=n.get("platform"),I.isFlathub=n.get("flathub")==="1",I.hasLibArchive=n.get("has_libarchive")==="1",I.rs3DebInstalledHash=n.get("rs3_deb_installed_hash"),I.rs3ExeInstalledHash=n.get("rs3_exe_installed_hash"),I.rs3AppInstalledHash=n.get("rs3_app_installed_hash"),I.osrsExeInstalledHash=n.get("osrs_exe_installed_hash"),I.osrsAppInstalledHash=n.get("osrs_app_installed_hash"),I.runeLiteInstalledId=n.get("runelite_installed_id"),I.hdosInstalledVersion=n.get("hdos_installed_version");const e=n.get("plugins");if(I.hasBoltPlugins=e!==null,e!==null)try{I.pluginConfig=JSON.parse(e)}catch{E.error("Unable to parse plugin list")}const t=n.get("credentials");if(t)try{const l=JSON.parse(t),o=l.every(r=>typeof r.session_id=="string"&&typeof r.tokens=="object"&&typeof r.accounts=="object"&&typeof r.user=="object");o?N.sessions.set(l):(N.sessions.set([]),z.saveCredentials(),E.warn("Credentials saved on disk are out of date. Please sign in again.")),N.sessions.set(o?l:[])}catch{N.sessions.set([]),z.saveCredentials(),E.error("Unable to parse saved credentials. Please sign in again.")}}function vl(){const{origin:n,origin_2fa:e}=I.env,t=[window.location.origin,n,e];let l=null;window.addEventListener("message",async o=>{var r;if(!t.includes(o.origin)){E.info(`discarding window message from origin ${o.origin}`);return}switch(o.data.type){case"authTokenUpdate":{l=o.data.tokens;break}case"authSessionUpdate":{if(l===null)return E.error("auth is null. Please try again.");const i=o.data.sessionId,a=await z.login(l,i);a.ok?E.info(`Added new user '${a.value.user.displayName}'`):E.error(`Unable to add new user. Please try again. ${a.error}`),z.saveCredentials(),ke.pendingLoginWindow=null,l=null;break}case"authFailed":{E.error(`Unable to authenticate: ${o.data.reason}`),ke.pendingLoginWindow=null,l=null;break}case"externalUrl":{const i=new XMLHttpRequest;i.onreadystatechange=()=>{i.readyState==4&&E.info(`External URL status: '${i.responseText.trim()}'`)},i.open("POST","/open-external-url",!0),i.send(o.data.url);break}case"gameClientList":me(N.config).close_after_launch&&o.data.clients.length>me(vt).length?fetch("/close"):vt.set(o.data.clients);break;default:{const i=((r=o.data)==null?void 0:r.type)??"no type provided";E.info(`Unknown message type: ${i}`);break}}})}async function yl(){const n=me(N.sessions),e=[];n.length>0&&E.info("Logging in...");for(const t of n){const l=await ke.refreshOAuthToken(t.tokens);if(!l.ok){l.error===0?E.error(`Unable to verify saved login, status: ${l.error}. Do you have an internet connection? Please relaunch Bolt to try again.`):(E.error(`Discarding expired login, status: ${l.error}. Please sign in again.`),e.push(t.tokens.sub));continue}const o=l.value;t.tokens=o;const r=await z.login(o,t.session_id);r.ok?E.info(`Signed into saved user '${r.value.user.displayName}'`):(E.error(`Unable to sign into saved user '${t.user.displayName}' - please sign in again. ${r.error}`),e.push(t.tokens.sub))}e.forEach(async t=>{await z.logout(t)}),N.sessions.set(n),await z.saveCredentials()} diff --git a/app/dist/assets/index-alD2Jr-l.js b/app/dist/assets/index-alD2Jr-l.js new file mode 100644 index 0000000..def57c1 --- /dev/null +++ b/app/dist/assets/index-alD2Jr-l.js @@ -0,0 +1,9 @@ +var mn=Object.defineProperty;var bn=(t,e,n)=>e in t?mn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Je=(t,e,n)=>(bn(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"]'))l(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&l(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function l(o){if(o.ep)return;o.ep=!0;const r=n(o);fetch(o.href,r)}})();var bt=(t=>(t[t.SECOND=1e3]="SECOND",t[t.MINUTE=6e4]="MINUTE",t[t.HALF_HOUR=18e5]="HALF_HOUR",t[t.HOUR=36e5]="HOUR",t[t.DAY=864e5]="DAY",t[t.WEEK=6048e5]="WEEK",t[t.MONTH=2592e6]="MONTH",t))(bt||{});class De{static set(e,n,l,o){const r=new Date;r.setTime(r.getTime()+l*o);const i=`expires=${r.toUTCString()}`;document.cookie=`${e}=${n};${i};path=/`}static get(e){const n=`${e}=`,l=document.cookie.split(";");for(let o=0;o(t.rs3="rs3",t.osrs="osrs",t))(ne||{}),Pe=(t=>(t.official="Official",t.runelite="RuneLite",t.hdos="HDOS",t))(Pe||{});const St={rs3:["Official"],osrs:["Official","RuneLite","HDOS"]};class et{static parseTokenResponse(e){try{const n=JSON.parse(e),l=n.id_token.split(".");if(l.length!==3){const i=`Malformed id_token: ${l.length} sections, expected 3`;return V(i)}const o=JSON.parse(atob(l[0]));if(o.typ!=="JWT"){const i=`Bad id_token header: typ ${o.typ}, expected JWT`;return V(i)}const r=JSON.parse(atob(l[1]));return ve({access_token:n.access_token,id_token:n.id_token,refresh_token:n.refresh_token,sub:r.sub,expiry:Date.now()+n.expires_in*1e3})}catch{return V("Unable to parse token response")}}static parseSessionResponse(e){try{const n=JSON.parse(e);return n.sessionId?ve(n.sessionId):V("sessionId does not exist on parsed object")}catch{return V("Unable to parse session response")}}static decodeBolt(e){const n={};for(const l in e){const o=l,r=e[o];typeof r=="string"?n[o]=atob(r):Array.isArray(r)&&r.every(i=>typeof i=="string")?n[o]=r.map(i=>atob(i)):n[o]=r}return n}}var Xe=(t=>(t.Windows="windows",t.Linux="linux",t.MacOS="mac",t))(Xe||{});const T={env:et.decodeBolt(s()),platform:null,rs3DebInstalledHash:null,rs3ExeInstalledHash:null,rs3AppInstalledHash:null,osrsExeInstalledHash:null,osrsAppInstalledHash:null,runeLiteInstalledId:null,hdosInstalledVersion:null,isFlathub:!1,hasLibArchive:!1,hasBoltPlugins:!1,pluginConfig:{}};class dt{static async makeLoginUrl(e){const n=new TextEncoder().encode(e.pkceCodeVerifier),l=await crypto.subtle.digest("SHA-256",n);let o="";const r=new Uint8Array(l);for(let a=0;aMath.round(r*(l-0)/255+0)).map(r=>n[r]).join("")}}const Be=class Be{static async openLoginWindow(e,n,l){if(Be.pendingLoginWindow!==null)return Be.pendingLoginWindow.window.focus();const o=dt.makeRandomState(),r=dt.makeRandomVerifier(),i=new TextEncoder().encode(r),a=await crypto.subtle.digest("SHA-256",i);let c="";const u=new Uint8Array(a);for(let _=0;_{if(e.expiry-Date.now()<3e4){const l=new URLSearchParams({grant_type:"refresh_token",client_id:T.env.clientid,refresh_token:e.refresh_token}),o=new XMLHttpRequest;o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const i=et.parseTokenResponse(o.response);i.ok?n(ve(i.value)):n(V(0))}else n(V(o.status))},o.onerror=()=>{n(V(0))};const r=T.env.origin.concat("/oauth2/token");o.open("POST",r,!0),o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.setRequestHeader("Accept","application/json"),o.send(l)}else n(ve(e))})}static async getOAuthToken(e,n,l,o,r){const i=`${e}/oauth2/token`;return new Promise(a=>{const c=new XMLHttpRequest;c.onreadystatechange=()=>{if(c.readyState==4)if(c.status==200){const f=et.parseTokenResponse(c.response);return f.ok?a(ve(f.value)):a(V(f.error))}else return a(V(`Error: from ${i}: ${c.status}: ${c.response}`))},c.open("POST",i,!0),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.setRequestHeader("Accept","application/json");const u=new URLSearchParams({grant_type:"authorization_code",client_id:n,code:r,code_verifier:l,redirect_uri:o});c.send(u)})}static revokeOauthCreds(e){const n=`${T.env.origin}/oauth2/revoke`;return new Promise(l=>{const o=new XMLHttpRequest;o.open("POST",n,!0),o.onreadystatechange=()=>{o.readyState==4&&l(o.status)},o.setRequestHeader("Content-Type","application/x-www-form-urlencoded");const r=new URLSearchParams({token:e,client_id:T.env.clientid});o.send(r)})}static async getSessionId(e,n){const l=`${e}/sessions`;return new Promise(o=>{const r=new XMLHttpRequest;r.onreadystatechange=()=>{if(r.readyState==4)if(r.status==200){const a=et.parseSessionResponse(r.response);return a.ok?o(ve(a.value)):o(V(a.error))}else V(`Error: from ${l}: ${r.status}: ${r.response}`)},r.open("POST",l,!0),r.setRequestHeader("Content-Type","application/json"),r.setRequestHeader("Accept","application/json");const i={idToken:n};r.send(JSON.stringify(i))})}static validateIdToken(e,n){const l=e.split(".");if(l.length!==3)return V(`Malformed id_token: ${l.length} sections, expected 3`);const o=JSON.parse(atob(l[0]));return o.typ!=="JWT"?V(`Bad id_token header: typ ${o.typ}, expected JWT`):JSON.parse(atob(l[1])).nonce!==n?V("Incorrect nonce in id_token"):ve(void 0)}};Je(Be,"pendingLoginWindow",null);let ke=Be;class nt{static async buildSession(e,n){const l=await nt.getUser(e.sub,e.access_token);if(!l.ok)return V(`Failed to fetch user. Status: ${l.error}`);const o=await nt.getUserAccounts(n);return o.ok?ve({user:l.value,accounts:o.value,tokens:e,session_id:n}):V(`Failed to fetch game accounts. Status: ${o.error}`)}static getUser(e,n){return new Promise(l=>{const o=`${T.env.api}/users/${e}/displayName`,r=new XMLHttpRequest;r.onreadystatechange=()=>{if(r.readyState==4)if(r.status==200){const i=JSON.parse(r.response);l(ve(i))}else l(V(r.status))},r.open("GET",o,!0),r.setRequestHeader("Authorization","Bearer ".concat(n)),r.send()})}static getUserAccounts(e){const n=`${T.env.auth_api}/accounts`;return new Promise(l=>{const o=new XMLHttpRequest;o.onreadystatechange=async()=>{if(o.readyState==4)if(o.status==200){const r=JSON.parse(o.response);l(ve(r))}else l(V(o.status))},o.open("GET",n,!0),o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Authorization","Bearer ".concat(e)),o.send()})}}function B(){}function kn(t,e){for(const n in e)t[n]=e[n];return t}function wn(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}function sn(t){return t()}function Ct(){return Object.create(null)}function Q(t){t.forEach(sn)}function lt(t){return typeof t=="function"}function ae(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let Ke;function kt(t,e){return t===e?!0:(Ke||(Ke=document.createElement("a")),Ke.href=e,t===Ke.href)}function vn(t){return Object.keys(t).length===0}function ln(t,...e){if(t==null){for(const l of e)l(void 0);return B}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function me(t){let e;return ln(t,n=>e=n)(),e}function pe(t,e,n){t.$$.on_destroy.push(ln(e,n))}function ot(t,e,n,l){if(t){const o=on(t,e,n,l);return t[0](o)}}function on(t,e,n,l){return t[1]&&l?kn(n.ctx.slice(),t[1](l(e))):n.ctx}function rt(t,e,n,l){if(t[2]&&l){const o=t[2](l(n));if(e.dirty===void 0)return o;if(typeof o=="object"){const r=[],i=Math.max(e.dirty.length,o.length);for(let a=0;a32){const e=[],n=t.ctx.length/32;for(let l=0;lt.removeEventListener(e,n,l)}function $n(t){return function(e){e.target===this&&t.call(this,e)}}function h(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Sn(t){return Array.from(t.childNodes)}function _e(t,e){e=""+e,t.data!==e&&(t.data=e)}function ie(t,e){t.value=e??""}function Ue(t,e,n){for(let l=0;l{const o=t.$$.callbacks[e];if(o){const r=Cn(e,n,{cancelable:l});return o.slice().forEach(i=>{i.call(t,r)}),!r.defaultPrevented}return!0}}const Ae=[],ye=[];let qe=[];const Lt=[],Pn=Promise.resolve();let wt=!1;function Tn(){wt||(wt=!0,Pn.then($t))}function Ge(t){qe.push(t)}const pt=new Set;let Ee=0;function $t(){if(Ee!==0)return;const t=ze;do{try{for(;Eet.indexOf(l)===-1?e.push(l):n.push(l)),n.forEach(l=>l()),qe=e}const tt=new Set;let He;function Ve(){He={r:0,c:[],p:He}}function Ye(){He.r||Q(He.c),He=He.p}function q(t,e){t&&t.i&&(tt.delete(t),t.i(e))}function G(t,e,n,l){if(t&&t.o){if(tt.has(t))return;tt.add(t),He.c.push(()=>{tt.delete(t),l&&(n&&t.d(1),l())}),t.o(e)}else l&&l()}function st(t,e){const n=e.token={};function l(o,r,i,a){if(e.token!==n)return;e.resolved=a;let c=e.ctx;i!==void 0&&(c=c.slice(),c[i]=a);const u=o&&(e.current=o)(c);let f=!1;e.block&&(e.blocks?e.blocks.forEach((d,g)=>{g!==r&&d&&(Ve(),G(d,1,1,()=>{e.blocks[g]===d&&(e.blocks[g]=null)}),Ye())}):e.block.d(1),u.c(),q(u,1),u.m(e.mount(),e.anchor),f=!0),e.block=u,e.blocks&&(e.blocks[r]=u),f&&$t()}if(wn(t)){const o=ct();if(t.then(r=>{Ce(o),l(e.then,1,e.value,r),Ce(null)},r=>{if(Ce(o),l(e.catch,2,e.error,r),Ce(null),!e.hasCatch)throw r}),e.current!==e.pending)return l(e.pending,0),!0}else{if(e.current!==e.then)return l(e.then,1,e.value,t),!0;e.resolved=t}}function an(t,e,n){const l=e.slice(),{resolved:o}=t;t.current===t.then&&(l[t.value]=o),t.current===t.catch&&(l[t.error]=o),t.block.p(l,n)}function ce(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function Hn(t,e){t.d(1),e.delete(t.key)}function On(t,e,n,l,o,r,i,a,c,u,f,d){let g=t.length,_=r.length,p=g;const v={};for(;p--;)v[t[p].key]=p;const m=[],S=new Map,L=new Map,D=[];for(p=_;p--;){const R=d(o,r,p),$=n(R);let O=i.get($);O?l&&D.push(()=>O.p(R,e)):(O=u($,R),O.c()),S.set($,m[p]=O),$ in v&&L.set($,Math.abs(p-v[$]))}const H=new Set,U=new Set;function C(R){q(R,1),R.m(a,f),i.set(R.key,R),f=R.first,_--}for(;g&&_;){const R=m[_-1],$=t[g-1],O=R.key,E=$.key;R===$?(f=R.first,g--,_--):S.has(E)?!i.has(O)||H.has(O)?C(R):U.has(E)?g--:L.get(O)>L.get(E)?(U.add(O),C(R)):(H.add(E),g--):(c($,i),g--)}for(;g--;){const R=t[g];S.has(R.key)||c(R,i)}for(;_;)C(m[_-1]);return Q(D),m}function le(t){t&&t.c()}function Z(t,e,n){const{fragment:l,after_update:o}=t.$$;l&&l.m(e,n),Ge(()=>{const r=t.$$.on_mount.map(sn).filter(lt);t.$$.on_destroy?t.$$.on_destroy.push(...r):Q(r),t.$$.on_mount=[]}),o.forEach(Ge)}function K(t,e){const n=t.$$;n.fragment!==null&&(In(n.after_update),Q(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function xn(t,e){t.$$.dirty[0]===-1&&(Ae.push(t),Tn(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const p=_.length?_[0]:g;return u.ctx&&o(u.ctx[d],u.ctx[d]=p)&&(!u.skip_bound&&u.bound[d]&&u.bound[d](p),f&&xn(t,d)),g}):[],u.update(),f=!0,Q(u.before_update),u.fragment=l?l(u.ctx):!1,e.target){if(e.hydrate){const d=Sn(e.target);u.fragment&&u.fragment.l(d),d.forEach(k)}else u.fragment&&u.fragment.c();e.intro&&q(t.$$.fragment),Z(t,e.target,e.anchor),$t()}Ce(c)}class fe{constructor(){Je(this,"$$");Je(this,"$$set")}$destroy(){K(this,1),this.$destroy=B}$on(e,n){if(!lt(n))return B;const l=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return l.push(n),()=>{const o=l.indexOf(n);o!==-1&&l.splice(o,1)}}$set(e){this.$$set&&!vn(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const En="4",Ne=[];function Te(t,e=B){let n;const l=new Set;function o(a){if(ae(t,a)&&(t=a,n)){const c=!Ne.length;for(const u of l)u[1](),Ne.push(u,t);if(c){for(let u=0;u{l.delete(u),l.size===0&&n&&(n(),n=null)}}return{set:o,update:r,subscribe:i}}var We=(t=>(t.info="info",t.warn="warn",t.error="error",t))(We||{});class Nn{constructor(){Je(this,"logs",Te([]))}_addLog(e,n){this.logs.update(l=>(l.unshift({date:new Date,severity:e,content:n}),l))}info(e){this._addLog("info",e)}warn(e){this._addLog("warn",e)}error(e){this._addLog("error",e)}updateLogAtIndex(e,n){this.logs.update(l=>(l[e]&&(l[e].content=n),l))}}const x=new Nn;function jn(t,e){let n=!1;return t.subscribe(l=>{n?e(l):n=!0})}const Mn={use_dark_theme:!0,rs_plugin_loader:!1,close_after_launch:!1,check_announcements:!0,flatpak_rich_presence:!1,runelite_use_custom_jar:!1,use_custom_rs_config_uri:!1,selected:{game:ne.osrs,client:Pe.runelite,user_id:null},userDetails:{}};function An(){const e=new URLSearchParams(window.location.search).get("config");function n(o){return typeof o=="object"&&typeof o.use_dark_theme=="boolean"&&typeof o.rs_plugin_loader=="boolean"&&typeof o.close_after_launch=="boolean"&&typeof o.check_announcements=="boolean"&&typeof o.flatpak_rich_presence=="boolean"&&typeof o.runelite_use_custom_jar=="boolean"&&typeof o.selected=="object"&&Object.values(ne).includes(o.selected.game)&&Object.values(Pe).includes(o.selected.client)&&(typeof o.selected.user_id=="string"||o.selected.user_id===null)&&typeof o.userDetails=="object"}const{config:l}=N;if(e)try{const o=JSON.parse(e);typeof o.check_announcements>"u"&&(o.check_announcements=!0,N.configHasPendingChanges=!0),typeof o.close_after_launch>"u"&&(o.close_after_launch=!1,N.configHasPendingChanges=!0),n(o)?l.set(o):(x.error("The config saved on disk is not the correct format. It has been restored to default."),N.configHasPendingChanges=!0)}catch{x.error("Unable to parse config, restoring to default"),N.configHasPendingChanges=!0}else N.configHasPendingChanges=!0;jn(N.config,()=>{N.configHasPendingChanges=!0})}const N={initialized:Te(!1),configHasPendingChanges:!1,pluginConfigHasPendingChanges:!1,config:Te(Mn),sessions:Te([])};let _t=!1,gt=!1;class z{static async login(e,n){const l=await nt.buildSession(e,n);if(!l.ok)return V(l.error);const o=l.value,i=me(N.sessions).findIndex(a=>a.user.userId===e.sub);return i!==-1?N.sessions.update(a=>(a[i]=o,a)):(N.sessions.update(a=>(a.push(o),a)),N.config.update(a=>(a.selected.user_id=o.user.userId,a))),ve(o)}static async logout(e){const{sessions:n,config:l}=N;return n.update(o=>{const r=o.findIndex(i=>i.user.userId===e);return r>-1&&(ke.revokeOauthCreds(o[r].tokens.access_token),o.splice(r,1)),o}),l.update(o=>(typeof o.userDetails[e]<"u"&&delete o.userDetails[e],o.selected.user_id===e&&(o.selected.user_id=null),o)),me(n)}static postJSON(e,n,l=null){const o=JSON.stringify(n);return fetch(e,{method:"POST",body:o,headers:{"Content-Type":"application/json"}}).then(i=>{i.ok||i.text().then(a=>x.error(`${e} error: ${i.status}: ${a}`)),l&&l(i)})}static saveConfig(e=!0){if(_t||e&&!N.configHasPendingChanges)return;_t=!0;const n=me(N.config);return this.postJSON("/save-config",n,()=>_t=!1),n}static savePluginConfig(e=!0){gt||e&&!N.pluginConfigHasPendingChanges||(gt=!0,this.postJSON("/save-plugin-config",T.pluginConfig,()=>gt=!1))}static async saveCredentials(){return this.postJSON("/save-credentials",me(N.sessions))}static async openFilePicker(){const e=await fetch("/jar-file-picker");return e.status===200?e.text():null}static findSession(e){return me(N.sessions).find(l=>l.user.userId===e)}static findAccount(e,n){return e.find(l=>l.accountId==n)}}const vt=Te([]),ht=Te(null);typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(En);function Dn(t){let e,n;const l=t[4].default,o=ot(l,t,t[3],null);return{c(){e=b("main"),o&&o.c(),h(e,"class","fixed top-0 h-screen w-screen bg-slate-100 text-xs text-slate-900 duration-200 sm:text-sm md:text-base dark:bg-slate-900 dark:text-slate-50"),se(e,"dark",t[0])},m(r,i){w(r,e,i),o&&o.m(e,null),n=!0},p(r,[i]){o&&o.p&&(!n||i&8)&&it(o,l,r,r[3],n?rt(l,r[3],i,null):at(r[3]),null),(!n||i&1)&&se(e,"dark",r[0])},i(r){n||(q(o,r),n=!0)},o(r){G(o,r),n=!1},d(r){r&&k(e),o&&o.d(r)}}}function Bn(t,e,n){let l,o,{$$slots:r={},$$scope:i}=e;const{config:a}=N;return pe(t,a,c=>n(2,o=c)),t.$$set=c=>{"$$scope"in c&&n(3,i=c.$$scope)},t.$$.update=()=>{t.$$.dirty&4&&n(0,l=o.use_dark_theme)},[l,a,o,i,r]}class cn extends fe{constructor(e){super(),ue(this,e,Bn,Dn,ae,{})}}function qn(t){let e;return{c(){e=b("div"),e.innerHTML='loading',h(e,"class","flex h-full items-center justify-center")},m(n,l){w(n,e,l)},p:B,d(n){n&&k(e)}}}function Gn(t){let e,n;return e=new cn({props:{$$slots:{default:[qn]},$$scope:{ctx:t}}}),{c(){le(e.$$.fragment)},m(l,o){Z(e,l,o),n=!0},p(l,[o]){const r={};o&32&&(r.$$scope={dirty:o,ctx:l}),e.$set(r)},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){G(e.$$.fragment,l),n=!1},d(l){K(e,l)}}}function Fn(t){const e=window.opener;T.env==null&&o("BoltEnv is not defined. Please close and re-open Bolt to try again.");async function n(i){const a=De.get("auth_verifier");if(!a)return o("Verifier token has expired. Please try signing in again."),null;const{clientid:c,redirect:u}=T.env,f=await ke.getOAuthToken(T.env.origin,c,a,u,i);return f.ok?f.value:(o(`Fetching OAuth token failed. ${f.error}`),null)}async function l(i){const a=De.get("auth_nonce"),c=ke.validateIdToken(i,a??"");if(!c.ok)return o(c.error),null;const u=await ke.getSessionId(T.env.auth_api,i);return u.ok?u.value:(o(`Unable to retreive session id. ${u.error}`),null)}function o(i){r({type:"authFailed",reason:i}),fetch("/close")}function r(i){e.postMessage(i,window.location.origin)}return rn(async()=>{const i=new URLSearchParams(window.location.search),a=i.get("code"),c=i.get("state"),u=i.get("id_token");if(u==null&&a&&c){const f=await n(a);if(!f)return o("tokens object is null.");r({type:"authTokenUpdate",tokens:f});const d=crypto.randomUUID();ke.navigateToAuthConsent(T.env.origin,f.id_token,d)}else if(u&&a&&c){const f=await l(u);if(!f)return o("sessionId is null");r({type:"authSessionUpdate",sessionId:f}),fetch("/close")}else o("Authentication server did not response with the appropriate parameters. Please try again later.")}),Ln(()=>{De.remove("auth_verifier"),De.remove("auth_nonce")}),[]}class Jn extends fe{constructor(e){super(),ue(this,e,Fn,Gn,ae,{})}}function Rt(t){let e,n,l;return{c(){e=b("button"),e.innerHTML='Close',h(e,"class","absolute right-3 top-3 rounded-full bg-rose-500 p-[2px] shadow-lg duration-200 hover:rotate-90 hover:opacity-75")},m(o,r){w(o,e,r),n||(l=j(e,"click",t[2]),n=!0)},p:B,d(o){o&&k(e),n=!1,l()}}}function Pt(t){let e;const n=t[7].default,l=ot(n,t,t[6],null);return{c(){l&&l.c()},m(o,r){l&&l.m(o,r),e=!0},p(o,r){l&&l.p&&(!e||r&64)&&it(l,n,o,o[6],e?rt(n,o[6],r,null):at(o[6]),null)},i(o){e||(q(l,o),e=!0)},o(o){G(l,o),e=!1},d(o){l&&l.d(o)}}}function Wn(t){let e,n,l,o,r,i,a=t[1]&&Rt(t),c=t[4]&&Pt(t);return{c(){e=b("dialog"),a&&a.c(),n=P(),c&&c.c(),h(e,"class",l=t[0]+" backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none svelte-csux1e"),se(e,"backdrop:cursor-pointer",t[1])},m(u,f){w(u,e,f),a&&a.m(e,null),y(e,n),c&&c.m(e,null),t[8](e),o=!0,r||(i=[j(e,"keydown",t[9]),j(e,"mousedown",$n(t[10]))],r=!0)},p(u,[f]){u[1]?a?a.p(u,f):(a=Rt(u),a.c(),a.m(e,n)):a&&(a.d(1),a=null),u[4]?c?(c.p(u,f),f&16&&q(c,1)):(c=Pt(u),c.c(),q(c,1),c.m(e,null)):c&&(Ve(),G(c,1,1,()=>{c=null}),Ye()),(!o||f&1&&l!==(l=u[0]+" backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none svelte-csux1e"))&&h(e,"class",l),(!o||f&3)&&se(e,"backdrop:cursor-pointer",u[1])},i(u){o||(q(c),o=!0)},o(u){G(c),o=!1},d(u){u&&k(e),a&&a.d(),c&&c.d(),t[8](null),r=!1,Q(i)}}}function Xn(t,e,n){let{$$slots:l={},$$scope:o}=e,{class:r=""}=e,{canSelfClose:i=!0}=e,a,c=!1;const u=Rn();function f(){a.showModal(),n(4,c=!0)}function d(){u("close"),a.close(),n(4,c=!1)}function g(v){ye[v?"unshift":"push"](()=>{a=v,n(3,a)})}const _=v=>{v.key==="Escape"&&(v.preventDefault(),i&&d())},p=()=>{i&&d()};return t.$$set=v=>{"class"in v&&n(0,r=v.class),"canSelfClose"in v&&n(1,i=v.canSelfClose),"$$scope"in v&&n(6,o=v.$$scope)},[r,i,d,a,c,f,o,l,g,_,p]}class ut extends fe{constructor(e){super(),ue(this,e,Xn,Wn,ae,{class:0,canSelfClose:1,open:5,close:2})}get open(){return this.$$.ctx[5]}get close(){return this.$$.ctx[2]}}function zn(t){let e,n,l,o,r,i,a;return{c(){e=b("p"),e.textContent=`${atob("Qm9sdCBpcyBhbiB1bm9mZmljaWFsIHRoaXJkLXBhcnR5IGxhdW5jaGVyLiBJdCdzIGZyZWUgYW5kIG9wZW4tc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIEFHUEwgMy4wLg==")}`,n=P(),l=b("p"),l.textContent=`${atob("SmFnZXggaXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgcHJvYmxlbXMgb3IgZGFtYWdlIGNhdXNlZCBieSB1c2luZyB0aGlzIHByb2R1Y3Qu")}`,o=P(),r=b("button"),r.textContent="I Understand",h(e,"class","p-2"),h(l,"class","p-2"),h(r,"class","m-5 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75")},m(c,u){w(c,e,u),w(c,n,u),w(c,l,u),w(c,o,u),w(c,r,u),i||(a=j(r,"click",t[2]),i=!0)},p:B,d(c){c&&(k(e),k(n),k(l),k(o),k(r)),i=!1,a()}}}function Vn(t){let e,n,l={canSelfClose:!1,class:"w-1/2 text-center",$$slots:{default:[zn]},$$scope:{ctx:t}};return e=new ut({props:l}),t[3](e),{c(){le(e.$$.fragment)},m(o,r){Z(e,o,r),n=!0},p(o,[r]){const i={};r&33&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){G(e.$$.fragment,o),n=!1},d(o){t[3](null),K(e,o)}}}function Yn(t,e,n){let l;const{sessions:o}=N;pe(t,o,c=>n(4,l=c));let r;rn(()=>{l.length==0&&r.open()});const i=()=>r.close();function a(c){ye[c?"unshift":"push"](()=>{r=c,n(0,r)})}return[r,o,i,a]}class Zn extends fe{constructor(e){super(),ue(this,e,Yn,Vn,ae,{})}}function Kn(t,e,n){z.saveConfig();const l=(a,c)=>{const u=new XMLHttpRequest,f={},d=me(N.config);a&&(f.hash=a),t&&(f.jx_session_id=t),e&&(f.jx_character_id=e),n&&(f.jx_display_name=n),d.rs_plugin_loader&&(f.plugin_loader="1"),d.use_custom_rs_config_uri&&d.rs_config_uri?f.config_uri=d.rs_config_uri:f.config_uri=T.env.default_config_uri,u.open("POST","/launch-rs3-deb?".concat(new URLSearchParams(f).toString()),!0),u.onreadystatechange=()=>{u.readyState==4&&(x.info(`Game launch status: '${u.responseText.trim()}'`),u.status==200&&(a&&(T.rs3DebInstalledHash=a),d.close_after_launch&&!d.rs_plugin_loader&&fetch("/close")))},u.send(c)},o=new XMLHttpRequest,r=T.env.content_url,i=r.concat("dists/trusty/non-free/binary-amd64/Packages");o.open("GET",i,!0),o.onreadystatechange=()=>{if(o.readyState==4&&o.status==200){const a=Object.fromEntries(o.response.split(` +`).map(c=>c.split(": ")));if(!a.Filename||!a.Size){x.error(`Could not parse package data from URL: ${i}`),l();return}if(a.SHA256!==T.rs3DebInstalledHash){x.info("Downloading RS3 client...");const c=new XMLHttpRequest;c.open("GET",r.concat(a.Filename),!0),c.responseType="arraybuffer",c.onprogress=u=>{if(u.loaded){const f=(Math.round(1e3*u.loaded/u.total)/10).toFixed(1);x.updateLogAtIndex(0,`Downloading RS3 client... ${f}%`)}},c.onreadystatechange=()=>{c.readyState==4&&c.status==200&&l(a.SHA256,c.response)},c.onerror=()=>{x.error(`Error downloading game client: from ${i}: non-http error`),l()},c.send()}else x.info("Latest client is already installed"),l()}},o.onerror=()=>{x.error(`Error: from ${i}: non-http error`),l()},o.send()}function un(t,e,n,l){z.saveConfig();const o=l?"/launch-runelite-jar-configure?":"/launch-runelite-jar?",r=me(N.config),i=(f,d,g)=>{const _=new XMLHttpRequest,p={};f&&(p.id=f),g&&(p.jar_path=g),t&&(p.jx_session_id=t),e&&(p.jx_character_id=e),n&&(p.jx_display_name=n),r.flatpak_rich_presence&&(p.flatpak_rich_presence=""),_.open(d?"POST":"GET",o.concat(new URLSearchParams(p).toString()),!0),_.onreadystatechange=()=>{_.readyState==4&&(x.info(`Game launch status: '${_.responseText.trim()}'`),_.status==200&&(f&&(T.runeLiteInstalledId=f),r.close_after_launch&&!l&&fetch("/close")))},_.send(d)};if(r.runelite_use_custom_jar){i(null,null,r.runelite_custom_jar);return}const a=2*60*1e3;if(T.runeLiteInstalledId!==null){const f=me(ht);if(f!==null&&f+a>Date.now()){i();return}}const c=new XMLHttpRequest;c.open("GET","https://api.github.com/repos/runelite/launcher/releases",!0),c.onreadystatechange=()=>{if(c.readyState==4)if(c.status==200){const f=JSON.parse(c.responseText).map(d=>d.assets).flat().find(d=>d.name.toLowerCase()=="runelite.jar");if(f.id!=T.runeLiteInstalledId){x.info("Downloading RuneLite...");const d=new XMLHttpRequest;d.open("GET",f.browser_download_url,!0),d.responseType="arraybuffer",d.onreadystatechange=()=>{d.readyState==4&&(d.status==200?(ht.set(Date.now()),i(f.id,d.response)):x.error(`Error downloading from ${f.url}: ${d.status}: ${d.responseText}`))},d.onprogress=g=>{if(g.loaded&&g.lengthComputable){const _=(Math.round(1e3*g.loaded/g.total)/10).toFixed(1);x.updateLogAtIndex(0,`Downloading RuneLite... ${_}%`)}},d.send()}else ht.set(Date.now()),i()}else x.error(`Failed to check for RuneLite updates: ${c.status}: ${c.responseText}`),i()},c.send()}function Qn(t,e,n){z.saveConfig();const l=me(N.config),o=(a,c)=>{const u=new XMLHttpRequest,f={};a&&(f.version=a),t&&(f.jx_session_id=t),e&&(f.jx_character_id=e),n&&(f.jx_display_name=n),u.open("POST","/launch-hdos-jar?".concat(new URLSearchParams(f).toString()),!0),u.onreadystatechange=()=>{u.readyState==4&&(x.info(`Game launch status: '${u.responseText.trim()}'`),u.status==200&&(a&&(T.hdosInstalledVersion=a),l.close_after_launch&&fetch("/close")))},u.send(c)},r=new XMLHttpRequest,i="https://cdn.hdos.dev/client/getdown.txt";r.open("GET",i,!0),r.onreadystatechange=()=>{if(r.readyState==4)if(r.status==200){const a=r.responseText.match(/^launcher\.version *= *(.*?)$/m);if(a&&a.length>=2){const c=a[1];if(c!==T.hdosInstalledVersion){const u=`https://cdn.hdos.dev/launcher/v${c}/hdos-launcher.jar`;x.info("Downloading HDOS...");const f=new XMLHttpRequest;f.open("GET",u,!0),f.responseType="arraybuffer",f.onreadystatechange=()=>{if(f.readyState==4)if(f.status==200)o(c,f.response);else{const d=JSON.parse(r.responseText).map(g=>g.assets).flat().find(g=>g.name.toLowerCase()=="runelite.jar");x.error(`Error downloading from ${d.url}: ${f.status}: ${f.responseText}`)}},f.onprogress=d=>{if(d.loaded&&d.lengthComputable){const g=(Math.round(1e3*d.loaded/d.total)/10).toFixed(1);x.updateLogAtIndex(0,`Downloading HDOS... ${g}%`)}},f.send()}else x.info("Latest JAR is already installed"),o()}else x.info("Couldn't parse latest launcher version"),o()}else x.error(`Error from ${i}: ${r.status}: ${r.responseText}`)},r.send()}function mt(){const t=new XMLHttpRequest;t.open("GET","/list-game-clients",!0),t.onreadystatechange=()=>{t.readyState==4&&t.status!=200&&x.error(`Error requesting client list: ${t.status}: ${t.responseText}`)},t.send()}async function Tt(t,e,n,l,o){z.saveConfig();const r=`${e?"osrs":T.env.provider}-${t?"win":"mac"}`;let i=t?e?T.osrsExeInstalledHash:T.rs3ExeInstalledHash:e?T.osrsAppInstalledHash:T.rs3AppInstalledHash;const a=async($,O)=>{const E={},A=me(N.config);$&&(E.hash=$),n&&(E.jx_session_id=n),l&&(E.jx_character_id=l),o&&(E.jx_display_name=o),e||(A.rs_plugin_loader&&(E.plugin_loader="1"),E.config_uri=A.use_custom_rs_config_uri&&A.rs_config_uri?A.rs_config_uri:T.env.default_config_uri);const de=await fetch(`/launch-${e?"osrs":"rs3"}-${t?"exe":"app"}?${new URLSearchParams(E).toString()}`,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:await O});de.text().then(ee=>x.info(`Game launch status: '${ee.trim()}'`)),de.status==200&&($&&(i=$),A.close_after_launch&&(e||!A.rs_plugin_loader)&&fetch("/close"))},c=`${T.env.direct6_url}${r}/${r}.json`,u=await fetch(c,{method:"GET"}),f=await u.text();if(u.status!==200){x.error(`Error from ${c}: ${u.status}: ${f}`);return}const d=JSON.parse(atob(f.split(".")[1])).environments.production;if(i===d.id){x.info("Latest client is already installed"),a();return}x.info(`Downloading client version ${d.version}`);const g=`${T.env.direct6_url}${r}/catalog/${d.id}/catalog.json`,_=await fetch(g,{method:"GET"}),p=await _.text();if(_.status!==200){x.error(`Error from ${g}: ${_.status}: ${p}`);return}const v=JSON.parse(atob(p.split(".")[1])),m=$=>$.replace(/^http:\/\/(.{5})-akamai\.aws\.snxd\.com\//i,"https://$1.akamaized.net/").replace(/^http:/i,"https:"),S=m(v.metafile),L=await fetch(S,{method:"GET"}),D=await L.text();if(L.status!==200){x.error(`Error from ${S}: ${L.status}: ${D}`);return}const H=JSON.parse(atob(D.split(".")[1])),U=H.pieces.digests.map($=>{const O=atob($).split("").map(A=>A.charCodeAt(0).toString(16).padStart(2,"0")).join(""),E=m(v.config.remote.baseUrl).concat(v.config.remote.pieceFormat.replace("{SubString:0,2,{TargetDigest}}",O.substring(0,2)).replace("{TargetDigest}",O));return fetch(E,{method:"GET"}).then(A=>A.blob().then(de=>{const ee=new DecompressionStream("gzip");return new Response(de.slice(6).stream().pipeThrough(ee)).blob()}))});let C=0,R=null;for(let $=0;${const O=new Blob($).slice(C,C+R);a(H.id,O.arrayBuffer())})}function Ut(t,e,n){const l=t.slice();return l[43]=e[n],l}function It(t,e,n){const l=t.slice();return l[46]=e[n],l}function Ht(t,e,n){const l=t.slice();return l[49]=e[n][0],l[42]=e[n][1],l}function Ot(t,e,n){const l=t.slice();return l[43]=e[n],l}function es(t){let e,n=ce(t[5]),l=[];for(let o=0;ot[22].call(e))},m(d,g){w(d,e,g);for(let _=0;_l.parentNode,r.anchor=l},p(i,a){t=i,r.ctx=t,a[0]&16&&o!==(o=t[4])&&st(o,r)||an(r,t,a)},d(i){i&&(k(e),k(n),k(l)),r.block.d(i),r.token=null,r=null}}}function os(t){let e,n,l,o,r,i,a,c,u,f,d,g,_,p,v,m,S,L=t[10]&&At(t);function D(C,R){return R[0]&1&&(p=null),p==null&&(p=Object.entries(C[0].pluginConfig).length!==0),p?gs:_s}let H=D(t,[-1,-1]),U=H(t);return{c(){e=b("span"),n=b("button"),l=b("img"),i=P(),a=b("button"),c=b("img"),f=P(),d=b("br"),g=P(),L&&L.c(),_=P(),U.c(),v=Le(),kt(l.src,o="svgs/download-solid.svg")||h(l,"src",o),h(l,"alt","Install plugin from updater URL"),h(n,"class","mx-1 aspect-square w-9 rounded-md bg-blue-500 p-1 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:bg-gray-500"),n.disabled=r=!t[0].hasLibArchive||t[8],h(n,"title","Install plugin from updater URL"),kt(c.src,u="svgs/folder-solid.svg")||h(c,"src",u),h(c,"alt","Install plugin from local directory"),h(a,"class","aspect-square w-9 rounded-md bg-blue-500 p-1 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:bg-gray-500"),a.disabled=t[8],h(a,"title","Install plugin from local directory"),h(e,"class","align-middle")},m(C,R){w(C,e,R),y(e,n),y(n,l),y(e,i),y(e,a),y(a,c),w(C,f,R),w(C,d,R),w(C,g,R),L&&L.m(C,R),w(C,_,R),U.m(C,R),w(C,v,R),m||(S=[j(n,"click",t[23]),j(a,"click",t[14])],m=!0)},p(C,R){R[0]&257&&r!==(r=!C[0].hasLibArchive||C[8])&&(n.disabled=r),R[0]&256&&(a.disabled=C[8]),C[10]?L?L.p(C,R):(L=At(C),L.c(),L.m(_.parentNode,_)):L&&(L.d(1),L=null),H===(H=D(C,R))&&U?U.p(C,R):(U.d(1),U=H(C),U&&(U.c(),U.m(v.parentNode,v)))},d(C){C&&(k(e),k(f),k(d),k(g),k(_),k(v)),L&&L.d(C),U.d(C),m=!1,Q(S)}}}function rs(t){let e;return{c(){e=b("p"),e.textContent="error"},m(n,l){w(n,e,l)},p:B,d(n){n&&k(e)}}}function is(t){let e,n,l,o,r,i,a,c,u,f;function d(m,S){return S[0]&19&&(e=null),S[0]&1&&(n=null),e==null&&(e=!!(m[42]&&m[42].main&&Object.keys(m[0].pluginConfig).includes(m[1]))),e?us:(n==null&&(n=Object.entries(m[0].pluginConfig).length===0),n?cs:as)}let g=d(t,[-1,-1]),_=g(t),p=ce(t[5]),v=[];for(let m=0;m',i=P(),h(r,"class","rounded-sm bg-rose-500 shadow-lg hover:opacity-75")},m(f,d){w(f,e,d),y(e,l),y(e,o),y(e,r),y(e,i),a||(c=j(r,"click",u),a=!0)},p(f,d){t=f,d[0]&33&&n!==(n=(t[0].pluginConfig[t[46].id].name??t[46].id)+"")&&_e(l,n)},d(f){f&&k(e),a=!1,c()}}}function jt(t){let e,n;function l(i,a){return a[0]&33&&(e=null),e==null&&(e=!!Object.keys(i[0].pluginConfig).includes(i[46].id)),e?ds:fs}let o=l(t,[-1,-1]),r=o(t);return{c(){r.c(),n=Le()},m(i,a){r.m(i,a),w(i,n,a)},p(i,a){o===(o=l(i,a))&&r?r.p(i,a):(r.d(1),r=o(i),r&&(r.c(),r.m(n.parentNode,n)))},d(i){i&&k(n),r.d(i)}}}function Mt(t){let e,n=t[43].uid===t[2]&&Nt(t);return{c(){n&&n.c(),e=Le()},m(l,o){n&&n.m(l,o),w(l,e,o)},p(l,o){l[43].uid===l[2]?n?n.p(l,o):(n=Nt(l),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},d(l){l&&k(e),n&&n.d(l)}}}function ps(t){let e;return{c(){e=b("p"),e.textContent="loading..."},m(n,l){w(n,e,l)},p:B,d(n){n&&k(e)}}}function At(t){let e,n,l,o,r,i,a,c,u,f,d,g;return{c(){e=b("label"),e.textContent="URL:",n=P(),l=b("textarea"),o=P(),r=b("button"),r.innerHTML='Confirm',i=P(),a=b("button"),a.innerHTML='Close',c=P(),u=b("br"),f=b("br"),h(e,"for","plugin-updater-url-input"),h(l,"rows","1"),h(l,"id","plugin-updater-url-input"),h(l,"class","w-[50%] max-w-[60%] resize-x rounded border-2 border-slate-300 bg-slate-100 text-slate-950 dark:border-slate-800"),h(r,"title","Confirm"),h(r,"class","rounded-sm bg-emerald-500 hover:opacity-75"),h(a,"title","Close URL entry"),h(a,"class","rounded-sm bg-rose-500 hover:opacity-75")},m(_,p){w(_,e,p),w(_,n,p),w(_,l,p),ie(l,t[11]),w(_,o,p),w(_,r,p),w(_,i,p),w(_,a,p),w(_,c,p),w(_,u,p),w(_,f,p),d||(g=[j(l,"input",t[24]),j(r,"click",t[25]),j(a,"click",t[26])],d=!0)},p(_,p){p[0]&2048&&ie(l,_[11])},d(_){_&&(k(e),k(n),k(l),k(o),k(r),k(i),k(a),k(c),k(u),k(f)),d=!1,Q(g)}}}function _s(t){let e;return{c(){e=b("p"),e.textContent=`You have no plugins installed. You can install plugins either from an updater URL, or by + downloading them onto your computer and selecting the "bolt.json" file.`},m(n,l){w(n,e,l)},p:B,d(n){n&&k(e)}}}function gs(t){let e=Object.keys(t[0].pluginConfig).includes(t[1])&&t[4]!==null,n,l=e&&Dt(t);return{c(){l&&l.c(),n=Le()},m(o,r){l&&l.m(o,r),w(o,n,r)},p(o,r){r[0]&19&&(e=Object.keys(o[0].pluginConfig).includes(o[1])&&o[4]!==null),e?l?l.p(o,r):(l=Dt(o),l.c(),l.m(n.parentNode,n)):l&&(l.d(1),l=null)},d(o){o&&k(n),l&&l.d(o)}}}function Dt(t){let e,n,l,o,r,i,a,c,u,f,d,g,_={ctx:t,current:null,token:null,hasCatch:!0,pending:bs,then:ms,catch:hs,value:42};st(e=t[4],_);let p=t[3].updaterURL&&qt(t);return{c(){_.block.c(),n=P(),l=b("button"),l.textContent="Browse data",o=J(` +   + `),r=b("button"),r.textContent="Browse config",i=P(),a=b("br"),c=P(),p&&p.c(),u=P(),f=b("button"),f.textContent="Remove",h(l,"class","mx-auto mb-1 w-[min(144px,_25%)] rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(r,"class","mx-auto mb-1 w-[min(144px,_25%)] rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(f,"class","m-1 mx-auto 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")},m(v,m){_.block.m(v,_.anchor=m),_.mount=()=>n.parentNode,_.anchor=n,w(v,n,m),w(v,l,m),w(v,o,m),w(v,r,m),w(v,i,m),w(v,a,m),w(v,c,m),p&&p.m(v,m),w(v,u,m),w(v,f,m),d||(g=[j(l,"click",t[27]),j(r,"click",t[28]),j(f,"click",t[30])],d=!0)},p(v,m){t=v,_.ctx=t,m[0]&16&&e!==(e=t[4])&&st(e,_)||an(_,t,m),t[3].updaterURL?p?p.p(t,m):(p=qt(t),p.c(),p.m(u.parentNode,u)):p&&(p.d(1),p=null)},d(v){v&&(k(n),k(l),k(o),k(r),k(i),k(a),k(c),k(u),k(f)),_.block.d(v),_.token=null,_=null,p&&p.d(v),d=!1,Q(g)}}}function hs(t){let e,n,l;return{c(){e=b("p"),e.textContent="error",n=P(),l=b("br")},m(o,r){w(o,e,r),w(o,n,r),w(o,l,r)},p:B,d(o){o&&(k(e),k(n),k(l))}}}function ms(t){let e,n=(t[42].name??Fe)+"",l,o,r,i,a=(t[42].description??"no description")+"",c,u,f,d,g=t[42].version&&Bt(t);return{c(){e=b("p"),l=J(n),o=P(),g&&g.c(),r=P(),i=b("p"),c=J(a),f=P(),d=b("br"),h(e,"class","pb-4 text-xl font-bold"),h(i,"class",u=t[42].description?null:"italic")},m(_,p){w(_,e,p),y(e,l),y(e,o),g&&g.m(e,null),w(_,r,p),w(_,i,p),y(i,c),w(_,f,p),w(_,d,p)},p(_,p){p[0]&16&&n!==(n=(_[42].name??Fe)+"")&&_e(l,n),_[42].version?g?g.p(_,p):(g=Bt(_),g.c(),g.m(e,null)):g&&(g.d(1),g=null),p[0]&16&&a!==(a=(_[42].description??"no description")+"")&&_e(c,a),p[0]&16&&u!==(u=_[42].description?null:"italic")&&h(i,"class",u)},d(_){_&&(k(e),k(r),k(i),k(f),k(d)),g&&g.d()}}}function Bt(t){let e,n,l,o,r=t[42].version+"",i;return{c(){e=b("br"),n=P(),l=b("span"),o=J("v"),i=J(r),h(l,"class","pb-4 text-xl font-bold italic text-slate-600")},m(a,c){w(a,e,c),w(a,n,c),w(a,l,c),y(l,o),y(l,i)},p(a,c){c[0]&16&&r!==(r=a[42].version+"")&&_e(i,r)},d(a){a&&(k(e),k(n),k(l))}}}function bs(t){let e;return{c(){e=b("p"),e.textContent="loading..."},m(n,l){w(n,e,l)},p:B,d(n){n&&k(e)}}}function qt(t){let e,n,l,o;return{c(){e=b("button"),e.textContent="Check updates",n=J(` +  `),h(e,"class","m-1 mx-auto 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(r,i){w(r,e,i),w(r,n,i),l||(o=j(e,"click",t[29]),l=!0)},p:B,d(r){r&&(k(e),k(n)),l=!1,o()}}}function ks(t){let e,n,l,o,r,i,a,c,u,f,d,g,_,p;function v(U,C){return U[5].length==0?ts:es}let m=v(t),S=m(t);function L(U,C){return U[0].hasBoltPlugins?ss:ns}let D=L(t),H=D(t);return{c(){e=b("div"),n=b("button"),l=J("Manage Plugins"),r=P(),i=b("hr"),a=P(),S.c(),c=P(),u=b("div"),H.c(),f=P(),d=b("div"),g=b("button"),g.textContent="about plugins",h(n,"class",o="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(t[9]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"),h(i,"class","p-1 dark:border-slate-700"),h(e,"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"),h(u,"class","h-full pt-10"),h(g,"class","m-0 cursor-pointer border-none bg-transparent p-0 text-sm text-gray-500 underline"),h(d,"class","absolute bottom-2 right-4")},m(U,C){w(U,e,C),y(e,n),y(n,l),y(e,r),y(e,i),y(e,a),S.m(e,null),w(U,c,C),w(U,u,C),H.m(u,null),w(U,f,C),w(U,d,C),y(d,g),_||(p=[j(n,"click",t[20]),j(g,"click",t[18])],_=!0)},p(U,C){C[0]&512&&o!==(o="mx-auto mb-2 w-[95%] rounded-lg border-2 "+(U[9]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75")&&h(n,"class",o),m===(m=v(U))&&S?S.p(U,C):(S.d(1),S=m(U),S&&(S.c(),S.m(e,null))),D===(D=L(U))&&H?H.p(U,C):(H.d(1),H=D(U),H&&(H.c(),H.m(u,null)))},d(U){U&&(k(e),k(c),k(u),k(f),k(d)),S.d(),H.d(),_=!1,Q(p)}}}function ws(t){let e,n,l={class:"h-[90%] w-[90%] text-center",$$slots:{default:[ks]},$$scope:{ctx:t}};return e=new ut({props:l}),t[33](e),e.$on("close",t[34]),{c(){le(e.$$.fragment)},m(o,r){Z(e,o,r),n=!0},p(o,r){const i={};r[0]&8063|r[1]&8388608&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){G(e.$$.fragment,o),n=!1},d(o){t[33](null),K(e,o)}}}const Qe="bolt.json",vs="main.lua",Fe="(unnamed)",Gt="(new character)";function ys(t,e,n){let l,o,r,i;pe(t,vt,I=>n(5,i=I));let a;const c=T.platform==="windows"?"\\":"/",u=c.concat(Qe);function f(){n(10,E=!1),a.open()}const d=I=>new Promise((F,W)=>{const be=I.concat(I.endsWith(c)?Qe:u);var X=new XMLHttpRequest;X.onreadystatechange=()=>{X.readyState==4&&(X.status==200?F(JSON.parse(X.responseText)):W(X.responseText))},X.open("GET","/read-json-file?".concat(new URLSearchParams({path:be}).toString()),!0),X.send()}),g=I=>fetch("/get-plugindir-json?".concat(new URLSearchParams({id:I}).toString())).then(F=>F.ok?F.json():null),_=I=>{const W=T.pluginConfig[I];if(!W)return null;const be=W.path;return be?d(be):g(I)},p=()=>{const I=Object.keys(T.pluginConfig);let F;do F=crypto.randomUUID();while(I.includes(F));return F},v=(I,F)=>{d(I).then(W=>{n(1,C=p()),n(0,T.pluginConfig[C]={name:W.name??Fe,path:I,version:W.version},T),n(6,N.pluginConfigHasPendingChanges=!0,N)}).catch(W=>{console.error(`Config file '${F}' couldn't be fetched, reason: ${W}`)})},m=I=>{fetch(I).then(async F=>{if(!F.ok)return;const W=await F.json();if(W.url){const be=await fetch(W.url).then(xe=>xe.arrayBuffer());if(W.sha256){const xe=await crypto.subtle.digest("SHA-256",be),Ie=Array.from(new Uint8Array(xe)).map(ft=>ft.toString(16).padStart(2,"0")).join("");if(W.sha256!==Ie){console.error("not installing plugin: incorrect file hash");return}}const X=p();if(!(await fetch("/install-plugin?".concat(new URLSearchParams({id:X}).toString()),{method:"POST",body:be})).ok)return;const $e=await g(X);$e&&(n(1,C=X),n(0,T.pluginConfig[C]={name:$e.name??Fe,version:$e.version,updaterURL:I,sha256:W.sha256},T),n(6,N.pluginConfigHasPendingChanges=!0,N))}})};let S=!1;const L=()=>{n(8,S=!0);var I=new XMLHttpRequest;I.onreadystatechange=()=>{if(I.readyState==4&&(n(8,S=!1),I.status==200))if(I.responseText.endsWith(u)){const F=I.responseText.substring(0,I.responseText.length-Qe.length);v(F,I.responseText)}else console.log(`Selection '${I.responseText}' is not named ${Qe}; ignored`)},I.open("GET","/json-file-picker",!0),I.send()};mt();const D=(I,F,W,be)=>{let X=null;if(W){const $e=T.platform==="windows"?W.replaceAll("\\","/"):W;X=$e.endsWith(c)?$e:$e.concat("/")}var we=new XMLHttpRequest;we.onreadystatechange=()=>{we.readyState==4&&(mt(),x.info(`Start-plugin status: ${we.statusText.trim()}`))},X?we.open("GET","/start-plugin?".concat(new URLSearchParams({client:I.toString(),id:F,main:be,path:X}).toString()),!0):we.open("GET","/start-plugin?".concat(new URLSearchParams({client:I.toString(),id:F,main:be}).toString()),!0),we.send()},H=(I,F)=>{var W=new XMLHttpRequest;W.onreadystatechange=()=>{W.readyState==4&&(mt(),x.info(`Stop-plugin status: ${W.statusText.trim()}`))},W.open("GET","/stop-plugin?".concat(new URLSearchParams({client:I.toString(),uid:F.toString()}).toString()),!0),W.send()},U=(I,F)=>{const W=I.updaterURL;fetch(W).then(async be=>{let X=await be.json(),we=!1;if(X.sha256?I.sha256!==X.sha256&&(we=!0):X.version&&I.version!==X.version&&(we=!0),we&&X.url){const $e=await fetch(X.url);if(!$e.ok)return null;const xe=await $e.arrayBuffer();if(X.sha256){const ft=await crypto.subtle.digest("SHA-256",xe),gn=Array.from(new Uint8Array(ft)).map(hn=>hn.toString(16).padStart(2,"0")).join("");if(X.sha256!==gn){console.error(`not updating plugin '${I.name}': incorrect file hash`);return}}fetch("/install-plugin?".concat(new URLSearchParams({id:F}).toString()),{method:"POST",body:xe});const Ie=await g(F);Ie&&(X.sha256&&(I.sha256=X.sha256),Ie.name&&(I.name=Ie.name),Ie.version&&(I.version=Ie.version),n(6,N.pluginConfigHasPendingChanges=!0,N))}})};var C;const R=()=>fetch("/open-external-url",{method:"POST",body:"https://bolt.adamcake.com/plugins"});var $=!1,O;let E=!1,A;const de=()=>n(9,$=!1),ee=I=>{n(2,O=I.uid),n(9,$=!0),n(10,E=!1),n(11,A="")};function Y(){C=yt(this),n(1,C),n(0,T)}const he=()=>{n(10,E=!E),n(11,A="")};function oe(){A=this.value,n(11,A)}const re=()=>{m(A),n(10,E=!1),n(11,A="")},M=()=>{n(10,E=!1),n(11,A="")},te=()=>{const I=T.pluginConfig[C].path;fetch(I?"/browse-directory?".concat(new URLSearchParams({path:I}).toString()):"/browse-plugin-data?".concat(new URLSearchParams({id:C}).toString()))},Re=()=>fetch("/browse-plugin-config?".concat(new URLSearchParams({id:C}).toString())),ge=()=>U(l,C),Ze=()=>{n(4,r=null),n(6,N.pluginConfigHasPendingChanges=!0,N);let I=T.pluginConfig;const F=I[C];F&&(fetch("/uninstall-plugin?".concat(new URLSearchParams({id:C,delete_data_dir:typeof F.path=="string"?"0":"1"}).toString())),delete I[C],n(0,T.pluginConfig=I,T))},fn=I=>D(O,C,o??null,I.main??vs),dn=I=>{H(O,I.uid)};function pn(I){ye[I?"unshift":"push"](()=>{a=I,n(7,a)})}const _n=()=>z.savePluginConfig(!0);return t.$$.update=()=>{t.$$.dirty[0]&36&&(i.some(I=>I.uid===O)||n(9,$=!1)),t.$$.dirty[0]&3&&n(3,l=T.pluginConfig[C]),t.$$.dirty[0]&2&&n(4,r=_(C)),t.$$.dirty[0]&24&&r&&r.then(I=>{let F=!1;I.name!==l.name&&(n(3,l.name=I.name,l),F=!0),I.version!==l.version&&(n(3,l.version=I.version,l),F=!0),F&&(n(3,l),n(0,T),n(1,C),n(4,r),n(6,N.pluginConfigHasPendingChanges=!0,N))}),t.$$.dirty[0]&8&&n(12,o=l?l.path:null)},[T,C,O,l,r,i,N,a,S,$,E,A,o,m,L,D,H,U,R,f,de,ee,Y,he,oe,re,M,te,Re,ge,Ze,fn,dn,pn,_n]}class $s extends fe{constructor(e){super(),ue(this,e,ys,ws,ae,{open:19},null,[-1,-1])}get open(){return this.$$.ctx[19]}}function Ss(t){let e,n,l,o,r,i,a,c,u,f,d,g,_;return{c(){e=b("div"),n=b("h2"),n.textContent="Game is offline",l=P(),o=b("br"),r=P(),i=b("p"),i.textContent="This game appears to be offline for maintenance or an update. Launch anyway?",a=P(),c=b("div"),u=b("button"),u.textContent="No",f=P(),d=b("button"),d.textContent="Yes",h(n,"class","text-3xl font-extrabold"),h(u,"class","mx-1 mb-2 mt-5 w-[45%] rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(d,"class","mx-1 mb-2 mt-5 w-[45%] rounded-lg bg-emerald-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(c,"class","align-bottom")},m(p,v){w(p,e,v),y(e,n),y(e,l),y(e,o),y(e,r),y(e,i),y(e,a),y(e,c),y(c,u),y(c,f),y(c,d),g||(_=[j(u,"click",t[5]),j(d,"click",t[6])],g=!0)},p:B,d(p){p&&k(e),g=!1,Q(_)}}}function Cs(t){let e,n,l={class:"h-fit w-3/5 px-5 py-3 text-center",$$slots:{default:[Ss]},$$scope:{ctx:t}};return e=new ut({props:l}),t[7](e),{c(){le(e.$$.fragment)},m(o,r){Z(e,o,r),n=!0},p(o,[r]){const i={};r&271&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){G(e.$$.fragment,o),n=!1},d(o){t[7](null),K(e,o)}}}function Ls(t,e,n){let l,o,r,i;function a(d,g,_){n(3,i=d),n(1,o=g),n(2,r=_),l.open()}const c=()=>{l.close()},u=()=>{i(o,r),l.close()};function f(d){ye[d?"unshift":"push"](()=>{l=d,n(0,l)})}return[l,o,r,i,a,c,u,f]}class Rs extends fe{constructor(e){super(),ue(this,e,Ls,Cs,ae,{open:4})}get open(){return this.$$.ctx[4]}}function Ft(t,e,n){const l=t.slice();return l[20]=e[n],l}function Jt(t,e,n){const l=t.slice();return l[23]=e[n],l}function Ps(t){let e,n,l={};return e=new $s({props:l}),t[16](e),{c(){le(e.$$.fragment)},m(o,r){Z(e,o,r),n=!0},p(o,r){const i={};e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){G(e.$$.fragment,o),n=!1},d(o){t[16](null),K(e,o)}}}function Wt(t){let e,n;return{c(){e=b("div"),n=J(t[7]),h(e,"class","absolute left-[2%] w-[96%] rounded-lg bg-blue-400 px-2 text-black")},m(l,o){w(l,e,o),y(e,n)},p(l,o){o&128&&_e(n,l[7])},d(l){l&&k(e)}}}function Ts(t){let e,n,l;return{c(){e=b("button"),e.textContent="Plugin menu",e.disabled=!T.hasBoltPlugins,h(e,"title",T.hasBoltPlugins?null:"This feature is disabled"),h(e,"class","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,r){w(o,e,r),n||(l=j(e,"click",t[19]),n=!0)},p:B,d(o){o&&k(e),n=!1,l()}}}function Us(t){let e,n,l,o,r,i,a=ce(St[t[1].selected.game]),c=[];for(let u=0;ut[18].call(o)),h(e,"class","flex flex-col")},m(u,f){w(u,e,f),y(e,n),y(e,l),y(e,o);for(let d=0;dn(1,i=R)),pe(t,_,R=>n(8,u=R));let p=Te(null);pe(t,p,R=>n(7,c=R));let v=Te(!0);pe(t,v,R=>n(6,a=R));function m(R,$){if(!l)return x.warn("Please log in or select a user to play.");if(!o)return x.warn("Please select a character from the select menu.");const O=z.findSession(i.selected.user_id);if(!O)return x.warn("Unable to launch game, session was not found.");const{session_id:E}=O,A=z.findAccount(O.accounts,o);if(!A)return x.warn("Unable to launch game, account was not found.");const{accountId:de,displayName:ee}=A,Y=T.platform===Xe.Windows,he=T.platform===Xe.Linux;switch(R){case ne.osrs:switch($){case Pe.official:Tt(Y,!0,E,de,ee);break;case Pe.runelite:un(E,de,ee,!1);break;case Pe.hdos:Qn(E,de,ee);break}break;case ne.rs3:he?Kn(E,de,ee):Tt(Y,!1,E,de,ee);break}}function S(R){const $=R.target.value;if(!l)return;const O=i.userDetails[l];O?(O.account_id=$,Se(g,i.userDetails[l]=O,i)):Se(g,i.userDetails[l]={account_id:$},i)}function L(R){ye[R?"unshift":"push"](()=>{f=R,n(2,f)})}function D(R){ye[R?"unshift":"push"](()=>{d=R,n(3,d)})}const H=()=>{a?m(i.selected.game,i.selected.client):f.open(m,i.selected.game,i.selected.client)};function U(){i.selected.client=yt(this),g.set(i)}const C=()=>{d.open()};return t.$$.update=()=>{var R,$;if(t.$$.dirty&2&&n(14,l=i.selected.user_id),t.$$.dirty&16386&&n(4,o=(R=i.userDetails[l??""])==null?void 0:R.account_id),t.$$.dirty&2&&n(5,r=(($=z.findSession(i.selected.user_id))==null?void 0:$.accounts)??[]),t.$$.dirty&2)if(i.check_announcements){const O=`${T.env.psa_url}${i.selected.game==ne.osrs?"osrs":T.env.provider}.json`;fetch(O,{method:"GET"}).then(E=>E.json()).then(E=>{Se(p,c=E.psa&&E.psa.length>0?E.psa:null,c),Se(v,a=!(E.isDisabled??!1),a)})}else Se(p,c=null,c),Se(v,a=!0,a)},[m,i,f,d,o,r,a,c,u,g,_,p,v,S,l,L,D,H,U,C]}class Es extends fe{constructor(e){super(),ue(this,e,xs,Os,ae,{launch:0})}get launch(){return this.$$.ctx[0]}}function Yt(t,e,n){const l=t.slice();return l[1]=e[n].date,l[2]=e[n].severity,l[3]=e[n].content,l}function Zt(t){var c;let e,n=((c=t[1])==null?void 0:c.toLocaleTimeString())+"",l,o,r=t[3]+"",i,a;return{c(){e=b("li"),l=J(n),o=J(` + - `),i=J(r),a=P(),se(e,"text-rose-500",t[2]===We.error),se(e,"text-orange-700",t[2]===We.warn)},m(u,f){w(u,e,f),y(e,l),y(e,o),y(e,i),y(e,a)},p(u,f){var d;f&1&&n!==(n=((d=u[1])==null?void 0:d.toLocaleTimeString())+"")&&_e(l,n),f&1&&r!==(r=u[3]+"")&&_e(i,r),f&1&&se(e,"text-rose-500",u[2]===We.error),f&1&&se(e,"text-orange-700",u[2]===We.warn)},d(u){u&&k(e)}}}function Ns(t){let e,n,l,o,r=ce(t[0]),i=[];for(let a=0;a',l=P(),o=b("ol");for(let a=0;a{"logs"in o&&n(0,l=o.logs)},[l]}class Ms extends fe{constructor(e){super(),ue(this,e,js,Ns,ae,{logs:0})}}function Kt(t,e,n){const l=t.slice();return l[7]=e[n],l}function Qt(t,e){let n,l=e[7].user.displayName+"",o,r;return{key:t,first:null,c(){n=b("option"),o=J(l),n.__value=r=e[7].user.userId,ie(n,n.__value),h(n,"class","dark:bg-slate-900"),this.first=n},m(i,a){w(i,n,a),y(n,o)},p(i,a){e=i,a&2&&l!==(l=e[7].user.displayName+"")&&_e(o,l),a&2&&r!==(r=e[7].user.userId)&&(n.__value=r,ie(n,n.__value))},d(i){i&&k(n)}}}function As(t){let e,n,l=[],o=new Map,r,i,a,c,u,f,d,g,_,p=ce(t[1]);const v=m=>m[7].user.userId;for(let m=0;mt[4].call(e)),h(a,"class","mx-auto mr-2 rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),h(u,"class","mx-auto rounded-lg border-2 border-blue-500 p-2 font-bold duration-200 hover:opacity-75"),u.disabled=d=!t[0].selected.user_id,h(i,"class","mt-5 flex")},m(m,S){w(m,e,S),y(e,n);for(let L=0;Ln(1,o=f)),pe(t,i,f=>n(0,l=f));function a(){l.selected.user_id=yt(this),i.set(l)}return[l,o,r,i,a,()=>{const{origin:f,redirect:d,clientid:g}=T.env;ke.openLoginWindow(f,d,g)},async()=>{l.selected.user_id&&(await z.logout(l.selected.user_id),z.saveCredentials())}]}class Bs extends fe{constructor(e){super(),ue(this,e,Ds,As,ae,{})}}function qs(t,{callback:e,ignore:n=[]}){const l=o=>{const r=n.some(i=>i.contains(o.target));t&&!t.contains(o.target)&&!o.defaultPrevented&&!r&&e()};return document.addEventListener("click",l,!0),document.addEventListener("contextmenu",l,!0),{destroy(){document.removeEventListener("click",l,!0),document.removeEventListener("contextmenu",l,!0)}}}const Gs=t=>({}),en=t=>({});function tn(t){let e,n,l,o,r,i;const a=t[9].content,c=ot(a,t,t[8],en);return{c(){e=b("div"),c&&c.c(),h(e,"class",n="dropdown-color absolute z-20 rounded-lg border-2 "+t[1]+" "+t[2]+" svelte-xifudk")},m(u,f){w(u,e,f),c&&c.m(e,null),o=!0,r||(i=yn(l=qs.call(null,e,{callback:t[3],ignore:[t[5]]})),r=!0)},p(u,f){c&&c.p&&(!o||f&256)&&it(c,a,u,u[8],o?rt(a,u[8],f,Gs):at(u[8]),en),(!o||f&6&&n!==(n="dropdown-color absolute z-20 rounded-lg border-2 "+u[1]+" "+u[2]+" svelte-xifudk"))&&h(e,"class",n),l&<(l.update)&&f&32&&l.update.call(null,{callback:u[3],ignore:[u[5]]})},i(u){o||(q(c,u),o=!0)},o(u){G(c,u),o=!1},d(u){u&&k(e),c&&c.d(u),r=!1,i()}}}function Fs(t){let e,n,l,o,r,i,a;const c=t[9].default,u=ot(c,t,t[8],null);let f=t[4]&&tn(t);return{c(){e=b("div"),n=b("button"),u&&u.c(),l=P(),f&&f.c(),h(e,"class",o="relative h-fit w-fit "+t[0]+" svelte-xifudk")},m(d,g){w(d,e,g),y(e,n),u&&u.m(n,null),t[10](n),y(e,l),f&&f.m(e,null),r=!0,i||(a=j(n,"click",t[6]),i=!0)},p(d,[g]){u&&u.p&&(!r||g&256)&&it(u,c,d,d[8],r?rt(c,d[8],g,null):at(d[8]),null),d[4]?f?(f.p(d,g),g&16&&q(f,1)):(f=tn(d),f.c(),q(f,1),f.m(e,null)):f&&(Ve(),G(f,1,1,()=>{f=null}),Ye()),(!r||g&1&&o!==(o="relative h-fit w-fit "+d[0]+" svelte-xifudk"))&&h(e,"class",o)},i(d){r||(q(u,d),q(f),r=!0)},o(d){G(u,d),G(f),r=!1},d(d){d&&k(e),u&&u.d(d),t[10](null),f&&f.d(),i=!1,a()}}}function Js(t,e,n){let{$$slots:l={},$$scope:o}=e,{class:r=""}=e,{position:i="bottom"}=e,{align:a="start"}=e,c=!1,u;function f(){n(4,c=!0)}function d(){n(4,c=!1)}function g(){c?d():f()}function _(p){ye[p?"unshift":"push"](()=>{u=p,n(5,u)})}return t.$$set=p=>{"class"in p&&n(0,r=p.class),"position"in p&&n(1,i=p.position),"align"in p&&n(2,a=p.align),"$$scope"in p&&n(8,o=p.$$scope)},[r,i,a,d,c,u,g,f,o,l,_]}class Ws extends fe{constructor(e){super(),ue(this,e,Js,Fs,ae,{class:0,position:1,align:2,open:7,close:3})}get open(){return this.$$.ctx[7]}get close(){return this.$$.ctx[3]}}function Xs(t){let e,n,l,o,r,i,a,c,u,f,d,g,_;return{c(){e=b("button"),e.innerHTML=`
Browse app data + Browse App Data
`,n=P(),l=b("div"),o=b("label"),o.textContent="Check game announcements:",r=P(),i=b("input"),a=P(),c=b("div"),u=b("label"),u.textContent="Close Bolt after launching a game:",f=P(),d=b("input"),h(e,"id","data_dir_button"),h(e,"class","p-2 hover:opacity-75"),h(o,"for","check_announcements"),h(i,"id","check_announcements"),h(i,"type","checkbox"),h(i,"class","ml-2"),h(l,"class","mx-auto p-2"),h(u,"for","close_after_launch"),h(d,"id","close_after_launch"),h(d,"type","checkbox"),h(d,"class","ml-2"),h(c,"class","mx-auto p-2")},m(p,v){w(p,e,v),w(p,n,v),w(p,l,v),y(l,o),y(l,r),y(l,i),i.checked=t[0].check_announcements,w(p,a,v),w(p,c,v),y(c,u),y(c,f),y(c,d),d.checked=t[0].close_after_launch,g||(_=[j(e,"click",t[3]),j(i,"change",t[4]),j(d,"change",t[5])],g=!0)},p(p,[v]){v&1&&(i.checked=p[0].check_announcements),v&1&&(d.checked=p[0].close_after_launch)},i:B,o:B,d(p){p&&(k(e),k(n),k(l),k(a),k(c)),g=!1,Q(_)}}}function zs(t,e,n){let l;function o(){var u=new XMLHttpRequest;u.open("GET","/browse-data"),u.onreadystatechange=()=>{u.readyState==4&&x.info(`Browse status: '${u.responseText.trim()}'`)},u.send()}const{config:r}=N;pe(t,r,u=>n(0,l=u));const i=()=>{o()};function a(){l.check_announcements=this.checked,r.set(l)}function c(){l.close_after_launch=this.checked,r.set(l)}return[l,o,r,i,a,c]}class Vs extends fe{constructor(e){super(),ue(this,e,zs,Xs,ae,{})}}function Ys(t){let e,n,l,o,r,i,a,c,u,f,d,g,_,p,v,m,S,L,D;return{c(){var H,U;e=b("button"),n=b("div"),n.innerHTML=`Configure RuneLite + Configure RuneLite`,o=P(),r=b("div"),i=b("label"),i.textContent="Use custom RuneLite JAR:",a=P(),c=b("input"),u=P(),f=b("div"),d=b("textarea"),_=P(),p=b("br"),v=P(),m=b("button"),S=J("Select File"),h(n,"class","flex"),e.disabled=l=!((H=t[0])!=null&&H.session_id)||!((U=t[3])!=null&&U.accountId),h(e,"class","p-2 pb-5 hover:opacity-75"),h(i,"for","use_custom_jar"),h(c,"id","use_custom_jar"),h(c,"type","checkbox"),h(c,"class","ml-2"),h(r,"class","mx-auto border-t-2 border-slate-300 p-2 pt-5 dark:border-slate-800"),h(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"),d.disabled=g=!t[1].runelite_use_custom_jar,h(m,"class","mt-1 rounded-lg border-2 border-blue-500 p-1 duration-200 hover:opacity-75"),m.disabled=t[2],h(f,"class","mx-auto p-2"),se(f,"opacity-25",!t[1].runelite_use_custom_jar)},m(H,U){w(H,e,U),y(e,n),w(H,o,U),w(H,r,U),y(r,i),y(r,a),y(r,c),c.checked=t[1].runelite_use_custom_jar,w(H,u,U),w(H,f,U),y(f,d),ie(d,t[1].runelite_custom_jar),y(f,_),y(f,p),y(f,v),y(f,m),y(m,S),L||(D=[j(e,"click",t[7]),j(c,"change",t[8]),j(d,"input",t[9]),j(m,"click",t[10])],L=!0)},p(H,[U]){var C,R;U&9&&l!==(l=!((C=H[0])!=null&&C.session_id)||!((R=H[3])!=null&&R.accountId))&&(e.disabled=l),U&2&&(c.checked=H[1].runelite_use_custom_jar),U&2&&g!==(g=!H[1].runelite_use_custom_jar)&&(d.disabled=g),U&2&&ie(d,H[1].runelite_custom_jar),U&4&&(m.disabled=H[2]),U&2&&se(f,"opacity-25",!H[1].runelite_use_custom_jar)},i:B,o:B,d(H){H&&(k(e),k(o),k(r),k(u),k(f)),L=!1,Q(D)}}}function Zs(t,e,n){let l,o,r;const{config:i}=N;pe(t,i,p=>n(1,r=p));let a=!1;async function c(){n(2,a=!0),Se(i,r.runelite_custom_jar=await z.openFilePicker(),r),console.log("done picking"),n(2,a=!1)}function u(){!(l!=null&&l.session_id)||!(o!=null&&o.accountId)||!(o!=null&&o.displayName)||un(l.session_id,o.accountId,o.displayName,!0)}const f=()=>u();function d(){r.runelite_use_custom_jar=this.checked,i.set(r)}function g(){r.runelite_custom_jar=this.value,i.set(r)}const _=()=>{c()};return t.$$.update=()=>{var p;t.$$.dirty&2&&n(0,l=z.findSession(r.selected.user_id)),t.$$.dirty&3&&n(3,o=z.findAccount((l==null?void 0:l.accounts)??[],(p=r.userDetails[r.selected.user_id??""])==null?void 0:p.account_id))},[l,r,a,o,i,c,u,f,d,g,_]}class Ks extends fe{constructor(e){super(),ue(this,e,Zs,Ys,ae,{})}}function Qs(t){let e,n,l,o,r,i;return{c(){e=b("div"),n=b("label"),n.textContent="Enable Bolt plugin loader:",l=P(),o=b("input"),h(n,"for","enable_plugins"),h(o,"type","checkbox"),h(o,"name","enable_plugins"),h(o,"id","enable_plugins"),h(o,"class","ml-2"),h(e,"class","mx-auto p-2")},m(a,c){w(a,e,c),y(e,n),y(e,l),y(e,o),o.checked=t[0].rs_plugin_loader,r||(i=j(o,"change",t[2]),r=!0)},p(a,c){c&1&&(o.checked=a[0].rs_plugin_loader)},d(a){a&&k(e),r=!1,i()}}}function el(t){let e,n,l,o,r,i,a,c,u,f,d,g=T.hasBoltPlugins&&Qs(t);return{c(){g&&g.c(),e=P(),n=b("div"),l=b("label"),l.textContent="Use custom config URI:",o=P(),r=b("input"),i=P(),a=b("div"),c=b("textarea"),h(l,"for","use_custom_uri"),h(r,"id","use_custom_uri"),h(r,"type","checkbox"),h(r,"class","ml-2"),h(n,"class","mx-auto p-2"),h(c,"class","rounded border-2 border-slate-300 bg-slate-100 text-slate-950 disabled:opacity-50 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-50"),c.disabled=u=!t[0].use_custom_rs_config_uri,h(c,"rows","4"),h(c,"placeholder",T.env.default_config_uri),h(a,"class","p-2")},m(_,p){g&&g.m(_,p),w(_,e,p),w(_,n,p),y(n,l),y(n,o),y(n,r),r.checked=t[0].use_custom_rs_config_uri,w(_,i,p),w(_,a,p),y(a,c),ie(c,t[0].rs_config_uri),f||(d=[j(r,"change",t[3]),j(c,"input",t[4])],f=!0)},p(_,[p]){T.hasBoltPlugins&&g.p(_,p),p&1&&(r.checked=_[0].use_custom_rs_config_uri),p&1&&u!==(u=!_[0].use_custom_rs_config_uri)&&(c.disabled=u),p&1&&ie(c,_[0].rs_config_uri)},i:B,o:B,d(_){_&&(k(e),k(n),k(i),k(a)),g&&g.d(_),f=!1,Q(d)}}}function tl(t,e,n){let l;const{config:o}=N;pe(t,o,c=>n(0,l=c));function r(){l.rs_plugin_loader=this.checked,o.set(l)}function i(){l.use_custom_rs_config_uri=this.checked,o.set(l)}function a(){l.rs_config_uri=this.value,o.set(l)}return[l,o,r,i,a]}class nl extends fe{constructor(e){super(),ue(this,e,tl,el,ae,{})}}function sl(t){let e,n;return e=new nl({}),{c(){le(e.$$.fragment)},m(l,o){Z(e,l,o),n=!0},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){G(e.$$.fragment,l),n=!1},d(l){K(e,l)}}}function ll(t){let e,n;return e=new Ks({}),{c(){le(e.$$.fragment)},m(l,o){Z(e,l,o),n=!0},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){G(e.$$.fragment,l),n=!1},d(l){K(e,l)}}}function ol(t){let e,n;return e=new Vs({}),{c(){le(e.$$.fragment)},m(l,o){Z(e,l,o),n=!0},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){G(e.$$.fragment,l),n=!1},d(l){K(e,l)}}}function rl(t){let e,n,l,o,r,i,a,c,u,f,d,g,_,p,v,m,S,L,D,H;const U=[ol,ll,sl],C=[];function R($,O){return $[1]==$[2].general?0:$[1]==$[2].osrs?1:$[1]==$[2].rs3?2:-1}return~(m=R(t))&&(S=C[m]=U[m](t)),{c(){e=b("div"),n=b("div"),l=b("button"),o=J("General"),i=P(),a=b("button"),c=J("OSRS"),f=P(),d=b("button"),g=J("RS3"),p=P(),v=b("div"),S&&S.c(),h(l,"class",r=t[1]===t[2].general?je:Me),h(a,"class",u=t[1]===t[2].osrs?je:Me),h(d,"class",_=t[1]===t[2].rs3?je:Me),h(n,"class","flex flex-col items-center gap-2 border-r-2 border-slate-300 pt-10 dark:border-slate-800"),h(v,"class","col-span-3 p-5 pt-10 text-center"),h(e,"class","grid h-full grid-cols-4")},m($,O){w($,e,O),y(e,n),y(n,l),y(l,o),y(n,i),y(n,a),y(a,c),y(n,f),y(n,d),y(d,g),y(e,p),y(e,v),~m&&C[m].m(v,null),L=!0,D||(H=[j(l,"click",t[4]),j(a,"click",t[5]),j(d,"click",t[6])],D=!0)},p($,O){(!L||O&2&&r!==(r=$[1]===$[2].general?je:Me))&&h(l,"class",r),(!L||O&2&&u!==(u=$[1]===$[2].osrs?je:Me))&&h(a,"class",u),(!L||O&2&&_!==(_=$[1]===$[2].rs3?je:Me))&&h(d,"class",_);let E=m;m=R($),m!==E&&(S&&(Ve(),G(C[E],1,1,()=>{C[E]=null}),Ye()),~m?(S=C[m],S||(S=C[m]=U[m]($),S.c()),q(S,1),S.m(v,null)):S=null)},i($){L||(q(S),L=!0)},o($){G(S),L=!1},d($){$&&k(e),~m&&C[m].d(),D=!1,Q(H)}}}function il(t){let e,n,l={class:"h-3/4 w-3/4 select-none",$$slots:{default:[rl]},$$scope:{ctx:t}};return e=new ut({props:l}),t[7](e),{c(){le(e.$$.fragment)},m(o,r){Z(e,o,r),n=!0},p(o,[r]){const i={};r&258&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){G(e.$$.fragment,o),n=!1},d(o){t[7](null),K(e,o)}}}let je="border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 w-3/4",Me="border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 w-3/4";function al(t,e,n){let l;function o(){l.open()}var r=(d=>(d[d.general=0]="general",d[d.osrs=1]="osrs",d[d.rs3=2]="rs3",d))(r||{});let i=0;const a=()=>{n(1,i=r.general)},c=()=>{n(1,i=r.osrs)},u=()=>{n(1,i=r.rs3)};function f(d){ye[d?"unshift":"push"](()=>{l=d,n(0,l)})}return[l,i,r,o,a,c,u,f]}class cl extends fe{constructor(e){super(),ue(this,e,al,il,ae,{open:3})}get open(){return this.$$.ctx[3]}}function ul(t){const e=t.slice(),n=z.findSession(e[1].selected.user_id??"");return e[11]=n,e}function fl(t){let e,n,l;return{c(){e=b("button"),e.textContent="Login",h(e,"class","h-11 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")},m(o,r){w(o,e,r),n||(l=j(e,"click",t[10]),n=!0)},p:B,i:B,o:B,d(o){o&&k(e),n=!1,l()}}}function dl(t){let e,n;return e=new Ws({props:{align:"center",$$slots:{content:[_l],default:[pl]},$$scope:{ctx:t}}}),{c(){le(e.$$.fragment)},m(l,o){Z(e,l,o),n=!0},p(l,o){const r={};o&4098&&(r.$$scope={dirty:o,ctx:l}),e.$set(r)},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){G(e.$$.fragment,l),n=!1},d(l){K(e,l)}}}function pl(t){var o;let e,n=(((o=t[11])==null?void 0:o.user.displayName)??"No user selected")+"",l;return{c(){e=b("button"),l=J(n),h(e,"class","h-11 w-48 rounded-lg border-2 border-slate-300 bg-inherit text-center font-bold text-black duration-200 hover:opacity-75 dark:border-slate-800 dark:text-slate-50")},m(r,i){w(r,e,i),y(e,l)},p(r,i){var a;i&2&&n!==(n=(((a=r[11])==null?void 0:a.user.displayName)??"No user selected")+"")&&_e(l,n)},d(r){r&&k(e)}}}function _l(t){let e,n,l;return n=new Bs({}),{c(){e=b("div"),le(n.$$.fragment),h(e,"slot","content"),h(e,"class","w-40")},m(o,r){w(o,e,r),Z(n,e,null),l=!0},p:B,i(o){l||(q(n.$$.fragment,o),l=!0)},o(o){G(n.$$.fragment,o),l=!1},d(o){o&&k(e),K(n)}}}function gl(t){let e,n,l,o,r,i,a,c,u,f,d,g,_,p,v,m,S,L,D={};e=new cl({props:D}),t[5](e);const H=[dl,fl],U=[];function C($,O){return $[2].length>0?0:1}function R($,O){return O===0?ul($):$}return p=C(t),v=U[p]=H[p](R(t,p)),{c(){le(e.$$.fragment),n=P(),l=b("div"),o=b("div"),r=b("button"),r.textContent="RS3",i=P(),a=b("button"),a.textContent="OSRS",c=P(),u=b("div"),f=b("button"),f.innerHTML='Change Theme',d=P(),g=b("button"),g.innerHTML='Settings',_=P(),v.c(),h(r,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),se(r,"text-black",t[1].selected.game===ne.rs3),se(r,"bg-blue-500",t[1].selected.game===ne.rs3),h(a,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 bg-blue-500 p-2 text-black duration-200 hover:opacity-75"),se(a,"text-black",t[1].selected.game===ne.osrs),se(a,"bg-blue-500",t[1].selected.game===ne.osrs),h(o,"class","m-3 ml-9 font-bold"),h(f,"class","h-10 w-10 rounded-full bg-blue-500 text-center duration-200 hover:rotate-45 hover:opacity-75"),h(g,"class","h-10 w-10 rounded-full bg-blue-500 text-center duration-200 hover:rotate-45 hover:opacity-75"),h(u,"class","m-2 ml-auto flex gap-2"),h(l,"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($,O){Z(e,$,O),w($,n,O),w($,l,O),y(l,o),y(o,r),y(o,i),y(o,a),y(l,c),y(l,u),y(u,f),y(u,d),y(u,g),y(u,_),U[p].m(u,null),m=!0,S||(L=[j(r,"click",t[6]),j(a,"click",t[7]),j(f,"click",t[8]),j(g,"click",t[9])],S=!0)},p($,[O]){const E={};e.$set(E),(!m||O&2)&&se(r,"text-black",$[1].selected.game===ne.rs3),(!m||O&2)&&se(r,"bg-blue-500",$[1].selected.game===ne.rs3),(!m||O&2)&&se(a,"text-black",$[1].selected.game===ne.osrs),(!m||O&2)&&se(a,"bg-blue-500",$[1].selected.game===ne.osrs);let A=p;p=C($),p===A?U[p].p(R($,p),O):(Ve(),G(U[A],1,1,()=>{U[A]=null}),Ye(),v=U[p],v?v.p(R($,p),O):(v=U[p]=H[p](R($,p)),v.c()),q(v,1),v.m(u,null))},i($){m||(q(e.$$.fragment,$),q(v),m=!0)},o($){G(e.$$.fragment,$),G(v),m=!1},d($){$&&(k(n),k(l)),t[5](null),K(e,$),U[p].d(),S=!1,Q(L)}}}function hl(t,e,n){let l,o;const{config:r,sessions:i}=N;pe(t,r,p=>n(1,l=p)),pe(t,i,p=>n(2,o=p));let a;function c(p){ye[p?"unshift":"push"](()=>{a=p,n(0,a)})}return[a,l,o,r,i,c,()=>{Se(r,l.selected.game=ne.rs3,l)},()=>{Se(r,l.selected.game=ne.osrs,l)},()=>Se(r,l.use_dark_theme=!l.use_dark_theme,l),()=>a.open(),()=>{const{origin:p,redirect:v,clientid:m}=T.env;ke.openLoginWindow(p,v,m)}]}class ml extends fe{constructor(e){super(),ue(this,e,hl,gl,ae,{})}}function bl(t){let e,n,l,o,r,i,a,c,u,f,d,g,_;return e=new Zn({}),l=new ml({}),c=new Es({}),g=new Ms({props:{logs:t[0]}}),{c(){le(e.$$.fragment),n=P(),le(l.$$.fragment),o=P(),r=b("div"),i=b("div"),a=P(),le(c.$$.fragment),u=P(),f=b("div"),d=P(),le(g.$$.fragment),h(r,"class","mt-16 grid h-full grid-flow-col grid-cols-3")},m(p,v){Z(e,p,v),w(p,n,v),Z(l,p,v),w(p,o,v),w(p,r,v),y(r,i),y(r,a),Z(c,r,null),y(r,u),y(r,f),w(p,d,v),Z(g,p,v),_=!0},p(p,v){const m={};v&1&&(m.logs=p[0]),g.$set(m)},i(p){_||(q(e.$$.fragment,p),q(l.$$.fragment,p),q(c.$$.fragment,p),q(g.$$.fragment,p),_=!0)},o(p){G(e.$$.fragment,p),G(l.$$.fragment,p),G(c.$$.fragment,p),G(g.$$.fragment,p),_=!1},d(p){p&&(k(n),k(o),k(r),k(d)),K(e,p),K(l,p),K(c),K(g,p)}}}function kl(t){let e,n,l,o;return e=new cn({props:{$$slots:{default:[bl]},$$scope:{ctx:t}}}),{c(){le(e.$$.fragment)},m(r,i){Z(e,r,i),n=!0,l||(o=j(window,"beforeunload",t[2]),l=!0)},p(r,[i]){const a={};i&9&&(a.$$scope={dirty:i,ctx:r}),e.$set(a)},i(r){n||(q(e.$$.fragment,r),n=!0)},o(r){G(e.$$.fragment,r),n=!1},d(r){K(e,r),l=!1,o()}}}function wl(t,e,n){let l;const o=x.logs;return pe(t,o,i=>n(0,l=i)),[l,o,()=>{z.saveConfig(),T.hasBoltPlugins&&z.savePluginConfig(!0)}]}class vl extends fe{constructor(e){super(),ue(this,e,wl,kl,ae,{})}}const nn={target:document.getElementById("app")};window.opener||window.location.search.includes("&id_token")?new Jn(nn):(yl(),An(),$l(),Sl().finally(()=>{N.initialized.set(!0)}),new vl(nn));function yl(){const t=new URLSearchParams(window.location.search);T.platform=t.get("platform"),T.isFlathub=t.get("flathub")==="1",T.hasLibArchive=t.get("has_libarchive")==="1",T.rs3DebInstalledHash=t.get("rs3_deb_installed_hash"),T.rs3ExeInstalledHash=t.get("rs3_exe_installed_hash"),T.rs3AppInstalledHash=t.get("rs3_app_installed_hash"),T.osrsExeInstalledHash=t.get("osrs_exe_installed_hash"),T.osrsAppInstalledHash=t.get("osrs_app_installed_hash"),T.runeLiteInstalledId=t.get("runelite_installed_id"),T.hdosInstalledVersion=t.get("hdos_installed_version");const e=t.get("plugins");if(T.hasBoltPlugins=e!==null,e!==null)try{T.pluginConfig=JSON.parse(e)}catch{x.error("Unable to parse plugin list")}const n=t.get("credentials");if(n)try{const l=JSON.parse(n),o=l.every(r=>typeof r.session_id=="string"&&typeof r.tokens=="object"&&typeof r.accounts=="object"&&typeof r.user=="object");o?N.sessions.set(l):(N.sessions.set([]),z.saveCredentials(),x.warn("Credentials saved on disk are out of date. Please sign in again.")),N.sessions.set(o?l:[])}catch{N.sessions.set([]),z.saveCredentials(),x.error("Unable to parse saved credentials. Please sign in again.")}}function $l(){const{origin:t,origin_2fa:e}=T.env,n=[window.location.origin,t,e];let l=null;window.addEventListener("message",async o=>{var r;if(!n.includes(o.origin)){x.info(`discarding window message from origin ${o.origin}`);return}switch(o.data.type){case"authTokenUpdate":{l=o.data.tokens;break}case"authSessionUpdate":{if(l===null)return x.error("auth is null. Please try again.");const i=o.data.sessionId,a=await z.login(l,i);a.ok?x.info(`Added new user '${a.value.user.displayName}'`):x.error(`Unable to add new user. Please try again. ${a.error}`),z.saveCredentials(),ke.pendingLoginWindow=null,l=null;break}case"authFailed":{x.error(`Unable to authenticate: ${o.data.reason}`),ke.pendingLoginWindow=null,l=null;break}case"externalUrl":{const i=new XMLHttpRequest;i.onreadystatechange=()=>{i.readyState==4&&x.info(`External URL status: '${i.responseText.trim()}'`)},i.open("POST","/open-external-url",!0),i.send(o.data.url);break}case"gameClientList":me(N.config).close_after_launch&&o.data.clients.length>me(vt).length?fetch("/close"):vt.set(o.data.clients);break;default:{const i=((r=o.data)==null?void 0:r.type)??"no type provided";x.info(`Unknown message type: ${i}`);break}}})}async function Sl(){const t=me(N.sessions),e=[];t.length>0&&x.info("Logging in...");for(const n of t){const l=await ke.refreshOAuthToken(n.tokens);if(!l.ok){l.error===0?x.error(`Unable to verify saved login, status: ${l.error}. Do you have an internet connection? Please relaunch Bolt to try again.`):(x.error(`Discarding expired login, status: ${l.error}. Please sign in again.`),e.push(n.tokens.sub));continue}const o=l.value;n.tokens=o;const r=await z.login(o,n.session_id);r.ok?x.info(`Signed into saved user '${r.value.user.displayName}'`):(x.error(`Unable to sign into saved user '${n.user.displayName}' - please sign in again. ${r.error}`),e.push(n.tokens.sub))}e.forEach(async n=>{await z.logout(n)}),N.sessions.set(t),await z.saveCredentials()} diff --git a/app/dist/index.html b/app/dist/index.html index 2b12e88..90f20ba 100644 --- a/app/dist/index.html +++ b/app/dist/index.html @@ -4,7 +4,7 @@ Bolt Launcher - + diff --git a/app/src/lib/Components/PluginModal.svelte b/app/src/lib/Components/PluginModal.svelte index 696f1fc..ae1388e 100644 --- a/app/src/lib/Components/PluginModal.svelte +++ b/app/src/lib/Components/PluginModal.svelte @@ -423,7 +423,46 @@
{/await} +   + +
+ {#if selectedPluginMeta.updaterURL} + +   + {/if} + - {#if selectedPluginMeta.updaterURL} -   - - {/if} {/if} {:else}