diff --git a/.gitignore b/.gitignore index fd288b64..c27e30cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .cache -.vscode/settings.json +.vscode +build DawnCache GPUCache diff --git a/app/.eslintrc.cjs b/app/.eslintrc.cjs index d6f77fff..35f4e2bf 100644 --- a/app/.eslintrc.cjs +++ b/app/.eslintrc.cjs @@ -28,9 +28,13 @@ module.exports = { } } ], - // this rule is for naming conventions, such as snake_case or camelCase enforcement - // rules: { - // '@typescript-eslint/naming-convention': 'error' - // }, + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { + caughtErrors: 'none' + } + ] + }, ignorePatterns: ['dist/', '*.cjs'] }; diff --git a/app/.gitignore b/app/.gitignore index 944a1ecb..c227c9d7 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -12,7 +12,7 @@ dist-ssr *.local # Editor directories and files -.vscode/settings.json +.vscode .idea .DS_Store *.suo diff --git a/app/.vscode/extensions.json b/app/.vscode/extensions.json deleted file mode 100644 index eeca46f7..00000000 --- a/app/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["EditorConfig.EditorConfig"] -} diff --git a/app/bun.lockb b/app/bun.lockb index 8badd4fe..cd7c2854 100755 Binary files a/app/bun.lockb and b/app/bun.lockb differ diff --git a/app/dist/assets/index-BA5wxT7c.css b/app/dist/assets/index-BA5wxT7c.css new file mode 100644 index 00000000..d71848c4 --- /dev/null +++ b/app/dist/assets/index-BA5wxT7c.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.left-0{left:0}.left-\[2\%\]{left:2%}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-2{top:.5rem}.top-3{top:.75rem}.z-20{z-index:20}.col-span-3{grid-column:span 3 / span 3}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-5{margin:1.25rem}.m-auto{margin:auto}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-9{margin-left:2.25rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-16{margin-top:4rem}.mt-5{margin-top:1.25rem}.flex{display:flex}.grid{display:grid}.contents{display:contents}.aspect-square{aspect-ratio:1 / 1}.h-1\/4{height:25%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3\/4{height:75%}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-7{height:1.75rem}.h-\[28px\]{height:28px}.h-\[90\%\]{height:90%}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[90\%\]{max-height:90%}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-7{width:1.75rem}.w-9{width:2.25rem}.w-\[45\%\]{width:45%}.w-\[50\%\]{width:50%}.w-\[90\%\]{width:90%}.w-\[95\%\]{width:95%}.w-\[96\%\]{width:96%}.w-\[min\(144px\,_25\%\)\]{width:min(144px,25%)}.w-\[min\(180px\,_50\%\)\]{width:min(180px,50%)}.w-\[min\(280px\,_45\%\)\]{width:min(280px,45%)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[60\%\]{max-width:60%}.max-w-\[90\%\]{max-width:90%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.resize-x{resize:horizontal}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-flow-col{grid-auto-flow:column}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-4{gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border-2{border-width:2px}.border-b-2{border-bottom-width:2px}.border-r-2{border-right-width:2px}.border-t-2{border-top-width:2px}.border-none{border-style:none}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-inherit{border-color:inherit}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-t-slate-300{--tw-border-opacity: 1;border-top-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-inherit{background-color:inherit}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-rose-500{--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-violet-500{--tw-gradient-to: #8b5cf6 var(--tw-gradient-to-position)}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-5{padding:1.25rem}.p-\[2px\]{padding:2px}.p-\[3px\]{padding:3px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-5{padding-top:1.25rem}.text-center{text-align:center}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[20px\]{font-size:20px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.italic{font-style:italic}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-rose-500{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.opacity-25{opacity:.25}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.duration-200{transition-duration:.2s}.marker\:text-blue-500 *::marker{color:#3b82f6}.marker\:text-blue-500::marker{color:#3b82f6}.backdrop\:bg-black\/75::backdrop{background-color:#000000bf}.backdrop\:backdrop-blur-sm::backdrop{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.hover\:rotate-45:hover{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:rotate-90:hover{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:opacity-75:hover{opacity:.75}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.enabled\:bg-blue-500:enabled{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.enabled\:bg-rose-500:enabled{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.enabled\:hover\:opacity-75:hover:enabled{opacity:.75}.disabled\:bg-gray-500:disabled{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:text-base{font-size:1rem;line-height:1.5rem}}.dark\:border-slate-700:where(.dark,.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-slate-800:where(.dark,.dark *){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-t-slate-800:where(.dark,.dark *){--tw-border-opacity: 1;border-top-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:bg-slate-900:where(.dark,.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:text-slate-50:where(.dark,.dark *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.dark\:text-white:where(.dark,.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.backdrop.svelte-1nslvnn::backdrop{background-color:#000000bf;--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop.svelte-1nslvnn:where(.dark:where(.svelte-1nslvnn),.dark:where(.svelte-1nslvnn) :where(.svelte-1nslvnn)){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dropdown-color.svelte-11xj3vp{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.75rem;--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dropdown-color.svelte-11xj3vp:where(.dark:where(.svelte-11xj3vp),.dark:where(.svelte-11xj3vp) :where(.svelte-11xj3vp)){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.top.svelte-11xj3vp{bottom:100%;margin-bottom:.25rem}.bottom.svelte-11xj3vp{top:100%;margin-top:.25rem}.top.start.svelte-11xj3vp,.bottom.start.svelte-11xj3vp{left:0}.top.center.svelte-11xj3vp,.bottom.center.svelte-11xj3vp{left:50%;transform:translate(-50%)}.top.end.svelte-11xj3vp,.bottom.end.svelte-11xj3vp{right:0}.left.svelte-11xj3vp{right:100%;margin-right:.25rem}.right.svelte-11xj3vp{left:100%;margin-left:.25rem}.left.start.svelte-11xj3vp,.right.start.svelte-11xj3vp{top:0}.left.center.svelte-11xj3vp,.right.center.svelte-11xj3vp{top:50%;transform:translateY(-50%)}.left.end.svelte-11xj3vp,.right.end.svelte-11xj3vp{bottom:0} diff --git a/app/dist/assets/index-BhbsQGn9.js b/app/dist/assets/index-BhbsQGn9.js new file mode 100644 index 00000000..7220319b --- /dev/null +++ b/app/dist/assets/index-BhbsQGn9.js @@ -0,0 +1,5 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();var yr=(e=>(e[e.SECOND=1e3]="SECOND",e[e.MINUTE=6e4]="MINUTE",e[e.HALF_HOUR=18e5]="HALF_HOUR",e[e.HOUR=36e5]="HOUR",e[e.DAY=864e5]="DAY",e[e.WEEK=6048e5]="WEEK",e[e.MONTH=2592e6]="MONTH",e))(yr||{});class Qt{static set(t,n,r,a){const o=new Date;o.setTime(o.getTime()+r*a);const i=`expires=${o.toUTCString()}`;document.cookie=`${t}=${n};${i};path=/`}static get(t){const n=`${t}=`,r=document.cookie.split(";");for(let a=0;a(e.rs3="rs3",e.osrs="osrs",e))(Le||{}),tn=(e=>(e.official="Official",e.runelite="RuneLite",e.hdos="HDOS",e))(tn||{});const da={rs3:["Official"],osrs:["Official","RuneLite","HDOS"]};class Un{static parseTokenResponse(t){try{const n=JSON.parse(t),r=n.id_token.split(".");if(r.length!==3){const i=`Malformed id_token: ${r.length} sections, expected 3`;return ae(i)}const a=JSON.parse(atob(r[0]));if(a.typ!=="JWT"){const i=`Bad id_token header: typ ${a.typ}, expected JWT`;return ae(i)}const o=JSON.parse(atob(r[1]));return et({access_token:n.access_token,id_token:n.id_token,refresh_token:n.refresh_token,sub:o.sub,expiry:Date.now()+n.expires_in*1e3})}catch{return ae("Unable to parse token response")}}static parseSessionResponse(t){try{const n=JSON.parse(t);return n.sessionId?et(n.sessionId):ae("sessionId does not exist on parsed object")}catch{return ae("Unable to parse session response")}}static decodeBolt(t){const n={};for(const r in t){const a=r,o=t[a];typeof o=="string"?n[a]=atob(o):Array.isArray(o)&&o.every(i=>typeof i=="string")?n[a]=o.map(i=>atob(i)):n[a]=o}return n}}var kr=(e=>(e.Windows="windows",e.Linux="linux",e.MacOS="mac",e))(kr||{});const $={env:Un.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 cr{static async makeLoginUrl(t){const n=new TextEncoder().encode(t.pkceCodeVerifier),r=await crypto.subtle.digest("SHA-256",n);let a="";const o=new Uint8Array(r);for(let u=0;uMath.round(o*(r-0)/255+0)).map(o=>n[o]).join("")}}class Pe{static pendingLoginWindow=null;static async openLoginWindow(t,n,r){if(Pe.pendingLoginWindow!==null)return Pe.pendingLoginWindow.window.focus();const a=cr.makeRandomState(),o=cr.makeRandomVerifier(),i=new TextEncoder().encode(o),u=await crypto.subtle.digest("SHA-256",i);let l="";const c=new Uint8Array(u);for(let _=0;_{if(t.expiry-Date.now()<3e4){const r=new URLSearchParams({grant_type:"refresh_token",client_id:$.env.clientid,refresh_token:t.refresh_token}),a=new XMLHttpRequest;a.onreadystatechange=()=>{if(a.readyState==4)if(a.status==200){const i=Un.parseTokenResponse(a.response);i.ok?n(et(i.value)):n(ae(0))}else n(ae(a.status))},a.onerror=()=>{n(ae(0))};const o=$.env.origin.concat("/oauth2/token");a.open("POST",o,!0),a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.setRequestHeader("Accept","application/json"),a.send(r)}else n(et(t))})}static async getOAuthToken(t,n,r,a,o){const i=`${t}/oauth2/token`;return new Promise(u=>{const l=new XMLHttpRequest;l.onreadystatechange=()=>{if(l.readyState==4)if(l.status==200){const f=Un.parseTokenResponse(l.response);return f.ok?u(et(f.value)):u(ae(f.error))}else return u(ae(`Error: from ${i}: ${l.status}: ${l.response}`))},l.open("POST",i,!0),l.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),l.setRequestHeader("Accept","application/json");const c=new URLSearchParams({grant_type:"authorization_code",client_id:n,code:o,code_verifier:r,redirect_uri:a});l.send(c)})}static revokeOauthCreds(t){const n=`${$.env.origin}/oauth2/revoke`;return new Promise(r=>{const a=new XMLHttpRequest;a.open("POST",n,!0),a.onreadystatechange=()=>{a.readyState==4&&r(a.status)},a.setRequestHeader("Content-Type","application/x-www-form-urlencoded");const o=new URLSearchParams({token:t,client_id:$.env.clientid});a.send(o)})}static async getSessionId(t,n){const r=`${t}/sessions`;return new Promise(a=>{const o=new XMLHttpRequest;o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const u=Un.parseSessionResponse(o.response);return u.ok?a(et(u.value)):a(ae(u.error))}else ae(`Error: from ${r}: ${o.status}: ${o.response}`)},o.open("POST",r,!0),o.setRequestHeader("Content-Type","application/json"),o.setRequestHeader("Accept","application/json");const i={idToken:n};o.send(JSON.stringify(i))})}static validateIdToken(t,n){const r=t.split(".");if(r.length!==3)return ae(`Malformed id_token: ${r.length} sections, expected 3`);const a=JSON.parse(atob(r[0]));return a.typ!=="JWT"?ae(`Bad id_token header: typ ${a.typ}, expected JWT`):JSON.parse(atob(r[1])).nonce!==n?ae("Incorrect nonce in id_token"):et(void 0)}}class Mn{static async buildSession(t,n){const r=await Mn.getUser(t.sub,t.access_token);if(!r.ok)return ae(`Failed to fetch user. Status: ${r.error}`);const a=await Mn.getUserAccounts(n);return a.ok?et({user:r.value,accounts:a.value,tokens:t,session_id:n}):ae(`Failed to fetch game accounts. Status: ${a.error}`)}static getUser(t,n){return new Promise(r=>{const a=`${$.env.api}/users/${t}/displayName`,o=new XMLHttpRequest;o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const i=JSON.parse(o.response);r(et(i))}else r(ae(o.status))},o.open("GET",a,!0),o.setRequestHeader("Authorization","Bearer ".concat(n)),o.send()})}static getUserAccounts(t){const n=`${$.env.auth_api}/accounts`;return new Promise(r=>{const a=new XMLHttpRequest;a.onreadystatechange=async()=>{if(a.readyState==4)if(a.status==200){const o=JSON.parse(a.response);r(et(o))}else r(ae(a.status))},a.open("GET",n,!0),a.setRequestHeader("Accept","application/json"),a.setRequestHeader("Authorization","Bearer ".concat(t)),a.send()})}}const ps=!1;var zn=Array.isArray,_a=Array.prototype.indexOf,Tr=Array.from,Dn=Object.defineProperty,nn=Object.getOwnPropertyDescriptor,hs=Object.getOwnPropertyDescriptors,va=Object.prototype,pa=Array.prototype,Or=Object.getPrototypeOf,Zr=Object.isExtensible;const nt=()=>{};function ha(e){return typeof e?.then=="function"}function ga(e){return e()}function jn(e){for(var t=0;t{e=r,t=a});return{promise:n,resolve:e,reject:t}}function ba(e,t){if(Array.isArray(e))return e;if(!(Symbol.iterator in e))return Array.from(e);const n=[];for(const r of e)if(n.push(r),n.length===t)break;return n}const Me=2,Ar=4,Jn=8,dn=16,yt=32,Gt=64,Ur=128,Ge=256,Fn=512,he=1024,Ve=2048,Ot=4096,rt=8192,_n=16384,Nr=32768,$n=65536,Kr=1<<17,wa=1<<18,vn=1<<19,gs=1<<20,xr=1<<21,Hr=1<<22,Ft=1<<23,Rt=Symbol("$state"),ya=Symbol(""),Mr=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"};function ms(e){return e===this.v}function Dr(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function bs(e){return!Dr(e,this.v)}function ws(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function ka(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function xa(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Sa(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function $a(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Ea(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function La(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Ca(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Pa(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ra(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let En=!1,Ia=!1;function Ta(){En=!0}const Xn=1,Yn=2,ys=4,Oa=8,Aa=16,Ua=1,Na=2,ue=Symbol(),Ha="http://www.w3.org/1999/xhtml";let ee=null;function Tt(e){ee=e}function me(e,t=!1,n){ee={p:ee,c:null,e:null,s:e,x:null,l:En&&!t?{s:null,u:null,$:[]}:null}}function be(e){var t=ee,n=t.e;if(n!==null){t.e=null;for(var r of n)Bs(r)}return e!==void 0&&(t.x=e),ee=t.p,e??{}}function pn(){return!En||ee!==null&&ee.l===null}let Lt=[],qn=[];function ks(){var e=Lt;Lt=[],jn(e)}function Ma(){var e=qn;qn=[],jn(e)}function Da(){return Lt.length>0||qn.length>0}function Vt(e){if(Lt.length===0&&!yn){var t=Lt;queueMicrotask(()=>{t===Lt&&ks()})}Lt.push(e)}function ja(){Lt.length>0&&ks(),qn.length>0&&Ma()}function Fa(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function qa(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let Ba=!1;function en(e){if(typeof e!="object"||e===null||Rt in e)return e;const t=Or(e);if(t!==va&&t!==pa)return e;var n=new Map,r=zn(e),a=oe(0),o=qt,i=u=>{if(qt===o)return u();var l=F,c=qt;ge(null),ss(o);var f=u();return ge(l),ss(c),f};return r&&n.set("length",oe(e.length)),new Proxy(e,{defineProperty(u,l,c){(!("value"in c)||c.configurable===!1||c.enumerable===!1||c.writable===!1)&&La();var f=n.get(l);return f===void 0?f=i(()=>{var d=oe(c.value);return n.set(l,d),d}):P(f,c.value,!0),!0},deleteProperty(u,l){var c=n.get(l);if(c===void 0){if(l in u){const f=i(()=>oe(ue));n.set(l,f),kn(a)}}else P(c,ue),kn(a);return!0},get(u,l,c){if(l===Rt)return e;var f=n.get(l),d=l in u;if(f===void 0&&(!d||nn(u,l)?.writable)&&(f=i(()=>{var _=en(d?u[l]:ue),h=oe(_);return h}),n.set(l,f)),f!==void 0){var p=v(f);return p===ue?void 0:p}return Reflect.get(u,l,c)},getOwnPropertyDescriptor(u,l){var c=Reflect.getOwnPropertyDescriptor(u,l);if(c&&"value"in c){var f=n.get(l);f&&(c.value=v(f))}else if(c===void 0){var d=n.get(l),p=d?.v;if(d!==void 0&&p!==ue)return{enumerable:!0,configurable:!0,value:p,writable:!0}}return c},has(u,l){if(l===Rt)return!0;var c=n.get(l),f=c!==void 0&&c.v!==ue||Reflect.has(u,l);if(c!==void 0||q!==null&&(!f||nn(u,l)?.writable)){c===void 0&&(c=i(()=>{var p=f?en(u[l]):ue,_=oe(p);return _}),n.set(l,c));var d=v(c);if(d===ue)return!1}return f},set(u,l,c,f){var d=n.get(l),p=l in u;if(r&&l==="length")for(var _=c;_oe(ue)),n.set(_+"",h))}if(d===void 0)(!p||nn(u,l)?.writable)&&(d=i(()=>oe(void 0)),P(d,en(c)),n.set(l,d));else{p=d.v!==ue;var g=i(()=>en(c));P(d,g)}var m=Reflect.getOwnPropertyDescriptor(u,l);if(m?.set&&m.set.call(f,c),!p){if(r&&typeof l=="string"){var k=n.get("length"),b=Number(l);Number.isInteger(b)&&b>=k.v&&P(k,b+1)}kn(a)}return!0},ownKeys(u){v(a);var l=Reflect.ownKeys(u).filter(d=>{var p=n.get(d);return p===void 0||p.v!==ue});for(var[c,f]of n)f.v!==ue&&!(c in u)&&l.push(c);return l},setPrototypeOf(){Ca()}})}function Qr(e){try{if(e!==null&&typeof e=="object"&&Rt in e)return e[Rt]}catch{}return e}function Wa(e,t){return Object.is(Qr(e),Qr(t))}var Sr,xs,Ss,$s;function Ga(){if(Sr===void 0){Sr=window,xs=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Ss=nn(t,"firstChild").get,$s=nn(t,"nextSibling").get,Zr(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),Zr(n)&&(n.__t=void 0)}}function hn(e=""){return document.createTextNode(e)}function Bn(e){return Ss.call(e)}function Ln(e){return $s.call(e)}function C(e,t){return Bn(e)}function B(e,t=!1){{var n=Bn(e);return n instanceof Comment&&n.data===""?Ln(n):n}}function w(e,t=1,n=!1){let r=e;for(;t--;)r=Ln(r);return r}function Va(e){e.textContent=""}function Es(){return!1}const za=new WeakMap;function Ls(e){var t=q;if(t===null)return F.f|=Ft,e;if((t.f&Nr)===0){if((t.f&Ur)===0)throw!t.parent&&e instanceof Error&&Cs(e),e;t.b.error(e)}else un(e,t)}function un(e,t){for(;t!==null;){if((t.f&Ur)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e instanceof Error&&Cs(e),e}function Cs(e){const t=za.get(e);t&&(Dn(e,"message",{value:t.message}),Dn(e,"stack",{value:t.stack}))}const fr=new Set;let Z=null,Nn=null,$r=new Set,Wt=[],Zn=null,Er=!1,yn=!1;class vt{current=new Map;#a=new Map;#t=new Set;#d=0;#o=null;#c=!1;#s=[];#n=[];#e=[];#r=[];#i=[];#f=[];#u=[];skipped_effects=new Set;process(t){Wt=[],Nn=null;for(const a of t)this.#_(a);if(this.#s.length===0&&this.#d===0){this.#v();var n=this.#e,r=this.#r;this.#e=[],this.#r=[],this.#i=[],Nn=Z,Z=null,es(n),es(r),Z===null?Z=this:fr.delete(this),this.#o?.resolve()}else this.#l(this.#e),this.#l(this.#r),this.#l(this.#i);for(const a of this.#s)sn(a);for(const a of this.#n)sn(a);this.#s=[],this.#n=[]}#_(t){t.f^=he;for(var n=t.first;n!==null;){var r=n.f,a=(r&(yt|Gt))!==0,o=a&&(r&he)!==0,i=o||(r&rt)!==0||this.skipped_effects.has(n);if(!i&&n.fn!==null){if(a)n.f^=he;else if((r&Ar)!==0)this.#r.push(n);else if((r&he)===0)if((r&Hr)!==0){var u=n.b?.is_pending()?this.#n:this.#s;u.push(n)}else er(n)&&((n.f&dn)!==0&&this.#i.push(n),sn(n));var l=n.first;if(l!==null){n=l;continue}}var c=n.parent;for(n=n.next;n===null&&c!==null;)n=c.next,c=c.parent}}#l(t){for(const n of t)((n.f&Ve)!==0?this.#f:this.#u).push(n),Re(n,he);t.length=0}capture(t,n){this.#a.has(t)||this.#a.set(t,n),this.current.set(t,t.v)}activate(){Z=this}deactivate(){Z=null,Nn=null;for(const t of $r)if($r.delete(t),t(),Z!==null)break}neuter(){this.#c=!0}flush(){Wt.length>0?Rs():this.#v(),Z===this&&(this.#d===0&&fr.delete(this),this.deactivate())}#v(){if(!this.#c)for(const t of this.#t)t();this.#t.clear()}increment(){this.#d+=1}decrement(){if(this.#d-=1,this.#d===0){for(const t of this.#f)Re(t,Ve),cn(t);for(const t of this.#u)Re(t,Ot),cn(t);this.#e=[],this.#r=[],this.flush()}else this.deactivate()}add_callback(t){this.#t.add(t)}settled(){return(this.#o??=ma()).promise}static ensure(){if(Z===null){const t=Z=new vt;fr.add(Z),yn||vt.enqueue(()=>{Z===t&&t.flush()})}return Z}static enqueue(t){Vt(t)}}function Ps(e){var t=yn;yn=!0;try{for(var n;;){if(ja(),Wt.length===0&&!Da()&&(Z?.flush(),Wt.length===0))return Zn=null,n;Rs()}}finally{yn=t}}function Rs(){var e=rn;Er=!0;try{var t=0;for(ns(!0);Wt.length>0;){var n=vt.ensure();if(t++>1e3){var r,a;Ja()}n.process(Wt),It.clear()}}finally{Er=!1,ns(e),Zn=null}}function Ja(){try{Ea()}catch(e){un(e,Zn)}}let Mt=null;function es(e){var t=e.length;if(t!==0){for(var n=0;n0)){It.clear();for(const a of Mt)sn(a);Mt=[]}}Mt=null}}function cn(e){for(var t=Zn=e;t.parent!==null;){t=t.parent;var n=t.f;if(Er&&t===q&&(n&dn)!==0)return;if((n&(Gt|yt))!==0){if((n&he)===0)return;t.f^=he}}Wt.push(t)}function Xa(e){let t=0,n=bt(0),r;return()=>{_o()&&(v(n),Cn(()=>(t===0&&(r=R(()=>e(()=>kn(n)))),t+=1,()=>{Vt(()=>{t-=1,t===0&&(r?.(),r=void 0,kn(n))})})))}}var Ya=$n|vn|Ur;function Za(e,t,n){new Ka(e,t,n)}class Ka{parent;#a=!1;#t;#d=null;#o;#c;#s;#n=null;#e=null;#r=null;#i=null;#f=0;#u=0;#_=!1;#l=null;#v=()=>{this.#l&&ut(this.#l,this.#f)};#m=Xa(()=>(this.#l=bt(this.#f),()=>{this.#l=null}));constructor(t,n,r){this.#t=t,this.#o=n,this.#c=r,this.parent=q.b,this.#a=!!this.#o.pending,this.#s=Pn(()=>{q.b=this;{try{this.#n=xe(()=>r(this.#t))}catch(a){this.error(a)}this.#u>0?this.#h():this.#a=!1}},Ya)}#b(){try{this.#n=xe(()=>this.#c(this.#t))}catch(t){this.error(t)}this.#a=!1}#w(){const t=this.#o.pending;t&&(this.#e=xe(()=>t(this.#t)),vt.enqueue(()=>{this.#n=this.#p(()=>(vt.ensure(),xe(()=>this.#c(this.#t)))),this.#u>0?this.#h():(ht(this.#e,()=>{this.#e=null}),this.#a=!1)}))}is_pending(){return this.#a||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#o.pending}#p(t){var n=q,r=F,a=ee;ze(this.#s),ge(this.#s),Tt(this.#s.ctx);try{return t()}catch(o){return Ls(o),null}finally{ze(n),ge(r),Tt(a)}}#h(){const t=this.#o.pending;this.#n!==null&&(this.#i=document.createDocumentFragment(),Qa(this.#n,this.#i)),this.#e===null&&(this.#e=xe(()=>t(this.#t)))}#g(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#g(t);return}this.#u+=t,this.#u===0&&(this.#a=!1,this.#e&&ht(this.#e,()=>{this.#e=null}),this.#i&&(this.#t.before(this.#i),this.#i=null))}update_pending_count(t){this.#g(t),this.#f+=t,$r.add(this.#v)}get_effect_pending(){return this.#m(),v(this.#l)}error(t){var n=this.#o.onerror;let r=this.#o.failed;if(this.#_||!n&&!r)throw t;this.#n&&(He(this.#n),this.#n=null),this.#e&&(He(this.#e),this.#e=null),this.#r&&(He(this.#r),this.#r=null);var a=!1,o=!1;const i=()=>{if(a){qa();return}a=!0,o&&Ra(),vt.ensure(),this.#f=0,this.#r!==null&&ht(this.#r,()=>{this.#r=null}),this.#a=this.has_pending_snippet(),this.#n=this.#p(()=>(this.#_=!1,xe(()=>this.#c(this.#t)))),this.#u>0?this.#h():this.#a=!1};var u=F;try{ge(null),o=!0,n?.(t,i),o=!1}catch(l){un(l,this.#s&&this.#s.parent)}finally{ge(u)}r&&Vt(()=>{this.#r=this.#p(()=>{this.#_=!0;try{return xe(()=>{r(this.#t,()=>t,()=>i)})}catch(l){return un(l,this.#s.parent),null}finally{this.#_=!1}})})}}function Qa(e,t){for(var n=e.nodes_start,r=e.nodes_end;n!==null;){var a=n===r?null:Ln(n);t.append(n),n=a}}function eo(e,t,n){const r=pn()?Kn:jr;if(t.length===0){n(e.map(r));return}var a=Z,o=q,i=to();Promise.all(t.map(u=>no(u))).then(u=>{a?.activate(),i();try{n([...e.map(r),...u])}catch(l){(o.f&_n)===0&&un(l,o)}a?.deactivate(),Is()}).catch(u=>{un(u,o)})}function to(){var e=q,t=F,n=ee,r=Z;return function(){ze(e),ge(t),Tt(n),r?.activate()}}function Is(){ze(null),ge(null),Tt(null)}function Kn(e){var t=Me|Ve,n=F!==null&&(F.f&Me)!==0?F:null;return q===null||n!==null&&(n.f&Ge)!==0?t|=Ge:q.f|=vn,{ctx:ee,deps:null,effects:null,equals:ms,f:t,fn:e,reactions:null,rv:0,v:ue,wv:0,parent:n??q,ac:null}}function no(e,t){let n=q;n===null&&ka();var r=n.b,a=void 0,o=bt(ue),i=null,u=!F;return ho(()=>{try{var l=e();i&&Promise.resolve(l).catch(()=>{})}catch(_){l=Promise.reject(_)}var c=()=>l;a=i?.then(c,c)??Promise.resolve(l),i=a;var f=Z,d=r.is_pending();u&&(r.update_pending_count(1),d||f.increment());const p=(_,h=void 0)=>{i=null,d||f.activate(),h?h!==Mr&&(o.f|=Ft,ut(o,h)):((o.f&Ft)!==0&&(o.f^=Ft),ut(o,_)),u&&(r.update_pending_count(-1),d||f.decrement()),Is()};if(a.then(p,_=>p(null,_||"unknown")),f)return()=>{queueMicrotask(()=>f.neuter())}}),new Promise(l=>{function c(f){function d(){f===a?l(o):c(a)}f.then(d,d)}c(a)})}function Be(e){const t=Kn(e);return Us(t),t}function jr(e){const t=Kn(e);return t.equals=bs,t}function Ts(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Qn(e){var t=F,n=q;ge(null),ze(null);try{return e()}finally{ge(t),ze(n)}}function qr(e,t,n,r=n){e.addEventListener(t,()=>Qn(n));const a=e.__on_r;a?e.__on_r=()=>{a(),r(!0)}:e.__on_r=()=>r(!0),oo()}let rn=!1;function ns(e){rn=e}let gn=!1;function rs(e){gn=e}let F=null,tt=!1;function ge(e){F=e}let q=null;function ze(e){q=e}let pt=null;function Us(e){F!==null&&(pt===null?pt=[e]:pt.push(e))}let ke=null,Ue=0,qe=null;function io(e){qe=e}let Ns=1,Sn=0,qt=Sn;function ss(e){qt=e}let Ct=!1;function Hs(){return++Ns}function er(e){var t=e.f;if((t&Ve)!==0)return!0;if((t&Ot)!==0){var n=e.deps,r=(t&Ge)!==0;if(n!==null){var a,o,i=(t&Fn)!==0,u=r&&q!==null&&!Ct,l=n.length;if((i||u)&&(q===null||(q.f&_n)===0)){var c=e,f=c.parent;for(a=0;ae.wv)return!0}(!r||q!==null&&!Ct)&&Re(e,he)}return!1}function Ms(e,t,n=!0){var r=e.reactions;if(r!==null&&!pt?.includes(e))for(var a=0;a{e.ac.abort(Mr)}),e.ac=null);try{e.f|=xr;var d=e.fn,p=d(),_=e.deps;if(ke!==null){var h;if(Wn(e,Ue),_!==null&&Ue>0)for(_.length=Ue+ke.length,h=0;hnew Promise(r=>{n.outro?ht(t,()=>{He(t),r(void 0)}):(He(t),r(void 0))})}function Br(e){return ct(Ar,e,!1)}function ho(e){return ct(Hr|vn,e,!0)}function Cn(e,t=0){return ct(Jn|t,e,!0)}function W(e,t=[],n=[]){eo(t,n,r=>{ct(Jn,()=>e(...r.map(v)),!0)})}function Pn(e,t=0){var n=ct(dn|t,e,!0);return n}function xe(e,t=!0){return ct(yt|vn,e,!0,t)}function Ws(e){var t=e.teardown;if(t!==null){const n=gn,r=F;rs(!0),ge(null);try{t.call(null)}finally{rs(n),ge(r)}}}function Gs(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const a=n.ac;a!==null&&Qn(()=>{a.abort(Mr)});var r=n.next;(n.f&Gt)!==0?n.parent=null:He(n,t),n=r}}function go(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&yt)===0&&He(t),t=n}}function He(e,t=!0){var n=!1;(t||(e.f&wa)!==0)&&e.nodes_start!==null&&e.nodes_end!==null&&(mo(e.nodes_start,e.nodes_end),n=!0),Gs(e,t&&!n),Wn(e,0),Re(e,_n);var r=e.transitions;if(r!==null)for(const o of r)o.stop();Ws(e);var a=e.parent;a!==null&&a.first!==null&&Vs(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=e.ac=null}function mo(e,t){for(;e!==null;){var n=e===t?null:Ln(e);e.remove(),e=n}}function Vs(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function ht(e,t){var n=[];Wr(e,n,!0),zs(n,()=>{He(e),t&&t()})}function zs(e,t){var n=e.length;if(n>0){var r=()=>--n||t();for(var a of e)a.out(r)}else t()}function Wr(e,t,n){if((e.f&rt)===0){if(e.f^=rt,e.transitions!==null)for(const i of e.transitions)(i.is_global||n)&&t.push(i);for(var r=e.first;r!==null;){var a=r.next,o=(r.f&$n)!==0||(r.f&yt)!==0;Wr(r,t,o?n:!1),r=a}}}function an(e){Js(e,!0)}function Js(e,t){if((e.f&rt)!==0){e.f^=rt,(e.f&he)===0&&(Re(e,Ve),cn(e));for(var n=e.first;n!==null;){var r=n.next,a=(n.f&$n)!==0||(n.f&yt)!==0;Js(n,a?t:!1),n=r}if(e.transitions!==null)for(const o of e.transitions)(o.is_global||t)&&o.in()}}const bo=["touchstart","touchmove"];function wo(e){return bo.includes(e)}const Xs=new Set,Cr=new Set;function yo(e,t,n,r={}){function a(o){if(r.capture||wn.call(t,o),!o.cancelBubble)return Qn(()=>n?.call(this,o))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Vt(()=>{t.addEventListener(e,a,r)}):t.addEventListener(e,a,r),a}function ko(e,t,n,r,a){var o={capture:r,passive:a},i=yo(e,t,n,o);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&tr(()=>{t.removeEventListener(e,i,o)})}function st(e){for(var t=0;t{throw b});throw p}}finally{e.__root=t,delete e.currentTarget,ge(f),ze(d)}}}function xo(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("",""),t.content}function Gn(e,t){var n=q;n.nodes_start===null&&(n.nodes_start=e,n.nodes_end=t)}function L(e,t){var n=(t&Ua)!==0,r=(t&Na)!==0,a,o=!e.startsWith("");return()=>{a===void 0&&(a=xo(o?e:""+e),n||(a=Bn(a)));var i=r||xs?document.importNode(a,!0):a.cloneNode(!0);if(n){var u=Bn(i),l=i.lastChild;Gn(u,l)}else Gn(i,i);return i}}function os(e=""){{var t=hn(e+"");return Gn(t,t),t}}function lt(){var e=document.createDocumentFragment(),t=document.createComment(""),n=hn();return e.append(t,n),Gn(t,n),e}function x(e,t){e!==null&&e.before(t)}function pe(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function is(e,t){return So(e,t)}const Yt=new Map;function So(e,{target:t,anchor:n,props:r={},events:a,context:o,intro:i=!0}){Ga();var u=new Set,l=d=>{for(var p=0;p{var d=n??t.appendChild(hn());return Za(d,{pending:()=>{}},p=>{if(o){me({});var _=ee;_.c=o}a&&(r.$$events=a),c=e(p,r)||{},o&&be()}),()=>{for(var p of u){t.removeEventListener(p,wn);var _=Yt.get(p);--_===0?(document.removeEventListener(p,wn),Yt.delete(p)):Yt.set(p,_)}Cr.delete(l),d!==n&&d.parentNode?.removeChild(d)}});return $o.set(c,f),c}let $o=new WeakMap;const dr=0,On=1,_r=2;function ls(e,t,n,r,a){var o=e,i=pn(),u=ee,l=ue,c,f,d,p=i?bt(void 0):We(void 0,!1,!1),_=i?bt(void 0):We(void 0,!1,!1),h=!1;function g(k,b){h=!0,b&&(ze(m),ge(m),Tt(u));try{k===dr&&n&&(c?an(c):c=xe(()=>n(o))),k===On&&r&&(f?an(f):f=xe(()=>r(o,p))),k===_r&&a&&(d?an(d):d=xe(()=>a(o,_))),k!==dr&&c&&ht(c,()=>c=null),k!==On&&f&&ht(f,()=>f=null),k!==_r&&d&&ht(d,()=>d=null)}finally{b&&(Tt(null),ge(null),ze(null),Ps())}}var m=Pn(()=>{if(l!==(l=t())){if(ha(l)){var k=l;h=!1,k.then(b=>{k===l&&(ut(p,b),g(On,!0))},b=>{if(k===l&&(ut(_,b),g(_r,!0),!a))throw _.v}),Vt(()=>{h||g(dr,!0)})}else ut(p,l),g(On,!1);return()=>l=ue}})}function J(e,t,n=!1){var r=e,a=null,o=null,i=ue,u=n?$n:0,l=!1;const c=(_,h=!0)=>{l=!0,p(h,_)};var f=null;function d(){f!==null&&(f.lastChild.remove(),r.before(f),f=null);var _=i?a:o,h=i?o:a;_&&an(_),h&&ht(h,()=>{i?o=null:a=null})}const p=(_,h)=>{if(i!==(i=_)){var g=Es(),m=r;if(g&&(f=document.createDocumentFragment(),f.append(m=hn())),i?a??=h&&xe(()=>h(m)):o??=h&&xe(()=>h(m)),g){var k=Z,b=i?a:o,U=i?o:a;b&&k.skipped_effects.delete(b),U&&k.skipped_effects.add(U),k.add_callback(d)}else d()}};Pn(()=>{l=!1,t(c),l||p(null,null)},u)}function Dt(e,t){return t}function Eo(e,t,n){for(var r=e.items,a=[],o=t.length,i=0;i0&&a.length===0&&n!==null;if(u){var l=n.parentNode;Va(l),l.append(n),r.clear(),it(e,t[0].prev,t[o-1].next)}zs(a,()=>{for(var c=0;c{var k=n();return zn(k)?k:k==null?[]:Tr(k)}),h,g;function m(){Lo(g,h,u,p,i,a,t,r,n),o!==null&&(h.length===0?f?an(f):f=xe(()=>o(i)):f!==null&&ht(f,()=>{f=null}))}Pn(()=>{g??=q,h=v(_);var k=h.length;if(!(d&&k===0)){d=k===0;var b,U,H,D;if(Es()){var S=new Set,E=Z;for(U=0;U0){var De=(i&ys)!==0&&d===0?a:null;if(c){for(E=0;E{if(k!==void 0)for(S of k)S.a?.apply()}),e.first=n.first&&n.first.e,e.last=m&&m.e;for(var at of r.values())He(at.e);r.clear()}function Ys(e,t,n,r){(r&Xn)!==0&&ut(e.v,t),(r&Yn)!==0?ut(e.i,n):e.i=n}function Zs(e,t,n,r,a,o,i,u,l,c,f){var d=(l&Xn)!==0,p=(l&Aa)===0,_=d?p?We(a,!1,!1):bt(a):a,h=(l&Yn)===0?i:bt(i),g={i:h,v:_,k:o,a:null,e:null,prev:n,next:r};try{if(e===null){var m=document.createDocumentFragment();m.append(e=hn())}return g.e=xe(()=>u(e,_,h,c),Ba),g.e.prev=n&&n.e,g.e.next=r&&r.e,n===null?f||(t.first=g):(n.next=g,n.e.next=g.e),r!==null&&(r.prev=g,r.e.prev=g.e),g}finally{}}function vr(e,t,n){for(var r=e.next?e.next.e.nodes_start:n,a=t?t.e.nodes_start:n,o=e.e.nodes_start;o!==null&&o!==r;){var i=Ln(o);a.before(o),o=i}}function it(e,t,n){t===null?e.first=n:(t.next=n,t.e.next=n&&n.e),n!==null&&(n.prev=t,n.e.prev=t&&t.e)}function Vn(e,t,...n){var r=e,a=nt,o;Pn(()=>{a!==(a=t())&&(o&&(He(o),o=null),o=xe(()=>a(r,...n)))},$n)}function Co(e,t,n){Br(()=>{var r=R(()=>t(e,n?.())||{});if(n&&r?.update){var a=!1,o={};Cn(()=>{var i=n();Fs(i),a&&Dr(o,i)&&(o=i,r.update(i))}),a=!0}if(r?.destroy)return()=>r.destroy()})}function Ks(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t=0;){var u=i+o;(i===0||us.includes(r[i-1]))&&(u===r.length||us.includes(r[u]))?r=(i===0?"":r.substring(0,i))+r.substring(u+1):i=u}}return r===""?null:r}function Ie(e,t,n,r,a,o){var i=e.__className;if(i!==n||i===void 0){var u=Ro(n,r,o);u==null?e.removeAttribute("class"):e.className=u,e.__className=n}else if(o&&a!==o)for(var l in o){var c=!!o[l];(a==null||c!==!!a[l])&&e.classList.toggle(l,c)}return o}function Gr(e,t,n=!1){if(e.multiple){if(t==null)return;if(!zn(t))return Fa();for(var r of e.options)r.selected=t.includes(xn(r));return}for(r of e.options){var a=xn(r);if(Wa(a,t)){r.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function Qs(e){var t=new MutationObserver(()=>{Gr(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),tr(()=>{t.disconnect()})}function Vr(e,t,n=t){var r=!0;qr(e,"change",a=>{var o=a?"[selected]":":checked",i;if(e.multiple)i=[].map.call(e.querySelectorAll(o),xn);else{var u=e.querySelector(o)??e.querySelector("option:not([disabled])");i=u&&xn(u)}n(i)}),Br(()=>{var a=t();if(Gr(e,a,r),r&&a===void 0){var o=e.querySelector(":checked");o!==null&&(a=xn(o),n(a))}e.__value=a,r=!1}),Qs(e)}function xn(e){return"__value"in e?e.__value:e.value}const Io=Symbol("is custom element"),To=Symbol("is html");function gt(e,t,n,r){var a=Oo(e);a[t]!==(a[t]=n)&&(t==="loading"&&(e[ya]=n),n==null?e.removeAttribute(t):typeof n!="string"&&Ao(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function Oo(e){return e.__attributes??={[Io]:e.nodeName.includes("-"),[To]:e.namespaceURI===Ha}}var cs=new Map;function Ao(e){var t=e.getAttribute("is")||e.nodeName,n=cs.get(t);if(n)return n;cs.set(t,n=[]);for(var r,a=e,o=Element.prototype;o!==a;){r=hs(a);for(var i in r)r[i].set&&n.push(i);a=Or(a)}return n}function jt(e,t,n=t){var r=new WeakSet;qr(e,"input",async a=>{var o=a?e.defaultValue:e.value;if(o=pr(e)?hr(o):o,n(o),Z!==null&&r.add(Z),await uo(),o!==(o=t())){var i=e.selectionStart,u=e.selectionEnd;e.value=o??"",u!==null&&(e.selectionStart=i,e.selectionEnd=Math.min(u,e.value.length))}}),R(t)==null&&e.value&&(n(pr(e)?hr(e.value):e.value),Z!==null&&r.add(Z)),Cn(()=>{var a=t();if(e===document.activeElement){var o=Nn??Z;if(r.has(o))return}pr(e)&&a===hr(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function on(e,t,n=t){qr(e,"change",r=>{var a=r?e.defaultChecked:e.checked;n(a)}),R(t)==null&&n(e.checked),Cn(()=>{var r=t();e.checked=!!r})}function pr(e){var t=e.type;return t==="number"||t==="range"}function hr(e){return e===""?null:+e}function ea(e,t,n){var r=nn(e,t);r&&r.set&&(e[t]=n,tr(()=>{e[t]=null}))}function fs(e,t){return e===t||e?.[Rt]===t}function wt(e={},t,n,r){return Br(()=>{var a,o;return Cn(()=>{a=o,o=[],R(()=>{e!==n(...o)&&(t(e,...o),a&&fs(n(...a),e)&&t(null,...a))})}),()=>{Vt(()=>{o&&fs(n(...o),e)&&t(null,...o)})}}),e}function At(e=!1){const t=ee,n=t.l.u;if(!n)return;let r=()=>Fs(t.s);if(e){let a=0,o={};const i=Kn(()=>{let u=!1;const l=t.s;for(const c in l)l[c]!==o[c]&&(o[c]=l[c],u=!0);return u&&a++,a});r=()=>v(i)}n.b.length&&vo(()=>{ds(t,r),jn(n.b)}),fn(()=>{const a=R(()=>n.m.map(ga));return()=>{for(const o of a)typeof o=="function"&&o()}}),n.a.length&&fn(()=>{ds(t,r),jn(n.a)})}function ds(e,t){if(e.l.s)for(const n of e.l.s)v(n);t()}let Pr=Symbol();function ve(e,t,n){const r=n[t]??={store:null,source:We(void 0),unsubscribe:nt};if(r.store!==e&&!(Pr in n))if(r.unsubscribe(),r.store=e??null,e==null)r.source.v=void 0,r.unsubscribe=nt;else{var a=!0;r.unsubscribe=ta(e,o=>{a?r.source.v=o:P(r.source,o)}),a=!1}return e&&Pr in n?Ce(e):v(r.source)}function An(e,t){return e.set(t),t}function Je(){const e={};function t(){tr(()=>{for(var n in e)e[n].unsubscribe();Dn(e,Pr,{enumerable:!1,value:!0})})}return[e,t]}function ie(e,t,n){return e.set(n),t}function ln(e,t,n,r){var a=r,o=!0,i=()=>(o&&(o=!1,a=r),a),u;u=e[t],u===void 0&&r!==void 0&&(u=i());var l;return l=()=>{var c=e[t];return c===void 0?i():(o=!0,c)},l}function zr(e){ee===null&&ws(),En&&ee.l!==null?No(ee).m.push(e):fn(()=>{const t=R(e);if(typeof t=="function")return t})}function Uo(e){ee===null&&ws(),zr(()=>()=>R(e))}function No(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}function ta(e,t,n){if(e==null)return t(void 0),nt;const r=R(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const Zt=[];function Bt(e,t=nt){let n=null;const r=new Set;function a(u){if(Dr(e,u)&&(e=u,n)){const l=!Zt.length;for(const c of r)c[1](),Zt.push(c,e);if(l){for(let c=0;c{r.delete(c),r.size===0&&n&&(n(),n=null)}}return{set:a,update:o,subscribe:i}}function Ce(e){let t;return ta(e,n=>t=n)(),t}var Rr=(e=>(e.info="info",e.warn="warn",e.error="error",e))(Rr||{});class Ho{logs=Bt([]);_addLog(t,n){this.logs.update(r=>(r.unshift({date:new Date,severity:t,content:n}),r))}info(t){this._addLog("info",t)}warn(t){this._addLog("warn",t)}error(t){this._addLog("error",t)}updateLogAtIndex(t,n){this.logs.update(r=>(r[t]&&(r[t].content=n),r))}}const A=new Ho;function Mo(e,t){let n=!1;return e.subscribe(r=>{n?t(r):n=!0})}const Do={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,discard_expired_sessions:!0,rs_launch_command:null,osrs_launch_command:null,runelite_custom_jar:null,runelite_launch_command:null,hdos_launch_command:null,selected:{game:Le.osrs,client:tn.runelite,user_id:null},userDetails:{}};function jo(){const t=new URLSearchParams(window.location.search).get("config");function n(a){return typeof a=="object"&&typeof a.use_dark_theme=="boolean"&&typeof a.rs_plugin_loader=="boolean"&&typeof a.close_after_launch=="boolean"&&typeof a.check_announcements=="boolean"&&typeof a.flatpak_rich_presence=="boolean"&&typeof a.runelite_use_custom_jar=="boolean"&&typeof a.selected=="object"&&Object.values(Le).includes(a.selected.game)&&Object.values(tn).includes(a.selected.client)&&(typeof a.selected.user_id=="string"||a.selected.user_id===null)&&typeof a.userDetails=="object"}const{config:r}=O;if(t)try{const a=JSON.parse(t);typeof a.check_announcements>"u"&&(a.check_announcements=!0,O.configHasPendingChanges=!0),typeof a.close_after_launch>"u"&&(a.close_after_launch=!1,O.configHasPendingChanges=!0),typeof a.discard_expired_sessions>"u"&&(a.discard_expired_sessions=!0,O.configHasPendingChanges=!0),n(a)?r.set(a):(A.error("The config saved on disk is not the correct format. It has been restored to default."),O.configHasPendingChanges=!0)}catch{A.error("Unable to parse config, restoring to default"),O.configHasPendingChanges=!0}else O.configHasPendingChanges=!0;Mo(O.config,()=>{O.configHasPendingChanges=!0})}const O={initialized:Bt(!1),configHasPendingChanges:!1,pluginConfigHasPendingChanges:!1,config:Bt(Do),sessions:Bt([])};let gr=!1,mr=!1;class te{static async login(t,n){const r=await Mn.buildSession(t,n);if(!r.ok)return ae(r.error);const a=r.value,i=Ce(O.sessions).findIndex(u=>u.user.userId===t.sub);return i!==-1?O.sessions.update(u=>(u[i]=a,u)):(O.sessions.update(u=>(u.push(a),u)),O.config.update(u=>(u.selected.user_id=a.user.userId,u))),et(a)}static async logout(t){const{sessions:n,config:r}=O;return n.update(a=>{const o=a.findIndex(i=>i.user.userId===t);return o>-1&&(Pe.revokeOauthCreds(a[o].tokens.access_token),a.splice(o,1)),a}),r.update(a=>(typeof a.userDetails[t]<"u"&&delete a.userDetails[t],a.selected.user_id===t&&(a.selected.user_id=null),a)),Ce(n)}static postJSON(t,n,r=null){const a=JSON.stringify(n);return fetch(t,{method:"POST",body:a,headers:{"Content-Type":"application/json"}}).then(i=>{i.ok||i.text().then(u=>A.error(`${t} error: ${i.status}: ${u}`)),r&&r(i)})}static saveConfig(t=!0){if(gr||t&&!O.configHasPendingChanges)return;gr=!0;const n=Ce(O.config);return n.rs_launch_command===""&&(n.rs_launch_command=null),n.osrs_launch_command===""&&(n.osrs_launch_command=null),n.runelite_launch_command===""&&(n.runelite_launch_command=null),n.hdos_launch_command===""&&(n.hdos_launch_command=null),this.postJSON("/save-config",n,()=>gr=!1),n}static savePluginConfig(t=!0){mr||t&&!O.pluginConfigHasPendingChanges||(mr=!0,this.postJSON("/save-plugin-config",$.pluginConfig,()=>mr=!1))}static async saveCredentials(){return this.postJSON("/save-credentials",Ce(O.sessions))}static async openFilePicker(){const t=await fetch("/jar-file-picker");return t.status===200?t.text():null}static findSession(t){return Ce(O.sessions).find(r=>r.user.userId===t)}static findAccount(t,n){return t.find(r=>r.accountId==n)}}const Ir=Bt([]),Fo="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(Fo);Ta();var qo=L("
");function na(e,t){const n=()=>ve(o,"$config",r),[r,a]=Je(),{config:o}=O;let i=Be(()=>n().use_dark_theme);var u=qo();let l;var c=C(u);Vn(c,()=>t.children??nt),W(f=>l=Ie(u,1,"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",null,l,f),[()=>({dark:v(i)})]),x(e,u),a()}var Bo=L('
loading
');function Wo(e,t){me(t,!1);const n=window.opener;$.env==null&&o("BoltEnv is not defined. Please close and re-open Bolt to try again.");async function r(u){const l=Qt.get("auth_verifier");if(!l)return o("Verifier token has expired. Please try signing in again."),null;const{clientid:c,redirect:f}=$.env,d=await Pe.getOAuthToken($.env.origin,c,l,f,u);return d.ok?d.value:(o(`Fetching OAuth token failed. ${d.error}`),null)}async function a(u){const l=Qt.get("auth_nonce"),c=Pe.validateIdToken(u,l??"");if(!c.ok)return o(c.error),null;const f=await Pe.getSessionId($.env.auth_api,u);return f.ok?f.value:(o(`Unable to retreive session id. ${f.error}`),null)}function o(u){i({type:"authFailed",reason:u}),fetch("/close")}function i(u){n.postMessage(u,window.location.origin)}zr(async()=>{const u=new URLSearchParams(window.location.search),l=u.get("code"),c=u.get("state"),f=u.get("id_token");if(f==null&&l&&c){const d=await r(l);if(!d)return o("tokens object is null.");i({type:"authTokenUpdate",tokens:d});const p=crypto.randomUUID();Pe.navigateToAuthConsent($.env.origin,d.id_token,p)}else if(f&&l&&c){const d=await a(f);if(!d)return o("sessionId is null");i({type:"authSessionUpdate",sessionId:d}),fetch("/close")}else o("Authentication server did not response with the appropriate parameters. Please try again later.")}),Uo(()=>{Qt.remove("auth_verifier"),Qt.remove("auth_nonce")}),At(),na(e,{children:(u,l)=>{var c=Bo();x(u,c)}}),be()}var Go=(e,t,n)=>{e.key==="Escape"&&(e.preventDefault(),t()&&n())},Vo=L(''),zo=L(" ");function nr(e,t){me(t,!0);const n=()=>ve(o,"$config",r),[r,a]=Je(),{config:o}=O;let i=Be(()=>n().use_dark_theme),u=ln(t,"class",3,""),l=ln(t,"canSelfClose",3,!0),c=ln(t,"onClose",3,()=>{}),f,d=oe(!1);function p(){f.showModal(),P(d,!0)}function _(){c()(),f.close(),P(d,!1)}var h={open:p,close:_},g=zo();g.__keydown=[Go,l,_],g.__mousedown=S=>{f===S.target&&_()};let m;var k=C(g);{var b=S=>{var E=Vo();E.__click=_,x(S,E)};J(k,S=>{l()&&S(b)})}var U=w(k,2);{var H=S=>{var E=lt(),M=B(E);Vn(M,()=>t.children??nt),x(S,E)};J(U,S=>{v(d)&&S(H)})}wt(g,S=>f=S,()=>f),W(S=>m=Ie(g,1,`${u()??""} backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none`,"svelte-1nslvnn",m,S),[()=>({dark:v(i)})]),x(e,g);var D=be(h);return a(),D}st(["keydown","mousedown","click"]);var Jo=(e,t)=>v(t).close(),Xo=L('

',1);function Yo(e,t){me(t,!1);const n=()=>ve(o,"$sessions",r),[r,a]=Je(),{sessions:o}=O;let i=We();zr(()=>{n().length==0&&v(i).open()}),At(),wt(nr(e,{canSelfClose:!1,class:"w-1/2 text-center",children:(u,l)=>{var c=Xo(),f=B(c);f.textContent=atob("Qm9sdCBpcyBhbiB1bm9mZmljaWFsIHRoaXJkLXBhcnR5IGxhdW5jaGVyLiBJdCdzIGZyZWUgYW5kIG9wZW4tc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIEFHUEwgMy4wLg==");var d=w(f,2);d.textContent=atob("SmFnZXggaXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgcHJvYmxlbXMgb3IgZGFtYWdlIGNhdXNlZCBieSB1c2luZyB0aGlzIHByb2R1Y3Qu");var p=w(d,2);p.__click=[Jo,i],x(u,c)},$$slots:{default:!0},$$legacy:!0}),u=>P(i,u),()=>v(i)),be(),a()}st(["click"]);const Ne={method:"GET"},Zo={"Content-Type":"application/octet-stream"};let br=null;const Ko=120*1e3,Qo="https://api.github.com/repos/runelite/launcher/releases",ei="https://cdn.hdos.dev/client/getdown.txt",rr=e=>e?{method:"POST",headers:Zo,body:e}:Ne,mt=(e,t,n,r)=>{fetch(e,t).then(a=>{a.ok?n(a):(a.text().then(o=>A.error(`request failed: ${a.url}: ${a.status}: ${o}`)),r())}).catch(()=>{A.error(`request failed: ${e}: connection error`),r()})},Jr=async(e,t,n,r,a)=>{const o=p=>{A.error(`error downloading: ${p}`),r()};A.info(t);const i=p=>A.updateLogAtIndex(0,`${t} ${p}`);if(!e.body)return o("no HTTP response body");const u=e.body.getReader();if(!u)return o("invalid HTTP response");const l=e.headers.get("content-length")??a;if(!l)return o("cannot estimate download size");const c=parseInt(l);if(!l)return o("cannot estimate download size");const f=new Uint8Array(c);let d=0;for(;;){const p=await u.read();if(p.done)break;const _=p.value;f.set(_,d),d+=_.length;const h=(Math.round(1e3*d/c)/10).toFixed(1);i(h)}i("done"),n(f)};function ti(e,t,n){te.saveConfig();const r=(u,l)=>{const c={},f=Ce(O.config);u&&(c.hash=u),e&&(c.jx_session_id=e),t&&(c.jx_character_id=t),n&&(c.jx_display_name=n),f.rs_launch_command&&f.rs_launch_command.length>0&&(c.launch_command=f.rs_launch_command),f.rs_plugin_loader&&(c.plugin_loader="1"),f.use_custom_rs_config_uri&&f.rs_config_uri?c.config_uri=f.rs_config_uri:c.config_uri=$.env.default_config_uri,fetch("/launch-rs3-deb?".concat(new URLSearchParams(c).toString()),rr(l)).then(d=>{d.text().then(p=>A.info(`game launch status: '${p.trim()}'`)),d.ok&&(u&&($.rs3debInstalledHash=u),f.close_after_launch&&!f.rs_plugin_loader&&fetch("/close"))})},a=()=>{$.rs3debInstalledHash&&r()},o=$.env.content_url,i=o.concat("dists/trusty/non-free/binary-amd64/Packages");mt(i,Ne,u=>u.text().then(l=>{const c=Object.fromEntries(l.split(` +`).map(f=>f.split(": ")));if(!c.Filename||!c.Size||!c.SHA256){A.error(`could not parse package data from URL: ${i}`),a();return}if(c.SHA256===$.rs3debInstalledHash){A.info("game client is up-to-date"),r();return}mt(o.concat(c.Filename),Ne,f=>Jr(f,"downloading RS3 client...",d=>r(c.SHA256,d),r,c.Size),a)}),a)}function ra(e,t,n,r){te.saveConfig();const a=r?"/launch-runelite-jar-configure?":"/launch-runelite-jar?",o=Ce(O.config),i=(l,c,f)=>{const d={};l&&(d.id=l),f&&(d.jar_path=f),e&&(d.jx_session_id=e),t&&(d.jx_character_id=t),n&&(d.jx_display_name=n),o.runelite_launch_command&&o.runelite_launch_command!==""&&(d.launch_command=o.runelite_launch_command),o.flatpak_rich_presence&&(d.flatpak_rich_presence=""),fetch(a.concat(new URLSearchParams(d).toString()),rr(c)).then(p=>{p.text().then(_=>A.info(`game launch status: '${_.trim()}'`)),p.ok&&(l&&($.runeLiteInstalledId=l),o.close_after_launch&&!r&&fetch("/close"))})},u=()=>{$.runeLiteInstalledId&&i()};if(o.runelite_use_custom_jar){i(null,null,o.runelite_custom_jar);return}if($.runeLiteInstalledId!==null&&br!==null&&br+Ko>Date.now()){i();return}mt(Qo,Ne,l=>l.json().then(c=>{br=Date.now();const f=c.map(d=>d.assets).flat().find(d=>d.name.toLowerCase()=="runelite.jar");if(!f){A.info("note: no runelite releases found, so skipping update check"),u();return}if(f.id==$.runeLiteInstalledId){A.info("game is up-to-date"),i();return}mt(f.browser_download_url,Ne,d=>Jr(d,"downloading RuneLite launcher...",p=>i(f.id,p),u,f.size),u)}),u)}function ni(e,t,n){te.saveConfig();const r=Ce(O.config),a=(i,u)=>{const l={};i&&(l.version=i),e&&(l.jx_session_id=e),t&&(l.jx_character_id=t),n&&(l.jx_display_name=n),r.hdos_launch_command&&r.hdos_launch_command.length>0&&(l.launch_command=r.hdos_launch_command),fetch("/launch-hdos-jar?".concat(new URLSearchParams(l).toString()),rr(u)).then(c=>{c.text().then(f=>A.info(`game launch status: '${f.trim()}'`)),c.ok&&(i&&($.hdosInstalledVersion=i),r.close_after_launch&&fetch("/close"))})},o=()=>{$.hdosInstalledVersion&&a()};mt(ei,Ne,i=>i.text().then(u=>{const l=u.match(/^launcher\.version *= *(.*?)$/m);if(!l||l.length<2){A.error("couldn't parse latest launcher version"),o();return}const c=l[1];if(c===$.hdosInstalledVersion){A.info("game is up-to-date"),a();return}mt(`https://cdn.hdos.dev/launcher/v${c}/hdos-launcher.jar`,Ne,f=>Jr(f,"downloading HDOS launcher...",d=>a(c,d),o),o)}),o)}function wr(){fetch("/list-game-clients",Ne).then(e=>{e.ok||e.text().then(t=>A.error(`failed to get client list: ${e.status}: ${t}`))})}function _s(e,t,n,r,a){te.saveConfig();const o=`${t?"osrs":$.env.provider}-${e?"win":"mac"}`,i=t?"osrs":"rs3",u=e?"exe":"app",l=`${i}${u}InstalledHash`,c=(d,p)=>{const _={},h=Ce(O.config),g=t?h.osrs_launch_command:h.rs_launch_command;d&&(_.hash=d),n&&(_.jx_session_id=n),r&&(_.jx_character_id=r),a&&(_.jx_display_name=a),g&&g!==""&&(_.launch_command=g),t||(h.rs_plugin_loader&&(_.plugin_loader="1"),_.config_uri=h.use_custom_rs_config_uri&&h.rs_config_uri?h.rs_config_uri:$.env.default_config_uri);const m=k=>fetch(`/launch-${i}-${u}?${new URLSearchParams(_).toString()}`,k).then(b=>{b.text().then(U=>A.info(`game launch status: '${U.trim()}'`)),b.ok&&(d&&($[l]=d),h.close_after_launch&&(t||!h.rs_plugin_loader)&&fetch("/close"))});p?p.then(k=>m(rr(k))):m(Ne)},f=()=>{$.hdosInstalledVersion&&c()};mt(`${$.env.direct6_url}${o}/${o}.json`,Ne,d=>d.text().then(p=>{const _=JSON.parse(atob(p.split(".")[1])).environments.production;if($[l]===_.id){A.info("game client is up-to-date"),c();return}A.info(`downloading client version ${_.version}...`),mt(`${$.env.direct6_url}${o}/catalog/${_.id}/catalog.json`,Ne,h=>h.text().then(g=>{const m=JSON.parse(atob(g.split(".")[1])),k=b=>b.replace(/^http:\/\/(.{5})-akamai\.aws\.snxd\.com\//i,"https://$1.akamaized.net/").replace(/^http:/i,"https:");mt(k(m.metafile),Ne,b=>b.text().then(U=>{const H=JSON.parse(atob(U.split(".")[1])),D=H.pieces.digests.map(M=>{const j=atob(M).split("").map(re=>re.charCodeAt(0).toString(16).padStart(2,"0")).join(""),ce=k(m.config.remote.baseUrl).concat(m.config.remote.pieceFormat.replace("{SubString:0,2,{TargetDigest}}",j.substring(0,2)).replace("{TargetDigest}",j));return fetch(ce,Ne).then(re=>re.blob().then(ne=>{const Se=new DecompressionStream("gzip");return new Response(ne.slice(6).stream().pipeThrough(Se)).blob()}))});let S=0,E=null;for(let M=0;M{const j=new Blob(M).slice(S,S+E);c(H.id,j.arrayBuffer())})}),f)}),f)}),f)}var ri=(e,t)=>{v(t).close()},si=(e,t,n,r,a)=>{v(t)(v(n),v(r)),v(a).close()},ai=L('

Game is offline


This game appears to be offline for maintenance or an update. Launch anyway?

');function oi(e,t){me(t,!1);let n=We(),r=We(),a=We(),o=We();function i(l,c,f){P(o,l),P(r,c),P(a,f),v(n).open()}var u={open:i};return wt(nr(e,{class:"h-fit w-3/5 px-5 py-3 text-center",children:(l,c)=>{var f=ai(),d=w(C(f),6),p=C(d);p.__click=[ri,n];var _=w(p,2);_.__click=[si,o,r,a,n],x(l,f)},$$slots:{default:!0},$$legacy:!0}),l=>P(n,l),()=>v(n)),ea(t,"open",i),be(u)}st(["click"]);const ii=()=>fetch("/open-external-url",{method:"POST",body:"https://bolt.adamcake.com/plugins"});var li=(e,t)=>P(t,!1),ui=L("

(start an RS3 game client with plugins enabled and it will be listed here.)

"),ci=(e,t,n,r,a,o,i)=>{P(t,v(n).uid,!0),P(r,!0),P(a,!1),P(o,""),P(i,null)},fi=L("
",1),di=(e,t)=>P(t,null),_i=L(''),vi=(e,t,n)=>{P(t,!v(t)),P(n,"")},pi=(e,t,n,r)=>{t(v(n)),P(r,!1),P(n,"")},hi=(e,t,n)=>{P(t,!1),P(n,"")},gi=L('

',1),mi=L('
',1),bi=L('


',1),wi=L("

error


",1),yi=L("

loading...

"),ki=(e,t,n)=>{const r=t[Q(n)].path;fetch(r?"/browse-directory?".concat(new URLSearchParams({path:r}).toString()):"/browse-plugin-data?".concat(new URLSearchParams({id:Q(n)}).toString()))},xi=(e,t)=>fetch("/browse-plugin-config?".concat(new URLSearchParams({id:Q(t)}).toString())),Si=(e,t,n,r)=>t(v(n),Q(r)),$i=L('  ',1),Ei=L('  
',1),Li=L(`

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.

`),Ci=L('
',1),Pi=(e,t,n,r,a,o,i)=>t(Q(n),Q(r),v(a)??null,v(o).main??i),Ri=L(''),Ii=L("

(no plugins installed)

"),Ti=L("

can't start plugin: does not appear to be configured

"),Oi=(e,t,n,r)=>{t(Q(n),v(r).uid)},Ai=L('

'),Ui=L("

"),Ni=L('


',1),Hi=L("

error

"),Mi=L("

loading...

"),Di=L("
",1),ji=L(' ',1),Fi=L("

error

"),qi=L('

'),Bi=L("

"),Wi=L("

",1),Gi=L('

',1);function Vi(e,t){me(t,!0);const n=()=>ve(Ir,"$clientList",r),[r,a]=Je();let o,i=oe(null),u=oe(!1),l=en($.pluginConfig);const c=$.platform==="windows"?"\\":"/",f="bolt.json",d=c.concat(f),p="main.lua";function _(){P(De,!1),o.open()}const h=()=>{$.pluginConfig=l,te.savePluginConfig(!0)},g=y=>{console.log(y),P(i,y,!0),P(u,!1)},m=y=>{console.error(y),P(i,y,!0),P(u,!0)},k=y=>new Promise((I,T)=>{const z=y.concat(y.endsWith(c)?f:d);var N=new XMLHttpRequest;N.onreadystatechange=()=>{N.readyState==4&&(N.status==200?I(JSON.parse(N.responseText)):T(N.responseText))},N.open("GET","/read-json-file?".concat(new URLSearchParams({path:z}).toString()),!0),N.send()}),b=y=>fetch("/get-plugindir-json?".concat(new URLSearchParams({id:y}).toString())).then(I=>I.ok?I.json():null),U=y=>{const I=l[y];if(!I)return null;const T=I.path;return T?k(T):b(y)},H=()=>{const y=Object.keys(l);let I;do I=crypto.randomUUID();while(y.includes(I));return I},D="(unnamed)",S="(new character)",E=(y,I)=>{k(y).then(T=>{P(K,H(),!0),l[Q(K)]={name:T.name??D,path:y,version:T.version},$.pluginConfig=l,O.pluginConfigHasPendingChanges=!0}).catch(T=>m(`config file '${I}' couldn't be fetched, reason: ${T}`))},M=y=>{g("downloading..."),fetch(y).then(async I=>{if(!I.ok){m(`can't install plugin: updater URL returned ${I.status}: ${I.statusText}`);return}const T=await I.json();if(T.url){const z=await fetch(T.url);if(!z.ok){m(`can't install plugin: remote download URL returned ${I.status}: ${I.statusText}`);return}const N=await z.arrayBuffer();if(T.sha256){const Ye=await crypto.subtle.digest("SHA-256",N),zt=Array.from(new Uint8Array(Ye)).map(mn=>mn.toString(16).padStart(2,"0")).join("");if(T.sha256!==zt){m("can't install plugin: incorrect file hash");return}}const Y=H();if(!(await fetch("/install-plugin?".concat(new URLSearchParams({id:Y}).toString()),{method:"POST",body:N})).ok){m(`can't install plugin: ${I.statusText}`);return}const ft=await b(Y);ft?(P(K,Y,!0),l[Q(K)]={name:ft.name??D,version:ft.version,updaterURL:y,sha256:T.sha256},$.pluginConfig=l,O.pluginConfigHasPendingChanges=!0,g(`plugin '${ft.name}' installed`)):m(`can't install plugin: ${f} not found`)}}).catch(()=>{m("can't install plugin: unhandled exception")})};let j=oe(!1);const ce=()=>{P(j,!0);var y=new XMLHttpRequest;y.onreadystatechange=()=>{if(y.readyState==4&&(P(j,!1),y.status==200))if(y.responseText.endsWith(d)){const I=y.responseText.substring(0,y.responseText.length-f.length);E(I,y.responseText)}else m(`selection '${y.responseText}' is not named ${f}; ignored`)},y.open("GET","/json-file-picker",!0),y.send()};wr();const re=(y,I,T,z)=>{let N=null;if(T){const Xe=$.platform==="windows"?T.replaceAll("\\","/"):T;N=Xe.endsWith(c)?Xe:Xe.concat("/")}var Y=new XMLHttpRequest;Y.onreadystatechange=()=>{Y.readyState==4&&(wr(),A.info(`Start-plugin status: ${Y.statusText.trim()}`))},N?Y.open("GET","/start-plugin?".concat(new URLSearchParams({client:y.toString(),id:I,main:z,path:N}).toString()),!0):Y.open("GET","/start-plugin?".concat(new URLSearchParams({client:y.toString(),id:I,main:z}).toString()),!0),Y.send()},ne=(y,I)=>{var T=new XMLHttpRequest;T.onreadystatechange=()=>{T.readyState==4&&(wr(),A.info(`Stop-plugin status: ${T.statusText.trim()}`))},T.open("GET","/stop-plugin?".concat(new URLSearchParams({client:y.toString(),uid:I.toString()}).toString()),!0),T.send()},Se=(y,I)=>{const T=y.updaterURL;fetch(T).then(async z=>{if(!z.ok){m(`can't update plugin: updater URL returned ${z.status}: ${z.statusText}`);return}let N=await z.json();if(!N.url){g(`can't update plugin '${y.name}': no remote download URL is configured`);return}let Y=!1;if(N.sha256?y.sha256!==N.sha256&&(Y=!0):N.version&&y.version!==N.version&&(Y=!0),Y){const Xe=await fetch(N.url);if(!Xe.ok){m(`can't update plugin: remote download URL returned ${Xe.status}: ${Xe.statusText}`);return}const ft=await Xe.arrayBuffer();if(N.sha256){const zt=await crypto.subtle.digest("SHA-256",ft),mn=Array.from(new Uint8Array(zt)).map(sr=>sr.toString(16).padStart(2,"0")).join("");if(N.sha256!==mn){m(`can't update plugin '${y.name}': incorrect file hash`);return}}fetch("/install-plugin?".concat(new URLSearchParams({id:I}).toString()),{method:"POST",body:ft});const Ye=await b(I);Ye?(N.sha256&&(y.sha256=N.sha256),Ye.name&&(y.name=Ye.name),Ye.version&&(y.version=Ye.version),O.pluginConfigHasPendingChanges=!0,g(`plugin '${Ye.name}' updated`)):m(`can't update plugin '${y.name}': ${f} not found`)}else g(`plugin '${y.name}' is already up-to-date`)})};var K=oe(""),$e=oe(!1),fe=oe(0);let De=oe(!1),at=oe("");fn(()=>{n().some(y=>y.uid===Q(fe))||P($e,!1)});let Te=Be(()=>l[Q(K)]),kt=Be(()=>U(Q(K)));fn(()=>{v(kt)&&v(kt).then(y=>{let I=!1;y.name!==v(Te).name&&(v(Te).name=y.name,I=!0),y.version!==v(Te).version&&(v(Te).version=y.version,I=!0),I&&(P(Te,v(Te)),O.pluginConfigHasPendingChanges=!0)})});let V=Be(()=>v(Te)?v(Te).path:null);var X={open:_};wt(nr(e,{class:"h-[90%] w-[90%] text-center",onClose:()=>h(),children:(y,I)=>{var T=Gi(),z=B(T),N=C(z);N.__click=[li,$e];var Y=w(N,4);{var Xe=de=>{var je=ui();x(de,je)},ft=de=>{var je=lt(),xt=B(je);Pt(xt,1,n,Dt,(bn,Ut)=>{var Ze=fi(),se=B(Ze);se.__click=[ci,fe,Ut,$e,De,at,i];var Oe=C(se);W(()=>{Ie(se,1,`m-1 h-[28px] w-[95%] select-none rounded-lg border-2 ${Q($e)&&Q(fe)===v(Ut).uid?"border-black bg-blue-500 text-black":"border-blue-500 text-black dark:text-white"} hover:opacity-75`),pe(Oe,v(Ut).identity||S)}),x(bn,Ze)}),x(de,je)};J(Y,de=>{n().length==0?de(Xe):de(ft,!1)})}var Ye=w(z,2),zt=C(Ye);{var mn=de=>{var je=ji(),xt=B(je);xt.__change=[di,i],Pt(xt,21,()=>Object.entries(l),Dt,(se,Oe)=>{var Nt=Be(()=>ba(v(Oe),2));let Fe=()=>v(Nt)[0],Ae=()=>v(Nt)[1];var ot=_i(),Jt=C(ot),Xt={};W(()=>{pe(Jt,Ae().name??D),Xt!==(Xt=Fe())&&(ot.value=(ot.__value=Fe())??"")}),x(se,ot)});var bn=w(xt,2);{var Ut=se=>{var Oe=Ci(),Nt=B(Oe),Fe=C(Nt);Fe.__click=[vi,De,at];var Ae=w(Fe,2);Ae.__click=ce;var ot=w(Nt,4);{var Jt=le=>{var _e=gi(),Ke=w(B(_e),2),St=w(Ke,2);St.__click=[pi,M,at,De];var dt=w(St,2);dt.__click=[hi,De,at],jt(Ke,()=>v(at),we=>P(at,we)),x(le,_e)};J(ot,le=>{v(De)&&le(Jt)})}var Xt=w(ot,2);{var ar=le=>{var _e=lt(),Ke=B(_e);{var St=dt=>{var we=Ei(),_t=B(we);ls(_t,()=>v(kt),ye=>{var Ee=yi();x(ye,Ee)},(ye,Ee)=>{var Qe=bi(),Et=B(Qe),Ht=C(Et),lr=w(Ht);{var la=ur=>{var Yr=mi(),ca=w(B(Yr),2),fa=C(ca);W(()=>pe(fa,`v${v(Ee).version??""}`)),x(ur,Yr)};J(lr,ur=>{v(Ee).version&&ur(la)})}var Xr=w(Et,2),ua=C(Xr);W(()=>{pe(Ht,`${v(Ee).name??D??""} `),Ie(Xr,1,Hn(v(Ee).description?null:"italic")),pe(ua,v(Ee).description??"no description")}),x(ye,Qe)},ye=>{var Ee=wi();x(ye,Ee)});var Rn=w(_t,2);Rn.__click=[ki,l,K];var In=w(Rn,2);In.__click=[xi,K];var $t=w(In,4);{var Tn=ye=>{var Ee=$i(),Qe=B(Ee);Qe.__click=[Si,Se,Te,K],x(ye,Ee)};J($t,ye=>{v(Te).updaterURL&&ye(Tn)})}var ir=w($t,2);ir.__click=()=>{P(kt,null),O.pluginConfigHasPendingChanges=!0;const ye=l[Q(K)];ye&&(fetch("/uninstall-plugin?".concat(new URLSearchParams({id:Q(K),delete_data_dir:typeof ye.path=="string"?"0":"1"}).toString())),g(`plugin '${ye.name}' uninstalled`),delete l[Q(K)])},x(dt,we)};J(Ke,dt=>{Object.keys(l).includes(Q(K))&&v(kt)!==null&&dt(St)})}x(le,_e)},or=le=>{var _e=Li();x(le,_e)};J(Xt,le=>{Object.entries(l).length!==0?le(ar):le(or,!1)})}W(()=>{Fe.disabled=!$.hasLibArchive||v(j),Ae.disabled=v(j)}),x(se,Oe)},Ze=se=>{var Oe=Di(),Nt=w(B(Oe),2);ls(Nt,()=>v(kt),Fe=>{var Ae=Mi();x(Fe,Ae)},(Fe,Ae)=>{var ot=Ni(),Jt=B(ot);{var Xt=le=>{var _e=Ri();_e.__click=[Pi,re,fe,K,V,Ae,p];var Ke=C(_e);W(()=>pe(Ke,`Start ${v(Ae).name??""}`)),x(le,_e)},ar=le=>{var _e=lt(),Ke=B(_e);{var St=we=>{var _t=Ii();x(we,_t)},dt=we=>{var _t=Ti();x(we,_t)};J(Ke,we=>{Object.entries(l).length===0?we(St):we(dt,!1)},!0)}x(le,_e)};J(Jt,le=>{v(Ae)&&v(Ae).main&&Object.keys(l).includes(Q(K))?le(Xt):le(ar,!1)})}var or=w(Jt,8);Pt(or,1,n,Dt,(le,_e)=>{var Ke=lt(),St=B(Ke);{var dt=we=>{var _t=lt(),Rn=B(_t);Pt(Rn,17,()=>v(_e).plugins,Dt,(In,$t)=>{var Tn=lt(),ir=B(Tn);{var ye=Qe=>{var Et=Ai(),Ht=C(Et),lr=w(Ht);lr.__click=[Oi,ne,fe,$t],W(()=>pe(Ht,`${l[v($t).id].name??v($t).id??""} `)),x(Qe,Et)},Ee=Qe=>{var Et=Ui(),Ht=C(Et);W(()=>pe(Ht,v($t).id)),x(Qe,Et)};J(ir,Qe=>{Object.keys(l).includes(v($t).id)?Qe(ye):Qe(Ee,!1)})}x(In,Tn)}),x(we,_t)};J(St,we=>{v(_e).uid===Q(fe)&&we(dt)})}x(le,Ke)}),x(Fe,ot)},Fe=>{var Ae=Hi();x(Fe,Ae)}),x(se,Oe)};J(bn,se=>{Q($e)?se(Ze,!1):se(Ut)})}Vr(xt,()=>Q(K),se=>P(K,se)),x(de,je)},sr=de=>{var je=Fi();x(de,je)};J(zt,de=>{$.hasBoltPlugins?de(mn):de(sr,!1)})}var sa=w(zt,2);{var aa=de=>{var je=Wi(),xt=w(B(je),3);{var bn=Ze=>{var se=qi(),Oe=C(se);W(()=>pe(Oe,`[error] ${v(i)??""}`)),x(Ze,se)},Ut=Ze=>{var se=Bi(),Oe=C(se);W(()=>pe(Oe,`[info] ${v(i)??""}`)),x(Ze,se)};J(xt,Ze=>{v(u)?Ze(bn):Ze(Ut,!1)})}x(de,je)};J(sa,de=>{v(i)&&de(aa)})}var oa=w(Ye,2),ia=C(oa);ia.__click=[ii],W(()=>Ie(N,1,`mx-auto mb-2 w-[95%] select-none rounded-lg border-2 ${Q($e)?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black"} p-2 font-bold hover:opacity-75`)),x(y,T)},$$slots:{default:!0}}),y=>o=y,()=>o);var G=be(X);return a(),G}st(["click","change"]);var zi=L('
'),Ji=L(''),Xi=L(''),Yi=L(''),Zi=L(''),Ki=L(''),Qi=L('
Launch icon
',1);function el(e,t){me(t,!0);const n=()=>ve(f,"$config",i),r=()=>ve(g,"$psa",i),a=()=>ve(m,"$gameEnabled",i),o=()=>ve(d,"$initialized",i),[i,u]=Je();let l,c,{config:f,initialized:d}=O,p=Be(()=>n().selected.user_id),_=Be(()=>n().userDetails[v(p)??""]?.account_id),h=Be(()=>te.findSession(n().selected.user_id)?.accounts??[]),g=Bt(null),m=Bt(!0);fn(()=>{if(n().check_announcements){const V=n().selected.game==Le.osrs?"osrs":$.env.provider,X=`${$.env.psa_url}${V}/${V}.json`;fetch(X,{method:"GET",cache:"no-store"}).then(G=>G.json()).then(G=>{An(g,G.psaEnabled&&G.psaMessage?G.psaMessage:null),An(m,!(G.playDisabled??!1))})}else An(g,null),An(m,!0)});function k(V,X){if(!v(p))return A.warn("Please log in or select a user to play.");if(!v(_))return A.warn("Please select a character from the select menu.");const G=te.findSession(n().selected.user_id);if(!G)return A.warn("Unable to launch game, session was not found.");const{session_id:y}=G,I=te.findAccount(G.accounts,v(_));if(!I)return A.warn("Unable to launch game, account was not found.");const{accountId:T,displayName:z}=I,N=$.platform===kr.Windows,Y=$.platform===kr.Linux;switch(V){case Le.osrs:switch(X){case tn.official:_s(N||Y,!0,y,T,z);break;case tn.runelite:ra(y,T,z,!1);break;case tn.hdos:ni(y,T,z);break}break;case Le.rs3:Y?ti(y,T,z):_s(N,!1,y,T,z);break}}function b(V){const X=V.target.value;if(!v(p))return;const G=n().userDetails[v(p)];G?(G.account_id=X,ie(f,R(n).userDetails[v(p)]=G,R(n))):ie(f,R(n).userDetails[v(p)]={account_id:X},R(n))}var U={launch:k},H=Qi(),D=B(H);wt(oi(D,{}),V=>l=V,()=>l);var S=w(D,2);wt(Vi(S,{}),V=>c=V,()=>c);var E=w(S,2),M=C(E);{var j=V=>{var X=zi(),G=C(X);W(()=>pe(G,r())),x(V,X)};J(M,V=>{r()&&V(j)})}var ce=w(M,2),re=w(C(ce),2);re.__click=()=>{a()?k(n().selected.game,n().selected.client):l.open(k,n().selected.game,n().selected.client)};var ne=w(re,2);{var Se=V=>{var X=Xi(),G=w(C(X),2);Pt(G,5,()=>da[n().selected.game],Dt,(y,I)=>{var T=Ji(),z=C(T),N={};W(()=>{pe(z,v(I)),N!==(N=v(I))&&(T.value=(T.__value=v(I))??"")}),x(y,T)}),Vr(G,()=>n().selected.client,y=>ie(f,R(n).selected.client=y,R(n))),x(V,X)},K=V=>{var X=lt(),G=B(X);{var y=I=>{var T=Yi();T.__click=()=>{c.open()},W(()=>{T.disabled=!$.hasBoltPlugins,gt(T,"title",$.hasBoltPlugins?null:"This feature is disabled")}),x(I,T)};J(G,I=>{n().selected.game===Le.rs3&&I(y)},!0)}x(V,X)};J(ne,V=>{n().selected.game==Le.osrs?V(Se):V(K,!1)})}var $e=w(ne,2),fe=w(C($e),2);fe.__change=b;var De=C(fe);De.value=(De.__value=void 0)??"";var at=w(De);Pt(at,17,()=>v(h),Dt,(V,X)=>{var G=Zi(),y=C(G);{var I=N=>{var Y=os();W(()=>pe(Y,v(X).displayName)),x(N,Y)},T=N=>{var Y=os("New Character");x(N,Y)};J(y,N=>{v(X).displayName?N(I):N(T,!1)})}var z={};W(()=>{z!==(z=v(X).accountId)&&(G.value=(G.__value=v(X).accountId)??"")}),x(V,G)},V=>{var X=Ki();x(V,X)});var Te;Qs(fe),W(()=>{re.disabled=!o(),fe.disabled=!o()||n().selected.user_id===null,Te!==(Te=v(_))&&(fe.value=(fe.__value=v(_))??"",Gr(fe,v(_)))}),x(e,H);var kt=be(U);return u(),kt}st(["click","change"]);var tl=L("
  • "),nl=L('
    Message list icon
      ');function rl(e,t){me(t,!0);var n=nl(),r=w(C(n),2);Pt(r,21,()=>t.logs,Dt,(a,o)=>{let i=()=>v(o).date,u=()=>v(o).severity,l=()=>v(o).content;var c=tl();let f;var d=C(c);W((p,_)=>{f=Ie(c,1,"",null,f,p),pe(d,`${_??""} + - ${l()??""}`)},[()=>({"text-rose-500":u()===Rr.error,"text-orange-700":u()===Rr.warn}),()=>i()?.toLocaleTimeString()]),x(a,c)}),x(e,n),be()}var sl=L(''),al=()=>{const{origin:e,redirect:t,clientid:n}=$.env;Pe.openLoginWindow(e,t,n)},ol=async(e,t,n)=>{t().selected.user_id&&(await te.logout(t().selected.user_id),te.saveCredentials())},il=L('
      ',1);function ll(e,t){me(t,!1);const n=()=>ve(u,"$config",a),r=()=>ve(i,"$sessions",a),[a,o]=Je(),{sessions:i,config:u}=O;At();var l=il(),c=B(l);W(()=>{n(),ao(()=>{r()})});var f=C(c);f.value=(f.__value=null)??"";var d=w(f);Pt(d,1,r,g=>g.user.userId,(g,m)=>{var k=sl(),b=C(k),U={};W(()=>{pe(b,v(m).user.displayName),U!==(U=v(m).user.userId)&&(k.value=(k.__value=v(m).user.userId)??"")}),x(g,k)});var p=w(c,2),_=C(p);_.__click=[al];var h=w(_,2);h.__click=[ol,n,u],W(()=>h.disabled=!n().selected.user_id),Vr(c,()=>n().selected.user_id,g=>ie(u,R(n).selected.user_id=g,R(n))),x(e,l),be(),o()}st(["click"]);function ul(e,{callback:t,ignore:n=[]}){const r=a=>{const o=n.some(i=>i.contains(a.target));e&&!e.contains(a.target)&&!a.defaultPrevented&&!o&&t()};return document.addEventListener("click",r,!0),document.addEventListener("contextmenu",r,!0),{destroy(){document.removeEventListener("click",r,!0),document.removeEventListener("contextmenu",r,!0)}}}function cl(e,t,n,r){v(t)?n():r()}var fl=L("
      "),dl=L("
      ");function _l(e,t){me(t,!0);const n=()=>ve(o,"$config",r),[r,a]=Je(),{config:o}=O;let i=Be(()=>n().use_dark_theme),u=ln(t,"class",3,""),l=ln(t,"position",3,"bottom"),c=ln(t,"align",3,"start"),f=oe(!1),d=oe(void 0);function p(){P(f,!0)}function _(){P(f,!1)}var h={open:p,close:_},g=dl();let m;var k=C(g);k.__click=[cl,f,_,p];var b=C(k);Vn(b,()=>t.children??nt),wt(k,S=>P(d,S),()=>v(d));var U=w(k,2);{var H=S=>{var E=fl(),M=C(E);Vn(M,()=>t.content??nt),Co(E,(j,ce)=>ul?.(j,ce),()=>({callback:_,ignore:[v(d)]})),W(()=>Ie(E,1,`dropdown-color absolute z-20 rounded-lg border-2 ${l()??""} ${c()??""}`,"svelte-11xj3vp")),x(S,E)};J(U,S=>{v(f)&&S(H)})}W(S=>m=Ie(g,1,`relative h-fit w-fit ${u()??""}`,"svelte-11xj3vp",m,S),[()=>({dark:v(i)})]),x(e,g);var D=be(h);return a(),D}st(["click"]);var vl=(e,t)=>{t()},pl=L('
      ',1);function hl(e,t){me(t,!1);const n=()=>ve(i,"$config",r),[r,a]=Je();function o(){var b=new XMLHttpRequest;b.open("GET","/browse-data"),b.onreadystatechange=()=>{b.readyState==4&&A.info(`Browse status: '${b.responseText.trim()}'`)},b.send()}const{config:i}=O,u="Allow checking for official announcements about game status. These will be displayed above the 'play' button. Disabling will reduce the number of web requests made when opening the launcher.",l="Close the launcher immediately after launching a game",c="Discard login sessions if they're no longer valid, prompting the player to sign-in again. If unchecked, the only way to discard a login will be by manually pressing the 'log out' button, even if your login no longer works.";At();var f=pl(),d=B(f);d.__click=[vl,o];var p=w(d,2);gt(p,"title",u);var _=w(C(p),2),h=w(p,2);gt(h,"title",l);var g=w(C(h),2),m=w(h,2);gt(m,"title",c);var k=w(C(m),2);on(_,()=>n().check_announcements,b=>ie(i,R(n).check_announcements=b,R(n))),on(g,()=>n().close_after_launch,b=>ie(i,R(n).close_after_launch=b,R(n))),on(k,()=>n().discard_expired_sessions,b=>ie(i,R(n).discard_expired_sessions=b,R(n))),x(e,f),be(),a()}st(["click"]);var gl=(e,t)=>t(),ml=(e,t)=>{t()},bl=L('




      ',1);function wl(e,t){me(t,!0);const n=()=>ve(o,"$config",r),[r,a]=Je(),{config:o}=O;let i=Be(()=>te.findSession(n().selected.user_id)),u=Be(()=>te.findAccount(v(i)?.accounts??[],n().userDetails[n().selected.user_id??""]?.account_id)),l=oe(!1);async function c(){P(l,!0),ie(o,R(n).runelite_custom_jar=await te.openFilePicker(),R(n)),console.log("done picking"),P(l,!1)}function f(){!v(i)?.session_id||!v(u)?.accountId||!v(u)?.displayName||ra(v(i).session_id,v(u).accountId,v(u).displayName,!0)}var d=bl(),p=B(d);p.__click=[gl,f];var _=w(p,2),h=w(C(_),2),g=w(_,2);let m;var k=C(g),b=w(k,4);b.__click=[ml,c];var U=w(g,2),H=w(C(U),4);gt(H,"placeholder","%command%");var D=w(U,2),S=w(C(D),4);gt(S,"placeholder","%command%");var E=w(D,2),M=w(C(E),4);gt(M,"placeholder","%command%"),W(j=>{p.disabled=!v(i)?.session_id||!v(u)?.accountId,m=Ie(g,1,"mx-auto p-2",null,m,j),k.disabled=!n().runelite_use_custom_jar,b.disabled=v(l)||!n().runelite_use_custom_jar},[()=>({"opacity-25":!n().runelite_use_custom_jar})]),on(h,()=>n().runelite_use_custom_jar,j=>ie(o,R(n).runelite_use_custom_jar=j,R(n))),jt(k,()=>n().runelite_custom_jar,j=>ie(o,R(n).runelite_custom_jar=j,R(n))),jt(H,()=>n().osrs_launch_command,j=>ie(o,R(n).osrs_launch_command=j,R(n))),jt(S,()=>n().runelite_launch_command,j=>ie(o,R(n).runelite_launch_command=j,R(n))),jt(M,()=>n().hdos_launch_command,j=>ie(o,R(n).hdos_launch_command=j,R(n))),x(e,d),be(),a()}st(["click"]);var yl=L('
      '),kl=L('

      ',1);function xl(e,t){me(t,!1);const n=()=>ve(o,"$config",r),[r,a]=Je(),{config:o}=O;At();var i=kl(),u=B(i);{var l=g=>{var m=yl(),k=w(C(m),2);on(k,()=>n().rs_plugin_loader,b=>ie(o,R(n).rs_plugin_loader=b,R(n))),x(g,m)};J(u,g=>{$.hasBoltPlugins&&g(l)})}var c=w(u,2),f=w(C(c),2),d=w(c,2),p=C(d),_=w(d,2),h=w(C(_),4);gt(h,"placeholder","%command%"),W(()=>{p.disabled=!n().use_custom_rs_config_uri,gt(p,"placeholder",$.env.default_config_uri)}),on(f,()=>n().use_custom_rs_config_uri,g=>ie(o,R(n).use_custom_rs_config_uri=g,R(n))),jt(p,()=>n().rs_config_uri,g=>ie(o,R(n).rs_config_uri=g,R(n))),jt(h,()=>n().rs_launch_command,g=>ie(o,R(n).rs_launch_command=g,R(n))),x(e,i),be(),a()}var Sl=(e,t,n)=>{P(t,n.general)},$l=(e,t,n)=>{P(t,n.osrs)},El=(e,t,n)=>{P(t,n.rs3)},Ll=L('
      ');function Cl(e,t){me(t,!1);var n=(c=>(c[c.general=0]="general",c[c.osrs=1]="osrs",c[c.rs3=2]="rs3",c))(n||{});let r=We(),a=We(0),o="border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 w-3/4",i="border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 w-3/4";function u(){v(r).open()}var l={open:u};return At(),wt(nr(e,{class:"h-3/4 w-3/4 select-none",children:(c,f)=>{var d=Ll(),p=C(d),_=C(p);_.__click=[Sl,a,n];var h=w(_,2);h.__click=[$l,a,n];var g=w(h,2);g.__click=[El,a,n];var m=w(p,2),k=C(m);{var b=H=>{hl(H,{})},U=H=>{var D=lt(),S=B(D);{var E=j=>{wl(j,{})},M=j=>{var ce=lt(),re=B(ce);{var ne=Se=>{xl(Se,{})};J(re,Se=>{v(a)==n.rs3&&Se(ne)},!0)}x(j,ce)};J(S,j=>{v(a)==n.osrs?j(E):j(M,!1)},!0)}x(H,D)};J(k,H=>{v(a)==n.general?H(b):H(U,!1)})}W(()=>{Ie(_,1,Hn(v(a)===n.general?o:i)),Ie(h,1,Hn(v(a)===n.osrs?o:i)),Ie(g,1,Hn(v(a)===n.rs3?o:i))}),x(c,d)},$$slots:{default:!0},$$legacy:!0}),c=>P(r,c),()=>v(r)),ea(t,"open",u),be(l)}st(["click"]);var Pl=(e,t,n)=>{ie(n,R(t).selected.game=Le.rs3,R(t))},Rl=(e,t,n)=>{ie(n,R(t).selected.game=Le.osrs,R(t))},Il=(e,t,n)=>ie(n,R(t).use_dark_theme=!t().use_dark_theme,R(t)),Tl=(e,t)=>v(t).open(),Ol=L('
      '),Al=L(''),Ul=()=>{const{origin:e,redirect:t,clientid:n}=$.env;Pe.openLoginWindow(e,t,n)},Nl=L(''),Hl=L('
      ',1);function Ml(e,t){me(t,!1);const n=()=>ve(i,"$config",a),r=()=>ve(u,"$sessions",a),[a,o]=Je(),{config:i,sessions:u}=O;let l=We();At();var c=Hl(),f=B(c);wt(Cl(f,{$$legacy:!0}),E=>P(l,E),()=>v(l));var d=w(f,2),p=C(d),_=C(p);let h;_.__click=[Pl,n,i];var g=w(_,2);let m;g.__click=[Rl,n,i];var k=w(p,2),b=C(k);b.__click=[Il,n,i];var U=w(b,2);U.__click=[Tl,l];var H=w(U,2);{var D=E=>{const M=jr(()=>te.findSession(n().selected.user_id??""));_l(E,{align:"center",content:ce=>{var re=Ol(),ne=C(re);ll(ne,{}),x(ce,re)},children:(ce,re)=>{var ne=Al(),Se=C(ne);W(()=>pe(Se,v(M)?.user.displayName??"No user selected")),x(ce,ne)},$$slots:{content:!0,default:!0}})},S=E=>{var M=Nl();M.__click=[Ul],x(E,M)};J(H,E=>{r().length>0?E(D):E(S,!1)})}W((E,M)=>{h=Ie(_,1,"mx-1 w-20 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75",null,h,E),m=Ie(g,1,"mx-1 w-20 rounded-lg border-2 border-blue-500 bg-blue-500 p-2 text-black duration-200 hover:opacity-75",null,m,M)},[()=>({"text-black":n().selected.game===Le.rs3,"bg-blue-500":n().selected.game===Le.rs3}),()=>({"text-black":n().selected.game===Le.osrs,"bg-blue-500":n().selected.game===Le.osrs})]),x(e,c),be(),o()}st(["click"]);var Dl=L('
      ',1);function jl(e,t){me(t,!1);const n=()=>ve(o,"$logs",r),[r,a]=Je(),o=A.logs;At(),ko("beforeunload",Sr,()=>{te.saveConfig(),$.hasBoltPlugins&&te.savePluginConfig(!0)}),na(e,{children:(i,u)=>{var l=Dl(),c=B(l);Yo(c,{});var f=w(c,2);Ml(f,{});var d=w(f,2),p=w(C(d),2);el(p,{});var _=w(d,2);rl(_,{get logs(){return n()}}),x(i,l)}}),be(),a()}const vs={target:document.getElementById("app")};window.opener||window.location.search.includes("&id_token")?is(Wo,vs):(Fl(),jo(),ql(),Bl().finally(()=>{O.initialized.set(!0)}),is(jl,vs));function Fl(){const e=new URLSearchParams(window.location.search);$.platform=e.get("platform"),$.isFlathub=e.get("flathub")==="1",$.hasLibArchive=e.get("has_libarchive")==="1",$.rs3debInstalledHash=e.get("rs3_deb_installed_hash"),$.rs3exeInstalledHash=e.get("rs3_exe_installed_hash"),$.rs3appInstalledHash=e.get("rs3_app_installed_hash"),$.osrsexeInstalledHash=e.get("osrs_exe_installed_hash"),$.osrsappInstalledHash=e.get("osrs_app_installed_hash"),$.runeLiteInstalledId=e.get("runelite_installed_id"),$.hdosInstalledVersion=e.get("hdos_installed_version");const t=e.get("plugins");if($.hasBoltPlugins=t!==null,t!==null)try{$.pluginConfig=JSON.parse(t)}catch{A.error("Unable to parse plugin list")}const n=e.get("credentials");if(n)try{const r=JSON.parse(n),a=r.every(o=>typeof o.session_id=="string"&&typeof o.tokens=="object"&&typeof o.accounts=="object"&&typeof o.user=="object");a?O.sessions.set(r):(O.sessions.set([]),te.saveCredentials(),A.warn("Credentials saved on disk are out of date. Please sign in again.")),O.sessions.set(a?r:[])}catch{O.sessions.set([]),te.saveCredentials(),A.error("Unable to parse saved credentials. Please sign in again.")}}function ql(){const{origin:e,origin_2fa:t}=$.env,n=[window.location.origin,e,t];let r=null;window.addEventListener("message",async a=>{if(!n.includes(a.origin)){A.info(`discarding window message from origin ${a.origin}`);return}switch(a.data.type){case"authTokenUpdate":{r=a.data.tokens;break}case"authSessionUpdate":{if(r===null)return A.error("auth is null. Please try again.");const o=a.data.sessionId,i=await te.login(r,o);i.ok?A.info(`Added new user '${i.value.user.displayName}'`):A.error(`Unable to add new user. Please try again. ${i.error}`),te.saveCredentials(),Pe.pendingLoginWindow=null,r=null;break}case"authFailed":{A.error(`Unable to authenticate: ${a.data.reason}`),Pe.pendingLoginWindow=null,r=null;break}case"externalUrl":{const o=new XMLHttpRequest;o.onreadystatechange=()=>{o.readyState==4&&A.info(`External URL status: '${o.responseText.trim()}'`)},o.open("POST","/open-external-url",!0),o.send(a.data.url);break}case"gameClientList":Ce(O.config).close_after_launch&&a.data.clients.length>Ce(Ir).length?fetch("/close"):Ir.set(a.data.clients);break;default:{const o=a.data?.type??"no type provided";A.info(`Unknown message type: ${o}`);break}}})}async function Bl(){const e=Ce(O.config).discard_expired_sessions,t=Ce(O.sessions),n=[];t.length>0&&A.info("Logging in...");const r=t.map(i=>({promise:Pe.refreshOAuthToken(i.tokens),session:i})),a=[];for(const i of r){const u=i.session,l=await i.promise;if(!l.ok){l.error===0?A.error(`Unable to verify saved login, status: ${l.error}. Do you have an internet connection? Please relaunch Bolt to try again.`):l.error>=400&&l.error<500&&e?(A.error(`Discarding expired login, status: ${l.error}. Please sign in again.`),n.push(u.tokens.sub)):A.error(`Unable to verify saved login due to HTTP error ${l.error}`);continue}const c=l.value;u.tokens=c,a.push({promise:te.login(c,u.session_id),session:u})}for(const i of a){const u=i.session,l=await i.promise;l.ok?A.info(`Signed into saved user '${l.value.user.displayName}'`):(A.error(`Unable to sign into saved user '${u.user.displayName}' due to an error: ${l.error}`),e&&n.push(u.tokens.sub))}const o=n.map(te.logout);for(const i of o)await i;O.sessions.set(t),await te.saveCredentials()} diff --git a/app/dist/assets/index-DJYOLyXH.js b/app/dist/assets/index-DJYOLyXH.js deleted file mode 100644 index 4c0d332b..00000000 --- a/app/dist/assets/index-DJYOLyXH.js +++ /dev/null @@ -1,9 +0,0 @@ -var Pn=Object.defineProperty;var Rn=(t,e,n)=>e in t?Pn(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var Qe=(t,e,n)=>(Rn(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 Rt=(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))(Rt||{});class Je{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))(ce||{}),Ve=(t=>(t.official="Official",t.runelite="RuneLite",t.hdos="HDOS",t))(Ve||{});const jt={rs3:["Official"],osrs:["Official","RuneLite","HDOS"]};class at{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 oe(i)}const o=JSON.parse(atob(l[0]));if(o.typ!=="JWT"){const i=`Bad id_token header: typ ${o.typ}, expected JWT`;return oe(i)}const r=JSON.parse(atob(l[1]));return Le({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 oe("Unable to parse token response")}}static parseSessionResponse(e){try{const n=JSON.parse(e);return n.sessionId?Le(n.sessionId):oe("sessionId does not exist on parsed object")}catch{return oe("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 It=(t=>(t.Windows="windows",t.Linux="linux",t.MacOS="mac",t))(It||{});const R={env:at.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 yt{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 Ge=class Ge{static async openLoginWindow(e,n,l){if(Ge.pendingLoginWindow!==null)return Ge.pendingLoginWindow.window.focus();const o=yt.makeRandomState(),r=yt.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:R.env.clientid,refresh_token:e.refresh_token}),o=new XMLHttpRequest;o.onreadystatechange=()=>{if(o.readyState==4)if(o.status==200){const i=at.parseTokenResponse(o.response);i.ok?n(Le(i.value)):n(oe(0))}else n(oe(o.status))},o.onerror=()=>{n(oe(0))};const r=R.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(Le(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 d=at.parseTokenResponse(c.response);return d.ok?a(Le(d.value)):a(oe(d.error))}else return a(oe(`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=`${R.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:R.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=at.parseSessionResponse(r.response);return a.ok?o(Le(a.value)):o(oe(a.error))}else oe(`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 oe(`Malformed id_token: ${l.length} sections, expected 3`);const o=JSON.parse(atob(l[0]));return o.typ!=="JWT"?oe(`Bad id_token header: typ ${o.typ}, expected JWT`):JSON.parse(atob(l[1])).nonce!==n?oe("Incorrect nonce in id_token"):Le(void 0)}};Qe(Ge,"pendingLoginWindow",null);let Se=Ge;class ut{static async buildSession(e,n){const l=await ut.getUser(e.sub,e.access_token);if(!l.ok)return oe(`Failed to fetch user. Status: ${l.error}`);const o=await ut.getUserAccounts(n);return o.ok?Le({user:l.value,accounts:o.value,tokens:e,session_id:n}):oe(`Failed to fetch game accounts. Status: ${o.error}`)}static getUser(e,n){return new Promise(l=>{const o=`${R.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(Le(i))}else l(oe(r.status))},r.open("GET",o,!0),r.setRequestHeader("Authorization","Bearer ".concat(n)),r.send()})}static getUserAccounts(e){const n=`${R.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(Le(r))}else l(oe(o.status))},o.open("GET",n,!0),o.setRequestHeader("Accept","application/json"),o.setRequestHeader("Authorization","Bearer ".concat(e)),o.send()})}}function B(){}function In(t,e){for(const n in e)t[n]=e[n];return t}function Un(t){return!!t&&(typeof t=="object"||typeof t=="function")&&typeof t.then=="function"}function mn(t){return t()}function Et(){return Object.create(null)}function re(t){t.forEach(mn)}function ft(t){return typeof t=="function"}function _e(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}let it;function Ut(t,e){return t===e?!0:(it||(it=document.createElement("a")),it.href=e,t===it.href)}function Hn(t){return Object.keys(t).length===0}function bn(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 ve(t){let e;return bn(t,n=>e=n)(),e}function ke(t,e,n){t.$$.on_destroy.push(bn(e,n))}function pt(t,e,n,l){if(t){const o=kn(t,e,n,l);return t[0](o)}}function kn(t,e,n,l){return t[1]&&l?In(n.ctx.slice(),t[1](l(e))):n.ctx}function _t(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 Tn(t){return function(e){e.target===this&&t.call(this,e)}}function _(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function xn(t){return Array.from(t.childNodes)}function pe(t,e){e=""+e,t.data!==e&&(t.data=e)}function K(t,e){t.value=e??""}function xe(t,e,n){for(let l=0;l{const o=t.$$.callbacks[e];if(o){const r=Nn(e,n,{cancelable:l});return o.slice().forEach(i=>{i.call(t,r)}),!r.defaultPrevented}return!0}}const We=[],Pe=[];let Xe=[];const Mt=[],Mn=Promise.resolve();let Ht=!1;function An(){Ht||(Ht=!0,Mn.then(xt))}function Ye(t){Xe.push(t)}const $t=new Set;let De=0;function xt(){if(De!==0)return;const t=tt;do{try{for(;Det.indexOf(l)===-1?e.push(l):n.push(l)),n.forEach(l=>l()),Xe=e}const ct=new Set;let Ee;function nt(){Ee={r:0,c:[],p:Ee}}function st(){Ee.r||re(Ee.c),Ee=Ee.p}function q(t,e){t&&t.i&&(ct.delete(t),t.i(e))}function W(t,e,n,l){if(t&&t.o){if(ct.has(t))return;ct.add(t),Ee.c.push(()=>{ct.delete(t),l&&(n&&t.d(1),l())}),t.o(e)}else l&&l()}function dt(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 d=!1;e.block&&(e.blocks?e.blocks.forEach((f,b)=>{b!==r&&f&&(nt(),W(f,1,1,()=>{e.blocks[b]===f&&(e.blocks[b]=null)}),st())}):e.block.d(1),u.c(),q(u,1),u.m(e.mount(),e.anchor),d=!0),e.block=u,e.blocks&&(e.blocks[r]=u),d&&xt()}if(Un(t)){const o=mt();if(t.then(r=>{He(o),l(e.then,1,e.value,r),He(null)},r=>{if(He(o),l(e.catch,2,e.error,r),He(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 vn(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 ge(t){return(t==null?void 0:t.length)!==void 0?t:Array.from(t)}function Fn(t,e){t.d(1),e.delete(t.key)}function qn(t,e,n,l,o,r,i,a,c,u,d,f){let b=t.length,g=r.length,p=b;const y={};for(;p--;)y[t[p].key]=p;const h=[],L=new Map,$=new Map,x=[];for(p=g;p--;){const S=f(o,r,p),C=n(S);let T=i.get(C);T?l&&x.push(()=>T.p(S,e)):(T=u(C,S),T.c()),L.set(C,h[p]=T),C in y&&$.set(C,Math.abs(p-y[C]))}const I=new Set,O=new Set;function U(S){q(S,1),S.m(a,d),i.set(S.key,S),d=S.first,g--}for(;b&&g;){const S=h[g-1],C=t[b-1],T=S.key,j=C.key;S===C?(d=S.first,b--,g--):L.has(j)?!i.has(T)||I.has(T)?U(S):O.has(j)?b--:$.get(T)>$.get(j)?(O.add(T),U(S)):(I.add(j),b--):(c(C,i),b--)}for(;b--;){const S=t[b];L.has(S.key)||c(S,i)}for(;g;)U(h[g-1]);return re(x),h}function de(t){t&&t.c()}function ie(t,e,n){const{fragment:l,after_update:o}=t.$$;l&&l.m(e,n),Ye(()=>{const r=t.$$.on_mount.map(mn).filter(ft);t.$$.on_destroy?t.$$.on_destroy.push(...r):re(r),t.$$.on_mount=[]}),o.forEach(Ye)}function ae(t,e){const n=t.$$;n.fragment!==null&&(Bn(n.after_update),re(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function zn(t,e){t.$$.dirty[0]===-1&&(We.push(t),An(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const p=g.length?g[0]:b;return u.ctx&&o(u.ctx[f],u.ctx[f]=p)&&(!u.skip_bound&&u.bound[f]&&u.bound[f](p),d&&zn(t,f)),b}):[],u.update(),d=!0,re(u.before_update),u.fragment=l?l(u.ctx):!1,e.target){if(e.hydrate){const f=xn(e.target);u.fragment&&u.fragment.l(f),f.forEach(w)}else u.fragment&&u.fragment.c();e.intro&&q(t.$$.fragment),ie(t,e.target,e.anchor),xt()}He(c)}class me{constructor(){Qe(this,"$$");Qe(this,"$$set")}$destroy(){ae(this,1),this.$destroy=B}$on(e,n){if(!ft(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&&!Hn(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Wn="4",Be=[];function Me(t,e=B){let n;const l=new Set;function o(a){if(_e(t,a)&&(t=a,n)){const c=!Be.length;for(const u of l)u[1](),Be.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 et=(t=>(t.info="info",t.warn="warn",t.error="error",t))(et||{});class Jn{constructor(){Qe(this,"logs",Me([]))}_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 A=new Jn;function Gn(t,e){let n=!1;return t.subscribe(l=>{n?e(l):n=!0})}const Vn={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,discard_expired_sessions:!0,rs_launch_command:null,osrs_launch_command:null,runelite_custom_jar:null,runelite_launch_command:null,hdos_launch_command:null,selected:{game:ce.osrs,client:Ve.runelite,user_id:null},userDetails:{}};function Xn(){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(ce).includes(o.selected.game)&&Object.values(Ve).includes(o.selected.client)&&(typeof o.selected.user_id=="string"||o.selected.user_id===null)&&typeof o.userDetails=="object"}const{config:l}=M;if(e)try{const o=JSON.parse(e);typeof o.check_announcements>"u"&&(o.check_announcements=!0,M.configHasPendingChanges=!0),typeof o.close_after_launch>"u"&&(o.close_after_launch=!1,M.configHasPendingChanges=!0),typeof o.discard_expired_sessions>"u"&&(o.discard_expired_sessions=!0,M.configHasPendingChanges=!0),n(o)?l.set(o):(A.error("The config saved on disk is not the correct format. It has been restored to default."),M.configHasPendingChanges=!0)}catch{A.error("Unable to parse config, restoring to default"),M.configHasPendingChanges=!0}else M.configHasPendingChanges=!0;Gn(M.config,()=>{M.configHasPendingChanges=!0})}const M={initialized:Me(!1),configHasPendingChanges:!1,pluginConfigHasPendingChanges:!1,config:Me(Vn),sessions:Me([])};let St=!1,Ct=!1;class ne{static async login(e,n){const l=await ut.buildSession(e,n);if(!l.ok)return oe(l.error);const o=l.value,i=ve(M.sessions).findIndex(a=>a.user.userId===e.sub);return i!==-1?M.sessions.update(a=>(a[i]=o,a)):(M.sessions.update(a=>(a.push(o),a)),M.config.update(a=>(a.selected.user_id=o.user.userId,a))),Le(o)}static async logout(e){const{sessions:n,config:l}=M;return n.update(o=>{const r=o.findIndex(i=>i.user.userId===e);return r>-1&&(Se.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)),ve(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=>A.error(`${e} error: ${i.status}: ${a}`)),l&&l(i)})}static saveConfig(e=!0){if(St||e&&!M.configHasPendingChanges)return;St=!0;const n=ve(M.config);return n.rs_launch_command===""&&(n.rs_launch_command=null),n.osrs_launch_command===""&&(n.osrs_launch_command=null),n.runelite_launch_command===""&&(n.runelite_launch_command=null),n.hdos_launch_command===""&&(n.hdos_launch_command=null),this.postJSON("/save-config",n,()=>St=!1),n}static savePluginConfig(e=!0){Ct||e&&!M.pluginConfigHasPendingChanges||(Ct=!0,this.postJSON("/save-plugin-config",R.pluginConfig,()=>Ct=!1))}static async saveCredentials(){return this.postJSON("/save-credentials",ve(M.sessions))}static async openFilePicker(){const e=await fetch("/jar-file-picker");return e.status===200?e.text():null}static findSession(e){return ve(M.sessions).find(l=>l.user.userId===e)}static findAccount(e,n){return e.find(l=>l.accountId==n)}}const Ot=Me([]);typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Wn);function Yn(t){let e,n;const l=t[4].default,o=pt(l,t,t[3],null);return{c(){e=m("main"),o&&o.c(),_(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"),ue(e,"dark",t[0])},m(r,i){v(r,e,i),o&&o.m(e,null),n=!0},p(r,[i]){o&&o.p&&(!n||i&8)&>(o,l,r,r[3],n?_t(l,r[3],i,null):ht(r[3]),null),(!n||i&1)&&ue(e,"dark",r[0])},i(r){n||(q(o,r),n=!0)},o(r){W(o,r),n=!1},d(r){r&&w(e),o&&o.d(r)}}}function Zn(t,e,n){let l,o,{$$slots:r={},$$scope:i}=e;const{config:a}=M;return ke(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 yn extends me{constructor(e){super(),he(this,e,Zn,Yn,_e,{})}}function Kn(t){let e;return{c(){e=m("div"),e.innerHTML='loading',_(e,"class","flex h-full items-center justify-center")},m(n,l){v(n,e,l)},p:B,d(n){n&&w(e)}}}function Qn(t){let e,n;return e=new yn({props:{$$slots:{default:[Kn]},$$scope:{ctx:t}}}),{c(){de(e.$$.fragment)},m(l,o){ie(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){W(e.$$.fragment,l),n=!1},d(l){ae(e,l)}}}function es(t){const e=window.opener;R.env==null&&o("BoltEnv is not defined. Please close and re-open Bolt to try again.");async function n(i){const a=Je.get("auth_verifier");if(!a)return o("Verifier token has expired. Please try signing in again."),null;const{clientid:c,redirect:u}=R.env,d=await Se.getOAuthToken(R.env.origin,c,a,u,i);return d.ok?d.value:(o(`Fetching OAuth token failed. ${d.error}`),null)}async function l(i){const a=Je.get("auth_nonce"),c=Se.validateIdToken(i,a??"");if(!c.ok)return o(c.error),null;const u=await Se.getSessionId(R.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 wn(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 d=await n(a);if(!d)return o("tokens object is null.");r({type:"authTokenUpdate",tokens:d});const f=crypto.randomUUID();Se.navigateToAuthConsent(R.env.origin,d.id_token,f)}else if(u&&a&&c){const d=await l(u);if(!d)return o("sessionId is null");r({type:"authSessionUpdate",sessionId:d}),fetch("/close")}else o("Authentication server did not response with the appropriate parameters. Please try again later.")}),jn(()=>{Je.remove("auth_verifier"),Je.remove("auth_nonce")}),[]}class ts extends me{constructor(e){super(),he(this,e,es,Qn,_e,{})}}function At(t){let e,n,l;return{c(){e=m("button"),e.innerHTML='Close',_(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){v(o,e,r),n||(l=N(e,"click",t[2]),n=!0)},p:B,d(o){o&&w(e),n=!1,l()}}}function Dt(t){let e;const n=t[7].default,l=pt(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)&>(l,n,o,o[6],e?_t(n,o[6],r,null):ht(o[6]),null)},i(o){e||(q(l,o),e=!0)},o(o){W(l,o),e=!1},d(o){l&&l.d(o)}}}function ns(t){let e,n,l,o,r,i,a=t[1]&&At(t),c=t[4]&&Dt(t);return{c(){e=m("dialog"),a&&a.c(),n=P(),c&&c.c(),_(e,"class",l=t[0]+" backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none svelte-csux1e"),ue(e,"backdrop:cursor-pointer",t[1])},m(u,d){v(u,e,d),a&&a.m(e,null),k(e,n),c&&c.m(e,null),t[8](e),o=!0,r||(i=[N(e,"keydown",t[9]),N(e,"mousedown",Tn(t[10]))],r=!0)},p(u,[d]){u[1]?a?a.p(u,d):(a=At(u),a.c(),a.m(e,n)):a&&(a.d(1),a=null),u[4]?c?(c.p(u,d),d&16&&q(c,1)):(c=Dt(u),c.c(),q(c,1),c.m(e,null)):c&&(nt(),W(c,1,1,()=>{c=null}),st()),(!o||d&1&&l!==(l=u[0]+" backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none svelte-csux1e"))&&_(e,"class",l),(!o||d&3)&&ue(e,"backdrop:cursor-pointer",u[1])},i(u){o||(q(c),o=!0)},o(u){W(c),o=!1},d(u){u&&w(e),a&&a.d(),c&&c.d(),t[8](null),r=!1,re(i)}}}function ss(t,e,n){let{$$slots:l={},$$scope:o}=e,{class:r=""}=e,{canSelfClose:i=!0}=e,a,c=!1;const u=En();function d(){a.showModal(),n(4,c=!0)}function f(){u("close"),a.close(),n(4,c=!1)}function b(y){Pe[y?"unshift":"push"](()=>{a=y,n(3,a)})}const g=y=>{y.key==="Escape"&&(y.preventDefault(),i&&f())},p=()=>{i&&f()};return t.$$set=y=>{"class"in y&&n(0,r=y.class),"canSelfClose"in y&&n(1,i=y.canSelfClose),"$$scope"in y&&n(6,o=y.$$scope)},[r,i,f,a,c,d,o,l,b,g,p]}class bt extends me{constructor(e){super(),he(this,e,ss,ns,_e,{class:0,canSelfClose:1,open:5,close:2})}get open(){return this.$$.ctx[5]}get close(){return this.$$.ctx[2]}}function ls(t){let e,n,l,o,r,i,a;return{c(){e=m("p"),e.textContent=`${atob("Qm9sdCBpcyBhbiB1bm9mZmljaWFsIHRoaXJkLXBhcnR5IGxhdW5jaGVyLiBJdCdzIGZyZWUgYW5kIG9wZW4tc291cmNlIHNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIEFHUEwgMy4wLg==")}`,n=P(),l=m("p"),l.textContent=`${atob("SmFnZXggaXMgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgcHJvYmxlbXMgb3IgZGFtYWdlIGNhdXNlZCBieSB1c2luZyB0aGlzIHByb2R1Y3Qu")}`,o=P(),r=m("button"),r.textContent="I Understand",_(e,"class","p-2"),_(l,"class","p-2"),_(r,"class","m-5 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75")},m(c,u){v(c,e,u),v(c,n,u),v(c,l,u),v(c,o,u),v(c,r,u),i||(a=N(r,"click",t[2]),i=!0)},p:B,d(c){c&&(w(e),w(n),w(l),w(o),w(r)),i=!1,a()}}}function os(t){let e,n,l={canSelfClose:!1,class:"w-1/2 text-center",$$slots:{default:[ls]},$$scope:{ctx:t}};return e=new bt({props:l}),t[3](e),{c(){de(e.$$.fragment)},m(o,r){ie(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){W(e.$$.fragment,o),n=!1},d(o){t[3](null),ae(e,o)}}}function rs(t,e,n){let l;const{sessions:o}=M;ke(t,o,c=>n(4,l=c));let r;wn(()=>{l.length==0&&r.open()});const i=()=>r.close();function a(c){Pe[c?"unshift":"push"](()=>{r=c,n(0,r)})}return[r,o,i,a]}class is extends me{constructor(e){super(),he(this,e,rs,os,_e,{})}}const ye={method:"GET"},as={"Content-Type":"application/octet-stream"};let Lt=null;const cs=2*60*1e3,us="https://api.github.com/repos/runelite/launcher/releases",ds="https://cdn.hdos.dev/client/getdown.txt",kt=t=>t?{method:"POST",headers:as,body:t}:ye,Oe=(t,e,n,l)=>{fetch(t,e).then(o=>{o.ok?n(o):(o.text().then(r=>A.error(`request failed: ${o.url}: ${o.status}: ${r}`)),l())}).catch(()=>{A.error(`request failed: ${t}: connection error`),l()})},Nt=async(t,e,n,l,o)=>{const r=b=>{A.error(`error downloading: ${b}`),l()};A.info(e);const i=b=>A.updateLogAtIndex(0,`${e} ${b}`);if(!t.body)return r("no HTTP response body");const a=t.body.getReader();if(!a)return r("invalid HTTP response");const c=t.headers.get("content-length")??o;if(!c)return r("cannot estimate download size");const u=parseInt(c);if(!c)return r("cannot estimate download size");const d=new Uint8Array(u);let f=0;for(;;){const b=await a.read();if(b.done)break;const g=b.value;d.set(g,f),f+=g.length;const p=(Math.round(1e3*f/u)/10).toFixed(1);i(p)}i("done"),n(d)};function fs(t,e,n){ne.saveConfig();const l=(a,c)=>{const u={},d=ve(M.config);a&&(u.hash=a),t&&(u.jx_session_id=t),e&&(u.jx_character_id=e),n&&(u.jx_display_name=n),d.rs_launch_command&&d.rs_launch_command.length>0&&(u.launch_command=d.rs_launch_command),d.rs_plugin_loader&&(u.plugin_loader="1"),d.use_custom_rs_config_uri&&d.rs_config_uri?u.config_uri=d.rs_config_uri:u.config_uri=R.env.default_config_uri,fetch("/launch-rs3-deb?".concat(new URLSearchParams(u).toString()),kt(c)).then(f=>{f.text().then(b=>A.info(`game launch status: '${b.trim()}'`)),f.ok&&(a&&(R.rs3debInstalledHash=a),d.close_after_launch&&!d.rs_plugin_loader&&fetch("/close"))})},o=()=>{R.rs3debInstalledHash&&l()},r=R.env.content_url,i=r.concat("dists/trusty/non-free/binary-amd64/Packages");Oe(i,ye,a=>a.text().then(c=>{const u=Object.fromEntries(c.split(` -`).map(d=>d.split(": ")));if(!u.Filename||!u.Size||!u.SHA256){A.error(`could not parse package data from URL: ${i}`),o();return}if(u.SHA256===R.rs3debInstalledHash){A.info("game client is up-to-date"),l();return}Oe(r.concat(u.Filename),ye,d=>Nt(d,"downloading RS3 client...",f=>l(u.SHA256,f),l,u.Size),o)}),o)}function $n(t,e,n,l){ne.saveConfig();const o=l?"/launch-runelite-jar-configure?":"/launch-runelite-jar?",r=ve(M.config),i=(c,u,d)=>{const f={};c&&(f.id=c),d&&(f.jar_path=d),t&&(f.jx_session_id=t),e&&(f.jx_character_id=e),n&&(f.jx_display_name=n),r.runelite_launch_command&&r.runelite_launch_command!==""&&(f.launch_command=r.runelite_launch_command),r.flatpak_rich_presence&&(f.flatpak_rich_presence=""),fetch(o.concat(new URLSearchParams(f).toString()),kt(u)).then(b=>{b.text().then(g=>A.info(`game launch status: '${g.trim()}'`)),b.ok&&(c&&(R.runeLiteInstalledId=c),r.close_after_launch&&!l&&fetch("/close"))})},a=()=>{R.runeLiteInstalledId&&i()};if(r.runelite_use_custom_jar){i(null,null,r.runelite_custom_jar);return}if(R.runeLiteInstalledId!==null&&Lt!==null&&Lt+cs>Date.now()){i();return}Oe(us,ye,c=>c.json().then(u=>{Lt=Date.now();const d=u.map(f=>f.assets).flat().find(f=>f.name.toLowerCase()=="runelite.jar");if(!d){A.info("note: no runelite releases found, so skipping update check"),a();return}if(d.id==R.runeLiteInstalledId){A.info("game is up-to-date"),i();return}Oe(d.browser_download_url,ye,f=>Nt(f,"downloading RuneLite launcher...",b=>i(d.id,b),a,d.size),a)}),a)}function ps(t,e,n){ne.saveConfig();const l=ve(M.config),o=(i,a)=>{const c={};i&&(c.version=i),t&&(c.jx_session_id=t),e&&(c.jx_character_id=e),n&&(c.jx_display_name=n),l.hdos_launch_command&&l.hdos_launch_command.length>0&&(c.launch_command=l.hdos_launch_command),fetch("/launch-hdos-jar?".concat(new URLSearchParams(c).toString()),kt(a)).then(u=>{u.text().then(d=>A.info(`game launch status: '${d.trim()}'`)),u.ok&&(i&&(R.hdosInstalledVersion=i),l.close_after_launch&&fetch("/close"))})},r=()=>{R.hdosInstalledVersion&&o()};Oe(ds,ye,i=>i.text().then(a=>{const c=a.match(/^launcher\.version *= *(.*?)$/m);if(!c||c.length<2){A.error("couldn't parse latest launcher version"),r();return}const u=c[1];if(u===R.hdosInstalledVersion){A.info("game is up-to-date"),o();return}Oe(`https://cdn.hdos.dev/launcher/v${u}/hdos-launcher.jar`,ye,d=>Nt(d,"downloading HDOS launcher...",f=>o(u,f),r),r)}),r)}function Pt(){fetch("/list-game-clients",ye).then(t=>{t.ok||t.text().then(e=>A.error(`failed to get client list: ${t.status}: ${e}`))})}function Bt(t,e,n,l,o){ne.saveConfig();const r=`${e?"osrs":R.env.provider}-${t?"win":"mac"}`,i=e?"osrs":"rs3",a=t?"exe":"app",c=`${i}${a}InstalledHash`,u=(f,b)=>{const g={},p=ve(M.config),y=e?p.osrs_launch_command:p.rs_launch_command;f&&(g.hash=f),n&&(g.jx_session_id=n),l&&(g.jx_character_id=l),o&&(g.jx_display_name=o),y&&y!==""&&(g.launch_command=y),e||(p.rs_plugin_loader&&(g.plugin_loader="1"),g.config_uri=p.use_custom_rs_config_uri&&p.rs_config_uri?p.rs_config_uri:R.env.default_config_uri);const h=L=>fetch(`/launch-${i}-${a}?${new URLSearchParams(g).toString()}`,L).then($=>{$.text().then(x=>A.info(`game launch status: '${x.trim()}'`)),$.ok&&(f&&(R[c]=f),p.close_after_launch&&(e||!p.rs_plugin_loader)&&fetch("/close"))});b?b.then(L=>h(kt(L))):h(ye)},d=()=>{R.hdosInstalledVersion&&u()};Oe(`${R.env.direct6_url}${r}/${r}.json`,ye,f=>f.text().then(b=>{const g=JSON.parse(atob(b.split(".")[1])).environments.production;if(R[c]===g.id){A.info("game client is up-to-date"),u();return}A.info(`downloading client version ${g.version}...`),Oe(`${R.env.direct6_url}${r}/catalog/${g.id}/catalog.json`,ye,p=>p.text().then(y=>{const h=JSON.parse(atob(y.split(".")[1])),L=$=>$.replace(/^http:\/\/(.{5})-akamai\.aws\.snxd\.com\//i,"https://$1.akamaized.net/").replace(/^http:/i,"https:");Oe(L(h.metafile),ye,$=>$.text().then(x=>{const I=JSON.parse(atob(x.split(".")[1])),O=I.pieces.digests.map(C=>{const T=atob(C).split("").map(D=>D.charCodeAt(0).toString(16).padStart(2,"0")).join(""),j=L(h.config.remote.baseUrl).concat(h.config.remote.pieceFormat.replace("{SubString:0,2,{TargetDigest}}",T.substring(0,2)).replace("{TargetDigest}",T));return fetch(j,ye).then(D=>D.blob().then(le=>{const ee=new DecompressionStream("gzip");return new Response(le.slice(6).stream().pipeThrough(ee)).blob()}))});let U=0,S=null;for(let C=0;C{const T=new Blob(C).slice(U,U+S);u(I.id,T.arrayBuffer())})}),d)}),d)}),d)}function Ft(t,e,n){const l=t.slice();return l[48]=e[n],l}function qt(t,e,n){const l=t.slice();return l[51]=e[n],l}function zt(t,e,n){const l=t.slice();return l[54]=e[n][0],l[47]=e[n][1],l}function Wt(t,e,n){const l=t.slice();return l[48]=e[n],l}function _s(t){let e,n=ge(t[5]),l=[];for(let o=0;ot[25].call(e))},m(f,b){v(f,e,b);for(let g=0;gl.parentNode,r.anchor=l},p(i,a){t=i,r.ctx=t,a[0]&16&&o!==(o=t[4])&&dt(o,r)||vn(r,t,a)},d(i){i&&(w(e),w(n),w(l)),r.block.d(i),r.token=null,r=null}}}function ks(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y,h,L,$=t[12]&&Zt(t);function x(U,S){return S[0]&1&&(p=null),p==null&&(p=Object.entries(U[0].pluginConfig).length!==0),p?Is:Rs}let I=x(t,[-1,-1]),O=I(t);return{c(){e=m("span"),n=m("button"),l=m("img"),i=P(),a=m("button"),c=m("img"),d=P(),f=m("br"),b=P(),$&&$.c(),g=P(),O.c(),y=Ie(),Ut(l.src,o="svgs/download-solid.svg")||_(l,"src",o),_(l,"alt","Install plugin from updater URL"),_(n,"class","mx-1 aspect-square w-9 select-none 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[10],_(n,"title","Install plugin from updater URL"),Ut(c.src,u="svgs/folder-solid.svg")||_(c,"src",u),_(c,"alt","Install plugin from local directory"),_(a,"class","aspect-square w-9 select-none rounded-md bg-blue-500 p-1 text-[20px] font-bold duration-200 enabled:hover:opacity-75 disabled:bg-gray-500"),a.disabled=t[10],_(a,"title","Install plugin from local directory"),_(e,"class","align-middle")},m(U,S){v(U,e,S),k(e,n),k(n,l),k(e,i),k(e,a),k(a,c),v(U,d,S),v(U,f,S),v(U,b,S),$&&$.m(U,S),v(U,g,S),O.m(U,S),v(U,y,S),h||(L=[N(n,"click",t[27]),N(a,"click",t[17])],h=!0)},p(U,S){S[0]&1025&&r!==(r=!U[0].hasLibArchive||U[10])&&(n.disabled=r),S[0]&1024&&(a.disabled=U[10]),U[12]?$?$.p(U,S):($=Zt(U),$.c(),$.m(g.parentNode,g)):$&&($.d(1),$=null),I===(I=x(U,S))&&O?O.p(U,S):(O.d(1),O=I(U),O&&(O.c(),O.m(y.parentNode,y)))},d(U){U&&(w(e),w(d),w(f),w(b),w(g),w(y)),$&&$.d(U),O.d(U),h=!1,re(L)}}}function ws(t){let e;return{c(){e=m("p"),e.textContent="error"},m(n,l){v(n,e,l)},p:B,d(n){n&&w(e)}}}function vs(t){let e,n,l,o,r,i,a,c,u,d;function f(h,L){return L[0]&19&&(e=null),L[0]&1&&(n=null),e==null&&(e=!!(h[47]&&h[47].main&&Object.keys(h[0].pluginConfig).includes(h[1]))),e?Ss:(n==null&&(n=Object.entries(h[0].pluginConfig).length===0),n?$s:ys)}let b=f(t,[-1,-1]),g=b(t),p=ge(t[5]),y=[];for(let h=0;h',i=P(),_(r,"class","select-none rounded-sm bg-rose-500 shadow-lg hover:opacity-75")},m(d,f){v(d,e,f),k(e,l),k(e,o),k(e,r),k(e,i),a||(c=N(r,"click",u),a=!0)},p(d,f){t=d,f[0]&33&&n!==(n=(t[0].pluginConfig[t[51].id].name??t[51].id)+"")&&pe(l,n)},d(d){d&&w(e),a=!1,c()}}}function Xt(t){let e,n;function l(i,a){return a[0]&33&&(e=null),e==null&&(e=!!Object.keys(i[0].pluginConfig).includes(i[51].id)),e?Ls:Cs}let o=l(t,[-1,-1]),r=o(t);return{c(){r.c(),n=Ie()},m(i,a){r.m(i,a),v(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&&w(n),r.d(i)}}}function Yt(t){let e,n=t[48].uid===t[2]&&Vt(t);return{c(){n&&n.c(),e=Ie()},m(l,o){n&&n.m(l,o),v(l,e,o)},p(l,o){l[48].uid===l[2]?n?n.p(l,o):(n=Vt(l),n.c(),n.m(e.parentNode,e)):n&&(n.d(1),n=null)},d(l){l&&w(e),n&&n.d(l)}}}function Ps(t){let e;return{c(){e=m("p"),e.textContent="loading..."},m(n,l){v(n,e,l)},p:B,d(n){n&&w(e)}}}function Zt(t){let e,n,l,o,r,i,a,c,u,d,f,b;return{c(){e=m("label"),e.textContent="URL:",n=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"),d=m("br"),_(e,"for","plugin-updater-url-input"),_(l,"rows","1"),_(l,"id","plugin-updater-url-input"),_(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"),_(r,"title","Confirm"),_(r,"class","select-none rounded-sm bg-emerald-500 hover:opacity-75"),_(a,"title","Close URL entry"),_(a,"class","select-none rounded-sm bg-rose-500 hover:opacity-75")},m(g,p){v(g,e,p),v(g,n,p),v(g,l,p),K(l,t[13]),v(g,o,p),v(g,r,p),v(g,i,p),v(g,a,p),v(g,c,p),v(g,u,p),v(g,d,p),f||(b=[N(l,"input",t[28]),N(r,"click",t[29]),N(a,"click",t[30])],f=!0)},p(g,p){p[0]&8192&&K(l,g[13])},d(g){g&&(w(e),w(n),w(l),w(o),w(r),w(i),w(a),w(c),w(u),w(d)),f=!1,re(b)}}}function Rs(t){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(n,l){v(n,e,l)},p:B,d(n){n&&w(e)}}}function Is(t){let e=Object.keys(t[0].pluginConfig).includes(t[1])&&t[4]!==null,n,l=e&&Kt(t);return{c(){l&&l.c(),n=Ie()},m(o,r){l&&l.m(o,r),v(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=Kt(o),l.c(),l.m(n.parentNode,n)):l&&(l.d(1),l=null)},d(o){o&&w(n),l&&l.d(o)}}}function Kt(t){let e,n,l,o,r,i,a,c,u,d,f,b,g={ctx:t,current:null,token:null,hasCatch:!0,pending:Os,then:Hs,catch:Us,value:47};dt(e=t[4],g);let p=t[3].updaterURL&&en(t);return{c(){g.block.c(),n=P(),l=m("button"),l.textContent="Browse data",o=z(` -   - `),r=m("button"),r.textContent="Browse config",i=P(),a=m("br"),c=P(),p&&p.c(),u=P(),d=m("button"),d.textContent="Remove",_(l,"class","mx-auto mb-1 w-[min(144px,_25%)] select-none rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),_(r,"class","mx-auto mb-1 w-[min(144px,_25%)] select-none rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),_(d,"class","m-1 mx-auto w-[min(144px,_25%)] select-none rounded-lg p-2 font-bold text-black duration-200 enabled:bg-rose-500 enabled:hover:opacity-75 disabled:bg-gray-500")},m(y,h){g.block.m(y,g.anchor=h),g.mount=()=>n.parentNode,g.anchor=n,v(y,n,h),v(y,l,h),v(y,o,h),v(y,r,h),v(y,i,h),v(y,a,h),v(y,c,h),p&&p.m(y,h),v(y,u,h),v(y,d,h),f||(b=[N(l,"click",t[31]),N(r,"click",t[32]),N(d,"click",t[34])],f=!0)},p(y,h){t=y,g.ctx=t,h[0]&16&&e!==(e=t[4])&&dt(e,g)||vn(g,t,h),t[3].updaterURL?p?p.p(t,h):(p=en(t),p.c(),p.m(u.parentNode,u)):p&&(p.d(1),p=null)},d(y){y&&(w(n),w(l),w(o),w(r),w(i),w(a),w(c),w(u),w(d)),g.block.d(y),g.token=null,g=null,p&&p.d(y),f=!1,re(b)}}}function Us(t){let e,n,l;return{c(){e=m("p"),e.textContent="error",n=P(),l=m("br")},m(o,r){v(o,e,r),v(o,n,r),v(o,l,r)},p:B,d(o){o&&(w(e),w(n),w(l))}}}function Hs(t){let e,n=(t[47].name??Ze)+"",l,o,r,i,a=(t[47].description??"no description")+"",c,u,d,f,b=t[47].version&&Qt(t);return{c(){e=m("p"),l=z(n),o=P(),b&&b.c(),r=P(),i=m("p"),c=z(a),d=P(),f=m("br"),_(e,"class","pb-4 text-xl font-bold"),_(i,"class",u=t[47].description?null:"italic")},m(g,p){v(g,e,p),k(e,l),k(e,o),b&&b.m(e,null),v(g,r,p),v(g,i,p),k(i,c),v(g,d,p),v(g,f,p)},p(g,p){p[0]&16&&n!==(n=(g[47].name??Ze)+"")&&pe(l,n),g[47].version?b?b.p(g,p):(b=Qt(g),b.c(),b.m(e,null)):b&&(b.d(1),b=null),p[0]&16&&a!==(a=(g[47].description??"no description")+"")&&pe(c,a),p[0]&16&&u!==(u=g[47].description?null:"italic")&&_(i,"class",u)},d(g){g&&(w(e),w(r),w(i),w(d),w(f)),b&&b.d()}}}function Qt(t){let e,n,l,o,r=t[47].version+"",i;return{c(){e=m("br"),n=P(),l=m("span"),o=z("v"),i=z(r),_(l,"class","pb-4 text-xl font-bold italic text-slate-600")},m(a,c){v(a,e,c),v(a,n,c),v(a,l,c),k(l,o),k(l,i)},p(a,c){c[0]&16&&r!==(r=a[47].version+"")&&pe(i,r)},d(a){a&&(w(e),w(n),w(l))}}}function Os(t){let e;return{c(){e=m("p"),e.textContent="loading..."},m(n,l){v(n,e,l)},p:B,d(n){n&&w(e)}}}function en(t){let e,n,l,o;return{c(){e=m("button"),e.textContent="Check updates",n=z(` -  `),_(e,"class","m-1 mx-auto w-[min(144px,_25%)] select-none 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){v(r,e,i),v(r,n,i),l||(o=N(e,"click",t[33]),l=!0)},p:B,d(r){r&&(w(e),w(n)),l=!1,o()}}}function tn(t){let e,n,l,o;function r(c,u){return c[9]?xs:Ts}let i=r(t),a=i(t);return{c(){e=m("br"),n=m("br"),l=P(),a.c(),o=Ie()},m(c,u){v(c,e,u),v(c,n,u),v(c,l,u),a.m(c,u),v(c,o,u)},p(c,u){i===(i=r(c))&&a?a.p(c,u):(a.d(1),a=i(c),a&&(a.c(),a.m(o.parentNode,o)))},d(c){c&&(w(e),w(n),w(l),w(o)),a.d(c)}}}function Ts(t){let e,n,l;return{c(){e=m("p"),n=z("[info] "),l=z(t[8])},m(o,r){v(o,e,r),k(e,n),k(e,l)},p(o,r){r[0]&256&&pe(l,o[8])},d(o){o&&w(e)}}}function xs(t){let e,n,l;return{c(){e=m("p"),n=z("[error] "),l=z(t[8]),_(e,"class","text-red-500")},m(o,r){v(o,e,r),k(e,n),k(e,l)},p(o,r){r[0]&256&&pe(l,o[8])},d(o){o&&w(e)}}}function Ns(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y;function h(S,C){return S[5].length==0?gs:_s}let L=h(t),$=L(t);function x(S,C){return S[0].hasBoltPlugins?ms:hs}let I=x(t),O=I(t),U=t[8]&&tn(t);return{c(){e=m("div"),n=m("button"),l=z("Manage Plugins"),r=P(),i=m("hr"),a=P(),$.c(),c=P(),u=m("div"),O.c(),d=P(),U&&U.c(),f=P(),b=m("div"),g=m("button"),g.textContent="about plugins",_(n,"class",o="mx-auto mb-2 w-[95%] select-none rounded-lg border-2 "+(t[11]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75"),_(i,"class","p-1 dark:border-slate-700"),_(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"),_(u,"class","h-full pt-10"),_(g,"class","m-0 cursor-pointer select-none border-none bg-transparent p-0 text-sm text-gray-500 underline"),_(b,"class","absolute bottom-2 right-4")},m(S,C){v(S,e,C),k(e,n),k(n,l),k(e,r),k(e,i),k(e,a),$.m(e,null),v(S,c,C),v(S,u,C),O.m(u,null),k(u,d),U&&U.m(u,null),v(S,f,C),v(S,b,C),k(b,g),p||(y=[N(n,"click",t[23]),N(g,"click",t[21])],p=!0)},p(S,C){C[0]&2048&&o!==(o="mx-auto mb-2 w-[95%] select-none rounded-lg border-2 "+(S[11]?"border-blue-500 text-black dark:text-white":"border-black bg-blue-500 text-black")+" p-2 font-bold hover:opacity-75")&&_(n,"class",o),L===(L=h(S))&&$?$.p(S,C):($.d(1),$=L(S),$&&($.c(),$.m(e,null))),I===(I=x(S))&&O?O.p(S,C):(O.d(1),O=I(S),O&&(O.c(),O.m(u,d))),S[8]?U?U.p(S,C):(U=tn(S),U.c(),U.m(u,null)):U&&(U.d(1),U=null)},d(S){S&&(w(e),w(c),w(u),w(f),w(b)),$.d(),O.d(),U&&U.d(),p=!1,re(y)}}}function js(t){let e,n,l={class:"h-[90%] w-[90%] text-center",$$slots:{default:[Ns]},$$scope:{ctx:t}};return e=new bt({props:l}),t[37](e),e.$on("close",t[38]),{c(){de(e.$$.fragment)},m(o,r){ie(e,o,r),n=!0},p(o,r){const i={};r[0]&32639|r[1]&268435456&&(i.$$scope={dirty:r,ctx:o}),e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){W(e.$$.fragment,o),n=!1},d(o){t[37](null),ae(e,o)}}}const Fe="bolt.json",Es="main.lua",Ze="(unnamed)",nn="(new character)";function Ms(t,e,n){let l,o,r,i;ke(t,Ot,H=>n(5,i=H));let a,c=null,u=!1;const d=R.platform==="windows"?"\\":"/",f=d.concat(Fe);function b(){n(12,G=!1),a.open()}const g=H=>{console.log(H),n(8,c=H),n(9,u=!1)},p=H=>{console.error(H),n(8,c=H),n(9,u=!0)},y=H=>new Promise((F,X)=>{const be=H.concat(H.endsWith(d)?Fe:f);var Z=new XMLHttpRequest;Z.onreadystatechange=()=>{Z.readyState==4&&(Z.status==200?F(JSON.parse(Z.responseText)):X(Z.responseText))},Z.open("GET","/read-json-file?".concat(new URLSearchParams({path:be}).toString()),!0),Z.send()}),h=H=>fetch("/get-plugindir-json?".concat(new URLSearchParams({id:H}).toString())).then(F=>F.ok?F.json():null),L=H=>{const X=R.pluginConfig[H];if(!X)return null;const be=X.path;return be?y(be):h(H)},$=()=>{const H=Object.keys(R.pluginConfig);let F;do F=crypto.randomUUID();while(H.includes(F));return F},x=(H,F)=>{y(H).then(X=>{n(1,j=$()),n(0,R.pluginConfig[j]={name:X.name??Ze,path:H,version:X.version},R),n(6,M.pluginConfigHasPendingChanges=!0,M)}).catch(X=>p(`config file '${F}' couldn't be fetched, reason: ${X}`))},I=H=>{g("downloading..."),fetch(H).then(async F=>{if(!F.ok){p(`can't install plugin: updater URL returned ${F.status}: ${F.statusText}`);return}const X=await F.json();if(X.url){const be=await fetch(X.url);if(!be.ok){p(`can't install plugin: remote download URL returned ${F.status}: ${F.statusText}`);return}const Z=await be.arrayBuffer();if(X.sha256){const Te=await crypto.subtle.digest("SHA-256",Z),wt=Array.from(new Uint8Array(Te)).map(vt=>vt.toString(16).padStart(2,"0")).join("");if(X.sha256!==wt){p("can't install plugin: incorrect file hash");return}}const we=$();if(!(await fetch("/install-plugin?".concat(new URLSearchParams({id:we}).toString()),{method:"POST",body:Z})).ok){p(`can't install plugin: ${F.statusText}`);return}const je=await h(we);je?(n(1,j=we),n(0,R.pluginConfig[j]={name:je.name??Ze,version:je.version,updaterURL:H,sha256:X.sha256},R),n(6,M.pluginConfigHasPendingChanges=!0,M),g(`plugin '${je.name}' installed`)):p(`can't install plugin: ${Fe} not found`)}}).catch(()=>{p("can't install plugin: unhandled exception")})};let O=!1;const U=()=>{n(10,O=!0);var H=new XMLHttpRequest;H.onreadystatechange=()=>{if(H.readyState==4&&(n(10,O=!1),H.status==200))if(H.responseText.endsWith(f)){const F=H.responseText.substring(0,H.responseText.length-Fe.length);x(F,H.responseText)}else p(`selection '${H.responseText}' is not named ${Fe}; ignored`)},H.open("GET","/json-file-picker",!0),H.send()};Pt();const S=(H,F,X,be)=>{let Z=null;if(X){const Ue=R.platform==="windows"?X.replaceAll("\\","/"):X;Z=Ue.endsWith(d)?Ue:Ue.concat("/")}var we=new XMLHttpRequest;we.onreadystatechange=()=>{we.readyState==4&&(Pt(),A.info(`Start-plugin status: ${we.statusText.trim()}`))},Z?we.open("GET","/start-plugin?".concat(new URLSearchParams({client:H.toString(),id:F,main:be,path:Z}).toString()),!0):we.open("GET","/start-plugin?".concat(new URLSearchParams({client:H.toString(),id:F,main:be}).toString()),!0),we.send()},C=(H,F)=>{var X=new XMLHttpRequest;X.onreadystatechange=()=>{X.readyState==4&&(Pt(),A.info(`Stop-plugin status: ${X.statusText.trim()}`))},X.open("GET","/stop-plugin?".concat(new URLSearchParams({client:H.toString(),uid:F.toString()}).toString()),!0),X.send()},T=(H,F)=>{const X=H.updaterURL;fetch(X).then(async be=>{if(!be.ok){p(`can't update plugin: updater URL returned ${be.status}: ${be.statusText}`);return}let Z=await be.json();if(!Z.url){g(`can't update plugin '${H.name}': no remote download URL is configured`);return}let we=!1;if(Z.sha256?H.sha256!==Z.sha256&&(we=!0):Z.version&&H.version!==Z.version&&(we=!0),we){const Ue=await fetch(Z.url);if(!Ue.ok){p(`can't update plugin: remote download URL returned ${Ue.status}: ${Ue.statusText}`);return}const je=await Ue.arrayBuffer();if(Z.sha256){const wt=await crypto.subtle.digest("SHA-256",je),vt=Array.from(new Uint8Array(wt)).map(Ln=>Ln.toString(16).padStart(2,"0")).join("");if(Z.sha256!==vt){p(`can't update plugin '${H.name}': incorrect file hash`);return}}fetch("/install-plugin?".concat(new URLSearchParams({id:F}).toString()),{method:"POST",body:je});const Te=await h(F);Te?(Z.sha256&&(H.sha256=Z.sha256),Te.name&&(H.name=Te.name),Te.version&&(H.version=Te.version),n(6,M.pluginConfigHasPendingChanges=!0,M),g(`plugin '${Te.name}' updated`)):p(`can't update plugin '${H.name}': ${Fe} not found`)}else g(`plugin '${H.name}' is already up-to-date`)})};var j;const D=()=>fetch("/open-external-url",{method:"POST",body:"https://bolt.adamcake.com/plugins"});var le=!1,ee;let G=!1,Q;const V=()=>n(11,le=!1),se=H=>{n(2,ee=H.uid),n(11,le=!0),n(12,G=!1),n(13,Q=""),n(8,c=null)};function E(){j=Tt(this),n(1,j),n(0,R)}const te=()=>n(8,c=null),Ce=()=>{n(12,G=!G),n(13,Q="")};function fe(){Q=this.value,n(13,Q)}const Ne=()=>{I(Q),n(12,G=!1),n(13,Q="")},$e=()=>{n(12,G=!1),n(13,Q="")},Ke=()=>{const H=R.pluginConfig[j].path;fetch(H?"/browse-directory?".concat(new URLSearchParams({path:H}).toString()):"/browse-plugin-data?".concat(new URLSearchParams({id:j}).toString()))},lt=()=>fetch("/browse-plugin-config?".concat(new URLSearchParams({id:j}).toString())),J=()=>T(l,j),Y=()=>{n(4,r=null),n(6,M.pluginConfigHasPendingChanges=!0,M);let H=R.pluginConfig;const F=H[j];F&&(fetch("/uninstall-plugin?".concat(new URLSearchParams({id:j,delete_data_dir:typeof F.path=="string"?"0":"1"}).toString())),g(`plugin '${F.name}' uninstalled`),delete H[j],n(0,R.pluginConfig=H,R))},ot=H=>S(ee,j,o??null,H.main??Es),rt=H=>{C(ee,H.uid)};function Sn(H){Pe[H?"unshift":"push"](()=>{a=H,n(7,a)})}const Cn=()=>ne.savePluginConfig(!0);return t.$$.update=()=>{t.$$.dirty[0]&36&&(i.some(H=>H.uid===ee)||n(11,le=!1)),t.$$.dirty[0]&3&&n(3,l=R.pluginConfig[j]),t.$$.dirty[0]&2&&n(4,r=L(j)),t.$$.dirty[0]&24&&r&&r.then(H=>{let F=!1;H.name!==l.name&&(n(3,l.name=H.name,l),F=!0),H.version!==l.version&&(n(3,l.version=H.version,l),F=!0),F&&(n(3,l),n(0,R),n(1,j),n(4,r),n(6,M.pluginConfigHasPendingChanges=!0,M))}),t.$$.dirty[0]&8&&n(14,o=l?l.path:null)},[R,j,ee,l,r,i,M,a,c,u,O,le,G,Q,o,g,I,U,S,C,T,D,b,V,se,E,te,Ce,fe,Ne,$e,Ke,lt,J,Y,ot,rt,Sn,Cn]}class As extends me{constructor(e){super(),he(this,e,Ms,js,_e,{open:22},null,[-1,-1])}get open(){return this.$$.ctx[22]}}function Ds(t){let e,n,l,o,r,i,a,c,u,d,f,b,g;return{c(){e=m("div"),n=m("h2"),n.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",d=P(),f=m("button"),f.textContent="Yes",_(n,"class","text-3xl font-extrabold"),_(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"),_(f,"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"),_(c,"class","align-bottom")},m(p,y){v(p,e,y),k(e,n),k(e,l),k(e,o),k(e,r),k(e,i),k(e,a),k(e,c),k(c,u),k(c,d),k(c,f),b||(g=[N(u,"click",t[5]),N(f,"click",t[6])],b=!0)},p:B,d(p){p&&w(e),b=!1,re(g)}}}function Bs(t){let e,n,l={class:"h-fit w-3/5 px-5 py-3 text-center",$$slots:{default:[Ds]},$$scope:{ctx:t}};return e=new bt({props:l}),t[7](e),{c(){de(e.$$.fragment)},m(o,r){ie(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){W(e.$$.fragment,o),n=!1},d(o){t[7](null),ae(e,o)}}}function Fs(t,e,n){let l,o,r,i;function a(f,b,g){n(3,i=f),n(1,o=b),n(2,r=g),l.open()}const c=()=>{l.close()},u=()=>{i(o,r),l.close()};function d(f){Pe[f?"unshift":"push"](()=>{l=f,n(0,l)})}return[l,o,r,i,a,c,u,d]}class qs extends me{constructor(e){super(),he(this,e,Fs,Bs,_e,{open:4})}get open(){return this.$$.ctx[4]}}function sn(t,e,n){const l=t.slice();return l[20]=e[n],l}function ln(t,e,n){const l=t.slice();return l[23]=e[n],l}function zs(t){let e,n,l={};return e=new As({props:l}),t[16](e),{c(){de(e.$$.fragment)},m(o,r){ie(e,o,r),n=!0},p(o,r){const i={};e.$set(i)},i(o){n||(q(e.$$.fragment,o),n=!0)},o(o){W(e.$$.fragment,o),n=!1},d(o){t[16](null),ae(e,o)}}}function on(t){let e,n;return{c(){e=m("div"),n=z(t[7]),_(e,"class","absolute left-[2%] w-[96%] rounded-lg bg-blue-400 px-2 text-black")},m(l,o){v(l,e,o),k(e,n)},p(l,o){o&128&&pe(n,l[7])},d(l){l&&w(e)}}}function Ws(t){let e,n,l;return{c(){e=m("button"),e.textContent="Plugin menu",e.disabled=!R.hasBoltPlugins,_(e,"title",R.hasBoltPlugins?null:"This feature is disabled"),_(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){v(o,e,r),n||(l=N(e,"click",t[19]),n=!0)},p:B,d(o){o&&w(e),n=!1,l()}}}function Js(t){let e,n,l,o,r,i,a=ge(jt[t[1].selected.game]),c=[];for(let u=0;ut[18].call(o)),_(e,"class","flex flex-col")},m(u,d){v(u,e,d),k(e,n),k(e,l),k(e,o);for(let f=0;fn(1,i=S)),ke(t,g,S=>n(8,u=S));let p=Me(null);ke(t,p,S=>n(7,c=S));let y=Me(!0);ke(t,y,S=>n(6,a=S));function h(S,C){if(!l)return A.warn("Please log in or select a user to play.");if(!o)return A.warn("Please select a character from the select menu.");const T=ne.findSession(i.selected.user_id);if(!T)return A.warn("Unable to launch game, session was not found.");const{session_id:j}=T,D=ne.findAccount(T.accounts,o);if(!D)return A.warn("Unable to launch game, account was not found.");const{accountId:le,displayName:ee}=D,G=R.platform===It.Windows,Q=R.platform===It.Linux;switch(S){case ce.osrs:switch(C){case Ve.official:Bt(G||Q,!0,j,le,ee);break;case Ve.runelite:$n(j,le,ee,!1);break;case Ve.hdos:ps(j,le,ee);break}break;case ce.rs3:Q?fs(j,le,ee):Bt(G,!1,j,le,ee);break}}function L(S){const C=S.target.value;if(!l)return;const T=i.userDetails[l];T?(T.account_id=C,Re(b,i.userDetails[l]=T,i)):Re(b,i.userDetails[l]={account_id:C},i)}function $(S){Pe[S?"unshift":"push"](()=>{d=S,n(2,d)})}function x(S){Pe[S?"unshift":"push"](()=>{f=S,n(3,f)})}const I=()=>{a?h(i.selected.game,i.selected.client):d.open(h,i.selected.game,i.selected.client)};function O(){i.selected.client=Tt(this),b.set(i)}const U=()=>{f.open()};return t.$$.update=()=>{var S,C;if(t.$$.dirty&2&&n(14,l=i.selected.user_id),t.$$.dirty&16386&&n(4,o=(S=i.userDetails[l??""])==null?void 0:S.account_id),t.$$.dirty&2&&n(5,r=((C=ne.findSession(i.selected.user_id))==null?void 0:C.accounts)??[]),t.$$.dirty&2)if(i.check_announcements){const T=i.selected.game==ce.osrs?"osrs":R.env.provider,j=`${R.env.psa_url}${T}/${T}.json`;fetch(j,{method:"GET",cache:"no-store"}).then(D=>D.json()).then(D=>{Re(p,c=D.psaEnabled&&D.psaMessage?D.psaMessage:null,c),Re(y,a=!(D.playDisabled??!1),a)})}else Re(p,c=null,c),Re(y,a=!0,a)},[h,i,d,f,o,r,a,c,u,b,g,p,y,L,l,$,x,I,O,U]}class Zs extends me{constructor(e){super(),he(this,e,Ys,Xs,_e,{launch:0})}get launch(){return this.$$.ctx[0]}}function un(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 dn(t){var c;let e,n=((c=t[1])==null?void 0:c.toLocaleTimeString())+"",l,o,r=t[3]+"",i,a;return{c(){e=m("li"),l=z(n),o=z(` - - `),i=z(r),a=P(),ue(e,"text-rose-500",t[2]===et.error),ue(e,"text-orange-700",t[2]===et.warn)},m(u,d){v(u,e,d),k(e,l),k(e,o),k(e,i),k(e,a)},p(u,d){var f;d&1&&n!==(n=((f=u[1])==null?void 0:f.toLocaleTimeString())+"")&&pe(l,n),d&1&&r!==(r=u[3]+"")&&pe(i,r),d&1&&ue(e,"text-rose-500",u[2]===et.error),d&1&&ue(e,"text-orange-700",u[2]===et.warn)},d(u){u&&w(e)}}}function Ks(t){let e,n,l,o,r=ge(t[0]),i=[];for(let a=0;a',l=P(),o=m("ol");for(let a=0;a{"logs"in o&&n(0,l=o.logs)},[l]}class el extends me{constructor(e){super(),he(this,e,Qs,Ks,_e,{logs:0})}}function fn(t,e,n){const l=t.slice();return l[7]=e[n],l}function pn(t,e){let n,l=e[7].user.displayName+"",o,r;return{key:t,first:null,c(){n=m("option"),o=z(l),n.__value=r=e[7].user.userId,K(n,n.__value),_(n,"class","dark:bg-slate-900"),this.first=n},m(i,a){v(i,n,a),k(n,o)},p(i,a){e=i,a&2&&l!==(l=e[7].user.displayName+"")&&pe(o,l),a&2&&r!==(r=e[7].user.userId)&&(n.__value=r,K(n,n.__value))},d(i){i&&w(n)}}}function tl(t){let e,n,l=[],o=new Map,r,i,a,c,u,d,f,b,g,p=ge(t[1]);const y=h=>h[7].user.userId;for(let h=0;ht[4].call(e)),_(a,"class","mx-auto mr-2 rounded-lg bg-blue-500 p-2 font-bold text-black duration-200 hover:opacity-75"),_(u,"class","mx-auto rounded-lg border-2 border-blue-500 p-2 font-bold duration-200 hover:opacity-75"),u.disabled=f=!t[0].selected.user_id,_(i,"class","mt-5 flex")},m(h,L){v(h,e,L),k(e,n);for(let $=0;$n(1,o=d)),ke(t,i,d=>n(0,l=d));function a(){l.selected.user_id=Tt(this),i.set(l)}return[l,o,r,i,a,()=>{const{origin:d,redirect:f,clientid:b}=R.env;Se.openLoginWindow(d,f,b)},async()=>{l.selected.user_id&&(await ne.logout(l.selected.user_id),ne.saveCredentials())}]}class sl extends me{constructor(e){super(),he(this,e,nl,tl,_e,{})}}function ll(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 ol=t=>({}),_n=t=>({});function gn(t){let e,n,l,o,r,i;const a=t[9].content,c=pt(a,t,t[8],_n);return{c(){e=m("div"),c&&c.c(),_(e,"class",n="dropdown-color absolute z-20 rounded-lg border-2 "+t[1]+" "+t[2]+" svelte-xifudk")},m(u,d){v(u,e,d),c&&c.m(e,null),o=!0,r||(i=On(l=ll.call(null,e,{callback:t[3],ignore:[t[5]]})),r=!0)},p(u,d){c&&c.p&&(!o||d&256)&>(c,a,u,u[8],o?_t(a,u[8],d,ol):ht(u[8]),_n),(!o||d&6&&n!==(n="dropdown-color absolute z-20 rounded-lg border-2 "+u[1]+" "+u[2]+" svelte-xifudk"))&&_(e,"class",n),l&&ft(l.update)&&d&32&&l.update.call(null,{callback:u[3],ignore:[u[5]]})},i(u){o||(q(c,u),o=!0)},o(u){W(c,u),o=!1},d(u){u&&w(e),c&&c.d(u),r=!1,i()}}}function rl(t){let e,n,l,o,r,i,a;const c=t[9].default,u=pt(c,t,t[8],null);let d=t[4]&&gn(t);return{c(){e=m("div"),n=m("button"),u&&u.c(),l=P(),d&&d.c(),_(e,"class",o="relative h-fit w-fit "+t[0]+" svelte-xifudk")},m(f,b){v(f,e,b),k(e,n),u&&u.m(n,null),t[10](n),k(e,l),d&&d.m(e,null),r=!0,i||(a=N(n,"click",t[6]),i=!0)},p(f,[b]){u&&u.p&&(!r||b&256)&>(u,c,f,f[8],r?_t(c,f[8],b,null):ht(f[8]),null),f[4]?d?(d.p(f,b),b&16&&q(d,1)):(d=gn(f),d.c(),q(d,1),d.m(e,null)):d&&(nt(),W(d,1,1,()=>{d=null}),st()),(!r||b&1&&o!==(o="relative h-fit w-fit "+f[0]+" svelte-xifudk"))&&_(e,"class",o)},i(f){r||(q(u,f),q(d),r=!0)},o(f){W(u,f),W(d),r=!1},d(f){f&&w(e),u&&u.d(f),t[10](null),d&&d.d(),i=!1,a()}}}function il(t,e,n){let{$$slots:l={},$$scope:o}=e,{class:r=""}=e,{position:i="bottom"}=e,{align:a="start"}=e,c=!1,u;function d(){n(4,c=!0)}function f(){n(4,c=!1)}function b(){c?f():d()}function g(p){Pe[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,f,c,u,b,d,o,l,g]}class al extends me{constructor(e){super(),he(this,e,il,rl,_e,{class:0,position:1,align:2,open:7,close:3})}get open(){return this.$$.ctx[7]}get close(){return this.$$.ctx[3]}}function cl(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y,h,L,$;return{c(){e=m("button"),e.innerHTML=`
      Browse app data - Browse App Data
      `,n=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:",d=P(),f=m("input"),b=P(),g=m("div"),p=m("label"),p.textContent="Discard expired login sessions:",y=P(),h=m("input"),_(e,"id","data_dir_button"),_(e,"class","p-2 hover:opacity-75"),_(o,"for","check_announcements"),_(i,"id","check_announcements"),_(i,"type","checkbox"),_(i,"class","ml-2"),_(l,"class","mx-auto p-2"),_(l,"title",ul),_(u,"for","close_after_launch"),_(f,"id","close_after_launch"),_(f,"type","checkbox"),_(f,"class","ml-2"),_(c,"class","mx-auto p-2"),_(c,"title",dl),_(p,"for","discard_expired_logins"),_(h,"id","discard_expired_logins"),_(h,"type","checkbox"),_(h,"class","ml-2"),_(g,"class","mx-auto p-2"),_(g,"title",fl)},m(x,I){v(x,e,I),v(x,n,I),v(x,l,I),k(l,o),k(l,r),k(l,i),i.checked=t[0].check_announcements,v(x,a,I),v(x,c,I),k(c,u),k(c,d),k(c,f),f.checked=t[0].close_after_launch,v(x,b,I),v(x,g,I),k(g,p),k(g,y),k(g,h),h.checked=t[0].discard_expired_sessions,L||($=[N(e,"click",t[3]),N(i,"change",t[4]),N(f,"change",t[5]),N(h,"change",t[6])],L=!0)},p(x,[I]){I&1&&(i.checked=x[0].check_announcements),I&1&&(f.checked=x[0].close_after_launch),I&1&&(h.checked=x[0].discard_expired_sessions)},i:B,o:B,d(x){x&&(w(e),w(n),w(l),w(a),w(c),w(b),w(g)),L=!1,re($)}}}const ul="Allow checking for official announcements about game status. These will be displayed above the 'play' button. Disabling will reduce the number of web requests made when opening the launcher.",dl="Close the launcher immediately after launching a game",fl="Discard login sessions if they're no longer valid, prompting the player to sign-in again. If unchecked, the only way to discard a login will be by manually pressing the 'log out' button, even if your login no longer works.";function pl(t,e,n){let l;function o(){var d=new XMLHttpRequest;d.open("GET","/browse-data"),d.onreadystatechange=()=>{d.readyState==4&&A.info(`Browse status: '${d.responseText.trim()}'`)},d.send()}const{config:r}=M;ke(t,r,d=>n(0,l=d));const i=()=>{o()};function a(){l.check_announcements=this.checked,r.set(l)}function c(){l.close_after_launch=this.checked,r.set(l)}function u(){l.discard_expired_sessions=this.checked,r.set(l)}return[l,o,r,i,a,c,u]}class _l extends me{constructor(e){super(),he(this,e,pl,cl,_e,{})}}function gl(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y,h,L,$,x,I,O,U,S,C,T,j,D,le,ee,G,Q,V,se,E,te,Ce,fe,Ne,$e,Ke,lt;return{c(){var J,Y;e=m("button"),n=m("div"),n.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(),d=m("div"),f=m("textarea"),g=P(),p=m("br"),y=P(),h=m("button"),L=z("Select File"),x=P(),I=m("div"),O=m("label"),O.textContent="OSRS launch command:",U=P(),S=m("br"),C=P(),T=m("textarea"),j=P(),D=m("div"),le=m("label"),le.textContent="RuneLite launch command:",ee=P(),G=m("br"),Q=P(),V=m("textarea"),se=P(),E=m("div"),te=m("label"),te.textContent="HDOS launch command:",Ce=P(),fe=m("br"),Ne=P(),$e=m("textarea"),_(n,"class","flex"),e.disabled=l=!((J=t[0])!=null&&J.session_id)||!((Y=t[3])!=null&&Y.accountId),_(e,"class","p-2 pb-5 hover:opacity-75"),_(i,"for","use_custom_jar"),_(c,"id","use_custom_jar"),_(c,"type","checkbox"),_(c,"class","ml-2"),_(r,"class","mx-auto border-t-2 border-slate-300 p-2 pt-5 dark:border-slate-800"),_(f,"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"),f.disabled=b=!t[1].runelite_use_custom_jar,_(h,"class","mt-1 rounded-lg border-2 border-blue-500 p-1 duration-200 enabled:hover:opacity-75"),h.disabled=$=t[2]||!t[1].runelite_use_custom_jar,_(d,"class","mx-auto p-2"),ue(d,"opacity-25",!t[1].runelite_use_custom_jar),_(O,"for","osrs_custom_launch_command"),_(T,"id","osrs_custom_launch_command"),_(T,"class","resize-x 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"),_(T,"rows","1"),_(T,"cols","35"),_(T,"placeholder","%command%"),_(I,"class","p-2"),_(le,"for","runelite_custom_launch_command"),_(V,"id","runelite_custom_launch_command"),_(V,"class","resize-x 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"),_(V,"rows","1"),_(V,"cols","35"),_(V,"placeholder","%command%"),_(D,"class","p-2"),_(te,"for","hdos_custom_launch_command"),_($e,"id","hdos_custom_launch_command"),_($e,"class","resize-x 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"),_($e,"rows","1"),_($e,"cols","35"),_($e,"placeholder","%command%"),_(E,"class","p-2")},m(J,Y){v(J,e,Y),k(e,n),v(J,o,Y),v(J,r,Y),k(r,i),k(r,a),k(r,c),c.checked=t[1].runelite_use_custom_jar,v(J,u,Y),v(J,d,Y),k(d,f),K(f,t[1].runelite_custom_jar),k(d,g),k(d,p),k(d,y),k(d,h),k(h,L),v(J,x,Y),v(J,I,Y),k(I,O),k(I,U),k(I,S),k(I,C),k(I,T),K(T,t[1].osrs_launch_command),v(J,j,Y),v(J,D,Y),k(D,le),k(D,ee),k(D,G),k(D,Q),k(D,V),K(V,t[1].runelite_launch_command),v(J,se,Y),v(J,E,Y),k(E,te),k(E,Ce),k(E,fe),k(E,Ne),k(E,$e),K($e,t[1].hdos_launch_command),Ke||(lt=[N(e,"click",t[7]),N(c,"change",t[8]),N(f,"input",t[9]),N(h,"click",t[10]),N(T,"input",t[11]),N(V,"input",t[12]),N($e,"input",t[13])],Ke=!0)},p(J,[Y]){var ot,rt;Y&9&&l!==(l=!((ot=J[0])!=null&&ot.session_id)||!((rt=J[3])!=null&&rt.accountId))&&(e.disabled=l),Y&2&&(c.checked=J[1].runelite_use_custom_jar),Y&2&&b!==(b=!J[1].runelite_use_custom_jar)&&(f.disabled=b),Y&2&&K(f,J[1].runelite_custom_jar),Y&6&&$!==($=J[2]||!J[1].runelite_use_custom_jar)&&(h.disabled=$),Y&2&&ue(d,"opacity-25",!J[1].runelite_use_custom_jar),Y&2&&K(T,J[1].osrs_launch_command),Y&2&&K(V,J[1].runelite_launch_command),Y&2&&K($e,J[1].hdos_launch_command)},i:B,o:B,d(J){J&&(w(e),w(o),w(r),w(u),w(d),w(x),w(I),w(j),w(D),w(se),w(E)),Ke=!1,re(lt)}}}function hl(t,e,n){let l,o,r;const{config:i}=M;ke(t,i,L=>n(1,r=L));let a=!1;async function c(){n(2,a=!0),Re(i,r.runelite_custom_jar=await ne.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)||$n(l.session_id,o.accountId,o.displayName,!0)}const d=()=>u();function f(){r.runelite_use_custom_jar=this.checked,i.set(r)}function b(){r.runelite_custom_jar=this.value,i.set(r)}const g=()=>{c()};function p(){r.osrs_launch_command=this.value,i.set(r)}function y(){r.runelite_launch_command=this.value,i.set(r)}function h(){r.hdos_launch_command=this.value,i.set(r)}return t.$$.update=()=>{var L;t.$$.dirty&2&&n(0,l=ne.findSession(r.selected.user_id)),t.$$.dirty&3&&n(3,o=ne.findAccount((l==null?void 0:l.accounts)??[],(L=r.userDetails[r.selected.user_id??""])==null?void 0:L.account_id))},[l,r,a,o,i,c,u,d,f,b,g,p,y,h]}class ml extends me{constructor(e){super(),he(this,e,hl,gl,_e,{})}}function bl(t){let e,n,l,o,r,i;return{c(){e=m("div"),n=m("label"),n.textContent="Enable Bolt plugin loader:",l=P(),o=m("input"),_(n,"for","enable_plugins"),_(o,"type","checkbox"),_(o,"name","enable_plugins"),_(o,"id","enable_plugins"),_(o,"class","ml-2"),_(e,"class","mx-auto p-2")},m(a,c){v(a,e,c),k(e,n),k(e,l),k(e,o),o.checked=t[0].rs_plugin_loader,r||(i=N(o,"change",t[2]),r=!0)},p(a,c){c&1&&(o.checked=a[0].rs_plugin_loader)},d(a){a&&w(e),r=!1,i()}}}function kl(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y,h,L,$,x=R.hasBoltPlugins&&bl(t);return{c(){x&&x.c(),e=P(),n=m("div"),l=m("label"),l.textContent="Use custom config URI:",o=P(),r=m("input"),i=P(),a=m("div"),c=m("textarea"),d=P(),f=m("div"),b=m("label"),b.textContent="Launch command:",g=P(),p=m("br"),y=P(),h=m("textarea"),_(l,"for","use_custom_uri"),_(r,"id","use_custom_uri"),_(r,"type","checkbox"),_(r,"class","ml-2"),_(n,"class","mx-auto p-2"),_(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,_(c,"rows","4"),_(c,"placeholder",R.env.default_config_uri),_(a,"class","p-2"),_(b,"for","rs_custom_launch_command"),_(h,"id","rs_custom_launch_command"),_(h,"class","resize-x 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"),_(h,"rows","1"),_(h,"cols","35"),_(h,"placeholder","%command%"),_(f,"class","p-2")},m(I,O){x&&x.m(I,O),v(I,e,O),v(I,n,O),k(n,l),k(n,o),k(n,r),r.checked=t[0].use_custom_rs_config_uri,v(I,i,O),v(I,a,O),k(a,c),K(c,t[0].rs_config_uri),v(I,d,O),v(I,f,O),k(f,b),k(f,g),k(f,p),k(f,y),k(f,h),K(h,t[0].rs_launch_command),L||($=[N(r,"change",t[3]),N(c,"input",t[4]),N(h,"input",t[5])],L=!0)},p(I,[O]){R.hasBoltPlugins&&x.p(I,O),O&1&&(r.checked=I[0].use_custom_rs_config_uri),O&1&&u!==(u=!I[0].use_custom_rs_config_uri)&&(c.disabled=u),O&1&&K(c,I[0].rs_config_uri),O&1&&K(h,I[0].rs_launch_command)},i:B,o:B,d(I){I&&(w(e),w(n),w(i),w(a),w(d),w(f)),x&&x.d(I),L=!1,re($)}}}function wl(t,e,n){let l;const{config:o}=M;ke(t,o,u=>n(0,l=u));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)}function c(){l.rs_launch_command=this.value,o.set(l)}return[l,o,r,i,a,c]}class vl extends me{constructor(e){super(),he(this,e,wl,kl,_e,{})}}function yl(t){let e,n;return e=new vl({}),{c(){de(e.$$.fragment)},m(l,o){ie(e,l,o),n=!0},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){W(e.$$.fragment,l),n=!1},d(l){ae(e,l)}}}function $l(t){let e,n;return e=new ml({}),{c(){de(e.$$.fragment)},m(l,o){ie(e,l,o),n=!0},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){W(e.$$.fragment,l),n=!1},d(l){ae(e,l)}}}function Sl(t){let e,n;return e=new _l({}),{c(){de(e.$$.fragment)},m(l,o){ie(e,l,o),n=!0},i(l){n||(q(e.$$.fragment,l),n=!0)},o(l){W(e.$$.fragment,l),n=!1},d(l){ae(e,l)}}}function Cl(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y,h,L,$,x,I;const O=[Sl,$l,yl],U=[];function S(C,T){return C[1]==C[2].general?0:C[1]==C[2].osrs?1:C[1]==C[2].rs3?2:-1}return~(h=S(t))&&(L=U[h]=O[h](t)),{c(){e=m("div"),n=m("div"),l=m("button"),o=z("General"),i=P(),a=m("button"),c=z("OSRS"),d=P(),f=m("button"),b=z("RS3"),p=P(),y=m("div"),L&&L.c(),_(l,"class",r=t[1]===t[2].general?qe:ze),_(a,"class",u=t[1]===t[2].osrs?qe:ze),_(f,"class",g=t[1]===t[2].rs3?qe:ze),_(n,"class","flex flex-col items-center gap-2 border-r-2 border-slate-300 pt-10 dark:border-slate-800"),_(y,"class","col-span-3 p-5 pt-10 text-center"),_(e,"class","grid h-full grid-cols-4")},m(C,T){v(C,e,T),k(e,n),k(n,l),k(l,o),k(n,i),k(n,a),k(a,c),k(n,d),k(n,f),k(f,b),k(e,p),k(e,y),~h&&U[h].m(y,null),$=!0,x||(I=[N(l,"click",t[4]),N(a,"click",t[5]),N(f,"click",t[6])],x=!0)},p(C,T){(!$||T&2&&r!==(r=C[1]===C[2].general?qe:ze))&&_(l,"class",r),(!$||T&2&&u!==(u=C[1]===C[2].osrs?qe:ze))&&_(a,"class",u),(!$||T&2&&g!==(g=C[1]===C[2].rs3?qe:ze))&&_(f,"class",g);let j=h;h=S(C),h!==j&&(L&&(nt(),W(U[j],1,1,()=>{U[j]=null}),st()),~h?(L=U[h],L||(L=U[h]=O[h](C),L.c()),q(L,1),L.m(y,null)):L=null)},i(C){$||(q(L),$=!0)},o(C){W(L),$=!1},d(C){C&&w(e),~h&&U[h].d(),x=!1,re(I)}}}function Ll(t){let e,n,l={class:"h-3/4 w-3/4 select-none",$$slots:{default:[Cl]},$$scope:{ctx:t}};return e=new bt({props:l}),t[7](e),{c(){de(e.$$.fragment)},m(o,r){ie(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){W(e.$$.fragment,o),n=!1},d(o){t[7](null),ae(e,o)}}}let qe="border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 w-3/4",ze="border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 w-3/4";function Pl(t,e,n){let l;function o(){l.open()}var r=(f=>(f[f.general=0]="general",f[f.osrs=1]="osrs",f[f.rs3=2]="rs3",f))(r||{});let i=0;const a=()=>{n(1,i=r.general)},c=()=>{n(1,i=r.osrs)},u=()=>{n(1,i=r.rs3)};function d(f){Pe[f?"unshift":"push"](()=>{l=f,n(0,l)})}return[l,i,r,o,a,c,u,d]}class Rl extends me{constructor(e){super(),he(this,e,Pl,Ll,_e,{open:3})}get open(){return this.$$.ctx[3]}}function Il(t){const e=t.slice(),n=ne.findSession(e[1].selected.user_id??"");return e[11]=n,e}function Ul(t){let e,n,l;return{c(){e=m("button"),e.textContent="Login",_(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){v(o,e,r),n||(l=N(e,"click",t[10]),n=!0)},p:B,i:B,o:B,d(o){o&&w(e),n=!1,l()}}}function Hl(t){let e,n;return e=new al({props:{align:"center",$$slots:{content:[Tl],default:[Ol]},$$scope:{ctx:t}}}),{c(){de(e.$$.fragment)},m(l,o){ie(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){W(e.$$.fragment,l),n=!1},d(l){ae(e,l)}}}function Ol(t){var o;let e,n=(((o=t[11])==null?void 0:o.user.displayName)??"No user selected")+"",l;return{c(){e=m("button"),l=z(n),_(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){v(r,e,i),k(e,l)},p(r,i){var a;i&2&&n!==(n=(((a=r[11])==null?void 0:a.user.displayName)??"No user selected")+"")&&pe(l,n)},d(r){r&&w(e)}}}function Tl(t){let e,n,l;return n=new sl({}),{c(){e=m("div"),de(n.$$.fragment),_(e,"slot","content"),_(e,"class","w-40")},m(o,r){v(o,e,r),ie(n,e,null),l=!0},p:B,i(o){l||(q(n.$$.fragment,o),l=!0)},o(o){W(n.$$.fragment,o),l=!1},d(o){o&&w(e),ae(n)}}}function xl(t){let e,n,l,o,r,i,a,c,u,d,f,b,g,p,y,h,L,$,x={};e=new Rl({props:x}),t[5](e);const I=[Hl,Ul],O=[];function U(C,T){return C[2].length>0?0:1}function S(C,T){return T===0?Il(C):C}return p=U(t),y=O[p]=I[p](S(t,p)),{c(){de(e.$$.fragment),n=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"),d=m("button"),d.innerHTML='Change Theme',f=P(),b=m("button"),b.innerHTML='Settings',g=P(),y.c(),_(r,"class","mx-1 w-20 rounded-lg border-2 border-blue-500 p-2 duration-200 hover:opacity-75"),ue(r,"text-black",t[1].selected.game===ce.rs3),ue(r,"bg-blue-500",t[1].selected.game===ce.rs3),_(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"),ue(a,"text-black",t[1].selected.game===ce.osrs),ue(a,"bg-blue-500",t[1].selected.game===ce.osrs),_(o,"class","m-3 ml-9 font-bold"),_(d,"class","h-10 w-10 rounded-full bg-blue-500 text-center duration-200 hover:rotate-45 hover:opacity-75"),_(b,"class","h-10 w-10 rounded-full bg-blue-500 text-center duration-200 hover:rotate-45 hover:opacity-75"),_(u,"class","m-2 ml-auto flex gap-2"),_(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(C,T){ie(e,C,T),v(C,n,T),v(C,l,T),k(l,o),k(o,r),k(o,i),k(o,a),k(l,c),k(l,u),k(u,d),k(u,f),k(u,b),k(u,g),O[p].m(u,null),h=!0,L||($=[N(r,"click",t[6]),N(a,"click",t[7]),N(d,"click",t[8]),N(b,"click",t[9])],L=!0)},p(C,[T]){const j={};e.$set(j),(!h||T&2)&&ue(r,"text-black",C[1].selected.game===ce.rs3),(!h||T&2)&&ue(r,"bg-blue-500",C[1].selected.game===ce.rs3),(!h||T&2)&&ue(a,"text-black",C[1].selected.game===ce.osrs),(!h||T&2)&&ue(a,"bg-blue-500",C[1].selected.game===ce.osrs);let D=p;p=U(C),p===D?O[p].p(S(C,p),T):(nt(),W(O[D],1,1,()=>{O[D]=null}),st(),y=O[p],y?y.p(S(C,p),T):(y=O[p]=I[p](S(C,p)),y.c()),q(y,1),y.m(u,null))},i(C){h||(q(e.$$.fragment,C),q(y),h=!0)},o(C){W(e.$$.fragment,C),W(y),h=!1},d(C){C&&(w(n),w(l)),t[5](null),ae(e,C),O[p].d(),L=!1,re($)}}}function Nl(t,e,n){let l,o;const{config:r,sessions:i}=M;ke(t,r,p=>n(1,l=p)),ke(t,i,p=>n(2,o=p));let a;function c(p){Pe[p?"unshift":"push"](()=>{a=p,n(0,a)})}return[a,l,o,r,i,c,()=>{Re(r,l.selected.game=ce.rs3,l)},()=>{Re(r,l.selected.game=ce.osrs,l)},()=>Re(r,l.use_dark_theme=!l.use_dark_theme,l),()=>a.open(),()=>{const{origin:p,redirect:y,clientid:h}=R.env;Se.openLoginWindow(p,y,h)}]}class jl extends me{constructor(e){super(),he(this,e,Nl,xl,_e,{})}}function El(t){let e,n,l,o,r,i,a,c,u,d,f,b,g;return e=new is({}),l=new jl({}),c=new Zs({}),b=new el({props:{logs:t[0]}}),{c(){de(e.$$.fragment),n=P(),de(l.$$.fragment),o=P(),r=m("div"),i=m("div"),a=P(),de(c.$$.fragment),u=P(),d=m("div"),f=P(),de(b.$$.fragment),_(r,"class","mt-16 grid h-full grid-flow-col grid-cols-3")},m(p,y){ie(e,p,y),v(p,n,y),ie(l,p,y),v(p,o,y),v(p,r,y),k(r,i),k(r,a),ie(c,r,null),k(r,u),k(r,d),v(p,f,y),ie(b,p,y),g=!0},p(p,y){const h={};y&1&&(h.logs=p[0]),b.$set(h)},i(p){g||(q(e.$$.fragment,p),q(l.$$.fragment,p),q(c.$$.fragment,p),q(b.$$.fragment,p),g=!0)},o(p){W(e.$$.fragment,p),W(l.$$.fragment,p),W(c.$$.fragment,p),W(b.$$.fragment,p),g=!1},d(p){p&&(w(n),w(o),w(r),w(f)),ae(e,p),ae(l,p),ae(c),ae(b,p)}}}function Ml(t){let e,n,l,o;return e=new yn({props:{$$slots:{default:[El]},$$scope:{ctx:t}}}),{c(){de(e.$$.fragment)},m(r,i){ie(e,r,i),n=!0,l||(o=N(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){W(e.$$.fragment,r),n=!1},d(r){ae(e,r),l=!1,o()}}}function Al(t,e,n){let l;const o=A.logs;return ke(t,o,i=>n(0,l=i)),[l,o,()=>{ne.saveConfig(),R.hasBoltPlugins&&ne.savePluginConfig(!0)}]}class Dl extends me{constructor(e){super(),he(this,e,Al,Ml,_e,{})}}const hn={target:document.getElementById("app")};window.opener||window.location.search.includes("&id_token")?new ts(hn):(Bl(),Xn(),Fl(),ql().finally(()=>{M.initialized.set(!0)}),new Dl(hn));function Bl(){const t=new URLSearchParams(window.location.search);R.platform=t.get("platform"),R.isFlathub=t.get("flathub")==="1",R.hasLibArchive=t.get("has_libarchive")==="1",R.rs3debInstalledHash=t.get("rs3_deb_installed_hash"),R.rs3exeInstalledHash=t.get("rs3_exe_installed_hash"),R.rs3appInstalledHash=t.get("rs3_app_installed_hash"),R.osrsexeInstalledHash=t.get("osrs_exe_installed_hash"),R.osrsappInstalledHash=t.get("osrs_app_installed_hash"),R.runeLiteInstalledId=t.get("runelite_installed_id"),R.hdosInstalledVersion=t.get("hdos_installed_version");const e=t.get("plugins");if(R.hasBoltPlugins=e!==null,e!==null)try{R.pluginConfig=JSON.parse(e)}catch{A.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?M.sessions.set(l):(M.sessions.set([]),ne.saveCredentials(),A.warn("Credentials saved on disk are out of date. Please sign in again.")),M.sessions.set(o?l:[])}catch{M.sessions.set([]),ne.saveCredentials(),A.error("Unable to parse saved credentials. Please sign in again.")}}function Fl(){const{origin:t,origin_2fa:e}=R.env,n=[window.location.origin,t,e];let l=null;window.addEventListener("message",async o=>{var r;if(!n.includes(o.origin)){A.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 A.error("auth is null. Please try again.");const i=o.data.sessionId,a=await ne.login(l,i);a.ok?A.info(`Added new user '${a.value.user.displayName}'`):A.error(`Unable to add new user. Please try again. ${a.error}`),ne.saveCredentials(),Se.pendingLoginWindow=null,l=null;break}case"authFailed":{A.error(`Unable to authenticate: ${o.data.reason}`),Se.pendingLoginWindow=null,l=null;break}case"externalUrl":{const i=new XMLHttpRequest;i.onreadystatechange=()=>{i.readyState==4&&A.info(`External URL status: '${i.responseText.trim()}'`)},i.open("POST","/open-external-url",!0),i.send(o.data.url);break}case"gameClientList":ve(M.config).close_after_launch&&o.data.clients.length>ve(Ot).length?fetch("/close"):Ot.set(o.data.clients);break;default:{const i=((r=o.data)==null?void 0:r.type)??"no type provided";A.info(`Unknown message type: ${i}`);break}}})}async function ql(){const t=ve(M.config).discard_expired_sessions,e=ve(M.sessions),n=[];e.length>0&&A.info("Logging in...");const l=e.map(i=>({promise:Se.refreshOAuthToken(i.tokens),session:i})),o=[];for(const i of l){const a=i.session,c=await i.promise;if(!c.ok){c.error===0?A.error(`Unable to verify saved login, status: ${c.error}. Do you have an internet connection? Please relaunch Bolt to try again.`):c.error>=400&&c.error<500&&t?(A.error(`Discarding expired login, status: ${c.error}. Please sign in again.`),n.push(a.tokens.sub)):A.error(`Unable to verify saved login due to HTTP error ${c.error}`);continue}const u=c.value;a.tokens=u,o.push({promise:ne.login(u,a.session_id),session:a})}for(const i of o){const a=i.session,c=await i.promise;c.ok?A.info(`Signed into saved user '${c.value.user.displayName}'`):(A.error(`Unable to sign into saved user '${a.user.displayName}' due to an error: ${c.error}`),t&&n.push(a.tokens.sub))}const r=n.map(ne.logout);for(const i of r)await i;M.sessions.set(e),await ne.saveCredentials()} diff --git a/app/dist/assets/index-DZ9bIuuF.css b/app/dist/assets/index-DZ9bIuuF.css deleted file mode 100644 index 361de2f2..00000000 --- a/app/dist/assets/index-DZ9bIuuF.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.left-0{left:0}.left-\[2\%\]{left:2%}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-2{top:.5rem}.top-3{top:.75rem}.z-20{z-index:20}.col-span-3{grid-column:span 3 / span 3}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-3{margin:.75rem}.m-5{margin:1.25rem}.m-auto{margin:auto}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-9{margin-left:2.25rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-16{margin-top:4rem}.mt-5{margin-top:1.25rem}.flex{display:flex}.grid{display:grid}.contents{display:contents}.aspect-square{aspect-ratio:1 / 1}.h-1\/4{height:25%}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-16{height:4rem}.h-3\/4{height:75%}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-7{height:1.75rem}.h-\[28px\]{height:28px}.h-\[90\%\]{height:90%}.h-fit{height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[90\%\]{max-height:90%}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-7{width:1.75rem}.w-9{width:2.25rem}.w-\[45\%\]{width:45%}.w-\[50\%\]{width:50%}.w-\[90\%\]{width:90%}.w-\[95\%\]{width:95%}.w-\[96\%\]{width:96%}.w-\[min\(144px\,_25\%\)\]{width:min(144px,25%)}.w-\[min\(180px\,_50\%\)\]{width:min(180px,50%)}.w-\[min\(280px\,_45\%\)\]{width:min(280px,45%)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-\[60\%\]{max-width:60%}.max-w-\[90\%\]{max-width:90%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.resize-x{resize:horizontal}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-flow-col{grid-auto-flow:column}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-4{gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border-2{border-width:2px}.border-b-2{border-bottom-width:2px}.border-r-2{border-right-width:2px}.border-t-2{border-top-width:2px}.border-none{border-style:none}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.border-inherit{border-color:inherit}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity))}.border-t-slate-300{--tw-border-opacity: 1;border-top-color:rgb(203 213 225 / var(--tw-border-opacity))}.bg-blue-400{--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity))}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-rose-500{--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-violet-500{--tw-gradient-to: #8b5cf6 var(--tw-gradient-to-position)}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-5{padding:1.25rem}.p-\[2px\]{padding:2px}.p-\[3px\]{padding:3px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pl-5{padding-left:1.25rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-5{padding-top:1.25rem}.text-center{text-align:center}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[20px\]{font-size:20px}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.italic{font-style:italic}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-inherit{color:inherit}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-rose-500{--tw-text-opacity: 1;color:rgb(244 63 94 / var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.opacity-25{opacity:.25}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.duration-200{transition-duration:.2s}.marker\:text-blue-500 *::marker{color:#3b82f6}.marker\:text-blue-500::marker{color:#3b82f6}.backdrop\:cursor-pointer::backdrop{cursor:pointer}.backdrop\:bg-black\/75::backdrop{background-color:#000000bf}.backdrop\:backdrop-blur-sm::backdrop{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.hover\:rotate-45:hover{--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:rotate-90:hover{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:opacity-75:hover{opacity:.75}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.enabled\:bg-blue-500:enabled{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.enabled\:bg-rose-500:enabled{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity))}.enabled\:hover\:opacity-75:hover:enabled{opacity:.75}.disabled\:bg-gray-500:disabled{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width: 640px){.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:text-base{font-size:1rem;line-height:1.5rem}}.dark\:border-slate-700:where(.dark,.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity))}.dark\:border-slate-800:where(.dark,.dark *){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity))}.dark\:border-t-slate-800:where(.dark,.dark *){--tw-border-opacity: 1;border-top-color:rgb(30 41 59 / var(--tw-border-opacity))}.dark\:bg-slate-900:where(.dark,.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity))}.dark\:text-slate-50:where(.dark,.dark *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity))}.dark\:text-white:where(.dark,.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.backdrop.svelte-csux1e::backdrop{background-color:#000000bf;--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop.svelte-csux1e:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(15 23 42 / var(--tw-bg-opacity))}.dropdown-color.svelte-xifudk{--tw-border-opacity:1;border-color:rgb(203 213 225 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(241 245 249 / var(--tw-bg-opacity));padding:.75rem;--tw-shadow:0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dropdown-color.svelte-xifudk:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(30 41 59 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(15 23 42 / var(--tw-bg-opacity))}.top.svelte-xifudk{bottom:100%;margin-bottom:.25rem}.bottom.svelte-xifudk{top:100%;margin-top:.25rem}.top.start.svelte-xifudk,.bottom.start.svelte-xifudk{left:0}.top.center.svelte-xifudk,.bottom.center.svelte-xifudk{left:50%;transform:translate(-50%)}.top.end.svelte-xifudk,.bottom.end.svelte-xifudk{right:0}.left.svelte-xifudk{right:100%;margin-right:.25rem}.right.svelte-xifudk{left:100%;margin-left:.25rem}.left.start.svelte-xifudk,.right.start.svelte-xifudk{top:0}.left.center.svelte-xifudk,.right.center.svelte-xifudk{top:50%;transform:translateY(-50%)}.left.end.svelte-xifudk,.right.end.svelte-xifudk{bottom:0} diff --git a/app/dist/index.html b/app/dist/index.html index c83aa4b1..5ee32134 100644 --- a/app/dist/index.html +++ b/app/dist/index.html @@ -4,8 +4,8 @@ Bolt Launcher - - + +
      diff --git a/app/package.json b/app/package.json index 810b6bdf..bbf23b6b 100644 --- a/app/package.json +++ b/app/package.json @@ -2,25 +2,25 @@ "name": "vite_app", "version": "0.0.0", "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.2", - "@tsconfig/svelte": "^5.0.2", - "autoprefixer": "^10.4.19", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.35.1", - "postcss": "^8.4.38", - "prettier": "^3.1.1", - "prettier-plugin-svelte": "^3.1.2", - "prettier-plugin-tailwindcss": "^0.5.13", - "svelte": "^4.2.12", - "svelte-check": "^3.6.7", - "tailwindcss": "^3.4.4", - "tslib": "^2.6.2", - "typescript": "^5.4.3", - "typescript-eslint": "^7.4.0", - "vite": "^5.2.0", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tsconfig/svelte": "^5.0.5", + "autoprefixer": "^10.4.21", + "eslint": "^8.57.1", + "eslint-config-prettier": "^9.1.2", + "eslint-plugin-svelte": "^2.46.1", + "postcss": "^8.5.6", + "prettier": "^3.6.2", + "prettier-plugin-svelte": "^3.4.0", + "prettier-plugin-tailwindcss": "^0.5.14", + "svelte": "^5.39.6", + "svelte-check": "^4.3.2", + "tailwindcss": "^3.4.17", + "tslib": "^2.8.1", + "typescript": "^5.9.2", + "typescript-eslint": "^7.18.0", + "vite": "^7.1.7", "vite-tsconfig-paths": "^4.3.2", - "vitest": "^1.2.0" + "vitest": "^3.2.4" }, "private": true, "scripts": { @@ -35,5 +35,9 @@ "lint": "prettier --check . && eslint .", "format": "prettier --write ." }, - "type": "module" + "type": "module", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^8.44.1", + "@typescript-eslint/parser": "^8.44.1" + } } diff --git a/app/src/AuthApp.svelte b/app/src/AuthApp.svelte index ed4b87b3..51eba9ef 100644 --- a/app/src/AuthApp.svelte +++ b/app/src/AuthApp.svelte @@ -3,7 +3,7 @@ import { AuthService, type AuthTokens } from '$lib/Services/AuthService'; import { CookieService } from '$lib/Services/CookieService'; import { bolt } from '$lib/State/Bolt'; - import type { BoltMessage } from '$lib/Util/interfaces'; + import type { BoltMessage } from '$lib/Util/Interfaces'; import { onDestroy, onMount } from 'svelte'; const parentWindow = window.opener as { diff --git a/app/src/BoltApp.svelte b/app/src/BoltApp.svelte index 6d50d2fc..3e5c9ad7 100644 --- a/app/src/BoltApp.svelte +++ b/app/src/BoltApp.svelte @@ -1,5 +1,5 @@ { + onbeforeunload={() => { BoltService.saveConfig(); if (bolt.hasBoltPlugins) BoltService.savePluginConfig(true); }} diff --git a/app/src/lib/Components/AccountDropdownContent.svelte b/app/src/lib/Components/AccountDropdownContent.svelte index 8c175f56..0f3b606b 100644 --- a/app/src/lib/Components/AccountDropdownContent.svelte +++ b/app/src/lib/Components/AccountDropdownContent.svelte @@ -21,7 +21,7 @@
      +
      + {#if isOpen} {/if}
      diff --git a/app/src/lib/Components/CommonUI/Modal.svelte b/app/src/lib/Components/CommonUI/Modal.svelte index dc7a0080..deea4d54 100644 --- a/app/src/lib/Components/CommonUI/Modal.svelte +++ b/app/src/lib/Components/CommonUI/Modal.svelte @@ -1,13 +1,25 @@ - { + onkeydown={(e) => { if (e.key !== 'Escape') return; e.preventDefault(); if (canSelfClose) close(); }} - on:mousedown|self={() => { - if (canSelfClose) close(); + onmousedown={(e: MouseEvent) => { + if (dialog === (e.target as Node)) close(); }} - class:backdrop:cursor-pointer={canSelfClose} + class:dark={darkTheme} class="{className} backdrop max-h-[90%] max-w-[90%] overflow-auto rounded-xl text-inherit focus-visible:outline-none" > {#if canSelfClose} {/if} {#if isOpen} - + {@render children?.()} {/if} diff --git a/app/src/lib/Components/Launch.svelte b/app/src/lib/Components/Launch.svelte index b4a4dded..2c931f2d 100644 --- a/app/src/lib/Components/Launch.svelte +++ b/app/src/lib/Components/Launch.svelte @@ -1,5 +1,4 @@ -{#if bolt.hasBoltPlugins} - -{/if} +
      {#if $psa} @@ -120,7 +118,7 @@ modal.close()}>I Understand diff --git a/app/src/lib/Components/LaunchConfirmModal.svelte b/app/src/lib/Components/Modals/LaunchConfirmModal.svelte similarity index 91% rename from app/src/lib/Components/LaunchConfirmModal.svelte rename to app/src/lib/Components/Modals/LaunchConfirmModal.svelte index 63a343b1..f20453cd 100644 --- a/app/src/lib/Components/LaunchConfirmModal.svelte +++ b/app/src/lib/Components/Modals/LaunchConfirmModal.svelte @@ -1,6 +1,6 @@ - BoltService.savePluginConfig(true)} -> + close()}>
      @@ -371,7 +376,7 @@ class="mx-auto mb-2 w-[95%] select-none rounded-lg border-2 {isClientSelected ? 'border-blue-500 text-black dark:text-white' : 'border-black bg-blue-500 text-black'} p-2 font-bold hover:opacity-75" - on:click={() => (isClientSelected = false)} + onclick={() => (isClientSelected = false)} > Manage Plugins @@ -381,7 +386,7 @@ {:else} {#each $clientList as client} @@ -525,11 +530,10 @@ {/if} - {:else if Object.entries(bolt.pluginConfig).length === 0} + {:else if Object.entries(pluginList).length === 0}

      (no plugins installed)

      {:else}

      can't start plugin: does not appear to be configured

      @@ -583,12 +586,12 @@ {#each $clientList as client} {#if client.uid === selectedClientId} {#each client.plugins as activePlugin} - {#if Object.keys(bolt.pluginConfig).includes(activePlugin.id)} + {#if Object.keys(pluginList).includes(activePlugin.id)}

      - {bolt.pluginConfig[activePlugin.id].name ?? activePlugin.id} + {pluginList[activePlugin.id].name ?? activePlugin.id} about plugins

      diff --git a/app/src/lib/Components/SettingsModal.svelte b/app/src/lib/Components/Modals/SettingsModal.svelte similarity index 96% rename from app/src/lib/Components/SettingsModal.svelte rename to app/src/lib/Components/Modals/SettingsModal.svelte index 1c1f2dea..76fc3e9d 100644 --- a/app/src/lib/Components/SettingsModal.svelte +++ b/app/src/lib/Components/Modals/SettingsModal.svelte @@ -4,11 +4,6 @@ import OsrsSettingsTab from '$lib/Components/Settings/OsrsSettingsTab.svelte'; import Rs3SettingsTab from '$lib/Components/Settings/Rs3SettingsTab.svelte'; - let modal: Modal; - export function open() { - modal.open(); - } - // settings categories enum Tab { general, @@ -16,11 +11,17 @@ rs3 } + let modal: Modal; + // variables for swapping options and styling let openTab: Tab = Tab.general; let activeClass = 'border-2 border-blue-500 bg-blue-500 hover:opacity-75 font-bold text-black duration-200 rounded-lg p-1 w-3/4'; let inactiveClass = 'border-2 border-blue-500 hover:opacity-75 duration-200 rounded-lg p-1 w-3/4'; + + export function open() { + modal.open(); + } @@ -30,19 +31,19 @@ > diff --git a/app/src/lib/Components/Settings/GeneralSettingsTab.svelte b/app/src/lib/Components/Settings/GeneralSettingsTab.svelte index ce5780b1..1a16dfec 100644 --- a/app/src/lib/Components/Settings/GeneralSettingsTab.svelte +++ b/app/src/lib/Components/Settings/GeneralSettingsTab.svelte @@ -26,7 +26,7 @@